2015-11-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Off-by-one error in getStyleContext()
        https://bugs.webkit.org/show_bug.cgi?id=151524

        Reviewed by Carlos Garcia Campos.

        GtkWidgetPath* path = gtk_widget_path_new();
        gtk_widget_path_append_type(path, widgetType);
        // ...
        gtk_widget_path_iter_add_class(path, 0, GTK_STYLE_CLASS_BUTTON);
        gtk_widget_path_iter_add_class(path, 1, "text-button");

        Only one widget type was appended to the widget path, so the maximum valid index is 0. This
        code means to add both style classes to the first widget type in the widget path, so the
        second call should use index 0 rather than index 1.

        This caused no bug in practice, because when the index is invalid,
        gtk_widget_path_iter_add_class() automatically changes the index to the last valid position
        in the widget path -- in this case, 0. This is routinely done with -1 as a convention for
        specifying the last position in the widget path.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::getStyleContext):

2015-11-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Warning spam from GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=151520

        Reviewed by Carlos Garcia Campos.

        Audit every use of gtk_style_context_get_* to fix compatibility with GTK+ 3.19. Some of
        these were already fine and are only changed for clarity.

        Company:  gtk_style_context_get() (and _get_padding/border/color()) should only ever be
                  called with the same state as gtk_style_context_get_state()
        Company:  usually that's a simple replacing of the old state (like in the trace you posted)
        Company:  sometimes it requires calling gtk_style_context_set_sate() with the right state
                  first
        Company:  and in very rare cases it needs a gtk_style_context_save() before the set_state(),
                  too

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::adjustRectAccordingToMargin):
        * rendering/RenderThemeGtk.cpp:
        (gtk_css_section_print):
        (WebCore::getStyleContext):
        (WebCore::RenderThemeGtk::initMediaColors):
        (WebCore::renderButton):
        (WebCore::getComboBoxMetrics):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::spinButtonArrowSize):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        (WebCore::styleColor):

2015-11-20  Brady Eidson  <beidson@apple.com>

        Modern IDB: After versionchange transactions complete, fire onsuccess on the original IDBOpenDBRequest
        https://bugs.webkit.org/show_bug.cgi?id=151522

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/opendatabase-success-after-versionchange.html (And changes to other existing tests)

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::startVersionChangeTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::fireSuccessAfterVersionChangeCommit):
        (WebCore::IDBClient::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::create):
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        More deviceRGB color cleanup
        https://bugs.webkit.org/show_bug.cgi?id=151523
        <rdar://problem/23638597>

        Reviewed by Tim Horton.

        Replace calls to deviceRGBColorSpaceRef() with sRGBColorSpaceRef(), and use
        sRGBColorSpaceRef() in a few places that were manually creating the colorspace.

        Also use cachedCGColor() in a more places that were manually constructing CGColorRefs
        from Colors.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::createImageFromPixelBuffer):
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::setBackgroundColor):
        (PlatformCALayerCocoa::setBorderColor):
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.mm:
        (-[WebLightSystemBackdropLayer init]):
        (-[WebDarkSystemBackdropLayer init]):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::linearRGBColorSpaceRef):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::currentFrameCGImage):
        * rendering/RenderThemeIOS.mm:
        (WebCore::drawRadialGradient):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):

2015-11-20  Katlyn Graff  <kgraff@apple.com>

        Renaming PageCache suspension code to support more reasons for suspension.
        https://bugs.webkit.org/show_bug.cgi?id=151527

        Reviewed by Ryosuke Niwa.

        No new tests because this is simply a refactor.

        Renamed Element:: and Document:: documentWillSuspendForPageCache(),
        documentDidResumeFromPageCache(),
        registerForPageCacheSuspensionCallbacks(),
        unregisterForPageCacheSuspensionCallbacks() to prepare to support
        alternate reasons for document-level suspension.

        * dom/Document.cpp:
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        (WebCore::Document::registerForDocumentSuspensionCallbacks):
        (WebCore::Document::unregisterForDocumentSuspensionCallbacks):
        (WebCore::Document::documentWillSuspendForPageCache): Deleted.
        (WebCore::Document::documentDidResumeFromPageCache): Deleted.
        (WebCore::Document::registerForPageCacheSuspensionCallbacks): Deleted.
        (WebCore::Document::unregisterForPageCacheSuspensionCallbacks): Deleted.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::prepareForDocumentSuspension):
        (WebCore::Element::resumeFromDocumentSuspension):
        (WebCore::Element::documentWillSuspendForPageCache): Deleted.
        (WebCore::Element::documentDidResumeFromPageCache): Deleted.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::parseAttribute):
        (WebCore::HTMLFormElement::resumeFromDocumentSuspension):
        (WebCore::HTMLFormElement::didMoveToNewDocument):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache): Deleted.
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::registerForSuspensionCallbackIfNeeded):
        (WebCore::HTMLInputElement::unregisterForSuspensionCallbackIfNeeded):
        (WebCore::HTMLInputElement::resumeFromDocumentSuspension):
        (WebCore::HTMLInputElement::prepareForDocumentSuspension):
        (WebCore::HTMLInputElement::didMoveToNewDocument):
        (WebCore::HTMLInputElement::documentDidResumeFromPageCache): Deleted.
        (WebCore::HTMLInputElement::documentWillSuspendForPageCache): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::prepareForDocumentSuspension):
        (WebCore::HTMLMediaElement::resumeFromDocumentSuspension):
        (WebCore::HTMLMediaElement::documentWillSuspendForPageCache): Deleted.
        (WebCore::HTMLMediaElement::documentDidResumeFromPageCache): Deleted.
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::~HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument):
        (WebCore::HTMLPlugInImageElement::prepareForDocumentSuspension):
        (WebCore::HTMLPlugInImageElement::resumeFromDocumentSuspension):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache): Deleted.
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache): Deleted.
        * html/HTMLPlugInImageElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::didMoveToNewDocument):
        (WebCore::SVGSVGElement::prepareForDocumentSuspension):
        (WebCore::SVGSVGElement::resumeFromDocumentSuspension):
        (WebCore::SVGSVGElement::documentWillSuspendForPageCache): Deleted.
        (WebCore::SVGSVGElement::documentDidResumeFromPageCache): Deleted.
        * svg/SVGSVGElement.h:

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        Fix the Windows build.

        * platform/graphics/cg/IOSurfacePool.h:

2015-11-20  Simon Fraser  <simon.fraser@apple.com>

        Allow more buffer formats in the IOSurface pool
        https://bugs.webkit.org/show_bug.cgi?id=151516

        Reviewed by Tim Horton.

        Previously IOSurface::create was only looking in the pool for RGBA-format surfaces. Change that to
        always look in the pool, and to cache all format types. We include format in the criteria used
        to pick a surface from the pool.
        
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::surfaceMatchesParameters):
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::shouldCacheFormat):
        (WebCore::IOSurfacePool::shouldCacheSurface):
        (WebCore::IOSurfacePool::addSurface):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::surfaceFromPool):
        (IOSurface::create):
        (IOSurface::IOSurface):

2015-11-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support High DPI drawing with CACFLayers
        https://bugs.webkit.org/show_bug.cgi?id=147242
        <rdar://problem/19861992>

        Reviewed by Simon Fraser.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::initializeContext): Set correct content scale factor
        for current screen, and apply an appropriate base transform to the CACFLayer so drawing
        operations are done properly.

2015-11-20  Brady Eidson  <beidson@apple.com>

        Modern IDB: In the VersionChangeEvent for delete database calls, oldVersion should be null instead of 0.
        https://bugs.webkit.org/show_bug.cgi?id=151481

        Reviewed by Sam Weinig.

        No new tests, covered by changes to:
            storage/indexeddb/modern/deletedatabase-1.html
            storage/indexeddb/modern/deletedatabase-2.html

        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        
        * Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp:
        (WebCore::IDBClient::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/client/IDBVersionChangeEventImpl.h:
        
        * Modules/indexeddb/legacy/LegacyVersionChangeEvent.cpp:
        (WebCore::LegacyVersionChangeEvent::newVersion):
        * Modules/indexeddb/legacy/LegacyVersionChangeEvent.h:

2015-11-20  Brady Eidson  <beidson@apple.com>

        Addressing missed review feedback for:
        Modern IDB: Make in-memory ObjectStore cursors work.
        https://bugs.webkit.org/show_bug.cgi?id=151196

        Reviewed by Darin Adler.

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::maybeOpenCursor):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp:
        (WebCore::IDBServer::MemoryObjectStoreCursor::create): Deleted.
        * Modules/indexeddb/server/MemoryObjectStoreCursor.h:

2015-11-20  Chris Dumez  <cdumez@apple.com>

        Caching of properties on objects that have named property getters is sometimes incorrect
        https://bugs.webkit.org/show_bug.cgi?id=151453
        <rdar://problem/23049343>

        Reviewed by Gavin Barraclough.

        In r188590, we dropped the JSC::GetOwnPropertySlotIsImpure TypeInfo flag for
        interfaces that have a non-'OverrideBuiltins' named property getter in order
        to allow caching of properties returns by GetOwnPropertySlot(). We assumed
        this was safe as it was no longer possible for named properties to override
        own properties (or properties on the prototype).

        However, there is an issue when we cache the non-existence of a property.
        Even though at one point the property did not exist, a named property with
        this name may later become available. In such case, caching would cause us
        to wrongly report a property as missing.

        To address the problem, this patch introduces a new
        GetOwnPropertySlotIsImpureForPropertyAbsence TypeInfo flag and uses it for
        interfaces that have a non-'OverrideBuiltins' named property getter. This
        will cause us to not cache the fact that a property is missing on such
        objects, while maintaining the performance win from r188590 in the common
        case.

        Test: fast/dom/NamedNodeMap-named-getter-caching.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:

2015-11-19  Simon Fraser  <simon.fraser@apple.com>

        Back-buffer to front-buffer copy fails for some buffer formats
        https://bugs.webkit.org/show_bug.cgi?id=151475
        rdar://problem/23617899

        Reviewed by Tim Horton.
        
        Fix some fo the bitsPerComponent/bitsPerPixel options in IOSurface::ensurePlatformContext()
        for RGB10 buffers. Fix IOSurface::format() to return the new formats.
        
        Implement IOSurface::copyToSurface(), which does a synchronous copy between
        surfaces.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::create):
        (IOSurface::ensurePlatformContext):
        (IOSurface::format):
        (IOSurface::copyToSurface):

2015-11-20  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add text-indent support.
        https://bugs.webkit.org/show_bug.cgi?id=151472

        Reviewed by Simon Fraser.

        This enables us to use simple line layout on text-indent content.

        Test: fast/text/simple-line-text-indent.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::canUseForStyle): Deleted.

2015-11-20  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBFactory.deleteDatabase() support.
        https://bugs.webkit.org/show_bug.cgi?id=151456

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/deletedatabase-1.html
               storage/indexeddb/modern/deletedatabase-2.html

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::hasPendingActivity):
        (WebCore::IDBClient::IDBDatabase::didCommitOrAbortTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onDeleteDatabaseSuccess):
        (WebCore::IDBClient::IDBOpenDBRequest::requestCompleted):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::hasPendingActivity): Deleted.
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::deleteDatabase):
        (WebCore::IDBServer::IDBServer::deleteUniqueIDBDatabase):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
        (WebCore::IDBServer::UniqueIDBDatabase::hasAnyPendingCallbacks):
        (WebCore::IDBServer::UniqueIDBDatabase::maybeDeleteDatabase):
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
        (WebCore::IDBServer::UniqueIDBDatabase::handleDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabase::enqueueTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::invokeDeleteOrRunTransactionTimer):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteOrRunTransactionsTimerFired):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformActivateTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::inProgressTransactionCompleted):
        (WebCore::IDBServer::UniqueIDBDatabase::invokeTransactionScheduler): Deleted.
        (WebCore::IDBServer::UniqueIDBDatabase::transactionSchedulingTimerFired): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        (WebCore::IDBServer::UniqueIDBDatabase::identifier):
        (WebCore::IDBServer::UniqueIDBDatabase::deletePending):
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::deleteDatabaseSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

2015-11-20  Brady Eidson  <beidson@apple.com>

        Modern IDB: Get IDBRequest.readyState right.
        https://bugs.webkit.org/show_bug.cgi?id=151484

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/request-readystate.html

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::readyState):

2015-11-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Use HTTPHeaderName as much as possible in XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=151438

        Reviewed by Darin Adler.

        Removing XMLHttpRequest::setRequestHeaderInternal and XMLHttpRequest::getRequestHeader.
        Using directly HTTPHeaderMap.add, HTTPHeaderMap.set and HTTPHeaderMap.get.

        No change in behavior.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        * xml/XMLHttpRequest.h:

2015-11-20  Eric Carlson  <eric.carlson@apple.com>

        MediaStream: Fix mock video source crash
        https://bugs.webkit.org/show_bug.cgi?id=151462

        Reviewed by Alexey Proskuryakov.

        No new tests, this fixes existing tests.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText): Declare the String used to intialize a 
          StringView explicitly so it outlives the StringView.

2015-11-20  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192460,r192677): Fix all the builds

        * platform/spi/cocoa/QuartzCoreSPI.h: Check different.

2015-11-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192460): Fix tvOS build again

        * platform/spi/cocoa/QuartzCoreSPI.h: Update version check.
        This will probably need to be backed out in the future.

2015-11-19  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Initial testing of updated RTCPeerConnection API
        https://bugs.webkit.org/show_bug.cgi?id=151304

        Reviewed by Eric Carlson.

        Remove faulty ASSERT since the selector argument to
        RTCPeerConnection.getStats() is nullable. Also use
        pointers instead of a ref (for the same reason).

        Tests: Unskip two crashing tests.

        * Modules/mediastream/MediaEndpointPeerConnection.cpp:
        (WebCore::MediaEndpointPeerConnection::getStats):
        * Modules/mediastream/MediaEndpointPeerConnection.h:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::privateGetStats):

2015-11-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] context_menu API test failed after r192333
        https://bugs.webkit.org/show_bug.cgi?id=151437

        Reviewed by Carlos Garcia Campos.

        EFL,GTK port didn't use the share Menu.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

2015-11-19  Brian Burg  <bburg@apple.com>

        Web Inspector: yank/kill shortcuts (CTRL+Y, K) don't work in Console / QuickConsole
        https://bugs.webkit.org/show_bug.cgi?id=151157

        Reviewed by Joseph Pecoraro.

        CodeMirror maintains its own editor buffer and implements its own
        `killLine` command but doesn't implement the yank command. So, text
        that is "killed" with CTRL-k inside a CodeMirror instance isn't
        added to Editor's kill ring. Subsequent yank commands won't match
        up with the killed text, instead returning text from a prior kill
        that was handled by Editor (i.e., in a contenteditable or form input).

        This patch adds a host function so that the Inspector frontend can
        append "missed" killed text to Editor's kill ring. Subsequent
        yanks handled by Editor will then match the text killed by CodeMirror.

        No new tests, because we need to use both InspectorFrontendHost
        and TestRunner.execCommand, but the latter is not available in
        the inspector context where we would need to simulate a kill.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::killText):

            Added. This appends the killed text to the kill ring, starting
            a new sequence if necessary. Unlike Editor, Inspector waits
            until the next kill command to clear the existing sequence.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2015-11-19  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add word-spacing support.
        https://bugs.webkit.org/show_bug.cgi?id=151420

        Reviewed by Antti Koivisto.

        This enables us to use simple line layout on word-spacing content.

        Test: fast/text/simple-line-wordspacing.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::canUseForStyle): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2015-11-19  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBObjectStore.deleteIndex() support.
        https://bugs.webkit.org/show_bug.cgi?id=150911

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/deleteindex-1.html
               storage/indexeddb/modern/deleteindex-2.html

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::deleteIndex):
        (WebCore::IDBClient::IDBConnectionToServer::didDeleteIndex):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::didDeleteIndexInfo):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/client/IDBIndexImpl.cpp:
        (WebCore::IDBClient::IDBIndex::markAsDeleted):
        * Modules/indexeddb/client/IDBIndexImpl.h:

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::index):
        (WebCore::IDBClient::IDBObjectStore::deleteIndex):

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::deleteIndex):
        (WebCore::IDBClient::IDBTransaction::deleteIndexOnServer):
        (WebCore::IDBClient::IDBTransaction::didDeleteIndexOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::createTransactionOperation):

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::deleteIndex):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::indexDeleted):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteIndex):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::clearIndexValueStore):
        * Modules/indexeddb/server/MemoryIndex.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::maybeRestoreDeletedIndex):
        (WebCore::IDBServer::MemoryObjectStore::takeIndexByName):
        (WebCore::IDBServer::MemoryObjectStore::deleteIndex):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performDeleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformDeleteIndex):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::loggingString):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:

        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::loggingString):
        * Modules/indexeddb/shared/IDBIndexInfo.h:

        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::hasIndex):
        (WebCore::IDBObjectStoreInfo::deleteIndex):
        (WebCore::IDBObjectStoreInfo::loggingString):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::deleteIndexSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didDeleteIndex):
        (WebCore::InProcessIDBServer::createIndex):
        (WebCore::InProcessIDBServer::deleteIndex):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-11-19  Brian Burg  <bburg@apple.com>

        REGRESSION(r8780): Backwards delete by word incorrectly appends deleted text to kill ring, should be prepend
        https://bugs.webkit.org/show_bug.cgi?id=151300

        Reviewed by Darin Adler.

        Over 11 years ago, someone was in a big hurry to fix a bunch
        of emacs keybindings bugs, and accidentally regressed the kill ring
        behavior for backwards-delete-word. It should prepend to the beginning.

        This patch fixes the regression and cleans up the kill ring-related
        code in Editor and commands. It also adds some tests to cover the
        regressed code a bit better.

        Tests: editing/pasteboard/emacs-killring-alternating-append-prepend.html
               editing/pasteboard/emacs-killring-backward-delete-prepend.html

        * editing/Editor.cpp:

            Use more explicit names for insertion mode parameters and member variables.

        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::performDelete):
        (WebCore::Editor::addRangeToKillRing):
        (WebCore::Editor::addTextToKillRing):

            Only one call site for now, but another will be added in a dependent fix.

        (WebCore::Editor::addToKillRing): Deleted.
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::doApply):
        * editing/TypingCommand.h:
        * platform/mac/KillRingMac.mm:
        (WebCore::KillRing::append):
        (WebCore::KillRing::prepend):

            It turns out that the native API implicitly clears the kill sequence when
            alternating between prepend and append operations. Its behavior does not match
            what Sublime Text or Emacs do in this case. Clear the previous operation flag
            to prevent this behavior from happening.

2015-11-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Tatechuyoko in ruby sits too high
        https://bugs.webkit.org/show_bug.cgi?id=151309
        <rdar://problem/23536621>

        Reviewed by Darin Adler.

        When combining text, we ask what the text's width is in order to determine if it fits in the
        column. However, when we do that, we were not setting the font's orientation to horizontal.
        This means that, for CJK text, the "width" which was returned was actually the height of the
        glyph, and the GlyphOverflow data was similarly garbled.

        We actually already were creating a corrected FontDescription, and using it in two places.
        However, we weren't using it in the last place, which was causing this bug.

        Test: fast/text/text-combine-placement.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::width):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText):

2015-11-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] http/tests/navigation/useragent test failed after r192459.
        https://bugs.webkit.org/show_bug.cgi?id=151340

        Reviewed by Gyuyoung Kim.

        We need the convert process the predifined value to string. 

        * platform/efl/UserAgentEfl.cpp:
        (WebCore::versionForUAString):

2015-11-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192622.
        https://bugs.webkit.org/show_bug.cgi?id=151446

        This test is failing on multiple mac testers (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Add a test for media control dropoff"
        https://bugs.webkit.org/show_bug.cgi?id=151287
        http://trac.webkit.org/changeset/192622

2015-11-19  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix -Winconsistent-missing-override clang warnings
        https://bugs.webkit.org/show_bug.cgi?id=151443

        Reviewed by Darin Adler.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::delegatedScrollRequested):
        (WebCore::EmptyChromeClient::scheduleAnimation):

2015-11-19  Jon Lee  <jonlee@apple.com>

        Add a test for media control dropoff
        https://bugs.webkit.org/show_bug.cgi?id=151287
        rdar://problem/23544666

        Reviewed by Dean Jackson.

        Test: media/controls/inline-elements-dropoff-order.html

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-timeline-container.dropped): Override the
        display:none since we want the container to remain visible but acting
        as a flexible width space to push the other elements to the ends of the
        inline flexbox. We will want to refactor the CSS rules so that all of the
        components in the timeline are keyed off of the container's dropped class
        rather than having each individual component have that class attached.
        (audio::-webkit-media-controls-panel.hidden): Deleted. Consolidate a
        couple rules.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateLayoutForDisplayedWidth): Also attach the
        "dropped" class on the timeline box. Add the captions button for reporting
        media control state.
        * testing/Internals.cpp:
        (WebCore::Internals::setMockMediaPlaybackTargetPickerState): Extend this to
        also take "DeviceNotAvailable" to update the mock device's availability.

        * testing/Internals.cpp: Update to use a reference to Page.
        (WebCore::Internals::resetToConsistentState): Reset mock enabled setting for
        each test.
        * testing/Internals.h:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::resetInternalsObject): Update to use a reference to Page.

2015-11-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Implement IsReadableStreamDisturbed according to spec
        https://bugs.webkit.org/show_bug.cgi?id=151356

        Reviewed by Darin Adler.

        Implemente IsReadableStreamDisturbed according to the spec. This is an internal function to be used by other
        internal implementations.

        The function is exported as internals to be tested.

        Test: streams/reference-implementation/abstract-ops.html.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamInternals.js:
        (cancelReadableStream):
        (readFromReadableStreamReader):
        (isReadableStreamDisturbed):
        * bindings/js/WebCoreBuiltinNames.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isReadableStreamDisturbed):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-11-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XHR should not combine empty content-type value with default one
        https://bugs.webkit.org/show_bug.cgi?id=147784

        Reviewed by Darin Adler.

        Previously, XHR was testing whether a "Content-Type" was set using setRequestHeader by checking whether a "Content-Type" header value was empty.
        This now tests whether "Content-Type" request header is set using either HTTPHeaderMap::contains or checking whether a "Content-Type" header value is null.

        Test: http/tests/xmlhttprequest/post-empty-content-type.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2015-11-19  Brady Eidson  <beidson@apple.com>

        Modern IDB: Populate indexes created in object stores that already have records.
        https://bugs.webkit.org/show_bug.cgi?id=151421

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/index-4.html
              storage/indexeddb/modern/index-5.html

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::createIndex):
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        * Modules/indexeddb/server/MemoryObjectStore.h:

2015-11-18  Brady Eidson  <beidson@apple.com>

        Modern IDB:Make in-memory Index cursors work.
        https://bugs.webkit.org/show_bug.cgi?id=151278

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/index-cursor-1.html
               storage/indexeddb/modern/index-cursor-2.html
               storage/indexeddb/modern/index-cursor-3.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/client/IDBIndexImpl.cpp:
        (WebCore::IDBClient::IDBIndex::openCursor):
        (WebCore::IDBClient::IDBIndex::openKeyCursor):
        
        * Modules/indexeddb/server/IndexValueEntry.cpp:
        (WebCore::IDBServer::IndexValueEntry::removeKey):
        (WebCore::IDBServer::IndexValueEntry::Iterator::Iterator):
        (WebCore::IDBServer::IndexValueEntry::Iterator::key):
        (WebCore::IDBServer::IndexValueEntry::Iterator::isValid):
        (WebCore::IDBServer::IndexValueEntry::Iterator::invalidate):
        (WebCore::IDBServer::IndexValueEntry::Iterator::operator++):
        (WebCore::IDBServer::IndexValueEntry::begin):
        (WebCore::IDBServer::IndexValueEntry::reverseBegin):
        (WebCore::IDBServer::IndexValueEntry::find):
        (WebCore::IDBServer::IndexValueEntry::reverseFind):
        * Modules/indexeddb/server/IndexValueEntry.h:
        (WebCore::IDBServer::IndexValueEntry::Iterator::Iterator):
        (WebCore::IDBServer::IndexValueEntry::unique):
        
        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::removeEntriesWithValueKey):
        (WebCore::IDBServer::IndexValueStore::lowestKeyWithRecordInRange):
        (WebCore::IDBServer::IndexValueStore::lowestIteratorInRange):
        (WebCore::IDBServer::IndexValueStore::highestReverseIteratorInRange):
        (WebCore::IDBServer::IndexValueStore::find):
        (WebCore::IDBServer::IndexValueStore::reverseFind):
        (WebCore::IDBServer::IndexValueStore::Iterator::Iterator):
        (WebCore::IDBServer::IndexValueStore::Iterator::nextIndexEntry):
        (WebCore::IDBServer::IndexValueStore::Iterator::operator++):
        (WebCore::IDBServer::IndexValueStore::Iterator::invalidate):
        (WebCore::IDBServer::IndexValueStore::Iterator::isValid):
        (WebCore::IDBServer::IndexValueStore::Iterator::key):
        (WebCore::IDBServer::IndexValueStore::Iterator::primaryKey):
        * Modules/indexeddb/server/IndexValueStore.h:
        (WebCore::IDBServer::IndexValueStore::Iterator::Iterator):
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::openCursor):
        
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::cursorDidBecomeClean):
        (WebCore::IDBServer::MemoryIndex::cursorDidBecomeDirty):
        (WebCore::IDBServer::MemoryIndex::objectStoreCleared):
        (WebCore::IDBServer::MemoryIndex::notifyCursorsOfValueChange):
        (WebCore::IDBServer::MemoryIndex::notifyCursorsOfAllRecordsChanged):
        (WebCore::IDBServer::MemoryIndex::putIndexKey):
        (WebCore::IDBServer::MemoryIndex::removeRecord):
        (WebCore::IDBServer::MemoryIndex::removeEntriesWithValueKey):
        (WebCore::IDBServer::MemoryIndex::maybeOpenCursor):
        * Modules/indexeddb/server/MemoryIndex.h:
        (WebCore::IDBServer::MemoryIndex::valueStore):
        (WebCore::IDBServer::MemoryIndex::objectStore):
        
        * Modules/indexeddb/server/MemoryIndexCursor.cpp: Added.
        (WebCore::IDBServer::MemoryIndexCursor::MemoryIndexCursor):
        (WebCore::IDBServer::MemoryIndexCursor::~MemoryIndexCursor):
        (WebCore::IDBServer::MemoryIndexCursor::currentData):
        (WebCore::IDBServer::MemoryIndexCursor::iterate):
        (WebCore::IDBServer::MemoryIndexCursor::indexRecordsAllChanged):
        (WebCore::IDBServer::MemoryIndexCursor::indexValueChanged):
        * Modules/indexeddb/server/MemoryIndexCursor.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::indexForIdentifier):
        (WebCore::IDBServer::MemoryObjectStore::valueForKey):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::objectStoreCursor):
        (WebCore::IDBCursorInfo::indexCursor):
        (WebCore::IDBCursorInfo::IDBCursorInfo):
        (WebCore::IDBCursorInfo::isDirectionNoDuplicate):
        (WebCore::IDBCursorInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        (WebCore::IDBCursorInfo::objectStoreIdentifier):

2015-11-18  Antti Koivisto  <antti@apple.com>

        Assertion failure in RenderTreePosition::computeNextSibling
        https://bugs.webkit.org/show_bug.cgi?id=151337
        rdar://problem/23250075

        Reviewed by Zalan Bujtas.

        Test: fast/html/details-mathml-crash.html

        * html/ads: Added.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveChildAtShadowBoundary):

            Factor common code for resolving child here from resolveShadowTree.

        (WebCore::Style::resolveShadowTree):

            We don't need StyleResolverParentPusher because shadow tree uses different style resolver anyway.

        (WebCore::Style::resolveSlotAssignees):

            This needs to call renderTreePosition.invalidateNextSibling() if there is a renderer already.
            Achieve this by calling the new common function resolveChildAtShadowBoundary.

2015-11-18  Jer Noble  <jer.noble@apple.com>

        WebGL slow video to texture
        https://bugs.webkit.org/show_bug.cgi?id=129626

        Reviewed by Dean Jackson.

        Support a direct GPU-to-GPU copy of video textures. Add a new AVPlayerItemVideoOutput which,
        when lazily-created, will emit CVPixelBuffers which are guaranteed to be compatible with
        OpenGL framebuffers. Then, use a CVOpenGLTextureCache object to convert those CVPixelBuffers
        to OpenGL textures. Once the video frame is in an OpenGL texture, use an OpenGL framebuffer
        to copy the underlying video texture memory to the destination texture.

        The copy step uses glTexImage2D, which requires format and type parameters, so change the
        signature of copyVideoTextureToPlatformTexture() to pass those parameters in.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::copyVideoTextureToPlatformTexture): Changed signature.
        * html/HTMLVideoElement.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2D): Changed signature.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::copyVideoTextureToPlatformTexture): Changed signature.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::copyVideoTextureToPlatformTexture): Changed signature.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createOpenGLVideoOutput): Create an OpenGL-compatible
            AVPlayerItemVideoOutput.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyOpenGLVideoOutput): Destroy same.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastOpenGLImage): Cache the current frame, if available.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture): Convert the
            current frame to a texture, and use that texture to render into the destination texture.

2015-11-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WK1] Crash loading Blink layout test fast/dom/Window/property-access-on-cached-window-after-frame-removed.html
        https://bugs.webkit.org/show_bug.cgi?id=150198
        <rdar://problem/23136026>

        Reviewed by Brent Fulgham.

        Test: fast/dom/Window/property-access-on-cached-window-after-frame-removed.html

        Properties of a contentWindow could be accessed even if the frame who owns the window is
        detached. Therefore, check whether the document loader is still alive before using it.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds):

2015-11-18  Eric Carlson  <eric.carlson@apple.com>

        MediaStream: Implement MediaDevices.getSupportedConstraints
        https://bugs.webkit.org/show_bug.cgi?id=151394

        Reviewed by Brent Fulgham.

        Test: fast/mediastream/MediaDevices-getSupportedConstraints.html

        * CMakeLists.txt: Add MediaTrackSupportedConstraints and JSMediaTrackSupportedConstraintsCustom.

        * DerivedSources.make: Ditto.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getSupportedConstraints): New.
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaDevices.idl:

        * Modules/mediastream/MediaTrackSupportedConstraints.h: Added. Wrapper around a 
          RealtimeMediaSourceSupportedConstraints.
        (WebCore::MediaTrackSupportedConstraints::create):
        (WebCore::MediaTrackSupportedConstraints::supportsWidth):
        (WebCore::MediaTrackSupportedConstraints::supportsHeight):
        (WebCore::MediaTrackSupportedConstraints::supportsAspectRatio):
        (WebCore::MediaTrackSupportedConstraints::supportsFrameRate):
        (WebCore::MediaTrackSupportedConstraints::supportsFacingMode):
        (WebCore::MediaTrackSupportedConstraints::supportsVolume):
        (WebCore::MediaTrackSupportedConstraints::supportsSampleRate):
        (WebCore::MediaTrackSupportedConstraints::supportsSampleSize):
        (WebCore::MediaTrackSupportedConstraints::supportsEchoCancellation):
        (WebCore::MediaTrackSupportedConstraints::supportsDeviceId):
        (WebCore::MediaTrackSupportedConstraints::supportsGroupId):
        (WebCore::MediaTrackSupportedConstraints::MediaTrackSupportedConstraints):
        * Modules/mediastream/MediaTrackSupportedConstraints.idl: Added.

        * WebCore.xcodeproj/project.pbxproj: Add JSMediaTrackSupportedConstraintsCustom.cpp, 
          RealtimeMediaSourceSupportedConstraints.h, and MediaTrackSupportedConstraints.*.

        A MediaTrackSupportedConstraints only contains the properties supported by the currently
        available capture devices, so implement getOwnPropertySlot and getOwnPropertyNames so
        we don't have to declare any attributes in the idl file.
        * bindings/js/JSMediaTrackSupportedConstraintsCustom.cpp: Added.
        (WebCore::JSMediaTrackSupportedConstraints::getOwnPropertySlotDelegate):
        (WebCore::JSMediaTrackSupportedConstraints::getOwnPropertyNames):

        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h: Added.
        (WebCore::RealtimeMediaSourceSupportedConstraints::RealtimeMediaSourceSupportedConstraints):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsWidth):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsWidth):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsHeight):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsHeight):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsAspectRatio):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsAspectRatio):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsFrameRate):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsFrameRate):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsFacingMode):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsFacingMode):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsVolume):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsVolume):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsSampleRate):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsSampleRate):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsSampleSize):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsSampleSize):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsEchoCancellation):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsEchoCancellation):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsDeviceId):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsDeviceId):
        (WebCore::RealtimeMediaSourceSupportedConstraints::supportsGroupId):
        (WebCore::RealtimeMediaSourceSupportedConstraints::setSupportsGroupId):

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac): Initialize supported constraints.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

        * platform/mock/MockRealtimeMediaSource.cpp: Delete some dead code.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::MockRealtimeMediaSourceCenter): Initialize supported constraints.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2015-11-18  Alex Christensen  <achristensen@webkit.org>

        Progress towards implementing Downloads with NETWORK_SESSION
        https://bugs.webkit.org/show_bug.cgi?id=151414

        Reviewed begrudgingly by Brady Eidson.

        There is no change in behavior except that SessionIDs are sent across IPC and passed as parameters,
        and they are not used yet.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        Removed an unused default. Compiler warnings will let us know if we add an unhandled case to this switch.
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        Pass SessionIDs around.

2015-11-18  Andreas Kling  <akling@apple.com>

        ResourceUsageOverlay should have better accounting for reclaimable memory.
        <https://webkit.org/b/151407>

        Reviewed by Anders Carlsson.

        Add code to inspect the purgeable state of VM regions when traversing the
        web process VM map, and track reclaimable regions of memory separately.

        Memory categories that have some amount of reclaimable memory are now
        displayed with the reclaimable amount in brackets, e.g "123.45 MB [56.78MB]"

        * page/ResourceUsageOverlay.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw):
        (WebCore::TagInfo::TagInfo):
        (WebCore::pagesPerVMTag):
        (WebCore::runSamplerThread):
        (WebCore::dirtyPagesPerVMTag): Deleted.

2015-11-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Client Blocked Resource Requests causes Crash under InspectorPageAgent::cachedResource
        https://bugs.webkit.org/show_bug.cgi?id=151398

        Reviewed by Brian Burg.

        Test: inspector/network/client-blocked-load.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        Gracefully handle null request.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachedResource):
        ASSERT if someone tried to pass a null URL.

2015-11-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline Recording across page navigations behaves poorly
        https://bugs.webkit.org/show_bug.cgi?id=151112

        Reviewed by Timothy Hatcher.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading): Deleted.
        Don't reset the execution stopwatch on page navigation.
        If a timeline is actively being recorded on the frontend
        then all new timestamps suddenly downshifted towards zero
        introduces bad data.

2015-11-18  Daniel Bates  <dabates@apple.com>

        [iOS] ASSERTION FAILED: temporaryFilePath.last() == '/' in WebCore::openTemporaryFile()
        https://bugs.webkit.org/show_bug.cgi?id=151392
        <rdar://problem/23595341>

        Reviewed by Alexey Proskuryakov.

        Workaround <rdar://problem/23579077> where confstr(_CS_DARWIN_USER_TEMP_DIR, ..., ...) retrieves
        the path to the user temporary directory without a trailing slash in the iOS simulator.

        * platform/mac/FileSystemMac.mm:
        (WebCore::openTemporaryFile): Add a path separator (/) between the directory path and filename.

2015-11-18  Chris Dumez  <cdumez@apple.com>

        Null dereference in Performance::Performance(WebCore::Frame*)
        https://bugs.webkit.org/show_bug.cgi?id=151390

        Reviewed by Brady Eidson.

        Based on the stack trace, it appears the DocumentLoader can be null
        when constructing the Performance object. This patch thus adds a null
        check before trying to dereference it.

        No new tests, was not able to reproduce.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::navigator):
        (WebCore::DOMWindow::performance):
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::scriptExecutionContext):
        * page/Performance.h:

2015-11-18  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][MediaFoundation] The main thread can sometimes be blocked forever when ending a media session.
        https://bugs.webkit.org/show_bug.cgi?id=151387

        Reviewed by Alex Christensen.

        This happens because the main thread is waiting for the sample scheduler thread to finish,
        but sometimes it never does. This can be resolved by emptying the scheduler's sample queue
        before requesting the scheduler thread to finish. This will make sure the scheduler thread
        returns to its main loop quickly, and can handle the termination request.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::stopScheduler):

2015-11-18  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Initial testing of updated RTCPeerConnection API
        https://bugs.webkit.org/show_bug.cgi?id=151304

        Reviewed by Eric Carlson.

        Add an empty implementation of MediaEndpointPeerConnection which
        realizes the PeerConnectionBackend interface. This makes it possible
        to construct an RTCPeerConnection and do initial testing.

        Tests: fast/mediastream/RTCPeerConnection-overloaded-operations-params.html
               fast/mediastream/RTCPeerConnection-overloaded-operations.html

        Also unskip three existing RTCPeerConnection tests on GTK.

        * CMakeLists.txt:
        * Modules/mediastream/MediaEndpointPeerConnection.cpp: Added.
        (WebCore::createMediaEndpointPeerConnection):
        (WebCore::MediaEndpointPeerConnection::MediaEndpointPeerConnection):
        (WebCore::MediaEndpointPeerConnection::createOffer):
        (WebCore::MediaEndpointPeerConnection::createAnswer):
        (WebCore::MediaEndpointPeerConnection::setLocalDescription):
        (WebCore::MediaEndpointPeerConnection::localDescription):
        (WebCore::MediaEndpointPeerConnection::currentLocalDescription):
        (WebCore::MediaEndpointPeerConnection::pendingLocalDescription):
        (WebCore::MediaEndpointPeerConnection::setRemoteDescription):
        (WebCore::MediaEndpointPeerConnection::remoteDescription):
        (WebCore::MediaEndpointPeerConnection::currentRemoteDescription):
        (WebCore::MediaEndpointPeerConnection::pendingRemoteDescription):
        (WebCore::MediaEndpointPeerConnection::setConfiguration):
        (WebCore::MediaEndpointPeerConnection::addIceCandidate):
        (WebCore::MediaEndpointPeerConnection::getStats):
        (WebCore::MediaEndpointPeerConnection::stop):
        (WebCore::MediaEndpointPeerConnection::markAsNeedingNegotiation):
        * Modules/mediastream/MediaEndpointPeerConnection.h: Added.
        * WebCore.xcodeproj/project.pbxproj:

2015-11-18  Alejandro G. Castro  <alex@igalia.com>

        [Cairo] SolidStroke broken in drawLine after r191658
        https://bugs.webkit.org/show_bug.cgi?id=151385

        Reviewed by Carlos Garcia Campos.

        Fix the drawLine function after r191658, we have to make sure the
        color is set when line is SolidStroke.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):

2015-11-18  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] inline margins not honored when not using stretch in row-axis alignment
        https://bugs.webkit.org/show_bug.cgi?id=151323

        Reviewed by Sergio Villar Senin.

        There are some situations where we avoid to compute the inline-axis
        margins when computing the logical width of a box. One of those situations
        is when we have set an override width; this only affects for now to flex
        and grid items. We also follow this approach when setting the logical
        width based on the restrictions of 'auto' value in the 'min-width'
        property.

        This behavior is not correct, since there is no reason to avoid
        computing this margins, in the general case. I think this logic was
        designed as an optimization for flexbox, which was already computing
        the margins by its own, but it's not applicable in the general case, so
        grid needs these margins to be computed properly.

        For the shrink-to-fit behavior we can add some grid related logic to the
        already defined RenderBox function "sizesLogicalWidthToFitContent",
        so we avoid the override width.

        Tests: fast/css-grid-layout/grid-item-auto-sized-align-justify-margin-border-padding.html
               fast/css-grid-layout/min-width-height-auto-and-margins.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        * rendering/RenderGrid.cpp:
        (WebCore::defaultAlignmentChangedFromStretchInRowAxis):
        (WebCore::selfAlignmentChangedFromStretchInRowAxis):
        (WebCore::RenderGrid::styleDidChange):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::selfAlignmentChangedFromStretchInColumnAxis): Deleted.
        (WebCore::RenderGrid::computeMarginLogicalHeightForChild): Deleted.
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching): Deleted.

2015-11-18  Aaron Chu  <arona.chu@gmail.com>

        AX: Shadow DOM video player controls menus need aria-owns on the trigger buttons
        https://bugs.webkit.org/show_bug.cgi?id=127065

        Reviewed by Darin Adler.

        Test: media/accessibility-closed-captions-has-aria-owns.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.buildCaptionMenu):
        * Modules/mediacontrols/mediaControlsBase.js:
        (Controller.prototype.createControls):
        (Controller.prototype.buildCaptionMenu):

2015-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Null dereference loading Blink layout test editing/execCommand/indent-button-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=151187

        Reviewed by Darin Adler.

        This is a merge of Blink r174671:
        https://codereview.chromium.org/291143002

        Fixes imported/blink/editing/execCommand/indent-button-crash.html.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):

2015-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r192459): [GTK] User agent string is broken after r192459
        https://bugs.webkit.org/show_bug.cgi?id=151347

        Reviewed by Žan Doberšek.

        Remove the incorrect macro and simply use the given values
        USER_AGENT_GTK_MAJOR_VERSION and USER_AGENT_GTK_MINOR_VERSION that
        are now strings.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::versionForUAString):
        (WebCore::buildUserAgentString):

2015-11-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add letter-spacing support.
        https://bugs.webkit.org/show_bug.cgi?id=151362

        Reviewed by Antti Koivisto.

        This enables us to use simple line layout on letter-spacing content.
        (fixme: webkit.org/b/151368 -> Repaint rect is not computed correctly when negative letter-spacing applied)

        Test: fast/text/simple-line-letterspacing.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): RenderLineBoxList tests vertical intersection only. 
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):

2015-11-17  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][MediaFoundation] Current playback time is not shown.
        https://bugs.webkit.org/show_bug.cgi?id=151357

        Reviewed by Alex Christensen.

        We need to implement the currentTime() method.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::durationDouble):
        (WebCore::MediaPlayerPrivateMediaFoundation::currentTime):
        (WebCore::MediaPlayerPrivateMediaFoundation::paused):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::paintCurrentFrame):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::currentTime):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::isActive):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-11-17  Zalan Bujtas  <zalan@apple.com>

        Split SimpleLineLayout::canUseFor into canUseForStyle and canUseForFontAndText.
        https://bugs.webkit.org/show_bug.cgi?id=151338

        Reviewed by Myles C. Maxfield.

        No change in functionality.

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

2015-11-17  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBObjectStore.indexNames.
        https://bugs.webkit.org/show_bug.cgi?id=151341

        Reviewed by Alex Christensen.

        No new tests (Covered by existing storage/indexeddb/modern/objectstore-attributes.html).

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::indexNames):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::indexNames):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:

2015-11-17  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: contentSize >= 0 in WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax
        https://bugs.webkit.org/show_bug.cgi?id=151025

        Reviewed by Darin Adler.

        Negative margins could make RenderFlexibleBox compute negative
        intrinsic sizes. Clamp intrinsic sizes to 0.

        Test: css3/flexbox/negative-margins-assert.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):

2015-11-17  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Fix alignment with gutters and negative free spaces
        https://bugs.webkit.org/show_bug.cgi?id=151307

        Reviewed by Zalan Bujtas.

        This is a regression caused by r192154. The problem was that
        the free space was not properly computed when the grid
        container was narrower than the track sizes + gutters size for
        a given axis. The culprit was an unneeded clamp to 0 which was
        polluting the freeSpace computation as the track sizing
        algorithm works perfectly OK with negative freeSpace values.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeTrackSizesForDirection):

2015-11-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use RunLoop instead of GMainLoop in AudioFileReaderGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=151256

        Reviewed by Žan Doberšek.

        Use RunLoop instead of the platform specific code. The AudioBus
        can be created from any thread, so we create a helper thread to
        ensure we don't use the main RunLoop.

        This patch also includes some code cleanups:
          - Uses smart pointers when possible.
          - Fixes uninitialized members in constructors.
          - Makes private members private.
          - Uses lambdas instead of static non-members functions.
          - nullptr instead of 0 in some places.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createWeakPtr):
        (WebCore::AudioFileReader::deinterleavePadAddedCallback):
        (WebCore::AudioFileReader::deinterleaveReadyCallback):
        (WebCore::AudioFileReader::decodebinPadAddedCallback):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::handleSample):
        (WebCore::AudioFileReader::handleMessage):
        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        (WebCore::AudioFileReader::deinterleavePadsConfigured):
        (WebCore::AudioFileReader::plugDeinterleave):
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        (WebCore::onAppsinkPullRequiredCallback): Deleted.
        (WebCore::messageCallback): Deleted.
        (WebCore::onGStreamerDeinterleavePadAddedCallback): Deleted.
        (WebCore::onGStreamerDeinterleaveReadyCallback): Deleted.
        (WebCore::onGStreamerDecodebinPadAddedCallback): Deleted.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstBufferList>):
        (WTF::derefGPtr<GstBufferList>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:

2015-11-16  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] VideoTrack should respond to MediaStreamTrack state changes
        https://bugs.webkit.org/show_bug.cgi?id=151299

        Reviewed by Jer Noble.

        Test: fast/mediastream/MediaStream-video-element-track-stop.html

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::ended): Check m_ended.
        (WebCore::MediaStreamTrack::stopProducingData): Set m_ended before telling private track to 
          stop so we won't fire an 'ended' event.
        (WebCore::MediaStreamTrack::trackEnded): Set m_ended, add comments from spec.
        * Modules/mediastream/MediaStreamTrack.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Live streams have infinite duration,
          not indefinite.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Return NULL when displayMode
          is None.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentDisplayMode): Calculate current 
          displayMode based on MediaStream state.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Renamed from 
          setPausedImageVisible, use m_displayMode. Don't start/stop clock, it makes more sense
          to do that in play and pause.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start clock. 
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Stop clock.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Call updateDisplayMode.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Always try to create
          both layers if necessary.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::renderingModeChanged): New, update displayMode
          and call back to the media element.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): Get rid of some unused locals.
          React to a change in the enabled video track.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): Paint black when
          the active video track is disabled.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): Deleted.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::updateActiveState): Split the logic of updating the active video
          track out into updateActiveVideoTrack.
        (WebCore::MediaStreamPrivate::hasVideo): Check for track.ended.
        (WebCore::MediaStreamPrivate::hasAudio): Ditto.
        (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Don't call the source directly.
        (WebCore::MediaStreamPrivate::updateActiveVideoTrack): New.
        (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveVideoTrack.
        (WebCore::MediaStreamPrivate::trackEnded): new.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::setEnabled): Call observers if enabled state changes.
        (WebCore::MediaStreamTrackPrivate::endTrack): Call observers.
        (WebCore::MediaStreamTrackPrivate::paintCurrentFrameInContext): New.
        (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping): Add comments.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext): Remove a commented-out line.

2015-11-16  Pranjal Jumde  <pjumde@apple.com>

        Fixes the buffer-overflow when reading characters from textRun
        https://bugs.webkit.org/attachment.cgi?bugid=151055
        <rdar://problem/23251789>

        Reviewed by Brent Fulgham.

        * platform/graphics/FontCascade.cpp

2015-11-16  Brady Eidson  <beidson@apple.com>

        Modern IDB:Make in-memory ObjectStore cursors work.
        https://bugs.webkit.org/show_bug.cgi?id=151196

        Reviewed by Darin Adler.

        Tests: storage/indexeddb/modern/cursor-2.html
               storage/indexeddb/modern/cursor-3.html
               storage/indexeddb/modern/cursor-4.html
               storage/indexeddb/modern/cursor-5.html
               storage/indexeddb/modern/cursor-6.html
               storage/indexeddb/modern/cursor-7.html
               storage/indexeddb/modern/cursor-8.html
               storage/indexeddb/modern/objectstore-cursor-advance-failures.html
               storage/indexeddb/modern/objectstore-cursor-continue-failures.html

        Object store cursors directly hold on to a std::set<>::iterator to act as the cursor.
        
        The object store tells all of its cursors when it is cleared or records are deleted
        so the cursors can invalidate their iterators as needed.
        
        In case of such invalidation, the cursor hangs on to the current key value so it can 
        pick up where it left off in case it is iterated.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::isolatedCopy):
        
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::containsKey):
        (WebCore::IDBKeyRangeData::loggingString):
        * Modules/indexeddb/IDBKeyRangeData.h:
        
        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::modernIDBCursor):
        
        * Modules/indexeddb/client/IDBCursorImpl.cpp:
        (WebCore::IDBClient::IDBCursor::update):
        (WebCore::IDBClient::IDBCursor::advance):
        (WebCore::IDBClient::IDBCursor::continueFunction):
        (WebCore::IDBClient::IDBCursor::setGetResult):
        * Modules/indexeddb/client/IDBCursorImpl.h:
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::dispatchEvent):
        (WebCore::IDBClient::IDBRequest::didOpenOrIterateCursor):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        (WebCore::IDBClient::IDBRequest::pendingCursor):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::addRequest): Deleted.
        
        * Modules/indexeddb/client/TransactionOperation.cpp:
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::cursorIdentifier):
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreCleared):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        
        * Modules/indexeddb/server/MemoryCursor.cpp: Added.
        (WebCore::IDBServer::cursorMap):
        (WebCore::IDBServer::MemoryCursor::MemoryCursor):
        (WebCore::IDBServer::MemoryCursor::~MemoryCursor):
        (WebCore::IDBServer::MemoryCursor::cursorForIdentifier):
        * Modules/indexeddb/server/MemoryCursor.h: Added.
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::openCursor):
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::clear):
        (WebCore::IDBServer::MemoryObjectStore::replaceKeyValueStore):
        (WebCore::IDBServer::MemoryObjectStore::deleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::updateCursorsForPutRecord):
        (WebCore::IDBServer::MemoryObjectStore::updateCursorsForDeleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::maybeOpenCursor):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::orderedKeys):
        
        * Modules/indexeddb/server/MemoryObjectStoreCursor.cpp: Added.
        (WebCore::IDBServer::MemoryObjectStoreCursor::create):
        (WebCore::IDBServer::MemoryObjectStoreCursor::MemoryObjectStoreCursor):
        (WebCore::IDBServer::MemoryObjectStoreCursor::objectStoreCleared):
        (WebCore::IDBServer::MemoryObjectStoreCursor::keyDeleted):
        (WebCore::IDBServer::MemoryObjectStoreCursor::keyAdded):
        (WebCore::IDBServer::MemoryObjectStoreCursor::setFirstInRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::firstForwardIteratorInRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::firstReverseIteratorInRemainingRange):
        (WebCore::IDBServer::MemoryObjectStoreCursor::currentData):
        (WebCore::IDBServer::MemoryObjectStoreCursor::incrementForwardIterator):
        (WebCore::IDBServer::MemoryObjectStoreCursor::incrementReverseIterator):
        (WebCore::IDBServer::MemoryObjectStoreCursor::hasValidPosition):
        (WebCore::IDBServer::MemoryObjectStoreCursor::iterate):
        * Modules/indexeddb/server/MemoryObjectStoreCursor.h: Added.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/shared/IDBCursorInfo.h:
        (WebCore::IDBCursorInfo::range):

        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::cursorIdentifier):
        * Modules/indexeddb/shared/IDBRequestData.h:

2015-11-16  Anders Carlsson  <andersca@apple.com>

        Add identifier strings for a bunch of context menu items
        https://bugs.webkit.org/show_bug.cgi?id=151272

        Reviewed by Dan Bernstein.

        Have NSMenuItem conform to NSUserInterfaceItemIdentification.

        * platform/spi/mac/NSMenuSPI.h:

2015-11-16  Jiewen Tan  <jiewen_tan@apple.com>

        Null-pointer dereference in WebCore::firstEditablePositionAfterPositionInRoot
        https://bugs.webkit.org/show_bug.cgi?id=151288
        <rdar://problem/23450367>

        Reviewed by Darin Adler.

        Some problematic organization of body element could cause problems to JustifyRight
        and Indent commnads.

        Tests: editing/execCommand/justify-right-then-indent-with-problematic-body.html
               editing/execCommand/justify-right-with-problematic-body.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        Assertion at l1017 is not held anymore with the testcase:
        editing/execCommand/justify-right-with-problematic-body.html.
        Therefore, change it to an if statement.
        Also, add a guardance before calling insertNewDefaultParagraphElementAt()
        as insertNodeAt() requires an editable position.
        (WebCore::CompositeEditCommand::moveParagraphWithClones):
        Add a guardance before calling insertNodeAt() as it requires an editable position.
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):

2015-11-16  Simon Fraser  <simon.fraser@apple.com>

        Sort the Xcode project files.

        * WebCore.xcodeproj/project.pbxproj:

2015-11-16  Sebastian Dröge  <sebastian@centricular.com>

        WebRTC: Expose RTCPeerConnectionInternals functions to JS builtins.
        https://bugs.webkit.org/show_bug.cgi?id=151302

        Reviewed by Youenn Fablet.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        Expose RTCPeerConnectionInternals functions to JS builtins.

2015-11-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Update the implementation up to spec of Nov 11 2015
        https://bugs.webkit.org/show_bug.cgi?id=151195

        Reviewed by Youenn Fablet.

        Updated the implementation of Readable and Writable Streams to the latest changes in the spec. Main changes are
        the removal of the error and the state from the reader, readers are not automatically released and then minor or
        style changes.

        Implementation is up to date with version
        https://github.com/whatwg/streams/commit/48c8a3c30ea7e76c5e4eb9f157a438dd755bcc8e.

        Tests: streams/reference-implementation/readable-stream-templated.html
               streams/reference-implementation/readable-stream-reader.html

        * Modules/streams/ReadableStream.js:
        (getReader): Removed check for locked stream.
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader): Removed setting @error and @state and initialized owner and owner's
        reader as per spec.
        (teeReadableStreamPullFunction): Added assertions.
        (isReadableStreamReader): Added comment about resetting the reader owner to null instead of undefined as a means
        to distinguish between not having the slot and having it unset.
        (finishClosingReadableStream): Inline @closeReadableStreamReader as it is used only here now.
        (readFromReadableStreamReader): Reworked the state and error to use the stream one and changed the conditions to
        pull again as per spec.
        (errorReadableStream): Not releasing the reader and removed the reader error and state management.
        (releaseReadableStreamReader): Deleted.
        (closeReadableStreamReader): Deleted.
        * Modules/streams/ReadableStreamReader.js:
        (cancel): Removed some checks and assertions as per spec.
        (read): Added check for owner.
        (releaseLock): No closing the reader and rejecting close promise and unlinking reader and owner instead.
        * Modules/streams/WritableStream.js:
        (abort): Style change.
        * Modules/streams/WritableStreamInternals.js:
        (writableStreamAdvanceQueue):
        (closeWritableStream): Used @call instead of @apply.

2015-11-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Update RTCPeerConnection API and introduce PeerConnectionBackend
        https://bugs.webkit.org/show_bug.cgi?id=150166

        Reviewed by Eric Carlson and Youenn Fablet

        This change introduces PeerConnectionBackend which is a WebCore interface
        that allows RTCPeerConnection to have platform abstractions at different
        levels. For example, the MediaEndpoint interface [1] is a lower level
        WebRTC backend abstraction where a big part of the WebRTC specification
        is implemented in WebCore to be reusable. RTCPeerConnectionHandler (in
        the repo today) is on the other hand a higher level WebRTC backend
        abstraction where the calls are mostly forwarded directly to the
        backend. The PeerConnectionBackend interface facilitates both approaches.

        RTCPeerConnection
         | (has)
         |
        PeerConnectionBackend
         |   |
         |   | (realizes)
         |  MediaEndpointPeerConnection
         |   | (has)
         |   |
         |  MediaEndpoint (platform interface)
         |
         | (realizes)
        RTCPeerHandlerPeerConnection
         | (has)
         |
        RCPeerConnectionHandler (existing platform interface)

        Notable changes:

        # Overloaded methods on RTCPeerConnection (Promise + legacy callback
        signatures) are implemented with JSBuiltins.

        # "Queued operations" ([1] Section 4.3.1) is implemented in JS bindings
        with Promises.

        # New RTCPeerConnection features
         - add/removeTrack()
         - pending/currentLocal/RemoteDescription attributes
         - RTCRtpSender/Receiver

        # Information carrying objects like RTCSessionDescription and
        RTCCandidate don't encapsulate a "mirrored" platform object anymore.

        # Remove RTCPeerConnection specific callback implementations (not used
        with JS bindings)

        [1] http://webkit.org/b/150165
        [2] https://w3c.github.io/webrtc-pc/archives/20151006/webrtc.html

        Tests: Mock should be added to test future WebRTC backend abstractions.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/PeerConnectionBackend.cpp: Added.
        (WebCore::createPeerConnectionBackend):
        * Modules/mediastream/PeerConnectionBackend.h: Added.
        (WebCore::PeerConnectionBackendClient::~PeerConnectionBackendClient):
        (WebCore::PeerConnectionBackend::~PeerConnectionBackend):
        * Modules/mediastream/PeerConnectionStates.h: Added.
        * Modules/mediastream/RTCConfiguration.cpp: Added.
        (WebCore::validateIceServerURL):
        (WebCore::parseIceServer):
        (WebCore::RTCConfiguration::create):
        (WebCore::RTCConfiguration::RTCConfiguration):
        (WebCore::RTCConfiguration::initialize):
        * Modules/mediastream/RTCConfiguration.h:
        (WebCore::RTCConfiguration::iceTransportPolicy):
        (WebCore::RTCConfiguration::bundlePolicy):
        (WebCore::RTCConfiguration::iceServers):
        (WebCore::RTCConfiguration::create): Deleted.
        (WebCore::RTCConfiguration::appendServer): Deleted.
        (WebCore::RTCConfiguration::numberOfServers): Deleted.
        (WebCore::RTCConfiguration::server): Deleted.
        (WebCore::RTCConfiguration::iceTransports): Deleted.
        (WebCore::RTCConfiguration::setIceTransports): Deleted.
        (WebCore::RTCConfiguration::requestIdentity): Deleted.
        (WebCore::RTCConfiguration::setRequestIdentity): Deleted.
        (WebCore::RTCConfiguration::privateConfiguration): Deleted.
        (WebCore::RTCConfiguration::RTCConfiguration): Deleted.
        * Modules/mediastream/RTCConfiguration.idl:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        (WebCore::RTCIceCandidate::RTCIceCandidate):
        (WebCore::RTCIceCandidate::~RTCIceCandidate): Deleted.
        (WebCore::RTCIceCandidate::candidate): Deleted.
        (WebCore::RTCIceCandidate::sdpMid): Deleted.
        (WebCore::RTCIceCandidate::sdpMLineIndex): Deleted.
        (WebCore::RTCIceCandidate::descriptor): Deleted.
        * Modules/mediastream/RTCIceCandidate.h:
        (WebCore::RTCIceCandidate::~RTCIceCandidate):
        (WebCore::RTCIceCandidate::candidate):
        (WebCore::RTCIceCandidate::setCandidate):
        (WebCore::RTCIceCandidate::sdpMid):
        (WebCore::RTCIceCandidate::setSdpMid):
        (WebCore::RTCIceCandidate::sdpMLineIndex):
        (WebCore::RTCIceCandidate::setSdpMLineIndex):
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateEvent.cpp:
        (WebCore::RTCIceCandidateEvent::create):
        (WebCore::RTCIceCandidateEvent::RTCIceCandidateEvent):
        * Modules/mediastream/RTCIceCandidateEvent.h:
        * Modules/mediastream/RTCIceServer.h:
        (WebCore::RTCIceServer::urls):
        (WebCore::RTCIceServer::credential):
        (WebCore::RTCIceServer::username):
        (WebCore::RTCIceServer::RTCIceServer):
        (WebCore::RTCIceServer::create): Deleted.
        (WebCore::RTCIceServer::privateServer): Deleted.
        * Modules/mediastream/RTCOfferAnswerOptions.cpp:
        (WebCore::RTCOfferAnswerOptions::RTCOfferAnswerOptions):
        (WebCore::RTCOfferAnswerOptions::initialize):
        (WebCore::RTCOfferOptions::RTCOfferOptions):
        (WebCore::RTCOfferOptions::initialize):
        (WebCore::RTCAnswerOptions::create):
        (WebCore::RTCAnswerOptions::initialize):
        (WebCore::RTCOfferAnswerOptions::create): Deleted.
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        (WebCore::RTCOfferAnswerOptions::voiceActivityDetection):
        (WebCore::RTCOfferOptions::offerToReceiveVideo):
        (WebCore::RTCOfferOptions::offerToReceiveAudio):
        (WebCore::RTCOfferOptions::iceRestart):
        (WebCore::RTCAnswerOptions::RTCAnswerOptions):
        (WebCore::RTCOfferAnswerOptions::requestIdentity): Deleted.
        (WebCore::RTCOfferAnswerOptions::privateOfferAnswerOptions): Deleted.
        (WebCore::RTCOfferAnswerOptions::RTCOfferAnswerOptions): Deleted.
        (WebCore::RTCOfferOptions::voiceActivityDetection): Deleted.
        (WebCore::RTCOfferOptions::privateOfferOptions): Deleted.
        (WebCore::RTCOfferOptions::~RTCOfferOptions): Deleted.
        (WebCore::RTCOfferOptions::RTCOfferOptions): Deleted.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::getSenders):
        (WebCore::RTCPeerConnection::getReceivers):
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::removeTrack):
        (WebCore::RTCPeerConnection::queuedCreateOffer):
        (WebCore::RTCPeerConnection::queuedCreateAnswer):
        (WebCore::RTCPeerConnection::queuedSetLocalDescription):
        (WebCore::RTCPeerConnection::localDescription):
        (WebCore::RTCPeerConnection::currentLocalDescription):
        (WebCore::RTCPeerConnection::pendingLocalDescription):
        (WebCore::RTCPeerConnection::queuedSetRemoteDescription):
        (WebCore::RTCPeerConnection::remoteDescription):
        (WebCore::RTCPeerConnection::currentRemoteDescription):
        (WebCore::RTCPeerConnection::pendingRemoteDescription):
        (WebCore::RTCPeerConnection::queuedAddIceCandidate):
        (WebCore::RTCPeerConnection::signalingState):
        (WebCore::RTCPeerConnection::iceGatheringState):
        (WebCore::RTCPeerConnection::iceConnectionState):
        (WebCore::RTCPeerConnection::setConfiguration):
        (WebCore::RTCPeerConnection::privateGetStats):
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::setSignalingState):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::scheduleNegotiationNeededEvent):
        (WebCore::RTCPeerConnection::fireEvent):
        (WebCore::validateIceServerURL): Deleted.
        (WebCore::processIceServer): Deleted.
        (WebCore::RTCPeerConnection::parseConfiguration): Deleted.
        (WebCore::RTCPeerConnection::~RTCPeerConnection): Deleted.
        (WebCore::RTCPeerConnection::createOffer): Deleted.
        (WebCore::RTCPeerConnection::createAnswer): Deleted.
        (WebCore::RTCPeerConnection::checkStateForLocalDescription): Deleted.
        (WebCore::RTCPeerConnection::checkStateForRemoteDescription): Deleted.
        (WebCore::RTCPeerConnection::setLocalDescription): Deleted.
        (WebCore::RTCPeerConnection::setRemoteDescription): Deleted.
        (WebCore::RTCPeerConnection::updateIce): Deleted.
        (WebCore::RTCPeerConnection::addIceCandidate): Deleted.
        (WebCore::RTCPeerConnection::addStream): Deleted.
        (WebCore::RTCPeerConnection::removeStream): Deleted.
        (WebCore::RTCPeerConnection::getLocalStreams): Deleted.
        (WebCore::RTCPeerConnection::getRemoteStreams): Deleted.
        (WebCore::RTCPeerConnection::getStreamById): Deleted.
        (WebCore::RTCPeerConnection::getStats): Deleted.
        (WebCore::RTCPeerConnection::hasLocalStreamWithTrackId): Deleted.
        (WebCore::RTCPeerConnection::createDTMFSender): Deleted.
        (WebCore::RTCPeerConnection::negotiationNeeded): Deleted.
        (WebCore::RTCPeerConnection::didGenerateIceCandidate): Deleted.
        (WebCore::RTCPeerConnection::didChangeSignalingState): Deleted.
        (WebCore::RTCPeerConnection::didChangeIceGatheringState): Deleted.
        (WebCore::RTCPeerConnection::didChangeIceConnectionState): Deleted.
        (WebCore::RTCPeerConnection::didAddRemoteStream): Deleted.
        (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted.
        (WebCore::RTCPeerConnection::didAddRemoteDataChannel): Deleted.
        (WebCore::RTCPeerConnection::didAddOrRemoveTrack): Deleted.
        (WebCore::RTCPeerConnection::changeSignalingState): Deleted.
        (WebCore::RTCPeerConnection::changeIceGatheringState): Deleted.
        (WebCore::RTCPeerConnection::changeIceConnectionState): Deleted.
        (WebCore::RTCPeerConnection::scheduleDispatchEvent): Deleted.
        (WebCore::RTCPeerConnection::scheduledEventTimerFired): Deleted.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnection.js: Added.
        (createOffer):
        (createAnswer):
        (setLocalDescription):
        (setRemoteDescription):
        (addIceCandidate):
        (getStats):
        * Modules/mediastream/RTCPeerConnectionErrorCallback.h:
        (WebCore::RTCPeerConnectionErrorCallback::~RTCPeerConnectionErrorCallback): Deleted.
        * Modules/mediastream/RTCPeerConnectionInternals.js: Added.
        (runNext):
        (enqueueOperation):
        (setLocalOrRemoteDescription):
        (extractCallbackArg):
        * Modules/mediastream/RTCRtpReceiver.cpp: Added.
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        * Modules/mediastream/RTCRtpReceiver.h: Added.
        (WebCore::RTCRtpReceiver::create):
        * Modules/mediastream/RTCRtpReceiver.idl: Added.
        * Modules/mediastream/RTCRtpSender.cpp: Added.
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpSender.h: Added.
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::mediaStreamId):
        * Modules/mediastream/RTCRtpSender.idl: Added.
        * Modules/mediastream/RTCRtpSenderReceiverBase.h: Added.
        (WebCore::RTCRtpSenderReceiverBase::~RTCRtpSenderReceiverBase):
        (WebCore::RTCRtpSenderReceiverBase::track):
        (WebCore::RTCRtpSenderReceiverBase::RTCRtpSenderReceiverBase):
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        (WebCore::RTCSessionDescription::RTCSessionDescription):
        (WebCore::RTCSessionDescription::setType):
        (WebCore::RTCSessionDescription::~RTCSessionDescription): Deleted.
        (WebCore::RTCSessionDescription::type): Deleted.
        (WebCore::RTCSessionDescription::sdp): Deleted.
        (WebCore::RTCSessionDescription::setSdp): Deleted.
        (WebCore::RTCSessionDescription::descriptor): Deleted.
        * Modules/mediastream/RTCSessionDescription.h:
        (WebCore::RTCSessionDescription::~RTCSessionDescription):
        (WebCore::RTCSessionDescription::type):
        (WebCore::RTCSessionDescription::sdp):
        (WebCore::RTCSessionDescription::setSdp):
        * Modules/mediastream/RTCSessionDescriptionCallback.h:
        (WebCore::RTCSessionDescriptionCallback::~RTCSessionDescriptionCallback): Deleted.
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp: Removed.
        (WebCore::RTCSessionDescriptionRequestImpl::create): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::~RTCSessionDescriptionRequestImpl): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::requestSucceeded): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::requestFailed): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::stop): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::activeDOMObjectName): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::canSuspendForPageCache): Deleted.
        (WebCore::RTCSessionDescriptionRequestImpl::clear): Deleted.
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h: Removed.
        * Modules/mediastream/RTCStatsCallback.h: Removed.
        (WebCore::RTCStatsCallback::~RTCStatsCallback): Deleted.
        * Modules/mediastream/RTCStatsCallback.idl: Removed.
        * Modules/mediastream/RTCStatsRequestImpl.cpp: Removed.
        (WebCore::RTCStatsRequestImpl::create): Deleted.
        (WebCore::RTCStatsRequestImpl::RTCStatsRequestImpl): Deleted.
        (WebCore::RTCStatsRequestImpl::~RTCStatsRequestImpl): Deleted.
        (WebCore::RTCStatsRequestImpl::createResponse): Deleted.
        (WebCore::RTCStatsRequestImpl::hasSelector): Deleted.
        (WebCore::RTCStatsRequestImpl::track): Deleted.
        (WebCore::RTCStatsRequestImpl::requestSucceeded): Deleted.
        (WebCore::RTCStatsRequestImpl::requestFailed): Deleted.
        (WebCore::RTCStatsRequestImpl::stop): Deleted.
        (WebCore::RTCStatsRequestImpl::activeDOMObjectName): Deleted.
        (WebCore::RTCStatsRequestImpl::canSuspendForPageCache): Deleted.
        (WebCore::RTCStatsRequestImpl::clear): Deleted.
        * Modules/mediastream/RTCStatsRequestImpl.h: Removed.
        * Modules/mediastream/RTCTrackEvent.cpp: Added.
        (WebCore::RTCTrackEventInit::RTCTrackEventInit):
        (WebCore::RTCTrackEvent::create):
        (WebCore::RTCTrackEvent::RTCTrackEvent):
        * Modules/mediastream/RTCTrackEvent.h: Added.
        (WebCore::RTCTrackEvent::receiver):
        (WebCore::RTCTrackEvent::track):
        (WebCore::RTCTrackEvent::eventInterface):
        * Modules/mediastream/RTCTrackEvent.idl: Added.
        * Modules/mediastream/RTCVoidRequestImpl.cpp: Removed.
        (WebCore::RTCVoidRequestImpl::create): Deleted.
        (WebCore::RTCVoidRequestImpl::RTCVoidRequestImpl): Deleted.
        (WebCore::RTCVoidRequestImpl::~RTCVoidRequestImpl): Deleted.
        (WebCore::RTCVoidRequestImpl::requestSucceeded): Deleted.
        (WebCore::RTCVoidRequestImpl::requestFailed): Deleted.
        (WebCore::RTCVoidRequestImpl::stop): Deleted.
        (WebCore::RTCVoidRequestImpl::activeDOMObjectName): Deleted.
        (WebCore::RTCVoidRequestImpl::canSuspendForPageCache): Deleted.
        (WebCore::RTCVoidRequestImpl::clear): Deleted.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSBuiltinInternals.h:
        (WebCore::JSBuiltinInternalFunctions::JSBuiltinInternalFunctions):
        (WebCore::JSBuiltinInternalFunctions::rTCPeerConnectionInternals):
        (WebCore::JSBuiltinInternalFunctions::visit):
        (WebCore::JSBuiltinInternalFunctions::init):
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h:
        (WebCore::JSBuiltinFunctions::JSBuiltinFunctions):
        (WebCore::JSBuiltinFunctions::rTCPeerConnectionBuiltins):
        (WebCore::JSBuiltinFunctions::rTCPeerConnectionInternalsBuiltins):
        * dom/EventNames.in:

2015-11-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192404): Fix tvOS and watchOS builds

        * platform/spi/cocoa/QuartzCoreSPI.h: Add more version checks to
        fix all the builds.

2015-11-14  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK] Remove use of String::format() in versionForUAString()
        https://bugs.webkit.org/show_bug.cgi?id=151250

        Reviewed by Darin Adler.

        As String::format() will be deprecated due to the security problem, reimplement
        versionForUAString() using a macro.

        * platform/efl/UserAgentEfl.cpp:
        (WebCore::versionForUAString):
        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString):
        (WebCore::versionForUAString):

2015-11-14  Antti Koivisto  <antti@apple.com>

        Regression(r188820): Downloads of data URLs is broken
        https://bugs.webkit.org/show_bug.cgi?id=150900
        rdar://problem/23399223

        Reviewed by Darin Adler.

        No test, the current test infrastructure only allows testing policy decisions, not the actual download.

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

        Use normal download path for data URLs instead of trying to convert the main resource load.
        Since we decode data URLs locally there is no associated resource load on WebKit side.

2015-11-14  Nan Wang  <n_wang@apple.com>

        AX: add a new trait for elements in fieldset on iOS
        https://bugs.webkit.org/show_bug.cgi?id=151281

        Reviewed by Chris Fleizach.

        Added a new trait for elements in the fieldset, so VoiceOver can speak the legend
        information for those elements.

        Test: accessibility/ios-simulator/fieldset-traits.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityFieldsetAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):

2015-11-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192445, r192451, and r192452.
        https://bugs.webkit.org/show_bug.cgi?id=151291

        Broke Mavericks build (and thus EWS) (Requested by ap on
        #webkit).

        Reverted changesets:

        "Add identifier strings for a bunch of context menu items"
        https://bugs.webkit.org/show_bug.cgi?id=151272
        http://trac.webkit.org/changeset/192445

        "Try to fix the 32-bit build"
        http://trac.webkit.org/changeset/192451

        "Try to fix the 32-bit build"
        http://trac.webkit.org/changeset/192452

2015-11-13  Anders Carlsson  <andersca@apple.com>

        Add identifier strings for a bunch of context menu items
        https://bugs.webkit.org/show_bug.cgi?id=151272

        Reviewed by Dan Bernstein.

        Have NSMenuItem conform to NSUserInterfaceItemIdentification.

        * platform/spi/mac/NSMenuSPI.h:

2015-11-13  Zalan Bujtas  <zalan@apple.com>

        Always render at least a device pixel line when border/outline width > 0.
        https://bugs.webkit.org/show_bug.cgi?id=151269

        This matches Firefox behaviour.

        Reviewed by Simon Fraser.

        Existing test is modified to reflect the new behaviour.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLineWidth):
        * rendering/BorderEdge.cpp:
        (WebCore::BorderEdge::BorderEdge): Deleted.
        * rendering/BorderEdge.h:

2015-11-13  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][MediaFoundation] Video rendered at wrong position.
        https://bugs.webkit.org/show_bug.cgi?id=151271

        Reviewed by Alex Christensen.

        The source rectangle used when blitting a frame to the graphics context
        should have offset (0, 0).

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):

2015-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to override the WKWebView remote inspector name
        https://bugs.webkit.org/show_bug.cgi?id=151075

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::remoteInspectionNameOverride):
        (WebCore::Page::setRemoteInspectionNameOverride):
        * page/Page.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::name):
        (WebCore::PageDebuggable::setNameOverride):
        * page/PageDebuggable.h:

2015-11-13  Jiewen Tan  <jiewen_tan@apple.com>

        Element::focus() should acquire the ownership of Frame.
        https://bugs.webkit.org/show_bug.cgi?id=150204
        <rdar://problem/23136794>

        Reviewed by Brent Fulgham.

        The FrameSelection::setSelection method sometimes releases the last reference to a frame.
        When this happens, the Element::updateFocusAppearance would attempt to use dereferenced memory.
        Instead, we should ensure that the Frame lifetime is guaranteed to extend through the duration
        of the method call.

        Test: editing/selection/focus-iframe-removal-crash.html

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):

2015-11-13  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Remove unused GridResolvedPosition constructor
        https://bugs.webkit.org/show_bug.cgi?id=151133

        Reviewed by Mario Sanchez Prada.

        No new tests required, just deleting dead code.

        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::GridResolvedPosition): Deleted.
        * rendering/style/GridResolvedPosition.h:

2015-11-13  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: m_isEngaged in WTF::Optional::value
        https://bugs.webkit.org/show_bug.cgi?id=151094

        Reviewed by Darin Adler.

        That ASSERT was hit because the precondition was incorrectly
        met, i.e., we're considering that the main axis length was
        definite when it was actually not. The problem is that to
        determine whether it was indefinite or not we're using
        RenderBox::hasDefiniteLogicalHeight() which did not perfectly
        match RenderBox::computePercentageLogicalHeight() for the case
        of RenderTables. So computePercentageLogicalHeight() was
        returning Nullopt (i.e. indefinite) while
        hasDefiniteLogicalHeight() was returning true (so definite).

        Some checks were refactored in a helper function to solve the
        inconsistency so that both functions behave the same way even
        in this particular situation.

        Test: css3/flexbox/inline-flex-percentage-height-in-table-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::tableCellShouldHaveZeroInitialSize):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::percentageLogicalHeightIsResolvable):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        * rendering/RenderBox.h:

2015-11-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, really fix the Mac CMake build after r192376.

        * PlatformMac.cmake:

2015-11-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, fix the Mac CMake build after r192376.

        * PlatformMac.cmake:

2015-11-12  Tim Horton  <timothy_horton@apple.com>

        Follow up to the previous change

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Somehow this escaped.

2015-11-12  Tim Horton  <timothy_horton@apple.com>

        Try to fix the Watch/TV build

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Be more accurate about where we need these.

2015-11-12  Brady Eidson  <beidson@apple.com>

        Modern IDB: Pipe through cursor functions from client to server.
        https://bugs.webkit.org/show_bug.cgi?id=151197

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/cursor-1.html
               storage/indexeddb/modern/opencursor-failures.html

        This patch implements most IDBCursor considerations at the IDL level, as well as pipes the
        appropriate messages through from client to server.
        
        All operations currently end in errors. Bug 151196 will fix that by making cursors functional.
        
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::isKeyCursor): Deleted.
        * Modules/indexeddb/IDBCursorWithValue.h:

        * Modules/indexeddb/IDBGetResult.h:

        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::string):
        (WebCore::IDBKeyData::date):
        (WebCore::IDBKeyData::number):
        (WebCore::IDBKeyData::array):

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::IDBAny):
        (WebCore::IDBClient::IDBAny::idbCursor):
        (WebCore::IDBClient::IDBAny::idbCursorWithValue):
        (WebCore::IDBClient::IDBAny::idbIndex):
        (WebCore::IDBClient::IDBAny::idbObjectStore):
        (WebCore::IDBClient::IDBAny::modernIDBCursor):
        * Modules/indexeddb/client/IDBAnyImpl.h:
        (WebCore::IDBClient::IDBAny::create):

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::openCursor):
        (WebCore::IDBClient::IDBConnectionToServer::didOpenCursor):
        (WebCore::IDBClient::IDBConnectionToServer::iterateCursor):
        (WebCore::IDBClient::IDBConnectionToServer::didIterateCursor):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBCursorImpl.cpp:
        (WebCore::IDBClient::IDBCursor::create):
        (WebCore::IDBClient::IDBCursor::IDBCursor):
        (WebCore::IDBClient::IDBCursor::sourcesDeleted):
        (WebCore::IDBClient::IDBCursor::effectiveObjectStore):
        (WebCore::IDBClient::IDBCursor::transaction):
        (WebCore::IDBClient::IDBCursor::direction):
        (WebCore::IDBClient::IDBCursor::key):
        (WebCore::IDBClient::IDBCursor::primaryKey):
        (WebCore::IDBClient::IDBCursor::value):
        (WebCore::IDBClient::IDBCursor::source):
        (WebCore::IDBClient::IDBCursor::update):
        (WebCore::IDBClient::IDBCursor::advance):
        (WebCore::IDBClient::IDBCursor::continueFunction):
        (WebCore::IDBClient::IDBCursor::uncheckedIteratorCursor):
        (WebCore::IDBClient::IDBCursor::deleteFunction):
        (WebCore::IDBClient::IDBCursor::setGetResult):
        * Modules/indexeddb/client/IDBCursorImpl.h:
        (WebCore::IDBClient::IDBCursor::info):
        (WebCore::IDBClient::IDBCursor::setRequest):
        (WebCore::IDBClient::IDBCursor::clearRequest):
        (WebCore::IDBClient::IDBCursor::request):

        * Modules/indexeddb/client/IDBCursorWithValueImpl.cpp:
        (WebCore::IDBClient::IDBCursorWithValue::create):
        (WebCore::IDBClient::IDBCursorWithValue::IDBCursorWithValue):
        (WebCore::IDBClient::IDBCursorWithValue::~IDBCursorWithValue):
        * Modules/indexeddb/client/IDBCursorWithValueImpl.h:

        * Modules/indexeddb/client/IDBIndexImpl.cpp:
        (WebCore::IDBClient::IDBIndex::openCursor):
        (WebCore::IDBClient::IDBIndex::openKeyCursor):
        * Modules/indexeddb/client/IDBIndexImpl.h:
        (WebCore::IDBClient::IDBIndex::modernObjectStore):
        (WebCore::IDBClient::IDBIndex::isDeleted):

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::openCursor):
        (WebCore::IDBClient::IDBObjectStore::deleteFunction):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::create):
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::~IDBRequest):
        (WebCore::IDBClient::IDBRequest::source):
        (WebCore::IDBClient::IDBRequest::resultCursor):
        (WebCore::IDBClient::IDBRequest::willIterateCursor):
        (WebCore::IDBClient::IDBRequest::didOpenOrIterateCursor):
        (WebCore::IDBClient::IDBRequest::requestCompleted):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        (WebCore::IDBClient::IDBRequest::modernResult):

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestOpenCursor):
        (WebCore::IDBClient::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBClient::IDBTransaction::openCursorOnServer):
        (WebCore::IDBClient::IDBTransaction::didOpenCursorOnServer):
        (WebCore::IDBClient::IDBTransaction::iterateCursor):
        (WebCore::IDBClient::IDBTransaction::iterateCursorOnServer):
        (WebCore::IDBClient::IDBTransaction::didIterateCursorOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::createTransactionOperation):

        * Modules/indexeddb/legacy/LegacyCursor.cpp:
        (WebCore::LegacyCursor::source):
        * Modules/indexeddb/legacy/LegacyCursor.h:
        (WebCore::LegacyCursor::continueFunction): Deleted.
        (WebCore::LegacyCursor::isKeyCursor): Deleted.
        * Modules/indexeddb/legacy/LegacyCursorWithValue.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor):
        (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::openCursor):
        (WebCore::IDBServer::IDBServer::iterateCursor):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::openCursor):
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performOpenCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformOpenCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::performIterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformIterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBCursorInfo.cpp: Added.
        (WebCore::IDBCursorInfo::objectStoreCursor):
        (WebCore::IDBCursorInfo::indexCursor):
        (WebCore::IDBCursorInfo::IDBCursorInfo):
        (WebCore::IDBCursorInfo::isDirectionForward):
        (WebCore::IDBCursorInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBCursorInfo.h: Added.
        (WebCore::IDBCursorInfo::identifier):
        (WebCore::IDBCursorInfo::sourceIdentifier):
        (WebCore::IDBCursorInfo::cursorSource):
        (WebCore::IDBCursorInfo::cursorDirection):
        (WebCore::IDBCursorInfo::cursorType):

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::openCursorSuccess):
        (WebCore::IDBResultData::iterateCursorSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didOpenCursor):
        (WebCore::InProcessIDBServer::didIterateCursor):
        (WebCore::InProcessIDBServer::openCursor):
        (WebCore::InProcessIDBServer::iterateCursor):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyDataToJSValue):
        * bindings/js/IDBBindingUtilities.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBCursorInfo>::copy):
        * platform/CrossThreadCopier.h:

2015-11-12  Anders Carlsson  <andersca@apple.com>

        Delete PlatformMenuDescription.h
        https://bugs.webkit.org/show_bug.cgi?id=151229

        Reviewed by Beth Dakin.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ContextMenuClient.h:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/PlatformMenuDescription.h: Removed.

2015-11-12  Anders Carlsson  <andersca@apple.com>

        ContextMenuAction and WebMenuItemTag shouldn't have to be in sync
        https://bugs.webkit.org/show_bug.cgi?id=151226

        Reviewed by Tim Horton.

        * page/ContextMenuController.cpp:
        * platform/ContextMenuItem.h:
        Remove now unneeded comments. Also, remove ContextMenuItemTagOpenLinkInThisWindow since it wasn't used by any of our remaining ports.

2015-11-12  Zalan Bujtas  <zalan@apple.com>

        Ignore visited background color when deciding if the input renderer needs to be painted natively.
        https://bugs.webkit.org/show_bug.cgi?id=151211
        rdar://problem/21449823

        Reviewed by Antti Koivisto.

        Test: fast/css/pseudo-visited-background-color-on-input.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):
        * rendering/style/RenderStyle.h:

2015-11-12  David Hyatt  <hyatt@apple.com>

        Tatechuyoko shrink-to-fit breaks after changing color, background-color or text-decoration
        https://bugs.webkit.org/show_bug.cgi?id=151218
        <rdar://problem/23521702>

        Reviewed by Myles Maxfield.

        Added fast/text/text-combine-shrink-on-color-change.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):

2015-11-12  Anders Carlsson  <andersca@apple.com>

        Use ContextMenuItemTagNoAction instead of ContextMenuItemCustomTagNoAction
        https://bugs.webkit.org/show_bug.cgi?id=151222

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Deleted.
        * platform/ContextMenuItem.h:

2015-11-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Font fallback is not language-sensitive
        https://bugs.webkit.org/show_bug.cgi?id=147390

        Reviewed by Dean Jackson.

        Test: fast/text/fallback-language-han-2.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-11-12  Anders Carlsson  <andersca@apple.com>

        ContextMenuController::contextMenuItemSelected only needs the action and title, not the full item
        https://bugs.webkit.org/show_bug.cgi?id=151217

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendHost.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/ContextMenuController.h:
        * page/ContextMenuProvider.h:

2015-11-12  Anders Carlsson  <andersca@apple.com>

        Remove an unused function
        https://bugs.webkit.org/show_bug.cgi?id=151215

        Reviewed by Joseph Pecoraro.

        * loader/EmptyClients.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Deleted.

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Enable cross-platform context menus by default
        https://bugs.webkit.org/show_bug.cgi?id=151173

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::addInspectElementItem): Deleted.
        * platform/ContextMenu.cpp:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.cpp:
        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuItem::isNull): Deleted.
        * platform/mac/ContextMenuItemMac.mm: Removed.
        (WebCore::menuToArray): Deleted.
        (WebCore::ContextMenuItem::ContextMenuItem): Deleted.
        (WebCore::createPlatformMenuItemDescription): Deleted.
        (WebCore::ContextMenuItem::~ContextMenuItem): Deleted.
        (WebCore::ContextMenuItem::platformDescription): Deleted.
        (WebCore::ContextMenuItem::type): Deleted.
        (WebCore::ContextMenuItem::action): Deleted.
        (WebCore::ContextMenuItem::title): Deleted.
        (WebCore::ContextMenuItem::platformSubMenu): Deleted.
        (WebCore::ContextMenuItem::setType): Deleted.
        (WebCore::ContextMenuItem::setAction): Deleted.
        (WebCore::ContextMenuItem::setTitle): Deleted.
        (WebCore::ContextMenuItem::setSubMenu): Deleted.
        (WebCore::ContextMenuItem::setChecked): Deleted.
        (WebCore::ContextMenuItem::setEnabled): Deleted.
        (WebCore::ContextMenuItem::enabled): Deleted.
        (WebCore::ContextMenuItem::checked): Deleted.
        * platform/mac/ContextMenuMac.mm: Removed.
        (WebCore::ContextMenu::ContextMenu): Deleted.
        (WebCore::ContextMenu::~ContextMenu): Deleted.
        (WebCore::ContextMenu::appendItem): Deleted.
        (WebCore::ContextMenu::insertItem): Deleted.
        (WebCore::ContextMenu::itemCount): Deleted.
        (WebCore::ContextMenu::setPlatformDescription): Deleted.
        (WebCore::ContextMenu::platformDescription): Deleted.
        (WebCore::ContextMenu::releasePlatformDescription): Deleted.
        (WebCore::contextMenuItemVector): Deleted.
        (WebCore::platformMenuDescription): Deleted.

2015-11-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Font fallback is not language-sensitive
        https://bugs.webkit.org/show_bug.cgi?id=147390

        Reviewed by Dean Jackson.

        This re-applies r190754 in a somewhat more performant way.

        Test: fast/text/fallback-language-han-2.html

        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::Font::systemFallbackFontForCharacter):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-11-11  Jon Honeycutt  <jhoneycutt@apple.com>

        popstate event should be dispatched asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=36202
        <rdar://problem/7761279>

        Based on an original patch by Mihai Parparita <mihaip@chromium.org>.

        Reviewed by Brent Fulgham.

        Tests: fast/loader/remove-iframe-during-history-navigation-different.html
               fast/loader/remove-iframe-during-history-navigation-same.html
               fast/loader/stateobjects/popstate-is-asynchronous.html

        * dom/Document.cpp:
        (WebCore::Document::enqueuePopstateEvent):
        Use enqueueWindowEvent().

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        Fix build failure due to missing NeverDestroyed.h include after r192169
        https://bugs.webkit.org/show_bug.cgi?id=151186

        Reviewed by Darin Adler.

        * rendering/RenderCombineText.cpp:

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

        Fix build failure due to missing forward declaration of FontVariantSettings after r191968
        https://bugs.webkit.org/show_bug.cgi?id=151185

        Reviewed by Myles C. Maxfield.

        * css/CSSFontFaceSource.h:

2015-11-12  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Reflect media stream tracks as HTMLMediaElement tracks
        https://bugs.webkit.org/show_bug.cgi?id=151145

        Reviewed by Jer Noble.

        Test: fast/mediastream/MediaStream-video-element.html

        * WebCore.xcodeproj/project.pbxproj: Add new header files.

        * html/track/AudioTrack.h: Add comments to clean things up slightly.
        * html/track/VideoTrack.h: Ditto.

        Create a AudioTrackPrivateMediaStream or VideoTrackPrivateMediaStream for each track in
        the MediaStream.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Call updateTracks.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::didAddTrack): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::didRemoveTrack): Ditto.
        (WebCore::updateTracksOfType): New, template function to update audio or video tracks.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks): New.

        * platform/mediastream/AudioTrackPrivateMediaStream.h: Added.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::currentFrameImage): Fix a typo, early return if the track is
          not active OR there is no active video track.
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::activeVideoTrack): Accessor for active video track, if any.

        * platform/mediastream/VideoTrackPrivateMediaStream.h: Added.

        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::updateStates): Set current states.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::states): Set source ID.
        (WebCore::AVMediaCaptureSource::capabilities): Set source ID directly.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::updateStates): Set states here instead of in the constructor.

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::MockRealtimeMediaSource::capabilities): Set source ID directly.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::updateStates): Set source type.

2015-11-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XHR abort() event firing does not match spec
        https://bugs.webkit.org/show_bug.cgi?id=98404

        Reviewed by Darin Adler.

        Introducing explicit sendFlag as in the specification.
        Previously, sendFlag was computed using !!m_loader.
        But this does not work well for loadstart events since sendFlag should be true but m_loader is still null at that time.

        Updated abort event firing test according specification.
        For instance, compared to previously, the abort event is not fired in DONE state or if sendFlag is not set.

        Covered by rebased tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): Compute whether dispatching the load event before calling XHR readystatechange event callback.
        (WebCore::XMLHttpRequest::setWithCredentials): Replacing m_loader by m_sendFlag to align with the spec.
        (WebCore::XMLHttpRequest::open): Unsetting m_sendFlag..
        (WebCore::XMLHttpRequest::initSend): Replacing m_loader by m_sendFlag to align with the spec.
        (WebCore::XMLHttpRequest::createRequest): Setting m_sendFlag.
        (WebCore::XMLHttpRequest::abort): Checking m_sendFlag and updating code to follow the specification.
        (WebCore::XMLHttpRequest::genericError): Unsetting m_sendFlag.
        (WebCore::XMLHttpRequest::setRequestHeader): Replacing m_loader by m_sendFlag to align with the spec.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.
        (WebCore::XMLHttpRequest::didReachTimeout): Ditto.
        * xml/XMLHttpRequest.h: Added m_sendFlag.

2015-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use RunLoop::timer in MediaPlayerPrivateGStreamerBase for GL drawing
        https://bugs.webkit.org/show_bug.cgi?id=151099

        Reviewed by Philippe Normand.

        Instead of the GThreadSafeMainLoopSource.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2015-11-12  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * platform/LayoutUnit.h:
        (WebCore::operator*):
        (WebCore::LayoutUnit::LayoutUnit): Deleted.
        (WebCore::LayoutUnit::fromFloatCeil): Deleted.
        (WebCore::LayoutUnit::fromFloatFloor): Deleted.
        (WebCore::LayoutUnit::fromFloatRound): Deleted.
        (WebCore::LayoutUnit::ceil): Deleted.
        (WebCore::LayoutUnit::round): Deleted.
        (WebCore::LayoutUnit::floor): Deleted.
        (WebCore::LayoutUnit::setValue): Deleted.
        (WebCore::operator/): Deleted.
        (WebCore::operator+): Deleted.
        (WebCore::operator-): Deleted.
        (WebCore::operator+=): Deleted.
        (WebCore::operator-=): Deleted.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderView.h:

2015-11-11  Chris Dumez  <cdumez@apple.com>

        Stop passing a PassRefPtr to dispatchEvent()
        https://bugs.webkit.org/show_bug.cgi?id=151158

        Reviewed by Alex Christensen.

        Stop passing a PassRefPtr to dispatchEvent() because:
        1. PassRefPtr is legacy and should no longer be used
        2. We don't actually transfer ownership of the Event to the callee

        Pass a C++ reference instead.

2015-11-11  Chris Dumez  <cdumez@apple.com>

        Fix leaks in idbKeyFromInspectorObject()
        https://bugs.webkit.org/show_bug.cgi?id=151179

        Reviewed by Brian Burg.

        Fix leaks in idbKeyFromInspectorObject() that were caused by the
        NeverDestroyed<> not being marked as static.

        * inspector/InspectorIndexedDBAgent.cpp:

2015-11-11  Geoffrey Garen  <ggaren@apple.com>

        Rename handle.*Event to dispatch.*Event
        https://bugs.webkit.org/show_bug.cgi?id=151168

        Reviewed by Chris Dumez.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::getIconDataForIconURL):
        (WebCore::DocumentLoader::dispatchOnloadEvents):
        (WebCore::DocumentLoader::handledOnloadEvents): Deleted.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::isClientRedirect):
        (WebCore::DocumentLoader::setIsClientRedirect):
        (WebCore::DocumentLoader::wasOnloadDispatched):
        (WebCore::DocumentLoader::overrideEncoding):
        (WebCore::DocumentLoader::wasOnloadHandled): Deleted.
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::userAgent):
        (WebCore::FrameLoader::dispatchOnloadEvents):
        (WebCore::FrameLoader::frameDetached):
        (WebCore::FrameLoader::shouldClose):
        (WebCore::FrameLoader::dispatchUnloadEvents):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):
        (WebCore::FrameLoader::handledOnloadEvents): Deleted.
        (WebCore::FrameLoader::handleUnloadEvents): Deleted.
        (WebCore::FrameLoader::handleBeforeUnloadEvent): Deleted.
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::mustLockBackForwardList):

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Remove more dead code
        https://bugs.webkit.org/show_bug.cgi?id=151170

        Reviewed by Beth Dakin.

        * platform/ContextMenu.cpp:
        (WebCore::findItemWithAction): Deleted.
        (WebCore::ContextMenu::itemWithAction): Deleted.
        * platform/ContextMenu.h:
        (WebCore::ContextMenu::itemAtIndex): Deleted.
        * platform/ContextMenuItem.h:

2015-11-11  Anders Carlsson  <andersca@apple.com>

        De-indent ContextMenu.h and ContextMenuItem.h.

        Rubber-stamped by Andreas Kling.

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Remove ContextMenuWin.cpp and ContextMenuItemWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=150467

        Reviewed by Beth Dakin.

        These files are not needed anymore.

        * PlatformWin.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/win/ContextMenuItemWin.cpp: Removed.
        (WebCore::ContextMenuItem::ContextMenuItem): Deleted.
        (WebCore::ContextMenuItem::platformContextMenuItem): Deleted.
        * platform/win/ContextMenuWin.cpp: Removed.
        (WebCore::ContextMenu::ContextMenu): Deleted.
        (WebCore::ContextMenu::getContextMenuItems): Deleted.
        (WebCore::ContextMenu::createPlatformContextMenuFromItems): Deleted.
        (WebCore::ContextMenu::platformContextMenu): Deleted.

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Get rid of ContextMenuNone.cpp and ContextMenuItemNone.cpp
        https://bugs.webkit.org/show_bug.cgi?id=151169

        Reviewed by Beth Dakin.

        * PlatformEfl.cmake:
        * platform/ContextMenuItemNone.cpp: Removed.
        (WebCore::ContextMenuItem::platformContextMenuItem): Deleted.
        * platform/ContextMenuNone.cpp: Removed.
        (WebCore::ContextMenu::ContextMenu): Deleted.
        (WebCore::ContextMenu::getContextMenuItems): Deleted.
        (WebCore::ContextMenu::createPlatformContextMenuFromItems): Deleted.
        (WebCore::ContextMenu::platformContextMenu): Deleted.

2015-11-11  Anders Carlsson  <andersca@apple.com>

        Remove more dead context menu code
        https://bugs.webkit.org/show_bug.cgi?id=151163

        Reviewed by Tim Horton.

        * loader/EmptyClients.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * platform/ContextMenuItem.h:
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::shareMenuItem): Deleted.

2015-11-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Crash loading Blink layout test fast/parser/strip-script-attrs-on-input.html
        https://bugs.webkit.org/show_bug.cgi?id=150201
        <rdar://problem/23136478>

        Reviewed by Brent Fulgham.

        Test: fast/parser/strip-script-attrs-on-input.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        Get the attribute after calling
        HTMLConstructionSite::insertSelfClosingHTMLElement(), as this may
        mutate the token's attributes.

2015-11-11  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Remove bind usage
        https://bugs.webkit.org/show_bug.cgi?id=151104

        Reviewed by Youenn Fablet.

        Instead of using bind, an inline error function was created.

        Internal rework, no tests needed.

        * Modules/streams/WritableStream.js:
        (error):
        (initializeWritableStream):

2015-11-10  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make indexes actually index.
        https://bugs.webkit.org/show_bug.cgi?id=150939

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/index-1.html
               storage/indexeddb/modern/index-2.html
               storage/indexeddb/modern/index-3.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::hash): Deleted.

        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::isExactlyOneKey):

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::didGetRecordOnServer):

        * Modules/indexeddb/server/IndexValueEntry.cpp: Copied from Source/WebCore/Modules/indexeddb/server/MemoryIndex.cpp.
        (WebCore::IDBServer::IndexValueEntry::IndexValueEntry):
        (WebCore::IDBServer::IndexValueEntry::~IndexValueEntry):
        (WebCore::IDBServer::IndexValueEntry::addKey):
        (WebCore::IDBServer::IndexValueEntry::removeKey):
        (WebCore::IDBServer::IndexValueEntry::getLowest):
        (WebCore::IDBServer::IndexValueEntry::getCount):
        * Modules/indexeddb/server/IndexValueEntry.h: Copied from Source/WebCore/Modules/indexeddb/server/MemoryIndex.h.

        * Modules/indexeddb/server/IndexValueStore.cpp: Added.
        (WebCore::IDBServer::IndexValueStore::IndexValueStore):
        (WebCore::IDBServer::IndexValueStore::lowestValueForKey):
        (WebCore::IDBServer::IndexValueStore::countForKey):
        (WebCore::IDBServer::IndexValueStore::contains):
        (WebCore::IDBServer::IndexValueStore::addRecord):
        (WebCore::IDBServer::IndexValueStore::removeRecord):
        (WebCore::IDBServer::IndexValueStore::removeEntriesWithValueKey):
        (WebCore::IDBServer::IndexValueStore::lowestKeyWithRecordInRange):
        * Modules/indexeddb/server/IndexValueStore.h: Copied from Source/WebCore/Modules/indexeddb/server/MemoryIndex.h.

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreCleared):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::indexCleared):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::addRecord):

        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::create):
        (WebCore::IDBServer::MemoryIndex::MemoryIndex):
        (WebCore::IDBServer::MemoryIndex::objectStoreCleared):
        (WebCore::IDBServer::MemoryIndex::replaceIndexValueStore):
        (WebCore::IDBServer::MemoryIndex::getResultForKeyRange):
        (WebCore::IDBServer::MemoryIndex::countForKeyRange):
        (WebCore::IDBServer::MemoryIndex::putIndexKey):
        (WebCore::IDBServer::MemoryIndex::removeRecord):
        (WebCore::IDBServer::MemoryIndex::removeEntriesWithValueKey):
        (WebCore::IDBServer::MemoryIndex::valueForKeyRange): Deleted.
        * Modules/indexeddb/server/MemoryIndex.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::createIndex):
        (WebCore::IDBServer::MemoryObjectStore::clear):
        (WebCore::IDBServer::MemoryObjectStore::deleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::indexVM):
        (WebCore::IDBServer::indexGlobalExec):
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForDeleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        (WebCore::IDBServer::MemoryObjectStore::indexValueForKeyRange):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::writeTransaction):

        * Modules/indexeddb/shared/IndexKey.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBKeyRangeData.cpp.
        (WebCore::IndexKey::IndexKey):
        (WebCore::IndexKey::isolatedCopy):
        (WebCore::IndexKey::asOneKey):
        (WebCore::IndexKey::multiEntry):
        * Modules/indexeddb/shared/IndexKey.h: Added.
        (WebCore::IndexKey::isNull):

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbValueDataToJSValue):
        (WebCore::deserializeIDBValueBuffer):
        (WebCore::idbKeyDataToScriptValue):
        (WebCore::createKeyPathArray):
        (WebCore::generateIndexKeyForValue):
        * bindings/js/IDBBindingUtilities.h:

2015-11-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Move locale information into FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=147457

        Reviewed by Andreas Kling.

        Currently, the "lang" attribute on a node sets locale information in RenderStyle.
        Font selection is sensitive to this locale information, and occurs deep within
        platform/ code, far away from RenderStyle. Because every RenderStyle owns a
        FontDescription, and font selection can consult with FontDescriptions, it makes
        sense to move the variable from RenderStyle to FontDescription, and provide
        convenience methods on RenderStyle which inspect its FontDescription for locale
        information.

        This patch is in preparation for correctly obeying locale information when
        performing font fallback.

        No new tests because there is no behavior change.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::setLocale):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::locale):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::initialLocale):
        (WebCore::FontDescription::setScript): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Deleted.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Deleted.
        (WebCore::StyleRareInheritedData::operator==): Deleted.
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2015-11-10  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Support an applicationVersion argument to UserAgentEfl::standardUserAgent() 
        https://bugs.webkit.org/show_bug.cgi?id=151060

        Reviewed by Darin Adler.

        *applicationVersion* was missed to support by r192148. This patch adds it as well as
        missed Darin comments are fixed.

        * platform/efl/UserAgentEfl.cpp:
        (WebCore::platformVersionForUAString):
        (WebCore::versionForUAString):
        (WebCore::standardUserAgent):

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

        Use different pixel formats for displays that support them
        https://bugs.webkit.org/show_bug.cgi?id=151122
        rdar://problem/22846841

        Reviewed by Tim Horton.

        Add new IOSurface format enum values, and set up the appropriate IOSurfaceCreate()
        property dictionaries for them.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::IOSurface):
        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-11-10  Brent Fulgham  <bfulgham@apple.com>

        Crash running webaudio/panner-loop.html
        https://bugs.webkit.org/show_bug.cgi?id=150200
        <rdar://problem/23136282>

        Reviewed by Jer Noble.

        Test: webaudio/panner-loop.html

        This is based on the changes in Blink r164822:
        https://codereview.chromium.org/130003002

        Avoid infinitely recursing on audio nodes by keeping track of which nodes we've already
        visited.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::pullInputs): Pass set of visited nodes so we don't revisit
        nodes we've already serviced.
        (WebCore::PannerNode::notifyAudioSourcesConnectedToNode): Accept visitedNodes argument
        so we can avoid revisiting nodes. Check if the current node has already been visited
        before processing it.
        * Modules/webaudio/PannerNode.h:

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

        Adopt formal protocols for CA delegates
        https://bugs.webkit.org/show_bug.cgi?id=151121
        <rdar://problem/6739193>

        Reviewed by Anders Carlsson.

        * platform/graphics/cocoa/WebActionDisablingCALayerDelegate.h:
        Note that our WebActionDisablingCALayerDelegate is, in fact, a CALayerDelegate.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add empty protocol definitions where necessary.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSAccessibilitySPI.h: Added.
        * platform/spi/mac/NSApplicationSPI.h: Added.
        * platform/spi/mac/NSTextFinderSPI.h: Added.
        * platform/spi/mac/NSViewSPI.h: Added.
        Split out SPI headers from WebKit2's AppKitSPI.h.
        Add NSViewSPI to note that NSView is (internally) a CALayerDelegate,
        which WebHTMLView depends on.

2015-11-10  Zalan Bujtas  <zalan@apple.com>

        Continuations with anonymous wrappers inside misplaces child renderers.
        https://bugs.webkit.org/show_bug.cgi?id=150908

        When a child is appended to an inline container and the beforeChild is not a direct child, but 
        it is inside a generated subtree, we need to special case the inline split to form continuation.

        RenderInline::splitInlines() assumes that beforeChild is always a direct child of the current
        inline container. However when beforeChild type requires wrapper content (such as table cells), the DOM and the
        render tree get out of sync. In such cases, we need to ensure that both the beforeChild and its siblings end up
        in the correct generated block.

        Reviewed by Darin Adler and David Hyatt.

        Test: fast/inline/continuation-with-anon-wrappers.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):

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

        alert, confirm, prompt, showModalDialog should be forbidden during page close and navigation
        https://bugs.webkit.org/show_bug.cgi?id=150980

        Reviewed by Chris Dumez.

        Tests: fast/events/beforeunload-alert.html
               fast/events/beforeunload-confirm.html
               fast/events/beforeunload-prompt.html
               fast/events/beforeunload-showModalDialog.html
               fast/events/pagehide-alert.html
               fast/events/pagehide-confirm.html
               fast/events/pagehide-prompt.html
               fast/events/pagehide-showModalDialog.html
               fast/events/unload-alert.html
               fast/events/unload-confirm.html
               fast/events/unload-prompt.html
               fast/events/unload-showModalDialog.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Factored out a helper function for
        unload event processing.
        (WebCore::FrameLoader::handleUnloadEvents): Forbid prompts in unload
        events just like we do in beforeunload events, and for the same reasons.

        (WebCore::FrameLoader::handleBeforeUnloadEvent): Updated for renames.

        * loader/FrameLoader.h:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::alert):
        (WebCore::DOMWindow::confirm):
        (WebCore::DOMWindow::prompt):
        (WebCore::DOMWindow::showModalDialog): Updated for renames. Refactored
        some of this code to handle null pages more cleanly. In particular, we
        sometimes used to treat null page as "everything is permitted" -- but it
        is best practice in a permissions context to treat lack of information
        as no permission granted rather than all permissions granted. (I don't
        know of a way to trigger this condition in practice.)

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::forbidPrompts):
        (WebCore::Page::allowPrompts):
        (WebCore::Page::arePromptsAllowed): Renamed to make these functions
        reflect their new, broader context.

        (WebCore::Page::incrementFrameHandlingBeforeUnloadEventCount): Deleted.
        (WebCore::Page::decrementFrameHandlingBeforeUnloadEventCount): Deleted.
        (WebCore::Page::isAnyFrameHandlingBeforeUnloadEvent): Deleted.

        * page/Page.h:

2015-11-09  David Hyatt  <hyatt@apple.com>

        tate-chu-yoko should shrink to fit when it exceeds the available width.
        <rdar://problem/12130468>
        https://bugs.webkit.org/show_bug.cgi?id=151051

        Reviewed by Myles Maxfield.

        Covered by existing tests

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText):

        When testing for text-combine, find the font variant that is the best fit, i.e.,
        that exceeds the available width by the smallest amount. Scale that best fit down
        repeatedly until it fits within the available space. We set a pixel size of 6 as
        the threshold at which we give up.

        Also make sure to reset glyphOverflow on each measurement, as this was creating
        a potential bug both with variant checking and then with scaling, since glyphOverflow
        isn't reset when width() is invoked.

2015-11-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Tatechuyoko text is not vertically centered in its vertical advance
        https://bugs.webkit.org/show_bug.cgi?id=151074
        <rdar://problem/20074305>

        Reviewed by David Hyatt.

        During paint time, the run origin of tatechuyoko needs to be adjusted to compensate for the
        rotation of the writing mode. The calculation which performed this adjustment was incorrect.

        It is incorrect for two reasons:
        1. It used the existing text origin, which had the font's ascent incorporated in it, but did
        not compensate by either inspecting the overflow bounds' ascent nor the font's ascent proper.
        2. It did not distinguish between the overflow bounds' ascent vs. descent. Instead, it added
        them together and treated both values together.

        No new tests yet. I need to make a font to test this.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::computeTextOrigin):
        (WebCore::RenderCombineText::combineText):
        (WebCore::RenderCombineText::adjustTextOrigin): Deleted.
        * rendering/RenderCombineText.h:

2015-11-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XMLHttpRequestUpload should support ontimeout event handler
        https://bugs.webkit.org/show_bug.cgi?id=128531

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * xml/XMLHttpRequestUpload.idl: Adding ontimeout event handler.

2015-11-10  Zalan Bujtas  <zalan@apple.com>

        Force display: block on ::-webkit-media-controls.
        https://bugs.webkit.org/show_bug.cgi?id=149178
        <rdar://problem/23448397>

        Reviewed by Simon Fraser.

        This patch ensures that we always have a block level container for media controls
        so that continuation never needs to split RenderMedia into multiple subtrees.

        Current inline continuation logic assumes that only inline elements with RenderInline
        type of renderers participate in continuation. This is mostly the case since other inline renderers
        such as RenderReplaced, RenderImage, RenderEmbeddedObject etc can't have (accessible) children.
        (Unlike video::-webkit-media-controls)

        Test: media/webkit-media-controls-display.html

        * Modules/mediacontrols/mediaControlsApple.css:
        (::-webkit-media-controls):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        * css/mediaControls.css:
        (::-webkit-media-controls):

2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use CROSS_PLATFORM_CONTEXT_MENUS
        https://bugs.webkit.org/show_bug.cgi?id=150642

        Reviewed by Martin Robinson.

        Remove GTK+ implementations of old context menu classes.

        * PlatformGTK.cmake:
        * platform/ContextMenuItem.h:
        * platform/gtk/ContextMenuGtk.cpp: Removed.
        * platform/gtk/ContextMenuItemGtk.cpp: Removed.

2015-11-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Fix style issues
        https://bugs.webkit.org/show_bug.cgi?id=151089

        Reviewed by Youenn Fablet.

        Inlined some things, converted var into let and const, removed some undefined parameters and returns, added
        missing "use strict" clauses and other minor style changes.

        Internal rework, no new tests needed.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamController.js:
        (enqueue):
        (error):
        (close):
        * Modules/streams/ReadableStreamInternals.js:
        (teeReadableStream):
        (teeReadableStreamPullFunction):
        (teeReadableStreamBranch2CancelFunction):
        (errorReadableStream):
        (finishClosingReadableStream):
        (closeReadableStreamReader):
        (enqueueInReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (releaseLock):
        * Modules/streams/StreamInternals.js:
        (invokeOrNoop):
        (promiseInvokeOrNoop):
        (promiseInvokeOrFallbackOrNoop):
        (validateAndNormalizeQueuingStrategy):
        (newQueue):
        (dequeueValue):
        (enqueueValueWithSize):
        (peekQueueValue):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):
        (errorWritableStream):
        (callOrScheduleWritableStreamAdvanceQueue):
        (writableStreamAdvanceQueue):
        (closeWritableStream): Deleted.

2015-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix scrollbars/custom-scrollbar-appearance-property.html after r191991.

        Use a similar fix to the mac one.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::centerRectVerticallyInParentInputElement):

2015-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r192200.

        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):

2015-11-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Shield promises when prototype is replaced from a promise
        https://bugs.webkit.org/show_bug.cgi?id=151033

        Reviewed by Darin Adler.

        Instead of calling @then or @catch, that could have disappeared if the user successfully replaces a promise
        constructor, we call the methods stored at @Promise.prototype, which are safe as @Promise.prototype.@then.@call
        and @Promise.prototype.@catch.@call.

        Test: streams/streams-promises.html, expectations updated.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamInternals.js:
        (teeReadableStream):
        (teeReadableStreamPullFunction):
        (teeReadableStreamBranch2CancelFunction):
        (cancelReadableStream):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        * Modules/streams/WritableStreamInternals.js:
        (callOrScheduleWritableStreamAdvanceQueue):

2015-11-10  Jon Lee  <jonlee@apple.com>

        REGRESSION (r189567): Inline controls on Mac are misplaced
        https://bugs.webkit.org/show_bug.cgi?id=151072

        Reviewed by Eric Carlson.

        Test: media/controls/fullscreen-button-inline-layout.html

        For a certain range of video widths, r189567 caused the timeline track to be
        too large, pushing the buttons on the right side of the inline controls out of
        the rect bounds.

        The fix is to set min-width to 0. The test added checks to see that the right
        edge of the fullscreen button is within the rect bounds.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-timeline-container): Add min-width.
        (audio::-webkit-media-controls-panel .thumbnail-track): Ditto. Fly-by fix of height rule.

2015-11-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Add a mock AppleTV device for testing
        https://bugs.webkit.org/show_bug.cgi?id=148912
        <rdar://problem/22596272>

        Reviewed by Tim Horton.

        No new tests, updated media/controls/airplay-picker.html.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerEnabled): New, enable or disable
          the mock picker.
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerState): New, set mock picker state.
        (WebCore::WebMediaSessionManager::mockPicker): New.
        (WebCore::WebMediaSessionManager::targetPicker): Return the platform or mock picker, as per settings.
        (WebCore::webMediaSessionManagerOverride): Deleted.
        (WebCore::WebMediaSessionManager::shared): Deleted.
        (WebCore::WebMediaSessionManager::setWebMediaSessionManagerOverride): Deleted.
        * Modules/mediasession/WebMediaSessionManager.h:

        * WebCore.xcodeproj/project.pbxproj: Add MediaPlaybackTargetPickerMock.* and MediaPlaybackTargetMock.*.

        * page/ChromeClient.h: add setMockMediaPlaybackTargetPickerEnabled and setMockMediaPlaybackTargetPickerState.

        * page/Page.cpp:
        (WebCore::Page::playbackTargetPickerClientStateDidChange):
        (WebCore::Page::setMockMediaPlaybackTargetPickerEnabled): New.
        (WebCore::Page::setMockMediaPlaybackTargetPickerState): New.
        (WebCore::Page::setPlaybackTarget):
        * page/Page.h:

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::noMediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTarget::~MediaPlaybackTarget):
        (WebCore::MediaPlaybackTarget::deviceName):
        (WebCore::MediaPlaybackTarget::MediaPlaybackTarget):

        * platform/graphics/MediaPlaybackTargetContext.h: Make a class instead of a struct.
        (WebCore::MediaPlaybackTargetContext::MediaPlaybackTargetContext):
        (WebCore::MediaPlaybackTargetContext::type):
        (WebCore::MediaPlaybackTargetContext::mockDeviceName):
        (WebCore::MediaPlaybackTargetContext::mockState):
        (WebCore::MediaPlaybackTargetContext::avOutputContext):
        (WebCore::MediaPlaybackTargetContext::encodingRequiresPlatformData):

        * platform/graphics/MediaPlaybackTargetPicker.cpp: Move much of the code from MediaPlaybackTargetMac.mm
          here so it can be the base class.
        (WebCore::MediaPlaybackTargetPicker::MediaPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPicker::~MediaPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPicker::pendingActionTimerFired):
        (WebCore::MediaPlaybackTargetPicker::addPendingAction):
        (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker):
        * platform/graphics/MediaPlaybackTargetPicker.h:
        (WebCore::MediaPlaybackTargetPicker::availableDevicesDidChange):
        (WebCore::MediaPlaybackTargetPicker::currentDeviceDidChange):
        (WebCore::MediaPlaybackTargetPicker::client):
        (WebCore::MediaPlaybackTargetPicker::setClient):

        * platform/graphics/avfoundation/MediaPlaybackTargetMac.h:
        (WebCore::MediaPlaybackTargetMac::outputContext):
        (WebCore::MediaPlaybackTargetMac::targetType): Deleted.
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        (WebCore::MediaPlaybackTargetMac::targetContext):
        (WebCore::MediaPlaybackTargetMac::hasActiveRoute):
        (WebCore::MediaPlaybackTargetMac::deviceName):

        * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:
        (WebCore::WebMediaSessionManager::shared): Renamed from platformManager.
        (WebCore::WebMediaSessionManagerMac::platformPicker): Renamed from targetPicker.
        (WebCore::WebMediaSessionManager::platformManager): Deleted.
        (WebCore::WebMediaSessionManagerMac::targetPicker): Deleted.
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.h:

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMac::playbackTarget):
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Deleted.
        (WebCore::MediaPlaybackTargetPickerMac::availableDevicesDidChange): Deleted.
        (WebCore::MediaPlaybackTargetPickerMac::addPendingAction): Deleted.
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Deleted.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless): Add support for
          mock target.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Ditto.

        * platform/mock/MediaPlaybackTargetMock.cpp: Added.
        (WebCore::MediaPlaybackTargetMock::create): 
        (WebCore::MediaPlaybackTargetMock::MediaPlaybackTargetMock):
        (WebCore::MediaPlaybackTargetMock::~MediaPlaybackTargetMock):
        (WebCore::MediaPlaybackTargetMock::targetContext):
        (WebCore::toMediaPlaybackTargetMock):
        * platform/mock/MediaPlaybackTargetMock.h: Added.

        * platform/mock/MediaPlaybackTargetPickerMock.cpp: Added.
        (WebCore::MediaPlaybackTargetPickerMock::create):
        (WebCore::MediaPlaybackTargetPickerMock::MediaPlaybackTargetPickerMock):
        (WebCore::MediaPlaybackTargetPickerMock::~MediaPlaybackTargetPickerMock):
        (WebCore::MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMock::playbackTarget):
        (WebCore::MediaPlaybackTargetPickerMock::timerFired):
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::stopMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::invalidatePlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMock::setState):
        * platform/mock/MediaPlaybackTargetPickerMock.h: Added.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setMockMediaPlaybackTargetPickerEnabled):
        (WebCore::Internals::setMockMediaPlaybackTargetPickerState):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the windows build

        Update the signature of scrollableAreaBoundingBox, changed by r192193.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollableAreaBoundingBox):
        * platform/win/PopupMenuWin.h:

2015-11-09  Simon Fraser  <simon.fraser@apple.com>

        Allow iOS to create linearRGB colorspaces
        https://bugs.webkit.org/show_bug.cgi?id=151059

        Reviewed by Tim Horton.

        Remove iOS #ifdefs around code that creates linearized RGB colorspaces, as used
        by SVG filters. Blending doesn't actually work correctly, but there's no reason
        to #ifdef differently here.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::linearRGBColorSpaceRef):

2015-11-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Sometimes unable to scroll fixed div when the body is scrollable
        https://bugs.webkit.org/show_bug.cgi?id=151015
        <rdar://problem/23445723>

        Reviewed by Simon Fraser.

        Currently, if we scroll a page containing a fixed scrollable area, the non-fast-scrollable region corresponding to a fixed
        area will not move down to reflect its new bounds in absolute coordinates, making it impossible to scroll position: fixed
        overflow elements when the body's scroll position changes. To fix this, we inflate the non-fast-scrollable region
        corresponding to scrollable position: fixed elements such that their regions encompass the area, relative to the page,
        wherein the fixed element may lie when the page is scrolled by any amount within its scroll limits.

        We also optimize the non-fast-scrollable regions emitted by elements that handle wheel events. Currently, if a fixed element
        also has a wheel event handler, we take the entire document's rect to be non-fast-scrollable. This patch changes this region
        to behave the same way as fixed scrollable elements above.

        This patch also folds some common logic used to accomplish this into FrameView for use by RenderLayerCompositor and RenderView.

        Test: tiled-drawing/scrolling/non-fast-region/fixed-div-in-scrollable-page.html

        * page/FrameView.cpp:
        (WebCore::FrameView::fixedScrollableAreaBoundsInflatedForScrolling):
        (WebCore::FrameView::scrollOffsetRespectingCustomFixedPosition):
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteNonFastScrollableRegionForFrame):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollableAreaBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollableAreaBoundingBox):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeExtent):
        (WebCore::fixedPositionOffset): Deleted.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::pushMappingToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::fixedPositionOffset): Deleted.

2015-11-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r192181.

        This change causes asserts on mac-wk1 debug testers

        Reverted changeset:

        "Fixed crash loading Mozilla layout test
        editor/libeditor/crashtests/431086-1.xhtml."
        https://bugs.webkit.org/show_bug.cgi?id=150252
        http://trac.webkit.org/changeset/192181

2015-11-09  Jiewen Tan  <jiewen_tan@apple.com>

        Crash when right clicking in input box with -webkit-user-select: none
        https://bugs.webkit.org/show_bug.cgi?id=145981
        <rdar://problem/22441925>

        Reviewed by Enrica Casucci.

        Test: editing/selection/minimal-user-select-crash.html

        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        Visible position cannot be created because of the style that doesn't allow the selection.

2015-11-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: $0 stops working after navigating to a different domain
        https://bugs.webkit.org/show_bug.cgi?id=147962

        Reviewed by Brian Burg.

        Test: http/tests/inspector/console/cross-domain-inspected-node-access.html

        The inspector backend injects the CommandLineAPI Source with a
        corresponding CommandLineAPIHost into each execution context
        created by the page (main frame, sub frames, etc).

        When creating the JSValue wrapper for the CommandLineAPIHost using
        the generated toJS(...) DOM bindings, we were using the cached
        CommandLineAPIHost wrapper values in the single DOMWrapperWorld shared
        across all frames. This meant that the first time the wrapper was
        needed it was created in context A. But when needed for context B
        it was using the wrapper created in context A. Using this wrapper
        in context B was producing unexpected cross-origin warnings.

        The solution taken here, is to create a new JSValue wrapper for
        the CommandLineAPIHost per execution context. This way each time
        the CommandLineAPIHost wrapper is used in a frame, it is using
        the one created for that frame.

        The C++ host object being wrapped has a lifetime equivalent to
        the Page. It does not change in this patch. The wrapper values
        are cleared on page navigation or when the page is closed, and
        will be garbage collected.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * ForwardingHeaders/inspector/PerGlobalObjectWrapperWorld.h: Added.
        New forwarding header.

        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::wrapper):
        Cached JSValue wrappers per GlobalObject.

        (WebCore::CommandLineAPIHost::clearAllWrappers):
        Clear any wrappers we have, including the $0 value itself
        which we weren't explicitly clearing previously.

        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::host):
        Simplify creating the wrapper.

        * inspector/WebInjectedScriptManager.h:
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::discardInjectedScripts):
        When the main frame window object clears, also clear the
        CommandLineAPI wrappers we may have created. Also take this
        opportunity to clear any $0 value that may have pointed
        to a value in the previous page.

2015-11-09  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo][Video][MediaFoundation] Video should be rendered in provided graphics context.
        https://bugs.webkit.org/show_bug.cgi?id=150941

        Reviewed by Brent Fulgham.

        On WinCairo, we currently render video in a child window of the main browser window.
        This makes it difficult to render things on top of the video, like video controls and
        context menus. We should render the video in the graphics context provided by the paint
        method. This is done by implementing a custom EVR (Enhanced Video Renderer) presenter
        for Media Foundation.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (MFCreateMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaFoundation::isAvailable):
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::paint):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::createVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::destroyVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::invalidateFrameView):
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::createOutputNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySet):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::CustomVideoPresenter):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::~CustomVideoPresenter):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::QueryInterface):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::AddRef):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::Release):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockStop):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockPause):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockRestart):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::OnClockSetRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ProcessMessage):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetCurrentMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetDeviceID):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::InitServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ReleaseServicePointers):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetService):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ActivateObject):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::DetachObject):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::ShutdownObject):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoWindow):
        (WebCore::setMixerSourceRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetVideoPosition):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::RepaintVideo):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::onMediaPlayerDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::paintCurrentFrame):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::isActive):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::configureMixer):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::flush):
        (WebCore::areMediaTypesEqual):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::setMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::checkShutdown):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::renegotiateMediaType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
        (WebCore::MFOffsetToFloat):
        (WebCore::MakeOffset):
        (WebCore::MakeArea):
        (WebCore::validateVideoArea):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::beginStreaming):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::endStreaming):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::checkEndOfStream):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::isMediaTypeSupported):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::createOptimalVideoType):
        (WebCore::correctAspectRatio):
        (WebCore::GetVideoDisplayArea):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::calculateOutputRectangle):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processOutputLoop):
        (WebCore::setDesiredSampleTime):
        (WebCore::clearDesiredSampleTime):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processOutput):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::deliverSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::trackSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::releaseResources):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::onSampleFree):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::notifyEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::getSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::returnSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::areSamplesPending):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::initialize):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::clear):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::setFrameRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::startScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::stopScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::flush):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::scheduleSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSamplesInQueue):
        (WebCore::MFTimeToMilliseconds):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::processSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::schedulerThreadProc):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::schedulerThreadProcPrivate):
        (WebCore::findAdapter):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::Direct3DPresenter):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::~Direct3DPresenter):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getService):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::checkFormat):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::setDestinationRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createVideoSamples):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::releaseResources):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::checkDeviceState):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::initializeD3D):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DDevice):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::createD3DSample):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::presentSwapChain):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getSwapChainPresentParameters):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::updateDestRect):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::VideoSamplePool):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoSamplePool::~VideoSamplePool):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::VideoScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::~VideoScheduler):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::setPresenter):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::setClockRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::lastSampleTime):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoScheduler::frameDuration):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::getDestinationRect):
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::refreshRate):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetItem):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetItemType):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::CompareItem):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::Compare):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetUINT32):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetUINT64):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetDouble):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetGUID):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetStringLength):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetString):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetAllocatedString):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetBlobSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetBlob):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetAllocatedBlob):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetUnknown):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetItem):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::DeleteItem):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::DeleteAllItems):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetUINT32):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetUINT64):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetDouble):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetGUID):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetString):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetBlob):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetUnknown):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::LockStore):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::UnlockStore):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetCount):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetItemByIndex):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::CopyAllItems):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetNativeVideoSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetIdealVideoSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetAspectRatioMode):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetAspectRatioMode):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetCurrentImage):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetBorderColor):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetBorderColor):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetRenderingPrefs):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetRenderingPrefs):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::SetFullscreen):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetFullscreen):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::GetParameters):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::isScrubbing):

2015-11-09  Alex Christensen  <achristensen@webkit.org>

        XHR timeouts should not fire if there is an immediate network error.
        https://bugs.webkit.org/show_bug.cgi?id=150577

        Reviewed by Darin Adler.

        This fixes flakiness of http/tests/contentextensions/async-xhr-onerror.html since r191077.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::didFinishLoading):
        If the timeout timer has been started and we are going to immediately report a network error, then stop the timeout timer.
        The timeout timer sometimes fired before the network error timer if it was a very short timeout (such as 1ms).
        Also checks to isActive before calling stop on a timer are not necessary.

2015-11-09  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add mock audio and video sources
        https://bugs.webkit.org/show_bug.cgi?id=150997
        <rdar://problem/23453358>

        Reviewed by Jer Noble.

        Create basic mock audio and video realtime media source classes so we can test MediaStream
        API without requiring test machines to have audio/video input hardware. No new tests added
        yet, thoe will follow.

        No new tests, these changes will allow us to write MediaStream tests.

        * CMakeLists.txt: Add MockRealtimeAudioSource.cpp, MockRealtimeMediaSource.cpp, and 
          MockRealtimeVideoSource.cpp

        * PlatformMac.cmake: Add MockRealtimeVideoSourceMac.mm

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Don't set autoresizingMask,
          it isn't necessary.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::refreshCaptureDeviceList): AVCaptureDevice -> getAVCaptureDeviceClass()
        (WebCore::AVCaptureDeviceManager::bestDeviceForFacingMode): Ditto.
        (WebCore::AVCaptureDeviceManager::sourceWithUID): Ditto.

        Mac class implements RealtimeVideoSource::platformLayer, returns a CALayer which uses the
        GraphicsContext as contents.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h: Added.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: Added.
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        (WebCore::MockRealtimeVideoSourceMac::platformLayer):
        (WebCore::MockRealtimeVideoSourceMac::updatePlatformLayer):

        Mock audio source. Doesn't provide data yet, only provides states and capabilities.
        * platform/mock/MockRealtimeAudioSource.cpp: Added.
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
        (WebCore::MockRealtimeAudioSource::updateStates):
        (WebCore::MockRealtimeAudioSource::initializeCapabilities):
        * platform/mock/MockRealtimeAudioSource.h: Added.
        (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):

        Mock source base class, sets persistent ID and updates states and capabilities.
        * platform/mock/MockRealtimeMediaSource.cpp: Added.
        (WebCore::MockRealtimeMediaSource::mockAudioPersistentID):
        (WebCore::MockRealtimeMediaSource::mockVideoPersistentID):
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        (WebCore::MockRealtimeMediaSource::capabilities):
        (WebCore::MockRealtimeMediaSource::states):
        * platform/mock/MockRealtimeMediaSource.h: Added.
        (WebCore::MockRealtimeMediaSource::mockAudioSourcePersistentID):
        (WebCore::MockRealtimeMediaSource::mockAudioSourceName):
        (WebCore::MockRealtimeMediaSource::mockVideoSourcePersistentID):
        (WebCore::MockRealtimeMediaSource::mockVideoSourceName):
        (WebCore::MockRealtimeMediaSource::trackSourceWithUID):
        (WebCore::MockRealtimeMediaSource::~MockRealtimeMediaSource):
        (WebCore::MockRealtimeMediaSource::currentStates):
        (WebCore::MockRealtimeMediaSource::constraints):

        Use new mock source classes. Create a new source instance for each request instead of reusing the
        same sources each time.
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::mockSourceMap):
        (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter):
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):
        (WebCore::MockSource::MockSource): Deleted.
        (WebCore::MockSource::~MockSource): Deleted.
        (WebCore::MockSource::capabilities): Deleted.
        (WebCore::MockSource::states): Deleted.
        (WebCore::mockAudioSourceID): Deleted.
        (WebCore::mockVideoSourceID): Deleted.
        (WebCore::initializeMockSources): Deleted.

        Mock video source. Generate bip-bop inspired frames with burned in state information.
        * platform/mock/MockRealtimeVideoSource.cpp: Added.
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::startProducingData):
        (WebCore::MockRealtimeVideoSource::stopProducingData):
        (WebCore::MockRealtimeVideoSource::elapsedTime):
        (WebCore::MockRealtimeVideoSource::updateStates):
        (WebCore::MockRealtimeVideoSource::initializeCapabilities):
        (WebCore::MockRealtimeVideoSource::setFacingMode):
        (WebCore::MockRealtimeVideoSource::setFrameRate):
        (WebCore::MockRealtimeVideoSource::setSize):
        (WebCore::MockRealtimeVideoSource::drawAnimation):
        (WebCore::MockRealtimeVideoSource::drawBoxes):
        (WebCore::MockRealtimeVideoSource::drawText):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        (WebCore::MockRealtimeVideoSource::imageBuffer):
        (WebCore::MockRealtimeVideoSource::paintCurrentFrameInContext):
        (WebCore::MockRealtimeVideoSource::currentFrameImage):
        * platform/mock/MockRealtimeVideoSource.h: Added.
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::size):
        (WebCore::MockRealtimeVideoSource::updatePlatformLayer):

2015-11-09  Nan Wang  <n_wang@apple.com>

        AX: Input type: time is not accessible on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150984

        Reviewed by Chris Fleizach.

        Exposed input type: time as popup button on iOS.

        Test: accessibility/ios-simulator/input-type-time.html

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

2015-11-09  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/inserting/insert-html-crash-01.html
        https://bugs.webkit.org/show_bug.cgi?id=149298
        <rdar://problem/22746918>

        Reviewed by Ryosuke Niwa.

        The test crashes in the method WebCore::CompositeEditCommand::moveParagraphs() because
        the other method WebCore::CompositeEditCommand::cleanupAfterDeletion() accidentally
        deletes the destination node. In WebCore::CompositeEditCommand::cleanupAfterDeletion(),
        it fails to determine that caretAfterDelete equals to destination as Position::operator==,
        which is called in VisiblePosition::operator==, only checks the equality of tuple
        <Anchor Node, Anchor Type, Offset>. It is insufficient as a single position can be
        represented by multiple tuples. Therefore, this change adds Position::equals() to fortify
        the equal checking of two positions by considering combinations of different tuple
        representations.

        Furthermore, it adds VisiblePosition::equals() which considers affinity and call
        Position::equals() while comparing two visible positions.

        Test: editing/inserting/insert-html-crash-01.html

        * dom/Position.cpp:
        (WebCore::Position::equals):
        * dom/Position.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cleanupAfterDeletion):
        Replace operator== with VisiblePosition::equals() to tackle the test case.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::equals):
        * editing/VisiblePosition.h:

2015-11-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Some style changes cause tatechuyoko to be drawn off center
        https://bugs.webkit.org/show_bug.cgi?id=150986
        <rdar://problem/20748013>

        Reviewed by Darin Adler.

        Layouts should be idempotent. In particular, during layout, an element should not
        rely on a previous call to styleDidChange() with a sufficiently high StyleDifference.
        RenderCombineText was assuming that, if a layout occurs, a previous call to
        styleDidChange() would have reset the renderedText. However, an ancestor element might
        cause the RenderCombineText to re-combine when it is already combined. Therefore, the
        recombination should fully uncombine before recombining.

        Test: fast/text/text-combine-style-change-extra-layout.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText): Fully uncombine before recombining.

2015-11-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Recognize context flush as an event that requires an update
        https://bugs.webkit.org/show_bug.cgi?id=151001
        <rdar://problem/22956040>

        Reviewed by Simon Fraser.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::flushContext): Mark view as needing an update
        when flushing so internal drawing code will do the paint.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer): Skip WK2 assert that does
        not apply to Windows drawing path.

2015-11-09  Brady Eidson  <beidson@apple.com>

        Modern IDB: Refactor memory objectstore/transaction interation.
        https://bugs.webkit.org/show_bug.cgi?id=151014

        Reviewed by Darin Adler.

        No new tests (Refactor, no change in behavior).

        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::addRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::putRecord): Deleted. Renamed to addRecord.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::deleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::putRecord): Deleted. Renamed to addRecord.
        (WebCore::IDBServer::MemoryObjectStore::setKeyValue): Deleted. Folded into addRecord.
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):

2015-11-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r190883): Error calculating the tile size for an SVG with no intrinsic size but with large floating intrinsic ratio
        https://bugs.webkit.org/show_bug.cgi?id=150904

        Reviewed by Darin Adler.
        
        This patch addresses two issues. The first one is a regression from r190883
        which was rolling out r184895. There was a missing if-statement in 
        RenderBoxModelObject::calculateImageIntrinsicDimension(). We should return
        it back. But this if-statement is an optimization; if we hit it we should
        return the image resolvedSize. But we should also return the same result
        if we call resolveAgainstIntrinsicWidthOrHeightAndRatio().
        
        We had a bug in resolving the intrinsic size of an image using a large
        intrinsic ratio. We need to do the calculation in LayoutUnits always.
        Using float calculations and then casting the output to an integer results
        in significant truncation if the intrinsic ratio is large.

        Test: fast/backgrounds/background-image-large-float-intrinsic-ratio.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::resolveWidthForRatio):
        (WebCore::resolveHeightForRatio):
        (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
        (WebCore::resolveAgainstIntrinsicRatio):
        Resolve the image size using its intrinsic ratio in LayoutUnits.
        
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        Put back an if-statement which was missing from rolling out r184895

2015-11-09  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Activate assertions
        https://bugs.webkit.org/show_bug.cgi?id=151021

        Reviewed by Darin Adler.

        Activating assertions in streams API.
        Fixing a bug in ReadableStream implementation: when pull promise is rejected,
        the readable stream may already be errored by some other means.

        Covered by existing test sets in Debug builds.

        * Modules/streams/ReadableStreamInternals.js:
        (teeReadableStream):
        (teeReadableStreamPullFunction):
        (errorReadableStream):
        (requestReadableStreamPull):
        (finishClosingReadableStream):
        (closeReadableStream):
        (enqueueInReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (cancel):
        * Modules/streams/StreamInternals.js:
        (peekQueueValue):
        * Modules/streams/WritableStream.js:
        (write):
        (state):
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):
        (closeWritableStream): Deleted.

2015-11-09  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Shield implementation from mangling then and catch promise methods
        https://bugs.webkit.org/show_bug.cgi?id=150934

        Reviewed by Youenn Fablet.

        This is a first step to get streams code shielded from user replacing the then and catch methods in our
        promises. We use newly introduced @then and @catch prototype internal slots and that should solve a lot of use
        cases.

        Test: streams/streams-promises.html.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamInternals.js:
        (teeReadableStream):
        (teeReadableStreamPullFunction):
        (cancelReadableStream):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        * Modules/streams/WritableStreamInternals.js:
        (callOrScheduleWritableStreamAdvanceQueue):

2015-11-09  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Refactor cachedGridCoordinate() to cachedGridSpan()
        https://bugs.webkit.org/show_bug.cgi?id=151017

        Reviewed by Sergio Villar Senin.

        We were using cachedGridCoordinate() in lots of places and checking the
        direction just in the next line. Creating a generic function to do this.

        No new tests, no behavior change.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::GridItemWithSpan::GridItemWithSpan):
        (WebCore::GridItemWithSpan::span):
        (WebCore::GridItemWithSpan::operator<):
        (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::cachedGridSpan):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::GridItemWithSpan::gridItem): Deleted.
        (WebCore::RenderGrid::populateGridPositions): Deleted.
        * rendering/RenderGrid.h:

2015-11-09  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        JS Built-ins functions should be able to assert
        https://bugs.webkit.org/show_bug.cgi?id=150333

        Reviewed by Yusuke Suzuki.

        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader): Activating an @assert.

2015-11-02  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Improve grid container sizing with size constraints and intrinsic sizes
        https://bugs.webkit.org/show_bug.cgi?id=150679

        Reviewed by Darin Adler.

        The grid container stores from now on its min-content and
        max-content block sizes in order to be able to properly
        compute its intrinsic size. It has to redefine
        computeIntrinsicLogicalContentHeightUsing() because the
        behavior of grid is different to "normal" blocks:

        - the min-content size is the sum of the grid container's
        track sizes in the appropiate axis when the grid is sized
        under a min-content constraint.
        - the max-content size is the sum of the grid container's
        track sizes in the appropiate axis when the grid is sized
        under a max-content constraint.
        - the auto block size is the max-content size.

        A nice side effect is that we can now properly detect whether
        the grid has a definite size on a given axis or not.

        Tests: fast/css-grid-layout/absolute-positioning-definite-sizes.html
               fast/css-grid-layout/flex-and-intrinsic-sizes.html
               fast/css-grid-layout/maximize-tracks-definite-indefinite-height.html
               fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html

        * rendering/RenderBox.h: made
        computeIntrinsicLogicalContentHeightUsing() virtual.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::GridSizingData::freeSpaceForDirection):
        (WebCore::RenderGrid::GridSizingData::setFreeSpaceForDirection):
        (WebCore::RenderGrid::computeTrackBasedLogicalHeight):
        (WebCore::RenderGrid::computeTrackSizesForDirection):
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeIntrinsicLogicalHeight):
        (WebCore::RenderGrid::computeIntrinsicLogicalContentHeightUsing):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::RenderGrid::gridElementIsShrinkToFit): Deleted.
        * rendering/RenderGrid.h:

2015-11-05  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Grid placement conflict handling
        https://bugs.webkit.org/show_bug.cgi?id=150891

        Reviewed by Darin Adler.

        If the placement for a grid item contains two lines, and the
        start line is further end-ward than the end line, swap the two
        lines. If the start line is equal to the end line, remove the
        end line.

        Test: fast/css-grid-layout/swap-lines-if-start-is-further-endward-than-end-line.html

        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::resolveNamedGridLinePositionFromStyle):
        (WebCore::resolveGridPositionFromStyle):
        (WebCore::GridResolvedPosition::GridResolvedPosition):
        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle):
        (WebCore::adjustGridPositionForSide): Deleted.
        * rendering/style/GridResolvedPosition.h:
        (WebCore::GridResolvedPosition::prev):

2015-11-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Add UserAgentEFl.cpp|h
        https://bugs.webkit.org/show_bug.cgi?id=151007

        Reviewed by Darin Adler.

        As other ports EFL port starts to have UserAgentEfl class in order to support more detailed
        UA.

        No new tests, no behavior change.

        * PlatformEfl.cmake:
        * platform/efl/UserAgentEfl.cpp: Added.
        (WebCore::platformForUAString):
        (WebCore::platformVersionForUAString):
        (WebCore::versionForUAString):
        (WebCore::standardUserAgent):
        * platform/efl/UserAgentEfl.h: Added.

2015-11-08  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r192140): Windows build broke after removing ColorSpace argument to all drawing calls
        <http://webkit.org/b/150967>

        Unreviewed attempt to fix the Windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::drawTextAtPoint):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):

2015-11-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        generate-js-builtins.js should support @internal annotation
        https://bugs.webkit.org/show_bug.cgi?id=150929

        Reviewed by Darin Adler.

        No change in behavior.

        * Modules/streams/ReadableStreamInternals.js: Renamed @internals to @internal.
        * Modules/streams/StreamInternals.js: Ditto.
        * Modules/streams/WritableStreamInternals.js: Ditto.

2015-11-07  Simon Fraser  <simon.fraser@apple.com>

        Remove ColorSpace argument to all the drawing calls
        https://bugs.webkit.org/show_bug.cgi?id=150967

        Reviewed by Darin Adler.

        Since the -webkit-color-correction CSS property was removed in r188202, and ColorSpaceDeviceRGB
        and ColorSpaceSRGB are functionally equivalent, we can remove all the ColorSpace arguments passed
        to drawing functions, and remove RenderStyle::colorSpace(), which was hardcoded to return ColorSpaceSRGB.
        
        Fill and stroke ColorSpaces are also remove from graphics state, simplifying color save/restore.
        
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret):
        * editing/cocoa/HTMLConverter.mm:
        (_platformColor):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawImageIntoBuffer):
        * page/DebugPageOverlays.cpp:
        (WebCore::RegionOverlay::drawRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        (WebCore::FrameView::paintScrollbar):
        (WebCore::FrameView::paintContents):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolAllPagesWithBoundaries):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintPanScrollIcon):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::defaultPaintScrollCorner):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner):
        (WebCore::ScrollbarThemeComposite::paintOverhangAreas):
        * platform/Theme.cpp:
        (WebCore::Theme::drawNamedImage):
        * platform/cocoa/ThemeCocoa.cpp:
        (WebCore::ThemeCocoa::drawNamedImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawRaisedEllipse):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::setLegacyShadow):
        (WebCore::GraphicsContext::getShadow):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::clearShadow): Deleted.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::strokeColorSpace): Deleted.
        (WebCore::GraphicsContext::fillColorSpace): Deleted.
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::drawFrameMatchingSourceSize):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::setCachedShadowValues):
        (WebCore::ScratchBuffer::setCachedInsetShadowValues):
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::ShadowBlur::setShadowValues):
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
        (WebCore::ShadowBlur::beginShadowLayer):
        (WebCore::ShadowBlur::endShadowLayer):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToImage): Deleted.
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerPaintContents):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters):
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::leakCGColor):
        (WebCore::cachedCGColor):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setCGFillColor):
        (WebCore::setCGStrokeColor):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::drawLinesForText):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::sRGBColorSpaceRef): Deleted.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::Image::imageWithColorSpace): Deleted.
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/ios/IconIOS.mm:
        (WebCore::Icon::paint):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::drawLayer):
        * platform/ios/LegacyTileGridTile.mm:
        (WebCore::LegacyTileGridTile::showBorder):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::didSetupFullscreen):
        * platform/mac/DragImageMac.mm:
        (WebCore::drawAtPoint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaBackground):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::paintCurrentFrameInContext):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        (WebCore::ScrollbarThemeMock::paintThumb):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintClippingMask):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::drawLineForBoxSide):
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::drawPlatformResizerImage):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeIOS.mm:
        (WebCore::drawAxialGradient):
        (WebCore::drawRadialGradient):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::titleTextColorForAttachment):
        (WebCore::AttachmentLayout::layOutSubtitle):
        (WebCore::paintAttachmentIconBackground):
        (WebCore::paintAttachmentTitleBackground):
        (WebCore::paintAttachmentProgress):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineSelectionGap):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::TextPaintStyle):
        (WebCore::adjustColorForVisibilityOnBackground):
        (WebCore::computeTextPaintStyle):
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:
        (WebCore::TextPaintStyle::TextPaintStyle):
        * rendering/TextPainter.cpp:
        (WebCore::ShadowApplier::ShadowApplier):
        (WebCore::paintTextWithShadows):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paint):
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::paint):
        * rendering/style/RenderStyle.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::useStrokeStyleToFill):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        (WebCore::SVGRenderingContext::bufferForeground):
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::drawPatternForContainer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::drawRect):

2015-11-07  Simon Fraser  <simon.fraser@apple.com>

        Use ColorSpaceSRGB for image buffers everywhere
        https://bugs.webkit.org/show_bug.cgi?id=150990

        Reviewed by Zalan Bujtas.

        ColorSpaceSRGB and ColorSpaceDeviceRGB are equivalent now, so convert
        code that creates image buffers tagged with ColorSpaceDeviceRGB to use ColorSpaceSRGB.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::Color):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef): Deleted.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createFromImage):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::apply):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2015-11-07  Zalan Bujtas  <zalan@apple.com>

        Crash when subtree layout is set on FrameView while auto size mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=150995
        rdar://problem/22785262

        Reviewed by Beth Dakin.

        Autosizing initiates multiple synchronous layouts to calculate preferred view width for current content.
        FrameView::autoSizeIfEnabled() is called from FrameView::layout() while we are in InPreLayout state.
        It is safe to do during full layout.
        However, since we setup the subtree state just before the autoSizeIfEnabled() call, reentering it with
        a newly issued layout confuses SubtreeLayoutStateMaintainer.

        This patch reverses the order of autoSizeIfEnabled() call and the subtree layout state setup.
        It also ensures that the first layout requested by autoSizeIfEnabled() always runs on the whole tree.  

        Test: fast/dynamic/crash-subtree-layout-when-auto-size-enabled.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::convertSubtreeLayoutToFullLayout):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::enableAutoSizeMode):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-11-07  Chris Dumez  <cdumez@apple.com>

        embed element without src and type attributes should represent nothing
        https://bugs.webkit.org/show_bug.cgi?id=148853
        <rdar://problem/22588235>

        Reviewed by Zalan Bujtas.

        As per the HTML specification, an embed element without src and type
        attributes should represent nothing:
        https://html.spec.whatwg.org/multipage/embedded-content.html#the-embed-element

        This patch fixes the issue by making sure we don't construct a
        renderer for such embed elements.

        The new behavior is consistent with Firefox but differs from Chrome.

        No new tests, already covered by existing tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):

2015-11-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Node.h:392:12: warning: 'this' pointer cannot be null in well-defined C++ code
        https://bugs.webkit.org/show_bug.cgi?id=150996

        Reviewed by Andreas Kling.

        Remove ASSERT(this) statement that is triggering hundreds of warnings from Clang.

        * dom/Node.h:
        (WebCore::Node::document):

2015-11-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix GTK build after r191981

        * html/HTMLFormControlElement.cpp:

2015-11-06  Scott Valentine  <svalentine@ikayzo.com>

        Allow an optional hash algorithm to be passed to generateKey for RSA keys.
        https://bugs.webkit.org/show_bug.cgi?id=144938

        Reviewed by Alexey Proskuryakov.

        Test: crypto/subtle/rsa-export-generated-keys.html

        This changeset allows an optional hash parameter to be passed to the generate
        key function for RSA type keys. Previously, there was no way to export generated
        keys, as no hash function could be associated with the key (required for JWK).

        The current WebCrypto API draft requires the hash function to be specified in the
        algorithm object passed to generateKey (http://www.w3.org/TR/WebCryptoAPI 20.4),
        however, they were made optional in this implementation to maintain compatiblity.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getHashAlgorithm):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::createRsaKeyGenParams):
        (WebCore::createRsaOaepParams):
        (WebCore::createRsaSsaParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Deleted.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readRSAKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::restrictToHash): Deleted.
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::generatePair):
        (WebCore::CryptoKeyRSA::restrictToHash): Deleted.
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:

2015-11-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scrolling iframe inside scrollable div does not work with trackpad
        https://bugs.webkit.org/show_bug.cgi?id=150168
        <rdar://problem/23143931>

        Reviewed by Brent Fulgham.

        When scrolling in an iframe nested under an overflow scrolling region, EventHandler::platformPrepareForWheelEvents
        fails to compute the correct scrollableArea, using the overflow div's scrollable area instead of the iframe's view.
        This causes the latching algorithm to bail out of handling the wheel event. To avoid this, we special-case the
        decision to compute the scrollableArea from the scrollableContainer if we are attempting to scroll in an iframe.

        Test: fast/scrolling/latching/scroll-iframe-in-overflow.html

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents):

2015-11-06  Brady Eidson  <beidson@apple.com>

        Modern IDB: Make the result data for a "get" request be an IDBGetResult.
        https://bugs.webkit.org/show_bug.cgi?id=150985

        Reviewed by Alex Christensen.

        No new tests (Refactor, no change in behavior).

        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::IDBGetResult):
        (WebCore::IDBGetResult::dataFromBuffer):
        (WebCore::IDBGetResult::isolatedCopy):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::didGetRecordOnServer):
        
        * Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getIndexRecord):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::valueForKeyRange):
        * Modules/indexeddb/server/MemoryIndex.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::indexValueForKeyRange):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetIndexRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformGetRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetResultCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performValueDataCallback): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::getRecordSuccess):
        (WebCore::IDBResultData::getResult):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::resultData): Deleted.

2015-11-06  Chris Dumez  <cdumez@apple.com>

        Remove unused HTMLFormControlsCollection::namedItem()
        https://bugs.webkit.org/show_bug.cgi?id=150975

        Reviewed by Andreas Kling.

        Remove unused HTMLFormControlsCollection::namedItem().
        JSHTMLFormControlsCollection::namedItem() calls namedItems() on the
        implementation object, not namedItem() because it returns a
        RadioNodeList when there are several matches.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::firstNamedItem): Deleted.
        (WebCore::HTMLFormControlsCollection::namedItem): Deleted.
        * html/HTMLFormControlsCollection.h:

2015-11-06  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r182286): Tatechuyoko following ruby is drawn too far to the right
        https://bugs.webkit.org/show_bug.cgi?id=150923

        Reviewed by Zalan Bujtas.

        Ever since r182286, expansion opportunities in justified ruby were moved to their neighboring
        elements (thereby forbidding trailing nor leading expansions inside ruby). However, when the
        neighboring element is tatechuyoko, we will erroneously honor the expansion opportunity inside
        the tatechuyoko, thereby moving it horizontally.

        Tatechuyoko should never have expansion opportunities inside it.

        Test: fast/text/ruby-justify-tatechuyoko.html

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

2015-11-06  Mario Sanchez Prada  <mario@endlessm.com>

        Layout Test accessibility/win/linked-elements.html is crashing on win debug
        https://bugs.webkit.org/show_bug.cgi?id=150944

        Reviewed by Chris Fleizach.

        Be more precise ASSERTing on textUnderElement, only checking that the render
        tree is stable before using TextIteraror when in 'IncludeAllChildren' mode.

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

2015-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use MainThreadNotifier to send notifications to main thread in WebKitWebSourceGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=150890

        Reviewed by Žan Doberšek.

        Instead of the GThreadSafeMainLoopSources.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop):
        (webKitWebSrcChangeState):
        (webKitWebSrcNeedData):
        (webKitWebSrcEnoughData):
        (webKitWebSrcSeek):
        (StreamingClient::handleResponseReceived):
        (StreamingClient::handleDataReceived):
        (StreamingClient::handleNotifyFinished):
        (webKitWebSrcFinalize): Deleted.
        (webKitWebSrcSetProperty): Deleted.
        (webKitWebSrcGetProperty): Deleted.
        (webKitWebSrcSetExtraHeader): Deleted.
        (webKitWebSrcStart): Deleted.
        (webKitWebSrcGetProtocols): Deleted.
        (webKitWebSrcGetUri): Deleted.
        (webKitWebSrcSetUri): Deleted.
        (webKitWebSrcUriHandlerInit): Deleted.

2015-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use MainThreadNotifier to send notifications to main thread in TrackPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=150889

        Reviewed by Žan Doberšek.

        Instead of the GThreadSafeMainLoopSources.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        (WebCore::TrackPrivateBaseGStreamer::disconnect):
        (WebCore::TrackPrivateBaseGStreamer::activeChangedCallback):
        (WebCore::TrackPrivateBaseGStreamer::tagsChangedCallback):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::~TrackPrivateBaseGStreamer): Deleted.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged): Deleted.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:

2015-11-06  Csaba Osztrogonác  <ossy@webkit.org>

        Suppress deprecated-declarations warning in WebCore/platform/URL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=150803

        Reviewed by Alexey Proskuryakov.

        * platform/URL.cpp:
        (WebCore::appendEncodedHostname):

2015-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not use GThreadSafeMainLoopSource to send notifications to the main thread in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=150888

        Reviewed by Žan Doberšek.

        Analyzing how the main loop sources were used in GST code I've
        noticed that in most of the cases they are used to send
        notifications to the main thread. The way it works in those cases
        is that some state is updated in whatever thread and we notify the
        main thread to use the new state. There's no data passed to the
        main thread, they are just notifications. I've also noticed that
        we are not doing this exactly as expected in several of those
        cases. GThreadSafeMainLoopSource cancels the current source when a
        new one is scheduled, and that was done this way because previous
        code in GST using GSources directly did it that way. But that's
        not what we want, if there's a notification pending, since the
        state is updated, we can just wait for it to happen instead of
        cancelling and scheduling a new one. I've also noticed that in
        most of the cases where we schedule notifications to the main
        thread, we can be already in the main thread, so we could avoid
        the schedule entirely.
        We can use RunLoop::dispatch() to send notifications to the main
        thread, but there's no way to cancel those tasks. This patch adds
        a new helper class MainThreadNotifier that uses an enum of flags to
        handle different kind of notifications. It uses
        RunLoop::dispatch() to send notifications to the main thread, but
        only if there isn't one pending for the given type.
        This patch also makes signal callbacks static members to be able
        to make the private methods actually private.

        * platform/graphics/gstreamer/MainThreadNotifier.h: Added.
        (WebCore::MainThreadNotifier::MainThreadNotifier):
        (WebCore::MainThreadNotifier::notify):
        (WebCore::MainThreadNotifier::cancelPendingNotifications):
        (WebCore::MainThreadNotifier::addPendingNotification):
        (WebCore::MainThreadNotifier::removePendingNotification):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamPropertiesCallback):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::audioChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::textChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSampleCallback):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine): Deleted.
        (WebCore::initializeGStreamerAndRegisterWebKitElements): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::load): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::canSaveMediaData): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::repaintCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::drawCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::setPipeline): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::muted): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::setVisible): Deleted.

2015-11-06  Yoav Weiss  <yoav@yoav.ws>

        Expose HTMLImageElement sizes attribute in IDL
        https://bugs.webkit.org/show_bug.cgi?id=150230

        Reviewed by Darin Adler.

        No new tests, but fixed test expectations for exposed interfaces.

        * html/HTMLImageElement.idl: Make sure that `sizes` is exposed as an IDL attribute, to ensure proper feature detection of sizes support.

2015-11-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use RunLoop::Timer instead of GMainLoopSource in video sink
        https://bugs.webkit.org/show_bug.cgi?id=150807

        Reviewed by Žan Doberšek.

        Since we always wait until the sample is actually rendered we
        don't really need either a thread safe main loop source, nor
        cancelling if already requested and other things GMainLoopSource does.
        This adds a helper class VideoRenderRequestScheduler to use the
        RunLoop::Timer. All the logic to syncronize between threads has
        been moved to this helper class too.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (VideoRenderRequestScheduler::VideoRenderRequestScheduler):
        (VideoRenderRequestScheduler::start):
        (VideoRenderRequestScheduler::stop):
        (VideoRenderRequestScheduler::requestRender):
        (VideoRenderRequestScheduler::isUnlocked):
        (VideoRenderRequestScheduler::render):
        (_WebKitVideoSinkPrivate::_WebKitVideoSinkPrivate):
        (webkitVideoSinkRepaintRequested):
        (webkitVideoSinkRender):
        (webkitVideoSinkUnlock):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStop):
        (webkitVideoSinkStart):
        (_WebKitVideoSinkPrivate::~_WebKitVideoSinkPrivate): Deleted.
        (webkitVideoSinkTimeoutCallback): Deleted.
        (unlockSampleMutex): Deleted.

2015-11-05  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        Add runtime and compile time flags for enabling Web Animations API and model.
        https://bugs.webkit.org/show_bug.cgi?id=150914

        Reviewed by Benjamin Poulain.

        Add ENABLE_WEB_ANIMATIONS compile time flag, runtime flag webAnimationsEnabled and Expose WK2 preference for runtime flag.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebAnimationsEnabled):
        (WebCore::RuntimeEnabledFeatures::webAnimationsEnabled):

2015-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r192089.
        https://bugs.webkit.org/show_bug.cgi?id=150966

        This change broke an existing layout test on Yosemite and
        Mavericks (Requested by ryanhaddad on #webkit).

        Reverted changeset:

        "Preview on apple.com/contact with all text selected shows a
        map"
        https://bugs.webkit.org/show_bug.cgi?id=150963
        http://trac.webkit.org/changeset/192089

2015-11-05  Tim Horton  <timothy_horton@apple.com>

        Preview on apple.com/contact with all text selected shows a map
        https://bugs.webkit.org/show_bug.cgi?id=150963
        <rdar://problem/23421750>

        Reviewed by Beth Dakin.

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection):
        If the range that Lookup decides to use doesn't intersect the hit point,
        just ignore Lookup.

        (WebCore::DictionaryLookup::rangeAtHitTestResult):
        If the selection-based Lookup fails to find a usable result, fall back
        to looking around the hit point.

2015-11-05  Brady Eidson  <beidson@apple.com>

        Modern IDB: Implement IDBIndex get/getKey/count requests.
        https://bugs.webkit.org/show_bug.cgi?id=150910

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/index-get-count-basic.html
               storage/indexeddb/modern/index-get-count-failures.html

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::IDBAny):
        (WebCore::IDBClient::IDBAny::modernIDBIndex):
        * Modules/indexeddb/client/IDBAnyImpl.h:
        (WebCore::IDBClient::IDBAny::create):
        (WebCore::IDBClient::IDBAny::createUndefined):

        * Modules/indexeddb/client/IDBIndexImpl.cpp:
        (WebCore::IDBClient::IDBIndex::count):
        (WebCore::IDBClient::IDBIndex::doCount):
        (WebCore::IDBClient::IDBIndex::get):
        (WebCore::IDBClient::IDBIndex::doGet):
        (WebCore::IDBClient::IDBIndex::getKey):
        (WebCore::IDBClient::IDBIndex::doGetKey):
        * Modules/indexeddb/client/IDBIndexImpl.h:
        (WebCore::IDBClient::IDBIndex::info):
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:
        (WebCore::IDBClient::IDBObjectStore::isDeleted):
        (WebCore::IDBClient::IDBObjectStore::modernTransaction):
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::createCount):
        (WebCore::IDBClient::IDBRequest::createGet):
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::sourceObjectStoreIdentifier):
        (WebCore::IDBClient::IDBRequest::sourceIndexIdentifier):
        (WebCore::IDBClient::IDBRequest::requestedIndexRecordType):
        (WebCore::IDBClient::IDBRequest::setResultToUndefined):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestGetValue):
        (WebCore::IDBClient::IDBTransaction::requestGetKey):
        (WebCore::IDBClient::IDBTransaction::didGetRecordOnServer):
        (WebCore::IDBClient::IDBTransaction::requestCount):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/client/TransactionOperation.cpp:
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::indexIdentifier):
        (WebCore::IDBClient::TransactionOperation::indexRecordType):
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getCount):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::valueForKeyRange):
        (WebCore::IDBServer::MemoryIndex::countForKeyRange):
        * Modules/indexeddb/server/MemoryIndex.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::createIndex):
        (WebCore::IDBServer::MemoryObjectStore::countForKeyRange):
        (WebCore::IDBServer::MemoryObjectStore::indexValueForKeyRange):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetIndexRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetCount):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetRecord): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::objectStoreIdentifier):
        (WebCore::IDBRequestData::indexIdentifier):
        (WebCore::IDBRequestData::indexRecordType):
        * Modules/indexeddb/shared/IDBRequestData.h:

2015-11-05  Zhuo Li  <zachli@apple.com>

        Rename the variable to avoid conflict between the variable and the parameter.
        https://bugs.webkit.org/show_bug.cgi?id=150019.

        Reviewed by Dan Bernstein.

        * platform/cocoa/SearchPopupMenuCocoa.mm:
        (WebCore::typeCheckedRecentSearchesRemovingRecentSearchesAddedAfterDate): Rename `date`
        to `dateAdded` so that it does not have the same name as the parameter passed in.

2015-11-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up InjectedScript uses
        https://bugs.webkit.org/show_bug.cgi?id=150921

        Reviewed by Timothy Hatcher.

        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::injectIfNeeded):
        (WebCore::CommandLineAPIModule::CommandLineAPIModule):
        * inspector/CommandLineAPIModule.h:
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::didCreateInjectedScript):
        * inspector/WebInjectedScriptManager.h:

2015-11-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Put ScriptDebugServer into InspectorEnvironment and cleanup duplicate references
        https://bugs.webkit.org/show_bug.cgi?id=150869

        Reviewed by Brian Burg.

        Refactoring covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        Privately export PageScriptDebuggerAgent.h due to InspectorController.h needing it.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::scriptDebugServer):
        Own the PageScriptDebugServer.

        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::scriptDebugServer):
        Own the WorkerScriptDebugServer.

        (WebCore::WorkerInspectorController::vm):
        Use the VM accessed through the worker global object.

        * inspector/InspectorWebAgentBase.h:
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        Given Web agents a m_environment convenience to access the InspectorEnvironment.

        * inspector/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::timestamp):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::timestamp):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::frameStartedLoading):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::timestamp):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::setPageScriptDebugServer): Deleted.
        * inspector/InspectorTimelineAgent.h:
        Use the InspectorEnvironment for VM / ScriptDebugServer.

        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent): Deleted.
        (WebCore::PageDebuggerAgent::scriptDebugServer): Deleted.
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::globalVM): Deleted.
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::globalVM): Deleted.
        * inspector/WorkerRuntimeAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent): Deleted.
        (WebCore::WorkerDebuggerAgent::scriptDebugServer): Deleted.
        Remove now unnecessary subclass code.

        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        One more special case for accessing Worker properties from the ScriptDebugServer.

2015-11-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Shield implementation from user mangling Promise.reject and resolve methods
        https://bugs.webkit.org/show_bug.cgi?id=150895

        Reviewed by Youenn Fablet.

        Replace all calls to @Promise.resolve and @Promise.reject with their internal slot counterparts. This way we
        ensure that if the user replaces those constructor methods, our implementation still works.

        Test: streams/streams-promises.html.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        (cancel):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader):
        (cancelReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (cancel):
        (read):
        (closed):
        * Modules/streams/StreamInternals.js:
        (promiseInvokeOrNoop):
        (promiseInvokeOrFallbackOrNoop):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        (write):
        (closed):
        (ready):

2015-11-05  Andreas Kling  <akling@apple.com>

        Give ResourceUsageOverlay a stacked chart for dirty memory per category.
        <https://webkit.org/b/150905>

        Reviewed by Antti Koivisto.

        Refactored the data gathering to operate on "memory categories", a memory category is at
        the top level a VM tag, e.g the VM tag for our bmalloc allocator. It can in turn have
        sub-categories, e.g one for the GC heap, which allocates all of its blocks through bmalloc
        and thus end up in the same tag.

        Each category also has a hard-coded color, which is used consistently in labels and charts.

        Also went back to drawing everything with CGContext directly instead of GraphicsContext
        since the latter is not thread safe.

        * page/ResourceUsageOverlay.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (-[WebOverlayLayer drawInContext:]):
        (WebCore::RingBuffer::last):
        (WebCore::MemoryCategoryInfo::MemoryCategoryInfo):
        (WebCore::ResourceUsageData::ResourceUsageData):
        (WebCore::showText):
        (WebCore::drawGraphLabel):
        (WebCore::drawCpuHistory):
        (WebCore::drawGCHistory):
        (WebCore::drawMemHistory):
        (WebCore::drawSlice):
        (WebCore::drawMemoryPie):
        (WebCore::ResourceUsageOverlay::platformDraw):
        (WebCore::categoryForVMTag):
        (WebCore::runSamplerThread):
        (WebCore::drawPlate): Deleted.
        (WebCore::fontCascade): Deleted.
        (WebCore::ResourceUsageOverlay::draw): Deleted.

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

        Having page overlays causes iframe to get composited
        https://bugs.webkit.org/show_bug.cgi?id=150920

        Reviewed by Tim Horton.
        
        When deciding whether to enable compositing for a subframe, don't consult the
        main frame's overlay count. Only do that for the main frame.

        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2015-11-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Support positioned grid children
        https://bugs.webkit.org/show_bug.cgi?id=150837

        Reviewed by Darin Adler.

        According to the spec positioned grid children have
        a special behavior described at:
        https://drafts.csswg.org/css-grid/#abspos

        The idea is that for positioned children the containing block will
        correspond to the padding edges of the grid container, unless the
        grid placement properties are defined.
        This not only affects to positioned grid items (direct children) but
        also to any descendant where the containing block is the grid container.

        In order to manage this special behavior, the patch is overriding
        RenderBlock::layoutPositionedObject() to calculate the position and size
        depending on the grid-placement properties.

        RenderBox class has some changes to calculate the containing block width
        and height for positioned objects (using the override value). And also
        to compute their static position.

        Finally, the positioned items are not taken into account in all the
        different grid methods, in order that they do not interfere the layout
        of the grid as stated in the spec.

        Tests: fast/css-grid-layout/absolute-positioning-grid-container-containing-block.html
               fast/css-grid-layout/absolute-positioning-grid-container-parent.html
               fast/css-grid-layout/grid-positioned-items-background.html
               fast/css-grid-layout/grid-positioned-items-implicit-grid-line.html
               fast/css-grid-layout/grid-positioned-items-implicit-grid.html
               fast/css-grid-layout/grid-positioned-items-unknown-named-grid-line.html
               fast/css-grid-layout/grid-sizing-positioned-items.html
               fast/css-grid-layout/positioned-grid-items-should-not-create-implicit-tracks.html
               fast/css-grid-layout/positioned-grid-items-should-not-take-up-space.html

        * rendering/OrderIterator.cpp:
        (WebCore::OrderIterator::next): Fix method to avoid issues if no items
        are added to the iterator.
        * rendering/RenderBlock.h: Mark layoutPositionedObject() as virtual.
        * rendering/RenderBox.cpp: Add new maps for inline/block extra offsets.
        (WebCore::RenderBox::~RenderBox): Clear the new maps.
        (WebCore::RenderBox::extraInlineOffset): Extra offset that we need to
        apply to positioned grid children due to the grid placement properties.
        (WebCore::RenderBox::extraBlockOffset): Ditto.
        (WebCore::RenderBox::setExtraInlineOffset):
        (WebCore::RenderBox::setExtraBlockOffset):
        (WebCore::RenderBox::clearExtraInlineAndBlockOffests):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Use the
        override containing block if any.
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned): Ditto.
        (WebCore::RenderBox::computePositionedLogicalWidth): Add the extra
        offset if it's a positioned element.
        (WebCore::RenderBox::computePositionedLogicalHeight): Ditto.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollbarLogicalWidth): Add utility method.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock): Clear grid after layout positioned
        objects instead of at the end of layoutGridItems().
        (WebCore::RenderGrid::placeItemsOnGrid): Ignore positioned items.
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Ditto.
        (WebCore::RenderGrid::layoutGridItems): Ditto.
        (WebCore::RenderGrid::prepareChildForPositionedLayout): Set static
        position for positioned items.
        (WebCore::RenderGrid::layoutPositionedObject): Calculate position and
        size for positioned children.
        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild): Calculate
        extra offset and breadth for positioned children.
        * rendering/RenderGrid.h:
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::isNonExistentNamedLineOrArea): Make it a
        public static method.
        (WebCore::GridUnresolvedSpan::adjustGridPositionsFromStyle): Fix calls
        to isNonExistentNamedLineOrArea().
        (WebCore::resolveGridPositionFromStyle): Ditto.
        * rendering/style/GridResolvedPosition.h: Make
        isNonExistentNamedLineOrArea() public.

2015-11-04  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/delete-hidden-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149289
        <rdar://problem/22746352>

        Reviewed by Enrica Casucci.

        This is a merge of Blink r176497:
        https://codereview.chromium.org/340713003

        It ensures the start & end positions in DeleteSelectionCommand::initializePositionData
        are editable.

        Test: editing/execCommand/delete-hidden-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        These two functions don't make any sense to return VisiblePosition. Change them
        to return Position instead. Since there is a viable conversion from Position to
        VisiblePosition. It should not change the behavior of any other components depending
        on it.
        * editing/htmlediting.h:

2015-11-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Ruby base ending in tatechuyoko forces a line break before the tatechuyoko
        https://bugs.webkit.org/show_bug.cgi?id=150883

        Reviewed by Darin Adler.

        Asking the width of a 0-length tatechuyoko should return 0.

        Test: fast/text/ruby-tatechuyoko.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):

2015-11-04  Tim Horton  <timothy_horton@apple.com>

        Update the name of a Mail class that we hardcode
        https://bugs.webkit.org/show_bug.cgi?id=150879
        <rdar://problem/23384627>

        Reviewed by Alexey Proskuryakov.

        * editing/cocoa/HTMLConverter.mm:
        (_WebMessageDocumentClass):

2015-11-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] A RealtimeMediaSource should begin producing data automatically
        https://bugs.webkit.org/show_bug.cgi?id=150851
        rdar://problem/23380636

        A RealtimeMediaSource should be producing data unless it is muted, which is not under the 
        control of the application, so a local source should begin producing data as soon as it
        is added to a stream. Remove "producing data" and "enabled" observer callbacks because 
        they don't provide anything that the "muted" callback already provides.
        
        Reviewed by Jer Noble.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::trackProducingDataChanged): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCreateStream): Tell sources to begin producing data.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Don't call stream->startProducingData,
          it isn't necessary.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setReadyState): Call characteristicsChanged 
          when the readyState changes.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackProducingDataChanged): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::sourceProducingDataChanged): Deleted.
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::isProducingDataDidChange): Deleted.
        (WebCore::RealtimeMediaSource::setEnabled): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): !enabled() -> muted().

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange): Don't call isProducingDataDidChange..

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::processNewFrame): !enabled() -> muted().

2015-11-04  Jer Noble  <jer.noble@apple.com>

        [iOS] <video> elements without audio tracks should not interrupt music
        https://bugs.webkit.org/show_bug.cgi?id=149888

        Reviewed by Eric Carlson.

        Tests: TestWebKitAPI/Tests/WebKit/ios/AudioSessionCategoryIOS.mm

        Only set the AVAudioSession category to "playback" when the video element in question has an
        audio track.

        Add a new PlatformMediaSessionClient method called canProduceAudio(), overridden in HTMLMediaElement
        and AudioContext, which is checked when updating the AudioSession category in 
        PlatformMediaSessionManager::updateSessionState().

        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        * html/HTMLMediaElement.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::activeAudioSessionRequired):
        (WebCore::PlatformMediaSession::setCanProduceAudio):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::canProduceAudio):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::canProduceAudio):
        (WebCore::PlatformMediaSessionManager::sessionCanProduceAudioChanged):
        (WebCore::PlatformMediaSessionManager::activeAudioSessionRequired):
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (PlatformMediaSessionManager::updateSessionState):

2015-11-03  Dean Jackson  <dino@apple.com>

        Accept 8 and 4 value hex colors (#RRGGBBAA)
        https://bugs.webkit.org/show_bug.cgi?id=150853
        <rdar://problem/23380930>

        Reviewed by Simon Fraser.

        CSS Color Level 4 allows #RGBA and #RRGGBBAA values
        for colors.

        Test: fast/css/hex-colors.html

        * platform/graphics/Color.cpp:
        (WebCore::parseHexColorInternal): Update the color parsing for
        the new syntax.

2015-11-04  Mario Sanchez Prada  <mario@webkit.org>

        [AX] WebProcess from WebKitGtk+ 2.10.0 compiled in Debug mode hits ASSERT on textUnderElement
        https://bugs.webkit.org/show_bug.cgi?id=150670

        Reviewed by Chris Fleizach.

        Move the ASSERTs stating that the render tree is stable before using the
        TextIterator to their right place, in AccessibilityRenderObject, so that
        we don't crash in debug builds in cases when this condition is irrelevant.

        Test: accessibility/gtk/list-item-with-pseudo-element-crash.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement): Removed ASSERTs.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement): Added ASSERTs, but
        only before calling plainText and using the right document for the node.

2015-11-04  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Shield streams against user replacing the Promise constructor
        https://bugs.webkit.org/show_bug.cgi?id=150887

        Reviewed by Youenn Fablet.

        With this rework, we shield the Streams implementation against the user doing something like "Promise =
        function() { /* do garbage */ };".

        Test: streams/streams-promises.html.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        (cancel):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader):
        (cancelReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (cancel):
        (read):
        (closed):
        * Modules/streams/StreamInternals.js:
        (promiseInvokeOrNoop):
        (promiseInvokeOrFallbackOrNoop):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        (write):
        (closed):
        (ready):
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):

2015-11-04  Antoine Quint  <graouts@apple.com>

        SVG: hit testing region for <text> elements is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=150838

        Reviewed by Dean Jackson.

        Hit testing for SVG <text> elements was using the same code as hit testing
        for CSS-rendered elements. However, in SVG, text elements should only hit
        test based on their character cells, not the rectangular bounds of the
        element, see section 16.6 of the SVG 1.1 specification:
        
        http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty
        
        So we now hit test each SVGTextFragment of each SVGInlineTextBox
        that is a child of an SVGRootInlineBox to correctly find whether the
        provided HitTestLocation is contained within a character cell. 

        Tests: svg/hittest/text-dominant-baseline-hanging.svg
               svg/hittest/text-multiple-dx-values.svg
               svg/hittest/text-with-multiple-tspans.svg
               svg/hittest/text-with-text-node-and-content-elements.svg
               svg/hittest/text-with-text-node-only.svg
               svg/hittest/text-with-text-path.svg

        * rendering/RootInlineBox.h:
        Remove the final keyword since nodeAtPoint() may now be subclassed as
        implemented in SVGRootInlineBox.
 
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        Iterate over the SVGTextFragments to look for a fragment containing the
        provided HitTestLocation.
 
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::nodeAtPoint):
        * rendering/svg/SVGRootInlineBox.h:
        Override RootInlineBox::nodeAtPoint() to delegate hit testing to the
        children inline boxes.

2015-11-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use RunLoop::Timer for ready state timer in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=150836

        Reviewed by Philippe Normand.

        We don't really need a GThreadSafeMainLoopSource for this simple timer.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::readyTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::loadingFailed):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2015-11-04  Frederic Wang  <fred.wang@free.fr>

        Add support for the USE_TYPO_METRICS flag on iOS
        https://bugs.webkit.org/show_bug.cgi?id=131839

        Reviewed by Darin Adler.

        Make the iOS Font service use the typo metrics for fonts with a MATH table when the OS/2 USE_TYPO_METRICS flag is set.
        The code shared by iOS, OS X and AppleWin is moved into a separate OpenTypeCG module.

        No new tests because this is already tested by fonts/use-typo-metrics-1.html

        * PlatformAppleWin.cmake: Add OpenTypeCG files.
        * PlatformMac.cmake: ditto.
        * WebCore.vcxproj/WebCore.vcxproj: ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Use functions from OpenTypeCG.
        (WebCore::fontHasMathTable): Deleted.
        * platform/graphics/ios/FontServicesIOS.mm:
        (WebCore::FontServicesIOS::FontServicesIOS): Use the typo metrics for fonts with a MATH table when the OS/2 USE_TYPO_METRICS flag is set.
        * platform/graphics/opentype/OpenTypeCG.h: Added.
        * platform/graphics/opentype/OpenTypeCG.cpp: Added.
        (WebCore::OpenType::fontHasMathTable): Move this code from FontCocoa.mm.
        (WebCore::OpenType::readShortFromTable): Inline function to read a 16-bit big endian integer from the OS/2 table and to cast it into a short integer.
        (WebCore::OpenType::tryGetTypoMetrics): Move this code from FontCocoa.mm.
        * platform/graphics/opentype/OpenTypeTypes.h: Add missing Glyph.h header needed by TableWithCoverage::getCoverageIndex.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::Font::platformInit): Use functions from OpenTypeCG.

2015-11-04  Chris Dumez  <cdumez@apple.com>

        Regression(r191652): Colloquy doesn’t render any chat content
        https://bugs.webkit.org/show_bug.cgi?id=150861
        <rdar://problem/23381007>

        Reviewed by Antti Koivisto.

        Do a partial revert of r191652 as this web-exposed behavior change
        broke Colloquy app. This only reverts the code change, the tests
        are left as is so that they don't rely of the frame ID setting the
        Window name.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):

2015-11-03  Brady Eidson  <beidson@apple.com>

        Modern IDB: Fill out IDBIndex, create MemoryIndex in backing store.
        https://bugs.webkit.org/show_bug.cgi?id=150868

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/create-index-failures.html
               storage/indexeddb/modern/get-index-failures.html
               storage/indexeddb/modern/idbindex-properties-basic.html

        Note: The MemoryIndex in the backing store doesn't actually do anything yet.
        
        That's coming next.
    
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBIndex.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::createIndex):
        (WebCore::IDBClient::IDBConnectionToServer::didCreateIndex):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBCursorWithValueImpl.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::didCreateIndexInfo):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/client/IDBIndexImpl.cpp:
        (WebCore::IDBClient::IDBIndex::create):
        (WebCore::IDBClient::IDBIndex::IDBIndex):
        (WebCore::IDBClient::IDBIndex::objectStore):
        (WebCore::IDBClient::IDBIndex::keyPathAny):
        (WebCore::IDBClient::IDBIndex::openCursor):
        (WebCore::IDBClient::IDBIndex::count):
        (WebCore::IDBClient::IDBIndex::openKeyCursor):
        (WebCore::IDBClient::IDBIndex::get):
        (WebCore::IDBClient::IDBIndex::getKey):
        * Modules/indexeddb/client/IDBIndexImpl.h:

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::createIndex):
        (WebCore::IDBClient::IDBObjectStore::index):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::createObjectStore):
        (WebCore::IDBClient::IDBTransaction::createIndex):
        (WebCore::IDBClient::IDBTransaction::createIndexOnServer):
        (WebCore::IDBClient::IDBTransaction::didCreateIndexOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

        * Modules/indexeddb/legacy/LegacyIndex.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createIndex):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addNewIndex):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addExistingIndex):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::createIndex):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryIndex.cpp: Added.
        (WebCore::IDBServer::MemoryIndex::create):
        (WebCore::IDBServer::MemoryIndex::MemoryIndex):
        (WebCore::IDBServer::MemoryIndex::~MemoryIndex):
        * Modules/indexeddb/server/MemoryIndex.h: Added.
        (WebCore::IDBServer::MemoryIndex::info):

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::createIndex):
        (WebCore::IDBServer::MemoryObjectStore::registerIndex):
        (WebCore::IDBServer::MemoryObjectStore::unregisterIndex):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCreateIndex):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createIndex):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::getInfoForExistingObjectStore):
        (WebCore::IDBDatabaseInfo::infoForExistingObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:

        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::IDBIndexInfo):
        (WebCore::IDBIndexInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBIndexInfo.h:
        (WebCore::IDBIndexInfo::identifier):
        (WebCore::IDBIndexInfo::objectStoreIdentifier):

        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::createNewIndex):
        (WebCore::IDBObjectStoreInfo::addExistingIndex):
        (WebCore::IDBObjectStoreInfo::hasIndex):
        (WebCore::IDBObjectStoreInfo::infoForExistingIndex):
        (WebCore::IDBObjectStoreInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::createIndexSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didCreateIndex):
        (WebCore::InProcessIDBServer::createIndex):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * bindings/js/JSIDBObjectStoreCustom.cpp:
        (WebCore::JSIDBObjectStore::createIndex):

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBIndexInfo>::copy):
        * platform/CrossThreadCopier.h:

2015-11-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Only query for kMGQDeviceName on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150858

        Reviewed by Brent Fulgham.

        * platform/ios/Device.cpp:
        (WebCore::deviceName): On non-iOS platorms, just return "iPhone" as the device name.

2015-11-03  Geoffrey Garen  <ggaren@apple.com>

        Provide a way to turn off const in WebKit2.

        Reviewed by Sam Weinig.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        * page/Settings.h:
        (WebCore::Settings::shouldUseHighResolutionTimers):
        (WebCore::Settings::shouldRewriteConstAsVar):
        (WebCore::Settings::setShouldRewriteConstAsVar):
        (WebCore::Settings::backgroundShouldExtendBeyondPage):

2015-11-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove duplication among ScriptDebugServer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=150860

        Reviewed by Timothy Hatcher.

        Refactoring covered by existing tests.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::attachDebugger):
        (WebCore::WorkerScriptDebugServer::detachDebugger):
        (WebCore::WorkerScriptDebugServer::addListener): Deleted.
        (WebCore::WorkerScriptDebugServer::removeListener): Deleted.
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer): Deleted.
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer): Deleted.
        * inspector/PageDebuggerAgent.h:
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::attachDebugger):
        (WebCore::PageScriptDebugServer::detachDebugger):
        (WebCore::PageScriptDebugServer::addListener): Deleted.
        (WebCore::PageScriptDebugServer::removeListener): Deleted.
        * inspector/PageScriptDebugServer.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer): Deleted.
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer): Deleted.
        * inspector/WorkerDebuggerAgent.h:

2015-11-03  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test scrollbars/custom-scrollbar-appearance-property.html
        https://bugs.webkit.org/show_bug.cgi?id=149312
        <rdar://problem/22748910>

        Reviewed by Darin Adler.

        This is a merge from Blink r167503:
        https://codereview.chromium.org/173433002

        Test: scrollbars/custom-scrollbar-appearance-property.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecorationPart):

2015-11-03  Andreas Kling  <akling@apple.com>

        ResourceUsageOverlay should show GC-owned malloc memory.
        <https://webkit.org/b/150846>

        Reviewed by Anders Carlsson.

        Add a memory category for GC-owned malloc memory. This carves a significant chunk off of
        the gigantic "bmalloc" mystery slice.

        * page/ResourceUsageOverlay.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::drawMemoryPie):
        (WebCore::ResourceUsageOverlay::draw):
        (WebCore::runSamplerThread):

2015-11-03  Saam barati  <sbarati@apple.com>

        Rewrite "const" as "var" for iTunes/iBooks on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=150852

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-10-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Implement support for the autocomplete attribute
        https://bugs.webkit.org/show_bug.cgi?id=150731
        rdar://problem/21078968

        The autocomplete attribute is defined by
        https://html.spec.whatwg.org/multipage/forms.html#autofill.

        Reviewed by Brent Fulgham.

        Test: fast/forms/autocomplete-tokens.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::isContactToken):
        Return true if this is a contact token.
        (WebCore::categoryForAutofillFieldToken):
        Adds all of the autofill field tokens to a map, and returns the
        category for a given token.
        (WebCore::maxTokensForAutofillFieldCategory):
        Return the maximum number of tokens an autofill category supports.
        (WebCore::HTMLFormControlElement::parseAutocompleteAttribute):
        Implement the processing model defined in
        https://html.spec.whatwg.org/multipage/forms.html#processing-model-3
        with respect to the IDL-exposed autofill value.
        (WebCore::HTMLFormControlElement::setAutocomplete):
        Set the autocomplete attribute to the given string.

        * html/HTMLFormControlElement.h:
        Declare setAutocomplete() and autocomplete().

        * html/HTMLInputElement.idl:
        Remove the Reflect attribute. We now have custom processing for getting
        this attribute.

        * html/HTMLSelectElement.idl:
        Declare the autocomplete attribute.

        * html/HTMLTextAreaElement.idl:
        Ditto.

2015-11-03  Brady Eidson  <beidson@apple.com>

        Modern IDB: Land empty IDBCursor/Index IDL implementations.
        https://bugs.webkit.org/show_bug.cgi?id=150839

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBIndex.h:
        
        * Modules/indexeddb/client/IDBCursorImpl.cpp: Added.
        (WebCore::IDBClient::IDBCursor::~IDBCursor):
        (WebCore::IDBClient::IDBCursor::direction):
        (WebCore::IDBClient::IDBCursor::key):
        (WebCore::IDBClient::IDBCursor::primaryKey):
        (WebCore::IDBClient::IDBCursor::value):
        (WebCore::IDBClient::IDBCursor::source):
        (WebCore::IDBClient::IDBCursor::update):
        (WebCore::IDBClient::IDBCursor::advance):
        (WebCore::IDBClient::IDBCursor::continueFunction):
        (WebCore::IDBClient::IDBCursor::deleteFunction):
        * Modules/indexeddb/client/IDBCursorImpl.h: Added.
        
        * Modules/indexeddb/client/IDBCursorWithValueImpl.cpp: Added.
        * Modules/indexeddb/client/IDBCursorWithValueImpl.h: Added.
        
        * Modules/indexeddb/client/IDBIndexImpl.cpp: Added.
        (WebCore::IDBClient::IDBIndex::~IDBIndex):
        (WebCore::IDBClient::IDBIndex::name):
        (WebCore::IDBClient::IDBIndex::objectStore):
        (WebCore::IDBClient::IDBIndex::keyPathAny):
        (WebCore::IDBClient::IDBIndex::keyPath):
        (WebCore::IDBClient::IDBIndex::unique):
        (WebCore::IDBClient::IDBIndex::multiEntry):
        (WebCore::IDBClient::IDBIndex::openCursor):
        (WebCore::IDBClient::IDBIndex::count):
        (WebCore::IDBClient::IDBIndex::openKeyCursor):
        (WebCore::IDBClient::IDBIndex::get):
        (WebCore::IDBClient::IDBIndex::getKey):
        * Modules/indexeddb/client/IDBIndexImpl.h: Copied from Source/WebCore/Modules/indexeddb/IDBIndex.h.
        
        * Modules/indexeddb/legacy/LegacyIndex.h:
        (WebCore::LegacyIndex::id):
        
        * Modules/indexeddb/shared/IDBIndexInfo.cpp: Added.
        * Modules/indexeddb/shared/IDBIndexInfo.h: Added.
        (WebCore::IDBIndexInfo::name):
        (WebCore::IDBIndexInfo::keyPath):
        (WebCore::IDBIndexInfo::unique):
        (WebCore::IDBIndexInfo::multiEntry):

2015-11-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments on r191934.

        Unreviewed.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):

2015-11-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move ScriptDebugServer::Task to WorkerScriptDebugServer where it is actually used
        https://bugs.webkit.org/show_bug.cgi?id=150847

        Reviewed by Timothy Hatcher.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::interruptAndRunTask):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/WorkerDebuggerAgent.cpp:

2015-11-03  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/Widget.h:
        (WebCore::Widget::boundsRect):
        (WebCore::Widget::resize):

2015-11-03  Myles C. Maxfield  <mmaxfield@apple.com>

        font-variant-* properties in @font-face declarations should be honored
        https://bugs.webkit.org/show_bug.cgi?id=149771

        Reviewed by Simon Fraser.

        According to the CSS Fonts Level 3 spec, web authors are allowed to put
        font-feature-settings / font-variant-* inside @font-face blocks. These
        properties are supposed to be applied at a specific time during the
        font selection algorithm.

        This patch gives a FontFeatureSettings object and a FontVariantSettings
        object to CSSFontFace, and moves common parsing logic from
        StyleBuilderCustom to a shared location. Then, once the two properties
        are parsed from the @font-face block, the relevant data structures are
        passed down into the font selection algorithm. This algorithm then
        consults with these values at the correct time (inside
        preparePlatformFont()).

        Tests: css3/font-feature-settings-font-face-rendering.html
               css3/font-variant-font-face-all.html
               css3/font-variant-font-face-override.html

        * WebCore.xcodeproj/project.pbxproj: Add a header for the common
        location of parsing font-variant-ligatures, font-variant-numeric,
        and font-variant-east-asian.
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::font): Pass the relevant data structures
        into the font selection algorithm.
        * css/CSSFontFace.h: Add FontFeatureSettings and FontVariantSettings
        member variables.
        (WebCore::CSSFontFace::insertFeature):
        (WebCore::CSSFontFace::setVariantCommonLigatures):
        (WebCore::CSSFontFace::setVariantDiscretionaryLigatures):
        (WebCore::CSSFontFace::setVariantHistoricalLigatures):
        (WebCore::CSSFontFace::setVariantContextualAlternates):
        (WebCore::CSSFontFace::setVariantPosition):
        (WebCore::CSSFontFace::setVariantCaps):
        (WebCore::CSSFontFace::setVariantNumericFigure):
        (WebCore::CSSFontFace::setVariantNumericSpacing):
        (WebCore::CSSFontFace::setVariantNumericFraction):
        (WebCore::CSSFontFace::setVariantNumericOrdinal):
        (WebCore::CSSFontFace::setVariantNumericSlashedZero):
        (WebCore::CSSFontFace::setVariantAlternates):
        (WebCore::CSSFontFace::setVariantEastAsianVariant):
        (WebCore::CSSFontFace::setVariantEastAsianWidth):
        (WebCore::CSSFontFace::setVariantEastAsianRuby):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font): Pass the relevant data
        structures into the font selection algorithm.
        * css/CSSFontFaceSource.h: Ditto.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Call the shared
        parsing logic to populate the FontFeatureSettings and
        FontVariantSettings members.
        * css/FontVariantBuilder.h: Added. Destination for shared parsing
        logic.
        (WebCore::applyValueFontVariantLigatures):
        (WebCore::applyValueFontVariantNumeric):
        (WebCore::applyValueFontVariantEastAsian):
        * css/StyleBuilderCustom.h: Source for shared parsing logic.
        (WebCore::StyleBuilderCustom::applyValueFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyValueFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyValueFontVariantEastAsian):
        * loader/cache/CachedFont.cpp: Pass the relevant data structures
        into the font selection algorithm.
        (WebCore::CachedFont::createFont):
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h: Ditto.
        * loader/cache/CachedSVGFont.cpp: Ditto.
        (WebCore::CachedSVGFont::createFont):
        (WebCore::CachedSVGFont::platformDataFromCustomData):
        * loader/cache/CachedSVGFont.h: Ditto.
        * platform/graphics/FontCache.h: Ditto.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::codePath): Adjust comment.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont): Consult with the newly parsed values.
        (WebCore::fontWithFamily): Pass the relevant data structures into the
        font selection algorithm.
        (WebCore::FontCache::systemFallbackForCharacters): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.h: Ditto.

2015-11-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Handle or Remove ParseHTML Timeline Event Records
        https://bugs.webkit.org/show_bug.cgi?id=150689

        Reviewed by Timothy Hatcher.

        Remove ParseHTML nesting recordings. We were not using them
        and for most pages their self-time is very small in comparison
        to other events. We may consider adding it back later for
        UI purposes but for now the frontend doesn't use the records
        so lets remove it.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willWriteHTMLImpl): Deleted.
        (WebCore::InspectorInstrumentation::didWriteHTMLImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willWriteHTML): Deleted.
        (WebCore::InspectorInstrumentation::didWriteHTML): Deleted.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willWriteHTML): Deleted.
        (WebCore::InspectorTimelineAgent::didWriteHTML): Deleted.
        (WebCore::toProtocol): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createParseHTMLData): Deleted.
        * inspector/TimelineRecordFactory.h:

2015-11-03  Keith Rollin  <krollin@apple.com>

        HTMLOptionElement.text should never return the value of label
        https://bugs.webkit.org/show_bug.cgi?id=148862
        rdar://problem/22589226

        Reviewed by Darin Adler.

        According to the HTML spec, `option` elements should have the
        following behavior:

            - the `text` property should return text contents of element
            - the `label` property should return value of label attribute if
              it exists, else return text property
            - the UI should display label property

        12 years ago, in order to be compatibile with browsers of the time, we
        diverged from this behavior: the text property behaved like the label
        property, and the text property was used for display. This resulted in
        our UI incidentally conforming to the spec, but also in the text
        property *not* conforming to the spec. See <rdar://problem/3532519>
        for discussion on this change.

        The behavior of the browsers we were conforming to has changed. In
        particular, the text property in Firefox now conforms to the spec
        instead of behaving as we did. Therefore, it's less important to
        retain our old behavior for the sake of compatibility. This check-in
        brings us into conformance with the spec. The result is that the UI
        stays the same, but the text property will return different values than
        it used to if the option element has a label attribute that used to
        hide it.

        Updated tests:
        - fast/dom/HTMLOptionElement/option-text.html:
        - fast/forms/HTMLOptionElement_label01.html:
        - fast/forms/HTMLOptionElement_label02.html:
        - fast/forms/HTMLOptionElement_label03.html:
        - fast/forms/HTMLOptionElement_label04.html:
        - fast/forms/HTMLOptionElement_label05.html:
        - fast/forms/HTMLOptionElement_label06.html:
        - fast/forms/HTMLOptionElement_label07.html:
        - fast/forms/option-value-and-label.html:

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::stringValue):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::stringValue):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text):
        (WebCore::HTMLOptionElement::textIndentedToRespectGroupLabel):

2015-11-03  Andreas Kling  <akling@apple.com>

        ResourceUsageOverlay should draw itself using WebCore::GraphicsContext.
        <https://webkit.org/b/150841>

        Reviewed by Antti Koivisto.

        Use WebCore text drawing primitives instead of poking at the CGContext directly.
        And stop using deprecated CoreGraphics APIs, too.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::drawCpuHistory):
        (WebCore::drawGCHistory):

            Adjust for unflipped Y axis.

        (WebCore::fontCascade):
        (WebCore::showText):

            Draw using WebCore text drawing primitives.

        (WebCore::ResourceUsageOverlay::draw):

            Remove CGContext calls and stop flipping the Y axis.

2015-11-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Vended promise capabilities should not need @resolve/@reject fields
        https://bugs.webkit.org/show_bug.cgi?id=150835

        Reviewed by Darin Adler.

        No change in behavior, covered by existing tests.

        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader): Removed @resolve/@reject fields from resolved/rejected @closedPromiseCapability.
        * Modules/streams/WritableStream.js:
        (initializeWritableStream): Removed @resolve/@reject fields from resolved readyPromiseCapability.
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue): Updated code to be closer to spec and removing the need to resolve an already resolved promise.

2015-11-03  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replace 0 and NULL with nullptr in WebCore/dom.
        https://bugs.webkit.org/show_bug.cgi?id=150788

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        (WebCore::Attr::detachFromElementWithValue):
        (WebCore::Attr::attachToElement):
        * dom/Attr.h:
        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::updateCheckedState):
        (WebCore::CheckedRadioButtons::checkedButtonForGroup):
        (WebCore::CheckedRadioButtons::isInRequiredGroup):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::enqueueMutationRecord):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):
        * dom/ContainerNode.h:
        (WebCore::ContainerNode::ContainerNode):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyNodeRemovedFromDocument):
        * dom/Document.h:
        (WebCore::Document::wellFormed):
        (WebCore::Document::scriptRunner):
        (WebCore::Document::moduleLoader):
        (WebCore::Document::currentScript):
        (WebCore::Document::webkitFullscreenElement):
        * dom/DocumentOrderedMap.h:
        (WebCore::DocumentOrderedMap::MapEntry::MapEntry):
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::detach):
        (WebCore::DocumentParser::suspendScheduledTasks):
        * dom/Element.cpp:
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::shadowRoot):
        (WebCore::Element::blur):
        (WebCore::Element::beforePseudoElement):
        (WebCore::Element::afterPseudoElement):
        (WebCore::Element::setBeforePseudoElement):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::legacyReturnValue):
        (WebCore::Event::setLegacyReturnValue):
        (WebCore::Event::clipboardData):
        * dom/EventContext.cpp:
        (WebCore::MouseOrFocusEventContext::MouseOrFocusEventContext):
        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::lastContextIfExists):
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
        (WebCore::EventListenerIterator::EventListenerIterator):
        * dom/EventListenerMap.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEventInit::FocusEventInit):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::enqueueEvent):
        * dom/IdTargetObserverRegistry.h:
        (WebCore::IdTargetObserverRegistry::IdTargetObserverRegistry):
        (WebCore::IdTargetObserverRegistry::notifyObservers):
        * dom/IgnoreDestructiveWriteCountIncrementer.h:
        (WebCore::IgnoreDestructiveWriteCountIncrementer::IgnoreDestructiveWriteCountIncrementer):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * dom/MessageEvent.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::locallyEntangledPort):
        (WebCore::MessagePort::disentanglePorts):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventInit::MouseEventInit):
        (WebCore::MouseEvent::cloneFor):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::dataTransfer):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/MutationEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::nodeLists):
        (WebCore::Node::clearNodeLists):
        (WebCore::Node::nonShadowBoundaryParentNode):
        (WebCore::Node::parentOrShadowHostElement):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::removeCachedCollection):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent):
        * dom/Position.h:
        (WebCore::Position::deprecatedNode):
        (WebCore::Position::document):
        (WebCore::Position::rootEditableElement):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::decrement):
        * dom/PositionIterator.h:
        (WebCore::PositionIterator::PositionIterator):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::parseStyleSheet):
        * dom/ProcessingInstruction.h:
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::RangeBoundaryPoint):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::stopLoadRequest):
        (WebCore::ScriptElement::notifyFinished):
        (WebCore::ScriptElement::ignoresLoadRequest):
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::create):
        (WebCore::ScriptedAnimationController::clearDocumentPointer):
        * dom/StyledElement.cpp:
        (WebCore::PresentationAttributeCacheKey::PresentationAttributeCacheKey):
        (WebCore::StyledElement::addSubresourceAttributeURLs):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::additionalPresentationAttributeStyle):
        (WebCore::StyledElement::inlineStyle):
        * dom/TemplateContentDocumentFragment.h:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::TextEvent):
        * dom/UIEvent.cpp:
        (WebCore::UIEventInit::UIEventInit):
        * dom/UserTypingGestureIndicator.cpp:
        (WebCore::UserTypingGestureIndicator::UserTypingGestureIndicator):
        (WebCore::UserTypingGestureIndicator::~UserTypingGestureIndicator):
        * dom/ViewportArguments.cpp:
        (WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable):
        (WebCore::numericPrefix):
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::disentangle):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
        * dom/default/PlatformMessagePortChannel.h:

2015-11-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tapping *below* some <input>s can focus them in Mobile Safari
        https://bugs.webkit.org/show_bug.cgi?id=146244
        <rdar://problem/21509310>

        Reviewed by Darin Adler.

        Removes iOS-specific logic in positionForPointRespectingEditingBoundaries that was causing us to focus inputs by
        tapping on the document element. We believe this logic, which causes VisiblePosition finding to recurse from a non-
        editable element to an editable child, is not necessary to focus editable elements underneath non-editable elements,
        since hit-testing will already have selected the contentEditable element prior to searching for a suitable
        VisiblePosition. Further investigation shows that this logic was added to fix <rdar://problem/5545799>, in which the
        first character in a Notes document could not be selected. However, I have not been able to reproduce this bug after
        removing this logic.

        As a result of this change, we can also enable a WK1 test, editing/selection/click-outside-editable-div.html, that
        had also been marked as failing due to positionForPointRespectingEditingBoundaries recursing into a contentEditable
        div.

        Test: fast/events/ios/clicking-document-should-not-trigger-focus.html

        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries): Deleted.

2015-11-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Update to match text-orientation spec
        https://bugs.webkit.org/show_bug.cgi?id=150765

        Reviewed by Darin Adler.

        The CSS spec has removed the "sideways-right" value of text-orientation in favor
        of "sideways." This patch makes the parser treat "sideways-right" the same as
        "sideways."

        Test: fast/text/orientation-sideways-right.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextOrientation):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::fontAndGlyphOrientation): Deleted.
        * rendering/style/RenderStyleConstants.h:

2015-11-03  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Rework promises to use @newPromiseCapability
        https://bugs.webkit.org/show_bug.cgi?id=150627

        Reviewed by Youenn Fablet.

        We are removing the stream promises functions in favor of @newPromiseCapabity which basically provides the same
        functionality (keeping the resolve and reject functions without external slots). Slots and variables were
        renamed as *PromiseCapability to show that they no longer hold just a promise, but a promise capability.

        Internal rework, no new tests needed.

        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader.this.closedPromiseCapability.resolve):
        (privateInitializeReadableStreamReader.this.closedPromiseCapability.reject):
        (privateInitializeReadableStreamReader):
        (teeReadableStream):
        (teeReadableStreamBranch2CancelFunction):
        (errorReadableStream):
        (closeReadableStreamReader):
        (enqueueInReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (closed):
        * Modules/streams/StreamInternals.js:
        (createNewStreamsPromise): Deleted.
        (resolveStreamsPromise): Deleted.
        (rejectStreamsPromise): Deleted.
        * Modules/streams/WritableStream.js:
        (this.readyPromiseCapability.resolve):
        (this.readyPromiseCapability.reject):
        (initializeWritableStream):
        (close):
        (write):
        (closed):
        (ready):
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):
        (errorWritableStream):
        * bindings/js/WebCoreBuiltinNames.h:

2015-11-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Move webkitGetUserMedia to JS Builtin
        https://bugs.webkit.org/show_bug.cgi?id=149499

        Reviewed by Darin Adler.

        Implemented webkitGetUserMedia as a JSBuiltin wrapper around navigator.mediaDevices.getUserMedia.

        Removed cpp based version.

        The js builting implementation checks for argument but does not raise exception when the request is not supported.
        The error callback is called instead, in an asynchronous fashion.
        The js builtin implementation does not check first that it is called on navigator, contrary to the cpp implementation.
        This is done afterwards when calling navigator.MediaDevices.@getUserMedia.

        Covered by existing and modified tests.

        * CMakeLists.txt: Adding NavigatorUserMedia.js as built-in JS file.
        * DerivedSources.make: Ditto.
        * Modules/mediastream/NavigatorUserMedia.idl: Making webkitGetUserMedia JSBuiltin
        * Modules/mediastream/NavigatorUserMedia.js:
        (webkitGetUserMedia):
        * Modules/mediastream/NavigatorUserMediaErrorCallback.h: Removed.
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl: Removed.
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.h: Removed.
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl: Removed.
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/mediastream/UserMediaRequest.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation): Style modifications.
        * bindings/js/JSNavigatorCustom.cpp: Removed.
        * bindings/js/WebCoreJSBuiltins.cpp: Adding support for NavigatorUserMedia.js built-in JS file.
        * bindings/js/WebCoreJSBuiltins.h: Ditto.
        (WebCore::JSBuiltinFunctions::JSBuiltinFunctions):
        (WebCore::JSBuiltinFunctions::navigatorUserMediaBuiltins):

2015-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Use GstBus sync message handler and schedule tasks to the main thread with RunLoop::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=150800

        Reviewed by Philippe Normand.

        This way we would avoid all the GScource + polling mechanism that
        GST uses internally to handle messages asynchronously in the main thread.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstMessage>):
        (WTF::derefGPtr<GstMessage>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Initialize the WeakPtr factory.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        reset the GstBus sync handler.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Make it void.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Add a
        GstBus sync message handler and schedule the messages to the main
        thread with RunLoop::main().dispatch().
        (WebCore::mediaPlayerPrivateMessageCallback): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::createWeakPtr): Create a WeakPtr.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        Handle the need context message that needs to be handled in the
        caller thread.
        (WebCore::mediaPlayerPrivateNeedContextMessageCallback): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::setPipeline): Do not
        connect to sync-message signal, handleSyncMessage() will be called
        to handled messages synchronously.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleNeedContextMessage): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2015-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Cleanup the iradio properties
        https://bugs.webkit.org/show_bug.cgi?id=148522

        Reviewed by Philippe Normand.

        Remove unused icecast code.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived):
        (webKitWebSrcGetProperty): Deleted.
        (webKitWebSrcStop): Deleted.

2015-11-02  Keith Rollin  <krollin@apple.com>

        input[type=number] does not increment/decrement integers with trailing decimal characters
        https://bugs.webkit.org/show_bug.cgi?id=148867
        rdar://problem/22589693

        Reviewed by Chris Dumez.

        Support input[type=number].value attributes of the form "###." (that
        is, leading digits with a decimal but no trailing digits). This form
        was supported in the setting of the attribute, but not when changing
        it through stepUp/Down.

        Testing turned up similarly incorrect processing of -.###, so
        addressed that, too.

        Test: fast/forms/range/input-appearance-range-decimals.html

        Updated the following tests:
        - fast/forms/number/number-stepup-stepdown-from-renderer.html
        - fast/forms/number/number-stepup-stepdown.html
        - fast/forms/range/range-stepup-stepdown-from-renderer.html
        - fast/forms/range/range-stepup-stepdown.html

        * html/InputType.cpp:
        (WebCore::InputType::stepUpFromRenderer):
        * platform/Decimal.cpp:
        (WebCore::Decimal::fromString):

2015-11-02  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test fast/css/background-repeat-null-y-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=150211
        <rdar://problem/23137321>

        Reviewed by Alex Christensen.

        This is a merge of Blink r188842:
        https://codereview.chromium.org/846933002

        By setting the backgroundRepeatY property to null it can
        happen that accessing that CSS value returns a null pointer.
        In that case simply bail out early.

        Test: fast/css/background-repeat-null-y-crash.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue):

2015-11-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [Vertical Writing Mode] Rename "vertical-right" CSS value to match spec
        https://bugs.webkit.org/show_bug.cgi?id=150766

        Reviewed by Darin Adler.

        The spec has changed the initial value of text-orientation from "vertical-right"
        to "mixed." This patch follows this movement, but also keeps the existing
        property working (the parser will treat both values the same).

        Test: fast/text/vertical-mixed.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextOrientation):
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::checkForOrientationChange):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::glyphDataForNonCJKCharacterWithGlyphOrientation):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::fontForCombiningCharacterSequence):
        * platform/text/TextFlags.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getFontAndGlyphOrientation):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2015-11-02  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Support WOFF2
        https://bugs.webkit.org/show_bug.cgi?id=150830

        Reviewed by Zalan Bujtas.

        On platforms which support it, WebKit only needs to recognize WOFF2.

        Test: fast/text/woff2.html

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):

2015-11-02  Nan Wang  <n_wang@apple.com>

        AX: Add support for ARIA 1.1 attribute 'aria-modal' for dialog and alertdialog
        https://bugs.webkit.org/show_bug.cgi?id=138566

        Reviewed by Chris Fleizach.

        Added support for aria-modal attribute on dialog/alertdialog roles.
        When modal dialog is displayed, all other contents will be unaccessible.

        Tests: accessibility/aria-modal-multiple-dialogs.html
               accessibility/aria-modal.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::findAriaModalNodes):
        (WebCore::AXObjectCache::updateCurrentAriaModalNode):
        (WebCore::AXObjectCache::isNodeVisible):
        (WebCore::AXObjectCache::ariaModalNode):
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleAttributeChanged):
        (WebCore::AXObjectCache::handleAriaModalChange):
        (WebCore::AXObjectCache::labelChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::handleAriaModalChange):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        (WebCore::AXObjectCache::handleAttributeChanged):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaCurrentState):
        (WebCore::AccessibilityObject::isAriaModalDescendant):
        (WebCore::AccessibilityObject::ignoredFromARIAModalPresence):
        (WebCore::AccessibilityObject::hasTagName):
        (WebCore::AccessibilityObject::defaultObjectInclusion):
        * accessibility/AccessibilityObject.h:
        * html/HTMLAttributeNames.in:

2015-11-02  Brady Eidson  <beidson@apple.com>

        Modern IDB: IBDObjectStore.delete() support.
        https://bugs.webkit.org/show_bug.cgi?id=150784

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbobjectstore-delete-1.html
               storage/indexeddb/modern/idbobjectstore-delete-2.html
               storage/indexeddb/modern/idbobjectstore-delete-failures.html

        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::isValid):
        * Modules/indexeddb/IDBKeyRangeData.h:
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::deleteRecord):
        (WebCore::IDBClient::IDBConnectionToServer::didDeleteRecord):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::get):
        (WebCore::IDBClient::IDBObjectStore::deleteFunction):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBClient::IDBTransaction::deleteRecordOnServer):
        (WebCore::IDBClient::IDBTransaction::didDeleteRecordOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::deleteRecord):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRange):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRecord): Deleted.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::deleteRange):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performDeleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformDeleteRecord):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::deleteRecordSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didDeleteRecord):
        (WebCore::InProcessIDBServer::deleteRecord):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-11-02  Andy Estes  <aestes@apple.com>

        Fix the iOS build again.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: supportsPictureInPicture() needs to be declared even when
        AVKit is disabled.

2015-11-02  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should take advantage of threaded scrolling
        https://bugs.webkit.org/show_bug.cgi?id=150037

        Reviewed by Anders Carlsson.

        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::PageOverlay):
        (WebCore::PageOverlay::setNeedsDisplay):
        Don't reset the overlay layer's opacity if we're not animating,
        because it's possible the client wants to manage it.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
        Let the overlay itself determine whether it needes synchronous scrolling,
        and let PageOverlay clients override the default.

        * platform/Widget.h:
        (WebCore::Widget::boundsRect):
        Export a few useful things.

2015-11-02  Chris Dumez  <cdumez@apple.com>

        Regression(r191673): Crash in RunLoopTimer::schedule()
        https://bugs.webkit.org/show_bug.cgi?id=150816
        <rdar://problem/23335285>

        Reviewed by Anders Carlsson.

        The crash was happening when the RunLoopTimer would fire during the
        call to RunLoopTimer::schedule(), which can happen because we are
        calling schedule() from a background thread. In such case, the
        timerFired() callback execution would cause |this| to get destroyed.

        To avoid this issue, DecodingResultDispatcher is now ref-counted. The
        object is ref'd while calling startTimer() so that the object cannot go
        away during the execution of this method. Also, we explicitly ref the
        object when starting the timer to keep the object alive until the
        RunLoopTimer has fired, at which point we explicitely de-ref.

        This should handle correctly the cases where the RunLoopTimer fires
        during AND after the execution of startTimer().

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::DecodingResultDispatcher::dispatch):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::startTimer):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::timerFired):

2015-11-02  Andy Estes  <aestes@apple.com>

        [Cocoa] Add tvOS and watchOS to SUPPORTED_PLATFORMS
        https://bugs.webkit.org/show_bug.cgi?id=150819

        Reviewed by Dan Bernstein.

        This tells Xcode to include these platforms in its Devices dropdown, making it possible to build in the IDE.

        * Configurations/Base.xcconfig:

2015-11-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] MiniBrowser unable to use WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=150810
        <rdar://problem/23358514>

        Reviewed by Timothy Hatcher.

        The CMakeList rule for creating the InjectedScriptSource.min.js was improperly including
        the quote characters in the text prepended to InjectedScriptSource.min.js. This caused a
        parsing error in the JS file.
        
        The solution was to switch from using "COMMAND echo" to use the more cross-platform
        compatible command "COMMAND ${CMAKE_COMMAND} -E echo ...", which handles the string
        escaping properly on all platforms.

        * CMakeLists.txt: Switch the 'echo' command syntax to be more cross-platform.

2015-11-02  Zalan Bujtas  <zalan@apple.com>

        hasOverflowClip() does not necessarily mean valid layer().
        https://bugs.webkit.org/show_bug.cgi?id=150814

        Reviewed by Simon Fraser.

        Certain RenderLayerModelObject derived classes simply return false for ::requiresLayer(), which means
        that we end up not creating a layer for the overflow clipped content.   

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::scrollLeft):
        (WebCore::RenderBox::scrollTop):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        (WebCore::RenderBox::intrinsicScrollbarLogicalWidth):
        (WebCore::RenderBox::usesCompositedScrolling):

2015-11-02  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after r191904.

        * PlatformMac.cmake:
        Move SettingsMac.mm to SettingsCocoa.mm.

2015-11-02  Eric Carlson  <eric.carlson@apple.com>

        Add HTMLMediaElement behavior and attribute value restrictions for MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=146853

        Reviewed by Jer Noble.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduleActiveStateChange): Do nothing if the active state hasn't changed.
        (WebCore::MediaStream::activityEventTimerFired): Remove FIXME.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::stopProducingData): Add comments. Notify observers that the track ended.
        (WebCore::MediaStreamTrack::trackEnded): Don't dispatch events after having been stopped.
        (WebCore::MediaStreamTrack::trackMutedChanged): Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::defaultPlaybackRate): Always return 1 when using a MediaStream.
        (WebCore::HTMLMediaElement::setDefaultPlaybackRate): Do nothing when using a MediaStream.
        (WebCore::HTMLMediaElement::playbackRate): Always return 1 when using a MediaStream.
        (WebCore::HTMLMediaElement::setPlaybackRate): Do nothing when using a MediaStream.
        (WebCore::HTMLMediaElement::ended): Ask the media engine when using a MediaStream.
        (WebCore::HTMLMediaElement::preload): Always return "none" when using a MediaStream.
        (WebCore::HTMLMediaElement::setPreload): Do nothing when using a MediaStream.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Avoid unnecessary comparisons when the duration
          is not definite. Send ended event when MediaStream says stream has ended.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::ended): New, passthrough to engine.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Set m_ended from stream.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::cancelLoad): Pause the stream if necessary.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Return early if ended or already playing.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Return early if ended or already paused.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): Cleanup. Try to grab a paused
          image if the stream isn't active.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateReadyState): New.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Call updateReadyState.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Ditto.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackEnabledChanged): Call updateActiveState so the state will
          be updated if necessary.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::stop): Don't call reset, there is no need to tear everything down.

2015-10-31  Andy Estes  <aestes@apple.com>

        Replace iOS-only WebKitSystemInterface calls with SPI
        https://bugs.webkit.org/show_bug.cgi?id=150763

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * config.h: Removed WEBCORE_NAVIGATOR_PLATFORM and WEBCORE_NAVIGATOR_VENDOR.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::isRunningOnIPhoneOrIPod): Used deviceClass() instead of iosDeviceClass().
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldNotPerformURLAdjustment): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        * page/NavigatorBase.cpp:
        * page/Settings.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::textDocumentParameters): Used screenSize() instead of wkGetScreenSize().
        * page/ios/UserAgentIOS.mm:
        (WebCore::isClassic): Added to return -[UIApplication _isClassic].
        (WebCore::osNameForUserAgent): Upstreamed the implementation of WKGetOSNameForUserAgent() from WebKitSystemInterface.
        (WebCore::deviceName): Ditto for wkGetDeviceName().
        (WebCore::standardUserAgentWithApplicationName): Called deviceName() and osNameForUserAgent().
        * page/mac/SettingsCocoa.mm: Renamed from Source/WebCore/page/mac/SettingsMac.mm.
        (WebCore::Settings::defaultMinimumZoomFontSize): Upstreamed the implementation of WKGetMinimumZoomFontSize() from WebKitSystemInterface.
        * platform/PlatformScreen.h:
        * platform/ios/Device.cpp: Added functions that answer queries about the iOS device from MobileGestalt.
        (WebCore::deviceClass):
        (WebCore::deviceName):
        (WebCore::deviceHasIPadCapability):
        * platform/ios/Device.h:
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenPPIFactor): Used MGGetSInt32Answer() and MGGetFloat32Answer() instead of mobileGestaltFloatValue().
        (WebCore::screenSize): Upstreamed the implementation of WKGetScreenSize() from WebKitSystemInterface.
        (WebCore::availableScreenSize): Ditto for WKGetAvailableScreenSize().
        (WebCore::screenScaleFactor): Ditto for WKGetScreenScaleFactor() and WKGetScaleFactorForScreen().
        (WebCore::mobileGestaltFloatValue): Deleted.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Removed.
        (iosExecutableWasLinkedOnOrAfterVersion): Deleted.
        (iosDeviceClass): Deleted.
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoPictureInPicture): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        (WebCore::supportsPictureInPicture): Upstreamed the implementation of WKIsOptimizedFullscreenSupported() from WebKitSystemInterface.
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow initWithLayer:]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().
        (-[WAKWindow initWithFrame:]): Ditto.
        * platform/ios/wak/WKGraphics.mm:
        (WKGraphicsCreateImageFromBundleWithName): Ditto.
        (WKDrawPatternBitmap): Ditto.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/spi/cocoa/DynamicLinkerSPI.h: Defined additional DYLD_IOS_VERSION macros.
        * platform/spi/ios/MobileGestaltSPI.h: Defined additional MobileGestalt queries, enum MGDeviceClass, MGGetSInt32Answer, and MGGetFloat32Answer.
        * platform/spi/ios/UIKitSPI.h: Copied from Source/WebCore/platform/spi/ios/UIColorSPI.h, and added SPI declarations for UIApplication and UIScreen.
        * rendering/RenderThemeIOS.mm: Included UIKitSPI.h instead of UIColorSPI.h, and removed unnecessary forward declarations for the iOS public SDK build.

2015-11-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191902.
        https://bugs.webkit.org/show_bug.cgi?id=150811

        This change broke iOS builders (Requested by ryanhaddad on
        #webkit).

        Reverted changeset:

        "Replace iOS-only WebKitSystemInterface calls with SPI"
        https://bugs.webkit.org/show_bug.cgi?id=150763
        http://trac.webkit.org/changeset/191902

2015-10-31  Andy Estes  <aestes@apple.com>

        Replace iOS-only WebKitSystemInterface calls with SPI
        https://bugs.webkit.org/show_bug.cgi?id=150763

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * config.h: Removed WEBCORE_NAVIGATOR_PLATFORM and WEBCORE_NAVIGATOR_VENDOR.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::isRunningOnIPhoneOrIPod): Used deviceClass() instead of iosDeviceClass().
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldNotPerformURLAdjustment): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        * page/NavigatorBase.cpp:
        * page/Settings.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::textDocumentParameters): Used screenSize() instead of wkGetScreenSize().
        * page/ios/UserAgentIOS.mm:
        (WebCore::isClassic): Added to return -[UIApplication _isClassic].
        (WebCore::osNameForUserAgent): Upstreamed the implementation of WKGetOSNameForUserAgent() from WebKitSystemInterface.
        (WebCore::deviceName): Ditto for wkGetDeviceName().
        (WebCore::standardUserAgentWithApplicationName): Called deviceName() and osNameForUserAgent().
        * page/mac/SettingsCocoa.mm: Renamed from Source/WebCore/page/mac/SettingsMac.mm.
        (WebCore::Settings::defaultMinimumZoomFontSize): Upstreamed the implementation of WKGetMinimumZoomFontSize() from WebKitSystemInterface.
        * platform/PlatformScreen.h:
        * platform/ios/Device.cpp: Added functions that answer queries about the iOS device from MobileGestalt.
        (WebCore::deviceClass):
        (WebCore::deviceName):
        (WebCore::deviceHasIPadCapability):
        * platform/ios/Device.h:
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenPPIFactor): Used MGGetSInt32Answer() and MGGetFloat32Answer() instead of mobileGestaltFloatValue().
        (WebCore::screenSize): Upstreamed the implementation of WKGetScreenSize() from WebKitSystemInterface.
        (WebCore::availableScreenSize): Ditto for WKGetAvailableScreenSize().
        (WebCore::screenScaleFactor): Ditto for WKGetScreenScaleFactor() and WKGetScaleFactorForScreen().
        (WebCore::mobileGestaltFloatValue): Deleted.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Removed.
        (iosExecutableWasLinkedOnOrAfterVersion): Deleted.
        (iosDeviceClass): Deleted.
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoPictureInPicture): Used supportsPictureInPicture() instead of wkIsOptimizedFullscreenSupported().
        (WebCore::supportsPictureInPicture): Upstreamed the implementation of WKIsOptimizedFullscreenSupported() from WebKitSystemInterface.
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow initWithLayer:]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().
        (-[WAKWindow initWithFrame:]): Ditto.
        * platform/ios/wak/WKGraphics.mm:
        (WKGraphicsCreateImageFromBundleWithName): Ditto.
        (WKDrawPatternBitmap): Ditto.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/spi/cocoa/DynamicLinkerSPI.h: Defined additional DYLD_IOS_VERSION macros.
        * platform/spi/ios/MobileGestaltSPI.h: Defined additional MobileGestalt queries, enum MGDeviceClass, MGGetSInt32Answer, and MGGetFloat32Answer.
        * platform/spi/ios/UIKitSPI.h: Copied from Source/WebCore/platform/spi/ios/UIColorSPI.h, and added SPI declarations for UIApplication and UIScreen.
        * rendering/RenderThemeIOS.mm:

2015-11-02  Frederic Wang  <fred.wang@free.fr>

        [Win] Add support for the USE_TYPO_METRICS flag
        https://bugs.webkit.org/show_bug.cgi?id=150451

        Reviewed by Darin Adler.

        Make the Windows backend use the typo metrics when the OS/2 USE_TYPO_METRICS flag is set.

        No new tests because this is already tested by fonts/use-typo-metrics-1.html

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::Font::platformInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::Font::initGDIFont):

2015-11-02  Hyunduk Kim  <hyunduk.kim@samsung.com>

        Enable MediaSource::isTypeSupported() to handle the upper-cased MIME type & Codec
        https://bugs.webkit.org/show_bug.cgi?id=150436

        Reviewed by Darin Adler.

        Got the new test case from
        https://github.com/w3c/web-platform-tests/blob/master/media-source/mediasource-is-type-supported.html 
        Tests: http\tests\media\media-source\mediasource-is-type-supported.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):

2015-11-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Rename JSDOMWrapper.impl to JSDOMWrapper.wrapped
        https://bugs.webkit.org/show_bug.cgi?id=150613

        Reviewed by Darin Adler.

        Renaming impl to wrapped in classes and binding generated classes.
        No change in behavior.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::JSQuickTimePluginReplacement::timedMetaData):
        (WebCore::JSQuickTimePluginReplacement::accessLog):
        (WebCore::JSQuickTimePluginReplacement::errorLog):
        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitAdditionalChildren):
        * bindings/js/JSAudioBufferSourceNodeCustom.cpp:
        (WebCore::JSAudioBufferSourceNode::setBuffer):
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::visitAdditionalChildren):
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSAudioTrackListCustom.cpp:
        (WebCore::JSAudioTrackList::visitAdditionalChildren):
        * bindings/js/JSBiquadFilterNodeCustom.cpp:
        (WebCore::JSBiquadFilterNode::setType):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitAdditionalChildren):
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitAdditionalChildren):
        (WebCore::getPropertyValueFallback):
        (WebCore::cssPropertyGetterPixelOrPosPrefix):
        (WebCore::cssPropertyGetter):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::webkitLineDash):
        (WebCore::JSCanvasRenderingContext2D::setWebkitLineDash):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContext::visitAdditionalChildren):
        * bindings/js/JSCharacterDataCustom.cpp:
        (WebCore::JSCharacterData::before):
        (WebCore::JSCharacterData::after):
        (WebCore::JSCharacterData::replaceWith):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::JSCommandLineAPIHost::inspectedObject):
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::inspect):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSCryptoCustom.cpp:
        (WebCore::JSCrypto::getRandomValues):
        * bindings/js/JSCryptoKeyCustom.cpp:
        (WebCore::JSCryptoKey::algorithm):
        * bindings/js/JSCryptoKeyPairCustom.cpp:
        (WebCore::JSCryptoKeyPair::visitAdditionalChildren):
        * bindings/js/JSCustomEventCustom.cpp:
        (WebCore::JSCustomEvent::detail):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        (WebCore::activeDOMWindow):
        (WebCore::firstDOMWindow):
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::toHTMLFormElementOrNull):
        (WebCore::JSDOMFormData::append):
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMNamedFlowCollectionCustom.cpp:
        (WebCore::JSDOMNamedFlowCollection::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::toWrapped):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate):
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        (WebCore::JSDOMStringMap::deleteProperty):
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSDOMTokenListCustom.cpp:
        (WebCore::JSDOMTokenList::toggle):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::shouldAllowAccessFrom):
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::updateDocument):
        (WebCore::JSDOMWindowBase::scriptExecutionContext):
        (WebCore::JSDOMWindowBase::printErrorMessage):
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        (WebCore::JSDOMWindowBase::shouldInterruptScript):
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSDOMWindowBase::javaScriptRuntimeFlags):
        (WebCore::JSDOMWindowBase::moduleLoaderResolve):
        (WebCore::JSDOMWindowBase::moduleLoaderFetch):
        (WebCore::JSDOMWindowBase::moduleLoaderEvaluate):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren):
        (WebCore::childFrameGetter):
        (WebCore::namedItemGetter):
        (WebCore::jsDOMWindowWebKit):
        (WebCore::jsDOMWindowIndexedDB):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::putByIndex):
        (WebCore::JSDOMWindow::deleteProperty):
        (WebCore::JSDOMWindow::deletePropertyByIndex):
        (WebCore::JSDOMWindow::getEnumerableLength):
        (WebCore::JSDOMWindow::getStructurePropertyNames):
        (WebCore::JSDOMWindow::getGenericPropertyNames):
        (WebCore::JSDOMWindow::getPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        (WebCore::JSDOMWindow::defineOwnProperty):
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::wrapped):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::wrapped):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/js/JSDataCueCustom.cpp:
        (WebCore::JSDataCue::value):
        (WebCore::JSDataCue::setValue):
        * bindings/js/JSDataTransferCustom.cpp:
        (WebCore::JSDataTransfer::types):
        * bindings/js/JSDedicatedWorkerGlobalScopeCustom.cpp:
        (WebCore::JSDedicatedWorkerGlobalScope::postMessage):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::acceleration):
        (WebCore::JSDeviceMotionEvent::accelerationIncludingGravity):
        (WebCore::JSDeviceMotionEvent::rotationRate):
        (WebCore::JSDeviceMotionEvent::interval):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::alpha):
        (WebCore::JSDeviceOrientationEvent::beta):
        (WebCore::JSDeviceOrientationEvent::gamma):
        (WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
        (WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
        (WebCore::JSDeviceOrientationEvent::absolute):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::prepend):
        (WebCore::JSDocument::append):
        * bindings/js/JSDocumentFragmentCustom.cpp:
        (WebCore::JSDocumentFragment::prepend):
        (WebCore::JSDocumentFragment::append):
        * bindings/js/JSDocumentTypeCustom.cpp:
        (WebCore::JSDocumentType::before):
        (WebCore::JSDocumentType::after):
        (WebCore::JSDocumentType::replaceWith):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::before):
        (WebCore::JSElement::after):
        (WebCore::JSElement::replaceWith):
        (WebCore::JSElement::prepend):
        (WebCore::JSElement::append):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTargetCustom.cpp:
        * bindings/js/JSFileReaderCustom.cpp:
        (WebCore::JSFileReader::result):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::namedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        (WebCore::JSHTMLCanvasElement::probablySupportsContext):
        (WebCore::JSHTMLCanvasElement::toDataURL):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        (WebCore::findCallingDocument):
        (WebCore::JSHTMLDocument::open):
        (WebCore::documentWrite):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::namedItems):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::JSHTMLFrameElement::setLocation):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::setSelectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionEnd):
        (WebCore::JSHTMLInputElement::selectionDirection):
        (WebCore::JSHTMLInputElement::setSelectionDirection):
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSHTMLMediaElementCustom.cpp:
        (WebCore::JSHTMLMediaElement::setController):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::nameGetter):
        (WebCore::JSHTMLOptionsCollection::setLength):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        (WebCore::JSHTMLSelectElement::indexSetter):
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        (WebCore::JSHTMLTemplateElement::content):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertySlotDelegate):
        (WebCore::JSHistory::putDelegate):
        (WebCore::JSHistory::deleteProperty):
        (WebCore::JSHistory::deletePropertyByIndex):
        (WebCore::JSHistory::getOwnPropertyNames):
        (WebCore::JSHistory::state):
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::createObjectStore):
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        (WebCore::JSIDBObjectStore::createIndex):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotDelegate):
        (WebCore::JSLocation::putDelegate):
        (WebCore::JSLocation::deleteProperty):
        (WebCore::JSLocation::deletePropertyByIndex):
        (WebCore::JSLocation::getOwnPropertyNames):
        (WebCore::JSLocation::toStringFunction):
        * bindings/js/JSMediaSourceStatesCustom.cpp:
        (WebCore::JSMediaSourceStates::width):
        (WebCore::JSMediaSourceStates::height):
        (WebCore::JSMediaSourceStates::frameRate):
        (WebCore::JSMediaSourceStates::aspectRatio):
        (WebCore::JSMediaSourceStates::facingMode):
        (WebCore::JSMediaSourceStates::volume):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitAdditionalChildren):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        (WebCore::handleInitMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitAdditionalChildren):
        (WebCore::JSMessagePort::postMessage):
        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::decisionPoint):
        (WebCore::JSMockContentFilterSettings::setDecisionPoint):
        (WebCore::JSMockContentFilterSettings::decision):
        (WebCore::JSMockContentFilterSettings::setDecision):
        (WebCore::JSMockContentFilterSettings::unblockRequestDecision):
        (WebCore::JSMockContentFilterSettings::setUnblockRequestDecision):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        (WebCore::JSNode::visitAdditionalChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitAdditionalChildren):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeOrString.cpp:
        (WebCore::toNodeOrStringVector):
        * bindings/js/JSOscillatorNodeCustom.cpp:
        (WebCore::JSOscillatorNode::setType):
        * bindings/js/JSPannerNodeCustom.cpp:
        (WebCore::JSPannerNode::setPanningModel):
        (WebCore::JSPannerNode::setDistanceModel):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObjectFromPluginViewBase):
        (WebCore::pluginScriptObject):
        (WebCore::pluginElementGetCallData):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::setValue):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::getOwnPropertyNames):
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitAdditionalChildren):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTextTrackCue::visitAdditionalChildren):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::visitAdditionalChildren):
        (WebCore::JSTextTrack::setKind):
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSTextTrackListCustom.cpp:
        (WebCore::JSTextTrackList::visitAdditionalChildren):
        * bindings/js/JSTrackCustom.cpp:
        (WebCore::toTrack):
        * bindings/js/JSTrackEventCustom.cpp:
        (WebCore::JSTrackEvent::track):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitAdditionalChildren):
        * bindings/js/JSUserMessageHandlersNamespaceCustom.cpp:
        (WebCore::JSUserMessageHandlersNamespace::getOwnPropertySlotDelegate):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::visitAdditionalChildren):
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * bindings/js/JSVideoTrackListCustom.cpp:
        (WebCore::JSVideoTrackList::visitAdditionalChildren):
        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::JSWebGL2RenderingContext::visitAdditionalChildren):
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter):
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContextBase::visitAdditionalChildren):
        (WebCore::JSWebGLRenderingContextBase::getAttachedShaders):
        (WebCore::JSWebGLRenderingContextBase::getExtension):
        (WebCore::JSWebGLRenderingContextBase::getFramebufferAttachmentParameter):
        (WebCore::JSWebGLRenderingContextBase::getParameter):
        (WebCore::JSWebGLRenderingContextBase::getProgramParameter):
        (WebCore::JSWebGLRenderingContextBase::getShaderParameter):
        (WebCore::JSWebGLRenderingContextBase::getSupportedExtensions):
        (WebCore::JSWebGLRenderingContextBase::getUniform):
        (WebCore::JSWebGLRenderingContextBase::uniform1fv):
        (WebCore::JSWebGLRenderingContextBase::uniform1iv):
        (WebCore::JSWebGLRenderingContextBase::uniform2fv):
        (WebCore::JSWebGLRenderingContextBase::uniform2iv):
        (WebCore::JSWebGLRenderingContextBase::uniform3fv):
        (WebCore::JSWebGLRenderingContextBase::uniform3iv):
        (WebCore::JSWebGLRenderingContextBase::uniform4fv):
        (WebCore::JSWebGLRenderingContextBase::uniform4iv):
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix2fv):
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix3fv):
        (WebCore::JSWebGLRenderingContextBase::uniformMatrix4fv):
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib1fv):
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib2fv):
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib3fv):
        (WebCore::JSWebGLRenderingContextBase::vertexAttrib4fv):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitAdditionalChildren):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage):
        (WebCore::constructJSWorker):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::JSWorkerGlobalScopeBase):
        (WebCore::JSWorkerGlobalScopeBase::scriptExecutionContext):
        * bindings/js/JSWorkerGlobalScopeBase.h:
        (WebCore::JSWorkerGlobalScopeBase::wrapped):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::visitAdditionalChildren):
        (WebCore::JSWorkerGlobalScope::importScripts):
        (WebCore::JSWorkerGlobalScope::setTimeout):
        (WebCore::JSWorkerGlobalScope::setInterval):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitAdditionalChildren):
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::responseText):
        (WebCore::JSXMLHttpRequest::response):
        * bindings/js/JSXPathResultCustom.cpp:
        (WebCore::JSXPathResult::visitAdditionalChildren):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::setParameter):
        (WebCore::JSXSLTProcessor::getParameter):
        (WebCore::JSXSLTProcessor::removeParameter):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/js/ScriptState.cpp:
        (WebCore::domWindowFromExecState):
        * bindings/objc/DOM.mm:
        (+[DOMNode _nodeFromJSWrapper:]):
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateHeader):
        (GetIndexedGetterExpression):
        (GenerateImplementation):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectConstructor):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        (WebCore::JSTestActiveDOMObjectOwner::finalize):
        (WebCore::JSTestActiveDOMObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::finalize):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        (WebCore::JSTestCustomNamedGetterOwner::finalize):
        (WebCore::JSTestCustomNamedGetter::toWrapped):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::JSTestEventConstructorOwner::finalize):
        (WebCore::JSTestEventConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):
        (WebCore::JSTestEventTarget::getOwnPropertyNames):
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        (WebCore::JSTestEventTarget::visitChildren):
        (WebCore::JSTestEventTargetOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventTargetOwner::finalize):
        (WebCore::JSTestEventTarget::toWrapped):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        (WebCore::JSTestExceptionOwner::finalize):
        (WebCore::JSTestException::toWrapped):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestGenerateIsReachableOwner::finalize):
        (WebCore::JSTestGenerateIsReachable::toWrapped):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalNode):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::JSTestInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestInterfaceOwner::finalize):
        (WebCore::JSTestInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        (WebCore::JSTestMediaQueryListListener::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        (WebCore::JSTestNamedConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeName):
        (WebCore::setJSTestNodeName):
        (WebCore::JSTestNode::visitChildren):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::jsTestNondeterministicNondeterministicReadonlyAttr):
        (WebCore::jsTestNondeterministicNondeterministicWriteableAttr):
        (WebCore::jsTestNondeterministicNondeterministicExceptionAttr):
        (WebCore::jsTestNondeterministicNondeterministicGetterExceptionAttr):
        (WebCore::jsTestNondeterministicNondeterministicSetterExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicWriteableAttr):
        (WebCore::setJSTestNondeterministicNondeterministicExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicGetterExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicSetterExceptionAttr):
        (WebCore::jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunction):
        (WebCore::JSTestNondeterministicOwner::finalize):
        (WebCore::JSTestNondeterministic::toWrapped):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjStrictTypeCheckingAttribute):
        (WebCore::jsTestObjOnfoo):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithCallWithAndSetterCallWithAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        (WebCore::jsTestObjPutForwardsAttribute):
        (WebCore::jsTestObjPutForwardsNullableAttribute):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjStrictTypeCheckingAttribute):
        (WebCore::setJSTestObjOnfoo):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithCallWithAndSetterCallWithAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        (WebCore::setJSTestObjPutForwardsAttribute):
        (WebCore::setJSTestObjPutForwardsNullableAttribute):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionPrivateMethod):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence2):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionOrange):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionAny):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentPromise):
        (WebCore::JSTestObjOwner::finalize):
        (WebCore::JSTestObj::toWrapped):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsOwner::finalize):
        (WebCore::JSTestOverloadedConstructors::toWrapped):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::getOwnPropertyNames):
        (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItem):
        (WebCore::JSTestOverrideBuiltinsOwner::finalize):
        (WebCore::JSTestOverrideBuiltins::toWrapped):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        (WebCore::JSTestSerializedScriptValueInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionImmutablePointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithException):
        (WebCore::JSTestTypedefsOwner::finalize):
        (WebCore::JSTestTypedefs::toWrapped):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):
        (WebCore::JSattributeOwner::finalize):
        (WebCore::JSattribute::toWrapped):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyOwner::finalize):
        (WebCore::JSreadonly::toWrapped):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAccessInspectedScriptState):

2015-11-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        IDL functions and attributes should be JSBuiltin by default if interface is marked as JSBuiltinConstructor
        https://bugs.webkit.org/show_bug.cgi?id=150438

        Reviewed by Darin Adler.

        Binding generator is now deducing that function/attribute is JSBuiltin if the interface is marked as JSBuiltin.
        One exception is custom setters, getters or functions which remain C++ handled.
        Updated streams API IDLs accordingly.

        Binding generator knows whether class needs a DOM class by checking whether the interface is marked as JSBuiltin.
        Binding generator knows that class uses a JS built-in constructor if marked as JSBuiltin+Constructor.
        In particular, JSBuiltIn+CustomConstructor means that a DOM class is not needed and constructor is not JS built-in.

        Applied JSBuiltin+CustomConstructor to ReadableStreamReader and ReadableStreamController.
        Removing ReadableStreamReader and ReadableStreamController classes.

        Removed unneeded "Default" keyword for cancel function in WebIDL.

        Added a binding test case.
        No change in behavior.

        * Modules/streams/ByteLengthQueuingStrategy.idl: Marking interface as JSBuiltin and Constructable.
        * Modules/streams/CountQueuingStrategy.idl: Ditto.
        * Modules/streams/ReadableStream.idl: Ditto.
        * Modules/streams/ReadableStreamController.h: Removed.
        * Modules/streams/ReadableStreamController.idl: Marking interface as JSBuiltin and Constructable.
        * Modules/streams/ReadableStreamReader.h: Removed.
        * Modules/streams/ReadableStreamReader.idl: Marking interface as JSBuiltin and Constructable.
        * Modules/streams/WritableStream.idl: Ditto.
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::JSBuiltinReadableStreamReaderPrivateConstructor::createJSObject): Updated according new constructor.
        (WebCore::JSBuiltinReadableStreamControllerPrivateConstructor::createJSObject): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsImplementationClass):
        (GetAttributeGetterName):
        (GetAttributeSetterName):
        (GetFunctionName):
        (InstanceNeedsVisitChildren):
        (GenerateHeader):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        (GetConstructorTemplateClassName):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (IsConstructable):
        (ComputeFunctionSpecial):
        (IsJSBuiltin):
        (IsJSBuiltinConstructor):
        (AddJSBuiltinIncludesIfNeeded):
        (GetJSBuiltinFunctionName): Deleted.
        (GetJSBuiltinFunctionNameFromString): Deleted.
        (GetJSBuiltinScopeName): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestJSBuiltinConstructor.cpp:
        (webkit_dom_test_js_builtin_constructor_set_property):
        (webkit_dom_test_js_builtin_constructor_get_property):
        (webkit_dom_test_js_builtin_constructor_class_init):
        (webkit_dom_test_js_builtin_constructor_test_function):
        (webkit_dom_test_js_builtin_constructor_get_test_attribute):
        (webkit_dom_test_js_builtin_constructor_set_test_attribute):
        * bindings/scripts/test/GObject/WebKitDOMTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor):
        (WebCore::JSTestJSBuiltinConstructor::getOwnPropertySlot):
        (WebCore::jsTestJSBuiltinConstructorTestAttribute):
        (WebCore::jsTestJSBuiltinConstructorTestAttributeCustom):
        (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustom):
        (WebCore::setJSTestJSBuiltinConstructorTestAttribute):
        (WebCore::setJSTestJSBuiltinConstructorTestAttributeRWCustom):
        (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestFunction):
        (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunction):
        (WebCore::JSTestJSBuiltinConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestJSBuiltinConstructorOwner::finalize):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        (WebCore::JSTestJSBuiltinConstructor::toWrapped):
        (WebCore::JSTestJSBuiltinConstructorPrototype::createStructure): Deleted.
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::createPrototype): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::getPrototype): Deleted.
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        (WebCore::JSTestJSBuiltinConstructor::create):
        (WebCore::JSTestJSBuiltinConstructor::finishCreation):
        (WebCore::wrapperOwner):
        (WebCore::toJS):
        (WebCore::JSTestJSBuiltinConstructor::createStructure): Deleted.
        * bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructor.mm:
        (-[DOMTestJSBuiltinConstructor testAttribute]):
        (-[DOMTestJSBuiltinConstructor setTestAttribute:]):
        (-[DOMTestJSBuiltinConstructor testAttributeCustom]):
        (-[DOMTestJSBuiltinConstructor testAttributeRWCustom]):
        (-[DOMTestJSBuiltinConstructor setTestAttributeRWCustom:]):
        (-[DOMTestJSBuiltinConstructor testFunction]):
        (-[DOMTestJSBuiltinConstructor testCustomFunction]):
        * bindings/scripts/test/TestJSBuiltinConstructor.idl:

2015-10-29  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] min-content row does not always shrink
        https://bugs.webkit.org/show_bug.cgi?id=144581

        Reviewed by Zalan Bujtas.

        Grid items height must be recomputed whenever the grid tracks
        change if the items had been previously stretched. In those
        cases we have to clear the override height and layout the item
        with the new row size.

        Tests: fast/css-grid-layout/min-content-row-must-shrink-when-column-grows.html
               fast/css-grid-layout/relayout-indefinite-heights.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):

2015-11-01  Brady Eidson  <beidson@apple.com>

        Modern IDB: IBDObjectStore.count() support.
        https://bugs.webkit.org/show_bug.cgi?id=150785

        Reviewed by Darin Adler.

        Tests: storage/indexeddb/modern/idbobjectstore-count-1.html
               storage/indexeddb/modern/idbobjectstore-count-failures.html

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getCount):
        (WebCore::IDBClient::IDBConnectionToServer::didGetCount):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::count):
        (WebCore::IDBClient::IDBObjectStore::doCount):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::setResult):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestCount):
        (WebCore::IDBClient::IDBTransaction::getCountOnServer):
        (WebCore::IDBClient::IDBTransaction::didGetCountOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didGetCount):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getCount):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getCount):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::countForKeyRange):
        (WebCore::IDBServer::MemoryObjectStore::valueForKeyRange):
        (WebCore::IDBServer::MemoryObjectStore::lowestKeyWithRecordInRange):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetCount):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformGetCount):
        (WebCore::IDBServer::UniqueIDBDatabase::performCountCallback):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::getCountSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::resultInteger):
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didGetCount):
        (WebCore::InProcessIDBServer::getCount):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-11-01  Darin Adler  <darin@apple.com>

        Tidy handling of type=color in HTMLInputElement a bit
        https://bugs.webkit.org/show_bug.cgi?id=150786

        Reviewed by Andreas Kling.

        * html/ColorInputType.cpp: Fix formatting.
        (WebCore::ColorInputType::fallbackValue): Use ASCIILiteral for slightly
        better performance.
        (WebCore::ColorInputType::sanitizeValue): Use convertToASCIILowercase,
        since there is no need for the general purpose Unicode lowercasing here;
        those non-ASCII characters aren't allowed by isValidColorString.
        (WebCore::ColorInputType::suggestions): Rewrote data list code to remove
        peculiarities such as using a null check to terminate the loop instead of
        the collection length, calling back to HTMLInputElement just to get the
        isValidColorString function called. Also used reserveInitialCapacity and
        uncheckedAppend for better memory use in the result vector.
        (WebCore::ColorInputType::selectColor): Added.

        * html/ColorInputType.h: Made derivation from ColorChooserClient private.
        Made most functions private. Added overrides for valueAsColor and selectColor,
        now both virtual functions in InputType.

        * html/HTMLInputElement.cpp: Removed now-unneeded include of ColorInputType.h.
        (WebCore::HTMLInputElement::valueAsColor): Added. Calls through to the InputType.
        In a later patch, will be used by accessibility code to get the color so it
        does not have to replicate the color parsing logic from this element.
        (WebCore::HTMLInputElement::selectColor): Renamed from selectColorInColorChooser,
        because the longer name is not clearer. Also made this non-conditional.

        * html/HTMLInputElement.h: Added valueAsColor, renamed selectColorInColorChooser
        to selectColor and made it available unconditionally.

        * html/InputType.cpp:
        (WebCore::InputType::valueAsColor): Added. Returns transparent color.
        (WebCore::InputType::selectColor): Added. Does nothing by default.

        * html/InputType.h: Added virtual valueAsColor and selectColor. Also tidied
        up the header a bit and removed unneeded Noncopyable (since this class has
        a reference for one of the data members and so is intrinsically not copyable).
        Made isColorControl available unconditionally.

        * testing/Internals.cpp:
        (WebCore::Internals::selectColorInColorChooser): Removed conditionals and
        made this call selectColor rather than selectColorInColorChooser.

        * testing/Internals.h: Made selectColorInColorChooser unconditional.

        * testing/Internals.idl: Made selectColorInColorChooser unconditionally
        present. Not important to optimize the test internals class by leaving it
        out when INPUT_TYPE_COLOR is not enabled.

2015-11-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Support Generator Syntax
        https://bugs.webkit.org/show_bug.cgi?id=150769

        Reviewed by Geoffrey Garen.

        Added ENABLE_ES6_GENERATORS flag.

        * Configurations/FeatureDefines.xcconfig:

2015-11-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up some CSS & Font code
        https://bugs.webkit.org/show_bug.cgi?id=150767

        Reviewed by Darin Adler.

        This patch migrates some CSS code to use references instead of pointers.
        It also migrates some Font code to use RefPtr instead of PassRefPtr.

        No new tests because there is no behavior change.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSFontSelector.cpp:
        (WebCore::createFontFace):
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontSelector.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::initUserStyle):
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets):
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        * platform/graphics/Font.cpp:
        (WebCore::Font::verticalRightOrientationFont):
        (WebCore::Font::uprightOrientationFont):
        (WebCore::Font::smallCapsFont):
        (WebCore::Font::emphasisMarkFont):
        (WebCore::Font::brokenIdeographFont):
        (WebCore::Font::nonSyntheticItalicFont):
        (WebCore::Font::createScaledFont):
        * platform/graphics/Font.h:
        (WebCore::Font::variantFont):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCreateScaledFont):
        * svg/SVGFontFaceElement.h:

2015-11-01  Darin Adler  <darin@apple.com>

        Remove some dead and unneeded code (ScrollbarThemeSafari, RenderThemeSafari, OPENCL, a little color space logic)
        https://bugs.webkit.org/show_bug.cgi?id=150783

        Reviewed by Tim Horton.

        * PlatformWinCairo.cmake: Removed ScrollbarThemeSafari.cpp, no reason to compile it.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToImage): Removed the code that set a color space
        on an image if it's set to device color space. This has been dead code for many releases
        of OS X and iOS at this point.

        * platform/graphics/filters/FEColorMatrix.h: Removed some ENABLE(OPENCL)-only code.
        * platform/graphics/filters/FEFlood.h: Ditto.
        * platform/graphics/filters/FEMerge.h: Ditto.
        * platform/graphics/filters/FETurbulence.h: Ditto.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::applyAll): Removed.
        (WebCore::FilterEffect::apply): Removed ENABLE(OPENCL)-only code.
        (WebCore::FilterEffect::platformApplyOpenCL): Removed.
        (WebCore::FilterEffect::clearResult): Removed ENABLE(OPENCL)-only code.
        (WebCore::FilterEffect::asImageBuffer): Ditto.
        (WebCore::FilterEffect::openCLImageToImageBuffer): Removed.
        (WebCore::FilterEffect::createOpenCLImageResult): Removed.
        (WebCore::FilterEffect::transformResultColorSpace): Removed ENABLE(OPENCL)-only code.

        * platform/graphics/filters/FilterEffect.h: Removed ENABLE(OPENCL)-only code.
        * platform/graphics/filters/SourceAlpha.h: Ditto.
        * platform/graphics/filters/SourceGraphic.h: Ditto.

        * platform/win/ScrollbarThemeSafari.cpp: Removed.
        * platform/win/ScrollbarThemeSafari.h: Removed.

        * rendering/RenderThemeMac.mm: Removed an obsolete comment.

        * rendering/RenderThemeSafari.cpp: Removed.
        * rendering/RenderThemeSafari.h: Removed.

        * svg/graphics/filters/SVGFEImage.h: Removed ENABLE(OPENCL)-only code.

2015-11-01  Andreas Kling  <akling@apple.com>

        Move the ResourceUsageOverlay out of the way by default.
        <https://webkit.org/b/150776>

        Reviewed by Darin Adler.

        Have the ResourceUsageOverlay show up in the bottom center of the viewport
        by default, instead of the top left. This way, you won't have to drag it
        out of the way all the time.

        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::ResourceUsageOverlay):
        (WebCore::ResourceUsageOverlay::initialize):
        * page/ResourceUsageOverlay.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformInitialize):

2015-11-01  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] Fix combinations of PLATFORM(GTK) and OS(DARWIN)
        https://bugs.webkit.org/show_bug.cgi?id=144560

        Reviewed by Darin Adler.

        * platform/graphics/PlatformDisplay.cpp: Only include the
        X11-specific GDK header on PLATFORM(X11). In other cases the
        normal gdk.h header is needed, which would otherwise be pulled in
        by gdkx.h.
        * platform/graphics/opentype/OpenTypeMathData.cpp: Change check
        for FourCharCode type from OS(DARWIN) to PLATFORM(COCOA). We
        can't remove it altogether because OT_MAKE_TAG doesn't work for
        all platforms.

2015-11-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use RunLoop::Timer in main thread shared timer GTK+ implementation
        https://bugs.webkit.org/show_bug.cgi?id=150754

        Reviewed by Darin Adler.

        It's more efficient because it uses a persistent source and it
        simplifies the code even more.

        * platform/MainThreadSharedTimer.cpp:
        (WebCore::MainThreadSharedTimer::fired): Make it non-const to be
        able to use it as function callback of a RunLoop::Timer.
        * platform/MainThreadSharedTimer.h:
        * platform/gtk/MainThreadSharedTimerGtk.cpp:
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        Initialize the RunLoop::Timer and set the prioriry.
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::stop):

2015-10-31  Andreas Kling  <akling@apple.com>

        Add a debug overlay with information about web process resource usage.
        <https://webkit.org/b/150599>

        Unreviewed follow-up to r191849.

        Add missing call to uninstall the PageOverlay if the ResourceUsageOverlay is being
        disabled through the setting. This way you don't end up with an unremovable overlay
        in the MiniBrowser.

        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay):

2015-10-31  Brady Eidson  <beidson@apple.com>

        IDB: Date objects don't work as keys or values.
        https://bugs.webkit.org/show_bug.cgi?id=150743

        Reviewed by Darin Adler.

        Test: storage/indexeddb/modern/date-basic.html

        The combination of the autogenerated bindings with Deprecated::ScriptValue was
        losing the fidelity of "Date" objects being Dates, and not just normal Objects.
        
        This was breaking their usage as IDBKeys.
        
        Custom binding + reworking the IDBObjectStore IDLs to use JSValue instead of ScriptValue
        fixes this handily.
        
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::add):
        (WebCore::IDBClient::IDBObjectStore::put):
        (WebCore::IDBClient::IDBObjectStore::putOrAdd):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:
        
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp:
        (WebCore::LegacyObjectStore::add):
        (WebCore::LegacyObjectStore::put):
        * Modules/indexeddb/legacy/LegacyObjectStore.h:
        
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:

        * bindings/js/JSIDBObjectStoreCustom.cpp:
        (WebCore::putOrAdd):
        (WebCore::JSIDBObjectStore::putRecord):
        (WebCore::JSIDBObjectStore::add):

2015-10-31  Andreas Kling  <akling@apple.com>

        Add a debug overlay with information about web process resource usage.
        <https://webkit.org/b/150599>

        Reviewed by Darin Adler.

        A new kind of PageOverlay is added behind the ENABLE(RESOURCE_USAGE_OVERLAY) flag.
        It's owned by Page, but not instantiated unless the Settings::resourceUsageOverlayVisible flag is set.

        All ResourceUsageOverlay objects share a single sampler thread. The thread currently runs every 500ms
        and samples CPU usage, dirty memory regions, and GC heap size/capacity.

        Most things in here are currently quite Mac-specific, but I will be iterating on this towards a more
        cross-platform friendly solution.

        There are two small changes to PageOverlay in order to support dragging the resource usage overlay:

            - A "should ignore mouse events outside bounds" state flag. This is on by default
              but turned off during a drag.
            - PageOverlay::bounds() will now return the override frame verbatim if one is set,
              instead of returning it relocated to 0,0.

        Note that this is intended as a tool for WebKit engine developers to better understand memory usage.
        It's not a goal to expose this information to end users.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::setResourceUsageOverlayVisible):
        * page/Page.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::bounds):
        (WebCore::PageOverlay::mouseEvent):
        * page/PageOverlay.h:
        * page/ResourceUsageOverlay.cpp: Added.
        (WebCore::ResourceUsageOverlay::ResourceUsageOverlay):
        (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay):
        (WebCore::ResourceUsageOverlay::mouseEvent):
        * page/ResourceUsageOverlay.h: Added.
        * page/Settings.cpp:
        (WebCore::Settings::setResourceUsageOverlayVisible):
        * page/Settings.h:
        (WebCore::Settings::resourceUsageOverlayVisible):
        * page/cocoa/ResourceUsageOverlayCocoa.mm: Added.
        (-[WebOverlayLayer initWithResourceUsageOverlay:]):
        (-[WebOverlayLayer drawInContext:]):
        (WebCore::RingBuffer::RingBuffer):
        (WebCore::RingBuffer::append):
        (WebCore::RingBuffer::last):
        (WebCore::RingBuffer::forEach):
        (WebCore::RingBuffer::incrementIndex):
        (WebCore::RingBuffer::decrementIndex):
        (WebCore::sharedData):
        (WebCore::ResourceUsageOverlay::platformInitialize):
        (WebCore::ResourceUsageOverlay::platformDestroy):
        (WebCore::drawCpuHistory):
        (WebCore::drawGCHistory):
        (WebCore::drawSlice):
        (WebCore::drawPlate):
        (WebCore::drawMemoryPie):
        (WebCore::formatByteNumber):
        (WebCore::showText):
        (WebCore::ResourceUsageOverlay::draw):
        (WebCore::dirtyPagesPerVMTag):
        (WebCore::cpuUsage):
        (WebCore::runSamplerThread):
        * platform/spi/cocoa/MachVMSPI.h:

2015-10-31  Brady Eidson  <beidson@apple.com>

        storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures.html is flaky.
        https://bugs.webkit.org/show_bug.cgi?id=150735

        Reviewed by Darin Adler.

        No new tests (Covered by existing tests).

        Transactions were liable to commit too early because IDBRequests could be waiting
        to dispatch their error/success events but their operations would no longer be
        registered with the transaction.
        
        Having outstanding requests should also keep a transaction from committing, just
        like having outstanding operations should.
        
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onUpgradeNeeded):
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::dispatchEvent):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::addRequest):
        (WebCore::IDBClient::IDBTransaction::removeRequest):
        (WebCore::IDBClient::IDBTransaction::operationTimerFired):
        (WebCore::IDBClient::IDBTransaction::requestGetRecord):
        (WebCore::IDBClient::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBClient::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBClient::IDBTransaction::operationDidComplete):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::completed):

2015-10-31  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Mac] Fix WebAudio build
        https://bugs.webkit.org/show_bug.cgi?id=150030

        Reviewed by Darin Adler.

        Wrap Accelerate.framework API calls around USE(ACCELERATE) ifdefs.

        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::Biquad):
        (WebCore::Biquad::process):
        (WebCore::Biquad::reset):
        * platform/audio/Biquad.h:
        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::process):
        * platform/audio/FFTFrame.h:
        * platform/audio/VectorMath.cpp:

2015-10-31  Brian Burg  <bburg@apple.com>

        Builtins generator should put WebCore-only wrappers in the per-builtin header
        https://bugs.webkit.org/show_bug.cgi?id=150539

        Reviewed by Youenn Fablet.

        Fix includes of removed XXXWrapper.h headers.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreJSBuiltinInternals.h:
        * bindings/js/WebCoreJSBuiltins.h:

2015-10-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add the support for Symbol attributes on IDL
        https://bugs.webkit.org/show_bug.cgi?id=150586

        Reviewed by Ryosuke Niwa.

        This patch addes readonly attribute support for Symbols.
        It involves the IDL generator functionality converting Native type (PrivateName) to Symbol.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute):
        (SkipFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValue):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipFunction):
        (SkipAttribute):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlySymbolAttr):
        (WebCore::jsTestObjConstructorStaticReadOnlySymbolAttr):
        * bindings/scripts/test/TestObj.idl:

2015-10-30  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBObjectStore.get() for IDBKeyRanges.
        https://bugs.webkit.org/show_bug.cgi?id=150718

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/get-keyrange.html

        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):
        * Modules/indexeddb/IDBKeyRangeData.h:
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getRecord):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::get):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestGetRecord):
        (WebCore::IDBClient::IDBTransaction::getRecordOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getRecord):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged):
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::deleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::setKeyValue):
        (WebCore::IDBServer::MemoryObjectStore::valueForKeyRange): Using a std::set, find the appropriate
          key in the range, and return the value if one exists.
        (WebCore::IDBServer::MemoryObjectStore::valueForKey): Deleted.
        * Modules/indexeddb/server/MemoryObjectStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetRecord):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::getRecord):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-10-30  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBObjectStore.clear() support.
        https://bugs.webkit.org/show_bug.cgi?id=150733

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbobjectstore-clear-1.html
               storage/indexeddb/modern/idbobjectstore-clear-2.html

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::clearObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::didClearObjectStore):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::clear):
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::setResultToUndefined):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBClient::IDBTransaction::clearObjectStoreOnServer):
        (WebCore::IDBClient::IDBTransaction::didClearObjectStoreOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::clearObjectStore):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreCleared):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::isAborting):

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::clearObjectStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::clear):
        (WebCore::IDBServer::MemoryObjectStore::replaceKeyValueStore):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performClearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformClearObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didClearObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::clearObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::clearObjectStoreSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didClearObjectStore):
        (WebCore::InProcessIDBServer::clearObjectStore):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        CSSParserVariable leaks seen on leaks bots
        https://bugs.webkit.org/show_bug.cgi?id=150724

        Reviewed by Darin Adler.

        * css/CSSParserValues.cpp:
        (WebCore::destroy):
        Cleanup variable CSSParserValues.

2015-10-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.

        * PlatformWin.cmake:
        Add missing files.

2015-10-30  Beth Dakin  <bdakin@apple.com>

        Tapping and holding a link should have a share option
        https://bugs.webkit.org/show_bug.cgi?id=150693
        -and corresponding-
        rdar://problem/21319702

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings:

2015-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Minor CGColor leaks seen on bots allocated in WebSystemBackdropLayer.mm
        https://bugs.webkit.org/show_bug.cgi?id=150722

        Reviewed by Andreas Kling.

        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.mm:
        (-[WebLightSystemBackdropLayer init]):
        (-[WebDarkSystemBackdropLayer init]):

2015-10-30  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Fix the debug build after r191758
        https://bugs.webkit.org/show_bug.cgi?id=150719

        Reviewed by Alex Christensen.

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):

2015-10-30  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * platform/graphics/Image.cpp:
        (WebCore::Image::draw): Deleted an infinitely-recursive implementation that caused the
          compiler to emit an error.
        * platform/graphics/Image.h:
        (WebCore::Image::draw): Made this pure virtual.

2015-10-30  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBObjectStore.add() support.
        https://bugs.webkit.org/show_bug.cgi?id=150711

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/basic-add.html

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::add):

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::requestGetRecord):

2015-10-30  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/dom.
        https://bugs.webkit.org/show_bug.cgi?id=150664

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::analyzeStyleSheetChange):
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::AuthorStyleSheets::activeStyleSheetsContains):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::updateValidityForAllButtons):
        * dom/ClientRectList.cpp:
        (WebCore::ClientRectList::ClientRectList):
        (WebCore::ClientRectList::~ClientRectList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        * dom/DOMNamedFlowCollection.cpp:
        (WebCore::DOMNamedFlowCollection::DOMNamedFlowCollection):
        (WebCore::DOMNamedFlowCollection::length):
        (WebCore::DOMNamedFlowCollection::item):
        (WebCore::DOMNamedFlowCollection::namedItem):
        * dom/DOMStringList.cpp:
        (WebCore::DOMStringList::contains):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::removedLastRef):
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale):
        (WebCore::Document::updateHoverActiveState):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (DocumentMarkerController::showMarkers):
        * dom/ElementData.cpp:
        (WebCore::UniqueElementData::findAttributeByName):
        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::updateTouchLists):
        (WebCore::EventPath::hasEventListeners):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::contains):
        (WebCore::EventListenerMap::containsCapturing):
        (WebCore::EventListenerMap::eventTypes):
        (WebCore::EventListenerMap::add):
        (WebCore::EventListenerMap::find):
        (WebCore::copyListenersNotCreatedFromMarkupToTarget):
        (WebCore::EventListenerMap::copyEventListenersNotCreatedFromMarkupToTarget):
        (WebCore::EventListenerIterator::EventListenerIterator):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::getAttributeEventListener):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/IdTargetObserverRegistry.cpp:
        (WebCore::IdTargetObserverRegistry::notifyObserversInternal):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentanglePorts):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observe):
        (WebCore::MutationObserver::deliver):
        (WebCore::MutationObserver::deliverAllMutations):
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::namedFlows):
        (WebCore::NamedFlowCollection::createCSSOMSnapshot):
        * dom/Node.cpp:
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Range.cpp:
        (WebCore::Range::processNodes):
        (WebCore::Range::processAncestorsAndTheirSiblings):
        (WebCore::Range::absoluteBoundingBox):
        (WebCore::Range::collectSelectionRects):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::matches):
        (WebCore::SelectorDataList::executeFastPathForIdSelector):
        (WebCore::SelectorDataList::executeSingleMultiSelectorData):
        (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData):
        (WebCore::SelectorDataList::execute):
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):

2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Make every port implement MainThreadSharedTimer instead of using global functions
        https://bugs.webkit.org/show_bug.cgi?id=150498

        Reviewed by Darin Adler.

        Move MainThreadSharedTimer to its own files and add the common
        implementation there.

        * CMakeLists.txt: Add MainThreadSharedTimer.cpp.
        * PlatformEfl.cmake: Update filenames.
        * PlatformGTK.cmake: Ditto.
        * PlatformMac.cmake: Ditto.
        * PlatformWin.cmake: Ditto.
        * platform/MainThreadSharedTimer.cpp: Copied from Source/WebCore/platform/efl/SharedTimerEfl.cpp.
        (WebCore::MainThreadSharedTimer::singleton):
        (WebCore::MainThreadSharedTimer::MainThreadSharedTimer):
        (WebCore::MainThreadSharedTimer::setFiredFunction):
        (WebCore::MainThreadSharedTimer::fired):
        * platform/MainThreadSharedTimer.h: Copied from Source/WebCore/platform/gtk/SharedTimerGtk.cpp.
        * platform/SharedTimer.h: Remove MainThreadSharedTimer
        implementation and reindent the code.
        (WebCore::SharedTimer::SharedTimer):
        (WebCore::SharedTimer::~SharedTimer):
        (WebCore::SharedTimer::invalidate):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers): Use MainThreadSharedTimer::singleton().
        (WebCore::ThreadTimers::setSharedTimer): Use a lambda function
        instead of a pointer to a static method.
        (WebCore::ThreadTimers::sharedTimerFired): Deleted.
        * platform/ThreadTimers.h: Removed unsused static method sharedTimerFired.
        * platform/cf/MainThreadSharedTimerCF.cpp: Renamed from Source/WebCore/platform/cf/SharedTimerCF.cpp.
        (WebCore::applicationDidBecomeActive):
        (WebCore::setupPowerObserver):
        (WebCore::timerFired):
        (WebCore::restartSharedTimer):
        (WebCore::MainThreadSharedTimer::invalidate):
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::stop):
        * platform/efl/MainThreadSharedTimerEfl.cpp: Renamed from Source/WebCore/platform/efl/SharedTimerEfl.cpp.
        (WebCore::timerEvent):
        (WebCore::MainThreadSharedTimer::stop):
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::invalidate):
        * platform/gtk/MainThreadSharedTimerGtk.cpp: Renamed from Source/WebCore/platform/gtk/SharedTimerGtk.cpp.
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::stop):
        (WebCore::MainThreadSharedTimer::invalidate):
        * platform/win/MainThreadSharedTimerWin.cpp: Renamed from Source/WebCore/platform/win/SharedTimerWin.cpp.
        (WebCore::TimerWindowWndProc):
        (WebCore::initializeOffScreenTimerWindow):
        (WebCore::queueTimerProc):
        (WebCore::MainThreadSharedTimer::setFireInterval):
        (WebCore::MainThreadSharedTimer::stop):
        (WebCore::MainThreadSharedTimer::invalidate):
        * workers/WorkerRunLoop.cpp: Update WorkerSharedTimer
        implementation to use std::function instead of a pointer. Also
        mark the class as final and the virtual implementations as override.

2015-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use RunLoop::Timer instead of GMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=150592

        Reviewed by Žan Doberšek.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::ResourceHandle::timeoutFired):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2015-10-30  Hunseop Jeong  <hs85.jeong@samsung.com>

        REGRESSION(r191776): EFL build broken.
        https://bugs.webkit.org/show_bug.cgi?id=150713

        Reviewed by Csaba Osztrogonác.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):

2015-10-29  Brady Eidson  <beidson@apple.com>

        Modern IDB: autoIncrement support.
        https://bugs.webkit.org/show_bug.cgi?id=150695

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/autoincrement-abort.html

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addNewObjectStore):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addExistingObjectStore):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::putRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::generateKeyNumber):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::currentKeyGeneratorValue):
        (WebCore::IDBServer::MemoryObjectStore::setKeyGeneratorValue):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        Make WebCore a framework in Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=150702

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        CMake build fix.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readFilenames):
        Before r191553, text was a local variable and could be changed.
        This restores the same behavior and compiles correctly when ATTACHMENT_ELEMENT is disabled.
        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):
        Added preprocessor macros.

2015-10-29  Brady Eidson  <beidson@apple.com>

        Modern IDB: deleteObjectStore support.
        https://bugs.webkit.org/show_bug.cgi?id=150673

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/deleteobjectstore-1.html
               storage/indexeddb/modern/idbdatabase-deleteobjectstore-failures.html
               storage/indexeddb/modern/idbobjectstore-get-failures.html

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::deleteObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::didDeleteObjectStore):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::deleteObjectStore):
        (WebCore::IDBClient::IDBDatabase::willCommitTransaction):
        (WebCore::IDBClient::IDBDatabase::willAbortTransaction):
        (WebCore::IDBClient::IDBDatabase::commitTransaction): Deleted.
        (WebCore::IDBClient::IDBDatabase::abortTransaction): Deleted.
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::markAsDeleted):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::abort):
        (WebCore::IDBClient::IDBTransaction::abortOnServer):
        (WebCore::IDBClient::IDBTransaction::commit):
        (WebCore::IDBClient::IDBTransaction::commitOnServer):
        (WebCore::IDBClient::IDBTransaction::deleteObjectStore):
        (WebCore::IDBClient::IDBTransaction::deleteObjectStoreOnServer):
        (WebCore::IDBClient::IDBTransaction::didDeleteObjectStoreOnServer):
        (WebCore::IDBClient::IDBTransaction::activate):
        (WebCore::IDBClient::IDBTransaction::activationTimerFired): Deleted.
        (WebCore::IDBClient::IDBTransaction::createObjectStoreOnServer): Deleted.
        (WebCore::IDBClient::IDBTransaction::didCreateObjectStoreOnServer): Deleted.
        (WebCore::IDBClient::IDBTransaction::getRecordOnServer): Deleted.
        (WebCore::IDBClient::IDBTransaction::putOrAddOnServer): Deleted.
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::completed):
        (WebCore::IDBClient::createTransactionOperation):
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::deleteObjectStore):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreDeleted):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::finish):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::restoreObjectStoreForVersionChangeAbort):
        (WebCore::IDBServer::MemoryIDBBackingStore::takeObjectStoreByName):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performDeleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformDeleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didDeleteObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::deleteObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::deleteObjectStoreSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didDeleteObjectStore):
        (WebCore::InProcessIDBServer::deleteObjectStore):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

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

        Very slow typing on pages with wheel event handlers on the body, and deep content
        https://bugs.webkit.org/show_bug.cgi?id=150692
        rdar://problem/23242631

        Reviewed by Zalan Bujtas.
        
        On a large page with a wheel event handler on the body, we would call
        Element::absoluteEventHandlerBounds() for every element under the body,
        and compute an absolute bounds for each one. This is very slow.
        
        For now, optimize computing a region for the <body> by just using the document
        bounds, which will always be as big or larger. It's OK for this region to
        be an overestimate.

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

2015-10-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Date input values should not overlap with menu list dropdown button on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150681
        <rdar://problem/19965078>

        Reviewed by Zalan Bujtas.

        Adds a right margin on iOS date and time inputs so that the inner div does
        not render the value of the date on top of the dropdown button on the right
        of the menu list.

        Tests: fast/forms/date/date-input-rendering-basic.html
               fast/forms/time/time-input-rendering-basic.html

        * css/html.css:
        (input::-webkit-date-and-time-value):

2015-10-29  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=150686

        Reviewed by Filip Pizlo.

        * PlatformMac.cmake:

2015-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        One more URTBF after r191731.

        * rendering/svg/RenderSVGResourcePattern.cpp:

2015-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r191731.

        * rendering/svg/RenderSVGResourcePattern.cpp:

2015-10-29  Zalan Bujtas  <zalan@apple.com>

        Fix ENABLE(TREE_DEBUGGING) release build.

        Unreviewed build fix.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * dom/Position.cpp:

2015-10-29  Beth Dakin  <bdakin@apple.com>

        Overlay scrollbars disappear during manual drag-scroll
        https://bugs.webkit.org/show_bug.cgi?id=150646
        -and corresponding-
        rdar://problem/23145734

        Reviewed by Tim Horton.

        New ScrollAnimator function so that we can tell the ScrollbarPainter whether 
        or not the mouse is tracking the scrollbar.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::mouseIsDownInScrollbar):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::mouseIsDownInScrollbar):
        * platform/ScrollableArea.h:

        Call into the new ScrollAnimator function of mouseDown and mouseUp.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):

        Add setTracking to the ScrollbarPainter.
        * platform/mac/NSScrollerImpDetails.h:

        Implement mouseIsDownInScrollbar to call setTracking appropriately and to set 
        begin/endScrollGesture since drag scrolling does not normally trigger that 
        state change.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::mouseIsDownInScrollbar):

2015-10-29  Eric Carlson  <eric.carlson@apple.com>

        MediaPlayer::getSupportedTypes only returns types from the last engine registered
        https://bugs.webkit.org/show_bug.cgi?id=150669

        Reviewed by Jer Noble.

        No new tests, fixes existing tests.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getSupportedTypes):
        (WebCore::MediaPlayer::isAvailable):

2015-10-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up and audit TimelineRecordFactory records
        https://bugs.webkit.org/show_bug.cgi?id=150660

        Reviewed by Brian Burg.

        Cleanup included removing unused methods and payload data that the
        frontend wasn't likely to use. Also added ASCIILiteral and removed
        unnecessary includes.

        * inspector/InspectorNetworkAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLayout):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        (WebCore::TimelineRecordFactory::createBackgroundRecord): Deleted.
        (WebCore::TimelineRecordFactory::createLayoutData): Deleted.
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::TimelineRecordFactory):

2015-10-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Exploitable crash happens when an SVG contains an indirect resource inheritance cycle
        https://bugs.webkit.org/show_bug.cgi?id=150203

        Reviewed by Brent Fulgham.

        Detecting cycles in SVG resource references happens in two places.
        1. In SVGResourcesCycleSolver::resolveCycles() which it is called from 
           SVGResourcesCache::addResourcesFromRenderer(). When a cycle is deleted,
           SVGResourcesCycleSolver::breakCycle() is called to break the link. In
           the case of a cyclic resource inheritance, SVGResources::resetLinkedResource()
           is called to break this cycle.
        2. SVGPatternElement::collectPatternAttributes() which is called from
           RenderSVGResourcePattern::buildPattern(). The purpose is to resolve
           the pattern attributes and to build a tile image which can be used to
           fill the SVG element renderer. Detecting the cyclic resource reference
           in this function is not sufficient and can detect simple cycles like
            <pattern id="a" xlink:href="#b"/>
            <pattern id="b" xlink:href="#a"/>.
           But it does not detect cycles like:
            <pattern id="a">
                <rect fill="url(#b)"/>
            </pattern>
            <pattern id="b" xlink:href="#a"/>.
   
        The fix is to get rid of SVGPatternElement::collectPatternAttributes() which
        uses SVGURIReference::targetElementFromIRIString() to navigates through the
        referenced resource elements and tries to detect cycles. Instead we can
        implement RenderSVGResourcePattern::collectPatternAttributes() which calls
        SVGResourcesCache::cachedResourcesForRenderer() to get the SVGResources
        of the pattern. Then we use SVGResources::linkedResource() to navigate the
        resource inheritance tree. The cached SVGResources is guaranteed to be free
        of cycles.

        Tests: svg/custom/pattern-content-inheritance-cycle.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::collectPatternAttributes):
        Collect the pattern attributes through the cachedResourcesForRenderer().
        
        (WebCore::RenderSVGResourcePattern::buildPattern):
        Direct the call to the renderer function.
        
        * rendering/svg/RenderSVGResourcePattern.h:
        
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        RenderSVGRoot needs to call SVGResourcesCache::clientStyleChanged() for all
        the invalidated resources. If an attribute of an SVG resource was updated
        dynamically, the cached SVGResources associated with the renderer of this
        resource was stale.
        
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        Direct the call to the renderer function.        
        
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        (WebCore::setPatternAttributes): Deleted.
        collectPatternAttributes() is a replacement of setPatternAttributes().
        
2015-10-29  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Turn WS states into integers and fix state initialization
        https://bugs.webkit.org/show_bug.cgi?id=150667

        Reviewed by Youenn Fablet.

        The goal of this patch is turning the writable stream states into integers instead of strings.

        First readable stream states were reworked to be shared with writable stream too, they are now just @stream*.

        Next step was having writable stream using integers instead of strings and translating those integers back to
        strings to be able to return them correctly with the writable stream state attribute.

        The state initialization was fixed and now it is not needed to check for the state to be undefined.

        Rework, no new tests needed.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamController.js:
        (enqueue):
        (error):
        (close):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader):
        (errorReadableStream):
        (cancelReadableStream):
        (finishClosingReadableStream):
        (closeReadableStream):
        (closeReadableStreamReader):
        (enqueueInReadableStream):
        (readFromReadableStreamReader):
        * Modules/streams/ReadableStreamReader.js:
        (cancel):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        (write):
        (state):
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):
        (errorWritableStream):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        * bindings/js/WebCoreBuiltinNames.h:

2015-10-28  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBDatabase.transaction() (and transaction scheduling in general).
        https://bugs.webkit.org/show_bug.cgi?id=150614

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/idbdatabase-transaction-failures.html
               storage/indexeddb/modern/transaction-scheduler-1.html
               storage/indexeddb/modern/transaction-scheduler-2.html
               storage/indexeddb/modern/transaction-scheduler-3.html
               storage/indexeddb/modern/transaction-scheduler-4.html
               storage/indexeddb/modern/transaction-scheduler-5.html
               storage/indexeddb/modern/transaction-scheduler-6.html

        * Modules/indexeddb/IDBDatabase.idl:

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::establishTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::didStartTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::hasRecordOfTransaction):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::transaction):
        (WebCore::IDBClient::IDBDatabase::didStartTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::operationTimerFired):
        (WebCore::IDBClient::IDBTransaction::didStart):
        (WebCore::IDBClient::IDBTransaction::establishOnServer):
        (WebCore::IDBClient::IDBTransaction::activate):
        (WebCore::IDBClient::IDBTransaction::deactivate):
        * Modules/indexeddb/client/IDBTransactionImpl.h:

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::establishTransaction):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::removeObjectStoreForVersionChangeAbort):
        (WebCore::IDBServer::MemoryIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::putRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::registerObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::unregisterObjectStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::enqueueTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::transactionSchedulingTimerFired):
        (WebCore::IDBServer::UniqueIDBDatabase::activateTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performActivateTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformActivateTransactionInBackingStore):
        (WebCore::IDBServer::scopesOverlap):
        (WebCore::IDBServer::UniqueIDBDatabase::takeNextRunnableTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::inProgressTransactionCompleted):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::create):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::objectStoreIdentifiers):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::didActivateInBackingStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::clientTransaction):
        (WebCore::IDBTransactionInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::establishTransaction):
        (WebCore::InProcessIDBServer::didStartTransaction):
        * Modules/indexeddb/shared/InProcessIDBServer.h:
        
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueData):
        
        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::transaction):
        
        * bindings/js/ScriptState.cpp:
        (WebCore::execStateFromPage):

2015-10-28  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Play MediaStream through media element and rendered to canvas
        https://bugs.webkit.org/show_bug.cgi?id=150449

        Reviewed by Jer Noble.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create): Don't die a recursive death.
        (WebCore::MediaStream::MediaStream): setClient -> addObserver. Set private stream's public stream pointer.
        (WebCore::MediaStream::~MediaStream): setClient -> addObserver. Clear private stream's public stream pointer.
        (WebCore::MediaStream::didAddTrack): Short circuit calling internalAddTrack when the track is unknown.
        (WebCore::MediaStream::didRemoveTrack): ASSERT that the track is known.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::trackProducingDataChanged): New.
        (WebCore::MediaStreamTrack::trackEnabledChanged): New.
        * Modules/mediastream/MediaStreamTrack.h:

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didRemoveRemoteStream): Use the new MediaStreamPrivate::publicStream() method.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
]        (WebCore::MediaStreamAudioSource::capabilities): capabilities isn't const.
        * Modules/webaudio/MediaStreamAudioSource.h:

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat): Reformat to make it use early return.

        * WebCore.xcodeproj/project.pbxproj: Remove MediaStreamPrivateAVFObjC.mm/h, they are no longer necessary.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector): Register MediaPlayerPrivateMediaStreamAVFObjC engine.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Cleanup, add logging.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Add
          logging, remove private stream observer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::registerMediaEngine): Cleanup.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::getSupportedTypes): Return an empty vector.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Use the MediaStreamPrivate passed instead
          of creating a new private stream. 
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::cancelLoad): Pause output.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareToPlay): Add logging.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): m_previewLayer -> m_videoBackgroundLayer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPausedImageVisible): New, show/hide the preview layer and configure
          the background layer so we show a still image even though the capture device continues to run. Start/stop clock.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Don't need to start the source, that happens in in load. Just
          set flags and hide the paused image.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Don't stop the source, it may be shared by more than one 
          stream/track. Just set the playing flag and show the paused image.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paused): Fix.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::internalSetVolume): New, called by setMuted and setVolume.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): New.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Don't mute the source, it doesn't do what you think.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasVideo): Pass-through to stream.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasAudio): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentMediaTime): Return clock time.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentReadyState): New.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::activeStatusChanged): Update readyState.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateIntrinsicSize): Update intrinsic size, create layers if necessary.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createPreviewLayers): Create preview layers.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::characteristicsChanged): Update for changed characteristics.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::seekable): 'seekable' must return an empty TimeRanges object.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext): New.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::scheduleDeferredTask):
        (WebCore::mimeTypeCache): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformMedia): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::playInternal): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pauseInternal): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sizeChanged): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::maxMediaTimeSeekable): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::minMediaTimeSeekable): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createImageFromSampleBuffer): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsAcceleratedRendering): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::movieLoadType): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::extraMemoryCost): Deleted.

        Delete MediaStreamPrivateAVFObjC.mm/.h as they aren't necessary. 
        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: Removed.
        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: Removed.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate): Add track observer!
        (WebCore::MediaStreamPrivate::addObserver): New.
        (WebCore::MediaStreamPrivate::removeObserver): New.
        (WebCore::MediaStreamPrivate::updateActiveState): Remember the first active video track.
        (WebCore::MediaStreamPrivate::addTrack): Notify observers.
        (WebCore::MediaStreamPrivate::removeTrack): Ditto.
        (WebCore::MediaStreamPrivate::startProducingData): Pass-through to tracks.
        (WebCore::MediaStreamPrivate::stopProducingData): Ditto.
        (WebCore::MediaStreamPrivate::isProducingData): Ditto.
        (WebCore::MediaStreamPrivate::hasVideo): Ditto.
        (WebCore::MediaStreamPrivate::hasAudio): Ditto.
        (WebCore::MediaStreamPrivate::platformLayer): Ditto.
        (WebCore::MediaStreamPrivate::paintCurrentFrameInContext): Either pass-through to first active video
          track, or paint the context black.
        (WebCore::MediaStreamPrivate::currentFrameImage): Pass-through to first active video track.
        (WebCore::MediaStreamPrivate::characteristicsChanged): Inform observers.
        (WebCore::MediaStreamPrivate::trackMutedChanged):
        (WebCore::MediaStreamPrivate::trackStatesChanged):
        (WebCore::MediaStreamPrivate::trackEnabledChanged):
        (WebCore::MediaStreamPrivate::trackProducingDataChanged):
        (WebCore::MediaStreamPrivate::scheduleDeferredTask): New, call a function asynchronously on
          the main thread.
        * platform/mediastream/MediaStreamPrivate.h:

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::endTrack):
        (WebCore::MediaStreamTrackPrivate::sourceProducingDataChanged): New, inform observers.
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::isProducingDataDidChange): New, inform observers.
        (WebCore::RealtimeMediaSource::setEnabled): Ditto.
        (WebCore::RealtimeMediaSource::stop): Call reset();
        * platform/mediastream/RealtimeMediaSource.h: Don't declare "capabilities" as const so 
          capabilities can be created and initialized lazily.

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::initializeCapabilities): New.
        (WebCore::AVAudioCaptureSource::addObserver): Hold the lock while calling observers so the list
          can't be mutated.
        (WebCore::AVAudioCaptureSource::setupCaptureSession): Log and fail if the session won't add the
          input or output.
        (WebCore::AVAudioCaptureSource::shutdownCaptureSession): Cleanup.
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Don't block
          if it isn't possible to acquire the lock. Hold the lock while calling observers.
        (WebCore::AVAudioCaptureSource::capabilities): Deleted.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::refreshCaptureDeviceList): Don't include devices that can't be used.
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints):  Use AVCaptureDeviceManager::sourceWithUID
          so constraints are considered.
        (WebCore::AVCaptureDeviceManager::sourceWithUID): Don't consider disabled devices. Always
          create a new capture device so each track starts out with a unique source.
        * platform/mediastream/mac/AVMediaCaptureSource.h:

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::globaAudioCaptureSerialQueue):
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource):
        (WebCore::AVMediaCaptureSource::~AVMediaCaptureSource): Remove KVO observers.
        (WebCore::AVMediaCaptureSource::startProducingData): m_isRunning is changed in captureSessionIsRunningDidChange.
        (WebCore::AVMediaCaptureSource::stopProducingData): Ditto.
        (WebCore::AVMediaCaptureSource::capabilities): New.
        (WebCore::AVMediaCaptureSource::setupSession): Add KVObservers for the properties we care about.
        (WebCore::AVMediaCaptureSource::reset): New, cleanup.
        (WebCore::AVMediaCaptureSource::captureSessionIsRunningDidChange): Dispatch to the main thread 
          to set m_isRunning, call isProducingDataDidChange so observers can find out.
        (WebCore::sessionKVOProperties):
        (-[WebCoreAVMediaCaptureSourceObserver disconnect]):
        (-[WebCoreAVMediaCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]):
        (-[WebCoreAVMediaCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]): Respond
          to running changes.
        (WebCore::AVMediaCaptureSource::captureSessionStoppedRunning): Deleted.
        (-[WebCoreAVMediaCaptureSourceObserver captureSessionStoppedRunning:]): Deleted.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::initializeCapabilities): Partial implementation.
        (WebCore::AVVideoCaptureSource::setupCaptureSession):  Log and fail if the session won't add the
          input or output.
        (WebCore::AVVideoCaptureSource::shutdownCaptureSession): Cleanup.
        (WebCore::AVVideoCaptureSource::updateFramerate): Renamed from calculateFramerate.
        (WebCore::AVVideoCaptureSource::currentFrameImage): Return an Image.
        (WebCore::AVVideoCaptureSource::platformLayer): New.
        (WebCore::AVVideoCaptureSource::capabilities): Deleted.
        (WebCore::AVVideoCaptureSource::calculateFramerate): Deleted.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC): AudioConverterRef is
          not a CF/ObjC object so we can't use a RetainPtr<> for it.
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput): Ditto.
        (WebCore::WebAudioSourceProviderAVFObjC::prepare): Ditto.
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare): Ditto.
        (WebCore::WebAudioSourceProviderAVFObjC::process): Fix typo in logging.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockSource::capabilities): Update for capabilities change.

        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: Update for capabilities change.

2015-10-28  Chris Dumez  <cdumez@apple.com>

        Regression(r191673): [WIN][EFL][GTK] layout tests using data URLs time out
        https://bugs.webkit.org/show_bug.cgi?id=150661

        Reviewed by Gyuyoung Kim.

        Do a partial revert of r191673. For some reason, using a Timer in
        DataURLDecoder does not work (it does not fire). Since non COCOA ports
        don't support RunLoopTimer, this patch reintroduces the use of
        callOnMainThread() on non-COCOA ports.

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decode):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::startTimer): Deleted.

2015-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename InspectorResourceAgent to InspectorNetworkAgent
        https://bugs.webkit.org/show_bug.cgi?id=150654

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculationImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveDataImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponseImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronouslyImpl):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronouslyImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponseImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::willDestroyCachedResourceImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrameImpl):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorNetworkAgent.cpp: Renamed from Source/WebCore/inspector/InspectorResourceAgent.cpp.
        (WebCore::InspectorNetworkAgent::InspectorNetworkAgent):
        (WebCore::InspectorNetworkAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorNetworkAgent::willDestroyFrontendAndBackend):
        (WebCore::buildObjectForHeaders):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorNetworkAgent::~InspectorNetworkAgent):
        (WebCore::InspectorNetworkAgent::timestamp):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::markResourceAsCached):
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::isErrorStatusCode):
        (WebCore::InspectorNetworkAgent::didReceiveData):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        (WebCore::InspectorNetworkAgent::didFailLoading):
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorNetworkAgent::setInitialScriptContent):
        (WebCore::InspectorNetworkAgent::didReceiveScriptResponse):
        (WebCore::InspectorNetworkAgent::didFinishXHRLoading):
        (WebCore::InspectorNetworkAgent::didReceiveXHRResponse):
        (WebCore::InspectorNetworkAgent::willLoadXHRSynchronously):
        (WebCore::InspectorNetworkAgent::didLoadXHRSynchronously):
        (WebCore::InspectorNetworkAgent::willDestroyCachedResource):
        (WebCore::InspectorNetworkAgent::willRecalculateStyle):
        (WebCore::InspectorNetworkAgent::didRecalculateStyle):
        (WebCore::InspectorNetworkAgent::didScheduleStyleRecalculation):
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):
        (WebCore::InspectorNetworkAgent::didCreateWebSocket):
        (WebCore::InspectorNetworkAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorNetworkAgent::didCloseWebSocket):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorNetworkAgent::didSendWebSocketFrame):
        (WebCore::InspectorNetworkAgent::didReceiveWebSocketFrameError):
        (WebCore::InspectorNetworkAgent::enable):
        (WebCore::InspectorNetworkAgent::disable):
        (WebCore::InspectorNetworkAgent::setExtraHTTPHeaders):
        (WebCore::InspectorNetworkAgent::getResponseBody):
        (WebCore::InspectorNetworkAgent::setCacheDisabled):
        (WebCore::InspectorNetworkAgent::loadResource):
        (WebCore::InspectorNetworkAgent::mainFrameNavigated):
        * inspector/InspectorNetworkAgent.h: Renamed from Source/WebCore/inspector/InspectorResourceAgent.h.
        * inspector/InspectorPageAgent.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorNetworkAgent):
        (WebCore::InstrumentingAgents::setInspectorNetworkAgent):
        (WebCore::InstrumentingAgents::inspectorResourceAgent): Deleted.
        (WebCore::InstrumentingAgents::setInspectorResourceAgent): Deleted.
        * inspector/NetworkResourcesData.h:

2015-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused / duplicate WebSocket timeline records
        https://bugs.webkit.org/show_bug.cgi?id=150647

        Reviewed by Timothy Hatcher.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        Only send what is needed by inspector now.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        These can all fast return if there is no frontend because the inspector
        doesn't record any information about web sockets until a frontend is connected.
        The inspector in this case just sends events to the frontend when things happen.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        Stop messaging the Timeline agent, we already message the Resource agent.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateWebSocket): Deleted.
        (WebCore::InspectorTimelineAgent::willSendWebSocketHandshakeRequest): Deleted.
        (WebCore::InspectorTimelineAgent::didReceiveWebSocketHandshakeResponse): Deleted.
        (WebCore::InspectorTimelineAgent::didDestroyWebSocket): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData): Deleted.
        (WebCore::TimelineRecordFactory::createGenericWebSocketData): Deleted.
        This is all duplicate information from the network domain.

2015-10-28  Andy Estes  <aestes@apple.com>

        [Content Filtering] Crash when allowing a 0-byte resource to load
        https://bugs.webkit.org/show_bug.cgi?id=150644
        <rdar://problem/23288538>

        Reviewed by Darin Adler.

        Test: contentfiltering/allow-empty-document.html

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::deliverResourceData): resourceBuffer will be null if the resource contained no data.

2015-10-28  Chris Dumez  <cdumez@apple.com>

        Assertion failure in WebCore::FrameLoader::stopLoading() running fast/events tests
        https://bugs.webkit.org/show_bug.cgi?id=150624

        Reviewed by Darin Adler.

        After r191652, a form's target attribute can no longer refer to a frame's id,
        only its name. This is because the frame's id no longer sets the Window name
        when the frame's name attribute is missing. This caused a change in behavior
        for the fast/events/form-iframe-target-before-load-crash*.html tests, which
        exposed a pre-existing bug.

        This patch updates the fast/events/form-iframe-target-before-load-crash*.html
        tests so they keep testing the same thing as before r191652. It also adds a
        variant to keep covering the newly exposed bug.

        The issue was that the frame was no longer navigated when submitting the form
        (due to the form's target not matching the frame name). Therefore, when
        removing the iframe from the document, its navigation has not started yet and
        DocumentLoadTiming::navigationStart() is not initialized yet when
        FrameLoader::stopLoading() is called and we hit an assertion. This patch
        replaces the assertion with an if check as we now know it can happen and we
        have test coverage for it.

        Test: fast/events/form-iframe-target-before-load-crash.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

2015-10-28  Brian Burg  <bburg@apple.com>

        Builtins generator should emit ENABLE(FEATURE) guards based on @conditional annotation
        https://bugs.webkit.org/show_bug.cgi?id=150536

        Reviewed by Yusuke Suzuki.

        Replace @optional=FEATURE with @conditional=ENABLE(FEATURE) in builtins files.

        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableStream.js:
        * Modules/streams/ReadableStreamController.js:
        * Modules/streams/ReadableStreamInternals.js:
        * Modules/streams/ReadableStreamReader.js:
        * Modules/streams/StreamInternals.js:
        * Modules/streams/WritableStream.js:
        * Modules/streams/WritableStreamInternals.js:

2015-10-28  Zalan Bujtas  <zalan@apple.com>

        Should never be reached failure in WebCore::backgroundRectForBox
        https://bugs.webkit.org/show_bug.cgi?id=150232

        Reviewed by Simon Fraser.

        We should never end up with simple container for composited layer when background-clip: text is present.
        (not even when the box has no decoration to paint)

        Test: fast/backgrounds/background-clip-text-with-simple-container.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsBoxDecorations):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::backgroundRectForBox):

2015-10-28  Chris Dumez  <cdumez@apple.com>

        Use RunLoopTimer in DataURLDecoder to avoid issues related to runloops
        https://bugs.webkit.org/show_bug.cgi?id=150609
        <rdar://problem/22702894>

        Reviewed by Antti Koivisto.

        Use RunLoopTimer in DataURLDecoder to avoid issues related to RunLoops.
        In particular, the callOnMainThread() call could fail to dispatch the
        decoding result to the main thread if the client-side would spin its own
        RunLoop.

        This is similar to the approach used in DocumentLoader for
        DocumentLoaderTimer.

        No new tests, verified through manual testing.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/mac/PageMac.mm: Renamed from Source/WebCore/page/mac/PageMac.cpp.
        (WebCore::Page::platformInitialize):
        (WebCore::Page::addSchedulePair):
        (WebCore::Page::removeSchedulePair):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::DecodingResultDispatcher::dispatch):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::DecodingResultDispatcher):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::startTimer):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::timerFired):
        (WebCore::DataURLDecoder::createDecodeTask):
        (WebCore::DataURLDecoder::decode):
        * platform/network/DataURLDecoder.h:

2015-10-28  Brady Eidson  <beidson@apple.com>

        Modern IDB: Implement most readonly attributes of IDBObjectStore.
        https://bugs.webkit.org/show_bug.cgi?id=150617

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/objectstore-attributes.html

        * Modules/indexeddb/IDBObjectStore.h:

        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::IDBAny):
        * Modules/indexeddb/client/IDBAnyImpl.h:
        (WebCore::IDBClient::IDBAny::create):

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::name):
        (WebCore::IDBClient::IDBObjectStore::keyPathAny):
        (WebCore::IDBClient::IDBObjectStore::keyPath):
        (WebCore::IDBClient::IDBObjectStore::transaction):
        (WebCore::IDBClient::IDBObjectStore::id): Deleted.
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:

        * Modules/indexeddb/legacy/LegacyObjectStore.h:
        (WebCore::LegacyObjectStore::transaction):

2015-10-28  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replace 0 and NULL with nullptr in WebCore/editing.
        https://bugs.webkit.org/show_bug.cgi?id=150555

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyCommandToComposite):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        * editing/EditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::HTMLElementEquivalent):
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::Editor::commandIsSupportedFromMenuOrKeyBinding):
        (WebCore::Editor::Command::Command):
        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::setCaretPosition):
        (WebCore::FrameSelection::directionOfSelection):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::entityMaskForText):
        * editing/MarkupAccumulator.h:
        * editing/RenderedPosition.cpp:
        (WebCore::rendererFromPosition):
        (WebCore::RenderedPosition::RenderedPosition):
        * editing/RenderedPosition.h:
        (WebCore::RenderedPosition::operator==):
        (WebCore::RenderedPosition::uncachedInlineBox):
        (WebCore::RenderedPosition::RenderedPosition):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        * editing/SetNodeAttributeCommand.cpp:
        (WebCore::SetNodeAttributeCommand::doUnapply):
        * editing/SmartReplaceCF.cpp:
        (WebCore::getSmartSet):
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellCheckRequest::didSucceed):
        (WebCore::SpellCheckRequest::didCancel):
        (WebCore::SpellCheckRequest::setCheckerAndSequence):
        (WebCore::SpellCheckRequest::requesterDestroyed):
        (WebCore::SpellChecker::SpellChecker):
        * editing/SpellChecker.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::enclosingBlockFlowElement):
        * editing/VisibleUnits.cpp:
        (WebCore::CachedLogicallyOrderedLeafBoxes::CachedLogicallyOrderedLeafBoxes):
        (WebCore::CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox):
        (WebCore::visualWordPosition):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * editing/htmlediting.cpp:
        (WebCore::highestEnclosingNodeOfType):
        (WebCore::highestNodeToRemoveInPruning):
        * editing/htmlediting.h:
        (WebCore::firstPositionInOrBeforeNode):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::fontForSelection):
        * editing/mac/AlternativeTextUIController.mm:
        (WebCore::AlternativeTextUIController::AlernativeTextContextController::alternativesForContext):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        * editing/markup.cpp:
        * editing/markup.h:

2015-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Add write method to writable stream
        https://bugs.webkit.org/show_bug.cgi?id=150589

        Reviewed by Darin Adler.

        Write method implemented on writable streams according to the spec.

        Current test set suffices. Expectations are updated accordingly.

        * Modules/streams/WritableStream.js:
        (write):

2015-10-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [Cairo] Incorrect dashed and dotted border painting after r177686.
        https://bugs.webkit.org/show_bug.cgi?id=141967

        Reviewed by Gyuyoung Kim.

        Fix the incorrect dashed/dotted border painting in cairo.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::calculateStrokePatternOffset): Deleted.
        (WebCore::drawLineOnCairoContext): Deleted.

2015-10-27  Chris Dumez  <cdumez@apple.com>

        id of iframe incorrectly sets window name
        https://bugs.webkit.org/show_bug.cgi?id=150565

        Reviewed by Darin Adler.

        As per the specification, the iframe's contentWindow name should be an
        empty string if the frame's name attribute is unset:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-name

        Instead, WebKit was using the iframe's id as window name if the name
        was unset.

        Firefox, IE and Chrome behave according to the specification.

        This is a merge of the following Blink commit:
        https://src.chromium.org/viewvc/blink?revision=169803&view=revision

        Test: fast/frames/iframe-no-name.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::insertedInto): Deleted.

2015-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Timeline MarkDOMContent and MarkLoad, data is already available
        https://bugs.webkit.org/show_bug.cgi?id=150615

        Reviewed by Timothy Hatcher.

        The timestamp only event data is already available from `Page.domContentEventFired`
        and `Page.loadEventFired` events. We can drop the Timeline specific events in
        favor of these which have existed for a very long time (before iOS 7).

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl): Deleted.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent): Deleted.
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent): Deleted.
        (WebCore::toProtocol): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createMarkData): Deleted.
        * inspector/TimelineRecordFactory.h:

2015-10-27  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/format-block-uneditable-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=150207
        <rdar://problem/23137066>

        Reviewed by Enrica Casucci.

        This is a merge of Blink r200238:
        https://codereview.chromium.org/1280263002

        Test: editing/execCommand/format-block-uneditable-crash.html

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        splitTextNode() will return early if the given text node is not editable. Hence, check
        its editablity before calling the method.

2015-10-27  Brady Eidson  <beidson@apple.com>

        Modern IDB: IDBTransaction.objectStore() support.
        https://bugs.webkit.org/show_bug.cgi?id=150607

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/aborted-put.html
               storage/indexeddb/modern/idbtransaction-objectstore-failures.html

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::put):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::objectStore):
        (WebCore::IDBClient::IDBTransaction::createObjectStoreOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addExistingObjectStore):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
        
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::infoForExistingObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::objectStores):

2015-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused / duplicated XHR timeline instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=150605

        Reviewed by Timothy Hatcher.

        These records are just duplicates of "EventDispatch" records for XHR
        load and readystatechange events. Due to the nesting, the XHR records
        were themselves never getting looked at, and their data (URL / readyState)
        not shown in the frontend.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchXHRReadyStateChangeEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchXHRLoadEventImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEvent): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchXHRReadyStateChangeEvent): Deleted.
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEvent): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchXHRLoadEvent): Deleted.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDispatchXHRReadyStateChangeEvent): Deleted.
        (WebCore::InspectorTimelineAgent::didDispatchXHRReadyStateChangeEvent): Deleted.
        (WebCore::InspectorTimelineAgent::willDispatchXHRLoadEvent): Deleted.
        (WebCore::InspectorTimelineAgent::didDispatchXHRLoadEvent): Deleted.
        (WebCore::toProtocol): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData): Deleted.
        (WebCore::TimelineRecordFactory::createXHRLoadData): Deleted.
        * inspector/TimelineRecordFactory.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): Deleted.

2015-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Do not send RenderingFrame TimelineRecords that have no children
        https://bugs.webkit.org/show_bug.cgi?id=150600

        Reviewed by Timothy Hatcher.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        The frontend already filters out empty RenderingFrame records
        (in TimelineManager.prototype._processRecord). Filter them out
        on the backend to reduce protocol traffic / noise.

2015-10-27  Alex Christensen  <achristensen@webkit.org>

        Cancel navigation policy checks like we do content policy checks.
        https://bugs.webkit.org/show_bug.cgi?id=150582
        rdar://problem/22077579

        Reviewed by Brent Fulgham.

        This was verified manually and I'll write a layout test for it soon.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded):
        * loader/DocumentLoader.h:
        Add a bool to keep track of whether we are waiting for navigation policy checks, like we do with content policy checks.
        Without this check, sometimes callbacks are made to DocumentLoaders that do not exist any more because they do not get
        cancelled by cancelPolicyCheckIfNeeded when detaching from the frame.

2015-10-27  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBObjectStore.put/get support.
        https://bugs.webkit.org/show_bug.cgi?id=150468

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/basic-put.html
               storage/indexeddb/modern/keypath-basic.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::deletedValue):
        (WebCore::IDBKeyData::operator<):
        (WebCore::IDBKeyData::operator==):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::isValid):
        (WebCore::IDBKeyData::operator!=):
        (WebCore::IDBKeyData::hash):
        (WebCore::IDBKeyData::isDeletedValue):
        (WebCore::IDBKeyDataHash::hash):
        (WebCore::IDBKeyDataHash::equal):
        (WebCore::IDBKeyDataHashTraits::constructDeletedValue):
        (WebCore::IDBKeyDataHashTraits::isDeletedValue):
        (WebCore::IDBKeyDataHashTraits::emptyValue):
        (WebCore::IDBKeyDataHashTraits::isEmptyValue):

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::IDBAny):
        (WebCore::IDBClient::IDBAny::modernIDBObjectStore):
        * Modules/indexeddb/client/IDBAnyImpl.h:
        (WebCore::IDBClient::IDBAny::create):

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::createObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::didCreateObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::putOrAdd):
        (WebCore::IDBClient::IDBConnectionToServer::didPutOrAdd):
        (WebCore::IDBClient::IDBConnectionToServer::getRecord):
        (WebCore::IDBClient::IDBConnectionToServer::didGetRecord):
        (WebCore::IDBClient::IDBConnectionToServer::saveOperation):
        (WebCore::IDBClient::IDBConnectionToServer::completeOperation):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
        (WebCore::IDBClient::IDBObjectStore::autoIncrement):
        (WebCore::IDBClient::IDBObjectStore::put):
        (WebCore::IDBClient::IDBObjectStore::get):
        (WebCore::IDBClient::IDBObjectStore::putOrAdd):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h:
        (WebCore::IDBClient::IDBObjectStore::info):

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest): Deleted.

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::create):
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::sourceObjectStoreIdentifier):
        (WebCore::IDBClient::IDBRequest::hasPendingActivity):
        (WebCore::IDBClient::IDBRequest::dispatchEvent):
        (WebCore::IDBClient::IDBRequest::setResult):
        (WebCore::IDBClient::IDBRequest::setResultToStructuredClone):
        (WebCore::IDBClient::IDBRequest::requestCompleted):
        (WebCore::IDBClient::IDBRequest::onError):
        (WebCore::IDBClient::IDBRequest::onSuccess):
        * Modules/indexeddb/client/IDBRequestImpl.h:

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::hasPendingActivity):
        (WebCore::IDBClient::IDBTransaction::isActive):
        (WebCore::IDBClient::IDBTransaction::operationTimerFired):
        (WebCore::IDBClient::IDBTransaction::commit):
        (WebCore::IDBClient::IDBTransaction::didAbort):
        (WebCore::IDBClient::IDBTransaction::createObjectStoreOnServer):
        (WebCore::IDBClient::IDBTransaction::requestGetRecord):
        (WebCore::IDBClient::IDBTransaction::getRecordOnServer):
        (WebCore::IDBClient::IDBTransaction::didGetRecordOnServer):
        (WebCore::IDBClient::IDBTransaction::requestPutOrAdd):
        (WebCore::IDBClient::IDBTransaction::putOrAddOnServer):
        (WebCore::IDBClient::IDBTransaction::didPutOrAddOnServer):
        (WebCore::IDBClient::IDBTransaction::activate):
        (WebCore::IDBClient::IDBTransaction::deactivate):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        (WebCore::IDBClient::IDBTransaction::isReadOnly):
        (WebCore::IDBClient::TransactionActivator::TransactionActivator):
        (WebCore::IDBClient::TransactionActivator::~TransactionActivator):

        * Modules/indexeddb/client/TransactionOperation.cpp: 
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::objectStoreIdentifier):
        (WebCore::IDBClient::TransactionOperation::transaction):
        (WebCore::IDBClient::createTransactionOperation):

        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd):
        (WebCore::IDBServer::IDBConnectionToClient::didGetRecord):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::putOrAdd):
        (WebCore::IDBServer::IDBServer::getRecord):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::putRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::containsRecord):
        (WebCore::IDBServer::MemoryObjectStore::deleteRecord):
        (WebCore::IDBServer::MemoryObjectStore::putRecord):
        (WebCore::IDBServer::MemoryObjectStore::valueForKey):
        * Modules/indexeddb/server/MemoryObjectStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performGetRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformGetRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::performKeyDataCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performValueDataCallback):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::isReadOnly):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::infoForExistingObjectStore):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:

        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::idbErrorName):
        (WebCore::idbErrorDescription):
        * Modules/indexeddb/shared/IDBError.h:

        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::serverConnectionIdentifier):
        (WebCore::IDBRequestData::objectStoreIdentifier):
        * Modules/indexeddb/shared/IDBRequestData.h:

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::putOrAddSuccess):
        (WebCore::IDBResultData::getRecordSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::resultKey):
        (WebCore::IDBResultData::resultData):

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didPutOrAdd):
        (WebCore::InProcessIDBServer::didGetRecord):
        (WebCore::InProcessIDBServer::putOrAdd):
        (WebCore::InProcessIDBServer::getRecord):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToJSValue):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::deserializeIDBValueData):
        (WebCore::scriptValueToIDBKey):
        (WebCore::idbKeyDataToScriptValue):
        * bindings/js/IDBBindingUtilities.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::ThreadSafeDataBuffer>::copy):
        * platform/CrossThreadCopier.h:

        * platform/ThreadSafeDataBuffer.h: Added.
        (WebCore::ThreadSafeDataBufferImpl::ThreadSafeDataBufferImpl):
        (WebCore::ThreadSafeDataBuffer::adoptVector):
        (WebCore::ThreadSafeDataBuffer::copyVector):
        (WebCore::ThreadSafeDataBuffer::ThreadSafeDataBuffer):
        (WebCore::ThreadSafeDataBuffer::data):

2015-10-27  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Anders Carlsson.

        * platform/spi/cg/CoreGraphicsSPI.h:

2015-10-27  Zhuo Li  <zachli@apple.com>

        Add WebKit API to clear data type Search Field Recent Searches.
        https://bugs.webkit.org/show_bug.cgi?id=150019.

        Reviewed by Anders Carlsson.

        * platform/cocoa/SearchPopupMenuCocoa.h: Add a function to remove recent searches based on
        time.
        * platform/cocoa/SearchPopupMenuCocoa.mm:
        (WebCore::typeCheckedRecentSearchesArray): Return nil if the recent searches array is
        corrupted, otherwise return the array.
        (WebCore::typeCheckedDateInRecentSearch): Return nil if the date in recent search is
        corrupted, otherwise return the date.
        (WebCore::typeCheckedRecentSearchesRemovingRecentSearchesAddedAfterDate): Return nil if the recent searches plist is
        corrupted, otherwise return the recent searches plist.
        (WebCore::writeEmptyRecentSearchesPlist): Replace the existing recent searches plist if there is
        any with a clean one.
        (WebCore::loadRecentSearches): Use -typeCheckedRecentSearchesArray and -typeCheckedDateInRecentSearch.
        (WebCore::removeRecentlyModifiedRecentSearches):
        When the time passed in is equivalent to [NSDate distantPast], clear all recent searches in
        the Recent Searches plist. Otherwise, we only clear the recent searches that were created
        after or at the time that is passed in as the parameter. If all recent searches associated
        with an autosave name were created after or at the time that is passed in as the parameter,
        remove this autosave name key and all of its values in the plist. If all recent searches
        associated with every autosave name in the plist were created after or at the time that is
        passed in as the parameter, clear all recent searches in the Recent Searches plist.

        Also, we clear all recent searches in the Recent Searches plist when we find the plist is
        corrupted.

2015-10-27  Keith Rollin  <krollin@apple.com>

        Do not sanitize user input for input[type=url]
        https://bugs.webkit.org/show_bug.cgi?id=150346
        <rdar://problem/23243240>

        Reviewed by Darin Adler.

        Do not sanitize user input in text-based input fields that support
        the Selection API, in order to not break JavaScript code that expects
        element.value to match what's on the screen.

        Test: fast/forms/input-user-input-sanitization.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::subtreeHasChanged):

2015-10-20  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Convert RenderTable* and AutoTableLayout to use LayoutUnit.
        https://bugs.webkit.org/show_bug.cgi?id=149366

        Reviewed by David Hyatt.

        This patch enables non-integral cell space distribution for both
        auto and fixed table layout.
        Due to the tight layout, float is used to calculate each cell's dimension/position and
        we convert them to LayoutUnits while said values are set on the renderer.
        Due to the (lack of) LayoutUnit precision, a fudge factor is applied on table cell's minimum width.   

        Collapsed table borders are still integral based, tracked here: webkit.org/b/150383

        Covered by existing tests.

        (WebCore::RenderTableSection::firstLineBaseline): Baseline is still integral (same as normal line layout)
        * rendering/RenderTreeAsText.cpp: flooring produces the least amount of rebaseline diff (still over 1200 tests). It doesn't really matter which direction we round
        as long as it is consistent.
        (WebCore::writeTextRun):
        (WebCore::writeSimpleLine):
        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::LayoutRect):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::distributeExtraLogicalHeight):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::addOverflowFromChildren):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        (WebCore::RenderTable::offsetWidthForColumn):
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::outerBorderBefore):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::outerBorderStart):
        (WebCore::RenderTable::outerBorderEnd):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::hBorderSpacing):
        (WebCore::RenderTable::vBorderSpacing):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        (WebCore::RenderTable::columnPositions):
        (WebCore::RenderTable::setColumnPosition):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalWidthFromColumns):
        (WebCore::RenderTableCell::computeIntrinsicPadding):
        (WebCore::RenderTableCell::setCellLogicalWidth):
        (WebCore::RenderTableCell::layout):
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::paddingBefore):
        (WebCore::RenderTableCell::paddingAfter):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        (WebCore::RenderTableCell::borderHalfLeft):
        (WebCore::RenderTableCell::borderHalfRight):
        (WebCore::RenderTableCell::borderHalfTop):
        (WebCore::RenderTableCell::borderHalfBottom):
        (WebCore::RenderTableCell::borderHalfStart):
        (WebCore::RenderTableCell::borderHalfEnd):
        (WebCore::RenderTableCell::borderHalfBefore):
        (WebCore::RenderTableCell::borderHalfAfter):
        (WebCore::CollapsedBorders::addBorder):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToAutoRows):
        (WebCore::RenderTableSection::distributeRemainingExtraLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToRows):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore):
        (WebCore::RenderTableSection::calcOuterBorderAfter):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::logicalRectForWritingModeAndDirection):
        (WebCore::RenderTableSection::dirtiedColumns):
        (WebCore::RenderTableSection::spannedColumns):
        (WebCore::RenderTableSection::offsetLeftForRowGroupBorder):
        (WebCore::RenderTableSection::offsetTopForRowGroupBorder):
        (WebCore::RenderTableSection::verticalRowGroupBorderHeight):
        (WebCore::RenderTableSection::horizontalRowGroupBorderWidth):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        (WebCore::RenderTableSection::setLogicalPositionForCell):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::outerBorderLeft):
        (WebCore::RenderTableSection::outerBorderRight):
        (WebCore::RenderTableSection::outerBorderTop):
        (WebCore::RenderTableSection::outerBorderBottom):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::width):

2015-10-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Add close method to writable stream
        https://bugs.webkit.org/show_bug.cgi?id=150560

        Reviewed by Darin Adler.

        Added the close method which requires three additional writable stream internal functions plus a queuing
        function to retrieve a value from the queue according to the spec.

        Current test set suffices. Expectations were updated accordingly.

        * Modules/streams/StreamInternals.js:
        (peekQueueValue):
        * Modules/streams/WritableStream.js:
        (close):
        * Modules/streams/WritableStreamInternals.js:
        (callOrScheduleWritableStreamAdvanceQueue):
        (writableStreamAdvanceQueue):
        (closeWritableStream): Added as per spec.

2015-10-26  Brady Eidson  <beidson@apple.com>

        Make IDBKeyData from a struct to a class.
        https://bugs.webkit.org/show_bug.cgi?id=150576

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        (WebCore::IDBKeyData::setArrayValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::minimum):
        (WebCore::IDBKeyData::maximum):
        (WebCore::IDBKeyData::isNull):
        (WebCore::IDBKeyData::type):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):
        * bindings/js/IDBBindingUtilities.h:
        * platform/CrossThreadCopier.h:

2015-10-26  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] [Stable] Build GL texture mapper only if USE_TEXTURE_MAPPER_GL
        https://bugs.webkit.org/show_bug.cgi?id=148606

        Unreviewed, build-only change.

        No new tests, build-only change.

        * PlatformGTK.cmake: Remove sources requiring GL from list of
        sources that are built when USE_TEXTURE_MAPPER is true, and add a
        separate condition within the USE_TEXTURE_MAPPER condition to
        build those sources when USE_TEXTURE_MAPPER_GL is true.

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

        Remove redundant GraphicsContext::clip(const Path&, WindRule)
        https://bugs.webkit.org/show_bug.cgi?id=150584

        Reviewed by Tim Horton.

        GraphicsContext had both clipPath(const Path&, WindRule) and clip(const Path&, WindRule),
        which were mostly the same other than GraphicsContext::clipPath() not clipping if the path
        was empty (added, I think by mistake, in r72926), and not calling m_data->clip().

        Make clipPath() be the winner, and have it behave like clip() with empty paths, and call m_data->clip().

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clip): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clip): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Making a path, calling addRoundedRect() and then clipping
        to the path is the same as context.clipRoundedRect().
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::paint):

2015-10-26  Zalan Bujtas  <zalan@apple.com>

        Floating box is misplaced after content change.
        https://bugs.webkit.org/show_bug.cgi?id=150271

        Reviewed by David Hyatt.

        Collapse anonymous block when as the result of a sibling removal only floating siblings are left.

        Test: fast/block/collapse-anon-block-with-float-siblings-only.html

        * rendering/RenderBlock.cpp:
        (WebCore::canCollapseAnonymousBlock):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        (WebCore::RenderBlock::removeChild):
        (WebCore::canMergeAnonymousBlock): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary):

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/crash-replacing-list-by-list.html
        https://bugs.webkit.org/show_bug.cgi?id=149288
        <rdar://problem/22746310>

        Reviewed by Chris Dumez.

        This is a merge of Blink r170821:
        https://codereview.chromium.org/220233013

        Test: editing/execCommand/crash-replacing-list-by-list.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/insert-image-changing-visibility-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=150208
        <rdar://problem/23137109>

        Reviewed by Chris Dumez.

        This is a merge from Blink r168502:
        https://codereview.chromium.org/183893018

        Test: editing/execCommand/insert-image-changing-visibility-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        We should check again the visibility of the inserted position again since
        the replacement might change the visibility.

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/insert-ordered-list-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=150209
        <rdar://problem/23137198>

        Reviewed by Chris Dumez.

        This is a merge from Blink r168006:
        https://codereview.chromium.org/181283002

        Test: editing/execCommand/insert-ordered-list-crash.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        setEndingSelection() might change endingSelection(), we should check again.

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/insert-html-to-document-element-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149294
        <rdar://problem/22746657>

        Reviewed by Darin Adler.

        This is a merge of Blink r175019:
        https://codereview.chromium.org/300143012

        Test: editing/execCommand/insert-html-to-document-element-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        check nullable value |element->parentNode()| before using it.

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/indent-nested-blockquotes-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149291
        <rdar://problem/22746473>

        Reviewed by Darin Adler.

        This is a merge of Blink r172967:
        https://codereview.chromium.org/251723003

        Test: editing/execCommand/indent-nested-blockquotes-crash.html

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

2015-10-26  Brady Eidson  <beidson@apple.com>

        Modern IDB: Backing store objectStores (plumbing for b/150468).
        https://bugs.webkit.org/show_bug.cgi?id=150543

        Reviewed by Alex Christensen.

        No new tests (No change in behavior, plumbing for future testability)

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/server/IDBBackingStore.h:

        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::addNewObjectStore):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::commit):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::finish):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::isWriting):

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::removeObjectStoreForVersionChangeAbort):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::create):
        (WebCore::IDBServer::MemoryObjectStore::MemoryObjectStore):
        (WebCore::IDBServer::MemoryObjectStore::~MemoryObjectStore):
        (WebCore::IDBServer::MemoryObjectStore::writeTransactionStarted):
        (WebCore::IDBServer::MemoryObjectStore::writeTransactionFinished):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        (WebCore::IDBServer::MemoryObjectStore::info):

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):

        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::idbErrorName):
        (WebCore::idbErrorDescription):
        * Modules/indexeddb/shared/IDBError.h:

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/indent-inline-box-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149290
        <rdar://problem/22746435>

        Reviewed by Alex Christensen.

        This is a merge of Blink r174952:
        https://codereview.chromium.org/297203004

        Test: editing/execCommand/indent-inline-box-crash.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):

2015-10-26  Jiewen Tan  <jiewen_tan@apple.com>

        Null dereference loading Blink layout test editing/execCommand/indent-no-visible-contents-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149292
        <rdar://problem/22746530>

        Reviewed by Alex Christensen.

        This is a merge of Blink r176735:
        https://codereview.chromium.org/349143002

        Test: editing/execCommand/indent-no-visible-contents-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphWithClones):
        Sometimes callers of this method will pass null startOfParagraphToMove || endOfParagraphToMove,
        hence check them before proceeding.

2015-10-26  Anders Carlsson  <andersca@apple.com>

        Remove dead context menu code
        https://bugs.webkit.org/show_bug.cgi?id=150567

        Reviewed by Tim Horton.

        * loader/EmptyClients.h:
        * page/ContextMenuClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu): Deleted.

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

        Implement 'round' and 'space' values for border-image
        https://bugs.webkit.org/show_bug.cgi?id=14185

        Reviewed by Tim Horton.
        
        Add support for "round" and "space" values for border-image-repeat.
        Following "stretch" and "repeat", the code is added to Image::drawTiled().
        
        For "round", we compute an integral number of copies of the image that fit,
        and then adjust the tile scale.
        
        For "space", we also compute an integral number N of copies that will fit,
        and then divide the remaining space amongst N+1 gaps, adjusting the tiling
        phase so that with an even number of images, a gap is centered.

        Tests: fast/borders/border-image-round.html
               fast/borders/border-image-space.html

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPattern):

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

        Incorrect repeated background-size behavior in keyframes
        https://bugs.webkit.org/show_bug.cgi?id=150309

        Reviewed by Zalan Bujtas.
        
        After computing the style for a keyframe, we failed to propagate unset
        fill-layer properties to all layers, which caused incorrect behavior when
        there were multiple background images, but only one value on a background
        property in the keyframes.
        
        Fix by calling adjustRenderStyle() on keyframe styles, which invokes
        style.adjustBackgroundLayers() which fixes the bug.

        Test: animations/multiple-backgrounds.html

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

2015-10-26  Chris Dumez  <cdumez@apple.com>

        Indexing an object with an integer that is not a supported property index should not call the named property getter
        https://bugs.webkit.org/show_bug.cgi?id=148871
        <rdar://problem/22589952>

        Reviewed by Darin Adler.

        Indexing an object with an integer that is not a supported property
        index should not call the named property getter, as per the Web IDL
        specification:
        https://heycam.github.io/webidl/#idl-indexed-properties (Note in blue)

        Firefox and Chrome both already behave according to the specification
        here so this patch aligns our behavior with other browsers as well.

        No new tests, already covered by existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex): Deleted.
        (WebCore::jsTestEventTargetConstructor): Deleted.

2015-10-26  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Implement abort method on writable streams
        https://bugs.webkit.org/show_bug.cgi?id=150444

        Reviewed by Darin Adler.

        Abort method on writable streams implemented according to the spec.

        Current test set suffices. Expectations are updated accordingly.

        * Modules/streams/StreamInternals.js:
        (promiseInvokeOrFallbackOrNoop): Implemented according to the spec.
        * Modules/streams/WritableStream.js:
        (abort): Implemented according to the spec.

2015-10-25  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/editing.
        https://bugs.webkit.org/show_bug.cgi?id=150354

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::AlternativeTextController::rootViewRectForRange):
        (WebCore::AlternativeTextController::markCorrection):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::dummySpanAncestorForNode):
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::reapply):
        (WebCore::EditCommandComposition::getNodesInCommand):
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::removeNode):
        (WebCore::copyMarkers):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/DictationCommand.cpp:
        (WebCore::DictationMarkerSupplier::addMarkersToTextNode):
        (WebCore::DictationCommand::collectDictationAlternativesInRange):
        * editing/EditingStyle.cpp:
        (WebCore::isEditingProperty):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::diffTextDecorations):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::markAndReplaceFor):
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::totalLength):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        (WebCore::ReplacementFragment::removeInterchangeNodes):
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::removeHeadContents):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::~SpellChecker):
        (WebCore::SpellChecker::client):
        (WebCore::SpellChecker::enqueueRequest):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply):
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::createFragmentAndAddResources):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readFilenames):
        (WebCore::Editor::createFragmentAndAddResources):
        * editing/markup.cpp:
        (WebCore::completeURLs):

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

        Support bezier paths in clip-path property
        https://bugs.webkit.org/show_bug.cgi?id=149996

        Reviewed by Darin Adler.
        
        Support path() in the -webkit-clip-path property, as specified in
        https://drafts.csswg.org/css-shapes-2/#supported-basic-shapes
        
        Added BasicShapePath and CSSBasicShapePath, which both represent the path
        as a SVGPathByteStream and wind rule.
        
        Make BasicShape::canBlend() a virtual function, and implement it on each subclass.
        Make various BasicShape subclass function overrides private, other than windRule()
        wich is called on derived classes in a few places.
        
        Add SVGPathBlender::canBlendPaths() which returns true if the given paths can be
        interpolated. Uses the same logic as blendAnimatedPath(), without doing any interpolation.
        
        RenderElement::createsGroup() is fixed to have clip-path trigger a group,
        which fixes rendering of clip-path with a descendant compositing layer.

        Tests: compositing/masks/clip-path-composited-descendent.html
               css3/masking/clip-path-with-path.html
               transitions/clip-path-path-transitions.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapePath::CSSBasicShapePath):
        (WebCore::CSSBasicShapePath::pathData):
        (WebCore::buildPathString):
        (WebCore::CSSBasicShapePath::cssText):
        (WebCore::CSSBasicShapePath::equals):
        * css/CSSBasicShapes.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapePath):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::createsGroup):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::canBlend):
        (WebCore::BasicShapeEllipse::canBlend):
        (WebCore::BasicShapePolygon::canBlend):
        (WebCore::BasicShapePath::BasicShapePath):
        (WebCore::BasicShapePath::path):
        (WebCore::BasicShapePath::operator==):
        (WebCore::BasicShapePath::canBlend):
        (WebCore::BasicShapePath::blend):
        (WebCore::BasicShapeInset::canBlend):
        (WebCore::BasicShape::canBlend): Deleted.
        * rendering/style/BasicShapes.h:
        * svg/SVGPathBlender.cpp:
        (WebCore::SVGPathBlender::addAnimatedPath):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        (WebCore::SVGPathBlender::canBlendPaths):
        (WebCore::SVGPathBlender::SVGPathBlender):
        (WebCore::SVGPathBlender::blendMoveToSegment):
        (WebCore::SVGPathBlender::blendLineToSegment):
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        * svg/SVGPathBlender.h:
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::operator==):
        * svg/SVGPathUtilities.cpp:
        (WebCore::canBlendSVGPathByteStreams):
        * svg/SVGPathUtilities.h:

2015-10-25  Gwang Yoon Hwang  <yoon@igalia.com>

        [TexMap] Fix a misused flag for GstGL
        https://bugs.webkit.org/show_bug.cgi?id=150545

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToTextureMapper):
        We should pass TextureMapperGL::Flags to the TextureMapperGL::drawTexture instead of
        BitmapTexture::Flags.

2015-10-25  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Use ImplementedAs for MediaDevices.getUserMediaFromJS
        https://bugs.webkit.org/show_bug.cgi?id=150439

        Reviewed by Darin Adler.

        No change in behavior.

        * Modules/mediastream/MediaDevices.h: Removing getUserMediaFromJS C++ function.
        * Modules/mediastream/MediaDevices.idl: Marking getUserMediaFromJS as ImplementedAS=getUserMedia

2015-10-24  Gwang Yoon Hwang  <yoon@igalia.com>

        Remove setApplyDeviceScaleFactorInCompositor
        https://bugs.webkit.org/show_bug.cgi?id=150538

        Reviewed by Tim Horton.

        It was used to support the device scale factor for chromium port and blackberry
        port. But it was removed quite a while ago.

        * page/Settings.in:
        applyDeviceScaleFactorInCompositor: Deleted
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::CompositingCoordinator): Remove uses
        of applyDeviceScaleFactorInCompositor.

2015-10-24  Tim Horton  <timothy_horton@apple.com>

        Expose more information about the exception in WKErrorJavaScriptExceptionOccurred errors
        https://bugs.webkit.org/show_bug.cgi?id=150525

        Reviewed by Darin Adler.

        Adjusted API test to cover this: WKWebView.EvaluateJavaScriptErrorCases.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSDOMBinding.h:
        Fill in the given struct with computed exception data if it was given.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptController.h:
        Plumb aforementioned struct through ScriptController.

2015-10-24  Gwang Yoon Hwang  <yoon@igalia.com>

        [TexMap] Clean up BitmapTexture and BitmapTextureGL.
        https://bugs.webkit.org/show_bug.cgi?id=143298

        Reviewed by Žan Doberšek.

        No new tests, this is just a refactor.

        * platform/graphics/texmap/BitmapTexture.h:
        (WebCore::BitmapTexture::canReuseWith): Deleted.
        Reuseability of a BitmapTexture is only decided by its size.
        We can use size() instead of this method.

        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::driverSupportsExternalTextureBGRA): Deleted.
        We do not have to check a suitable texture format in every
        update/reset. It is enough to store the formats in construction time
        and reuse them.

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

        REGRESSION (r187121): Delayed instantaneous animations not honouring ' forwards' fill-mode
        https://bugs.webkit.org/show_bug.cgi?id=150326

        Reviewed by Darin Adler.
        
        With a zero-duration, delayed fill-forwards animation, we'd end up trying
        to interpolate between the last and first keyframes, and picking the first
        because AnimationBase::progress() had a special case for zero duration. Removing
        this check fixes the bug.

        Test: animations/fill-mode-forwards-zero-duration.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):

2015-10-23  Chris Dumez  <cdumez@apple.com>

        RadioNodeList should be exposed on Window
        https://bugs.webkit.org/show_bug.cgi?id=148869
        <rdar://problem/22589828>

        Reviewed by Ryosuke Niwa.

        RadioNodeList should be exposed on on the global Window object, as per
        the HTML specification:
        https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist

        This patch addresses the issue, and aligns our behavior with Firefox
        and Chrome.

        No new tests, already covered by existing tests.

        * html/RadioNodeList.idl:

2015-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused ScrollLayer Timeline EventType
        https://bugs.webkit.org/show_bug.cgi?id=150518

        Reviewed by Timothy Hatcher.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willScrollLayerImpl): Deleted.
        (WebCore::InspectorInstrumentation::didScrollLayerImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willScrollLayer): Deleted.
        (WebCore::InspectorInstrumentation::didScrollLayer): Deleted.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willScroll): Deleted.
        (WebCore::InspectorTimelineAgent::didScroll): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Deleted.

2015-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up InspectorInstrumentation includes
        https://bugs.webkit.org/show_bug.cgi?id=150523

        Reviewed by Timothy Hatcher.

        * Modules/webdatabase/DatabaseManager.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/MediaQueryEvaluator.cpp:
        * dom/EventDispatcher.cpp:
        * dom/ExtensionStyleSheets.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDatabaseInstrumentation.h: Removed.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::toProtocol): Deleted.
        * loader/ResourceLoadScheduler.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        * page/Screen.cpp:
        * rendering/TextAutosizer.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::consoleMessageArgumentCounts): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/AbstractWorker.cpp:

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

        Avoid SVG-induced layouts inside Element::absoluteEventBounds()
        https://bugs.webkit.org/show_bug.cgi?id=150516

        Reviewed by Zalan Bujtas.

        Speculative fix for a crash under RenderObject::localToContainerQuad() when
        computing the wheel event handler region, which uses Element::absoluteEventHandlerBounds().
        Element::absoluteEventBounds() was calling SVGElement::getBoundingBox() in a way
        that could trigger a layout.

        * dom/Element.cpp:
        (WebCore::Element::absoluteEventBounds):

2015-10-23  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150517

        Reviewed by Tim Horton.

        * PlatformMac.cmake:

2015-10-23  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Improve test results for fast layouttests.
        https://bugs.webkit.org/show_bug.cgi?id=150464

        Reviewed by Alex Christensen.

        Disable the Mac ascent hack for WinCairo.

        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::Font::platformInit):

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

        REGRESSION (r187121): Multiple-keyframe animations not honouring ' forwards' fill-mode
        https://bugs.webkit.org/show_bug.cgi?id=150328

        Reviewed by Dean Jackson.
        
        AnimationBase::getElapsedTime() for a finished animation would return 1 (a progress),
        rather than a time value as the caller expects. Fix it to return the total duration
        if the animation has finished. This fixes the bug.
        
        Change CompositeAnimation::pauseAnimationAtTime() to be more permissive, allowing
        testing of filling-forwards animations with the pause API.

        Test: animations/fill-forwards-end-state.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseAnimationAtTime):

2015-10-23  Chris Dumez  <cdumez@apple.com>

        A label element not in a document should not label an element in a document
        https://bugs.webkit.org/show_bug.cgi?id=148863
        <rdar://problem/22589300>

        Reviewed by Ryosuke Niwa.

        As per the HTML specification, a label element's 'for' attribute may be
        specified to indicate a form control with which the caption is to be
        associated. If the attribute is specified, the attribute's value must
        be the ID of a labelable element in the same Document as the label
        element:
        https://html.spec.whatwg.org/multipage/forms.html#attr-label-for

        However, our code was failing to check if the label element was actually
        in the document before calling document.getElementById(). In such case,
        we would potentially return a labelable Element that is not in the same
        document as the label Element. This patch fixes the problem.

        The new behavior is consistent with Firefox.

        No new tests, already covered by existing test.

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):

2015-10-23  Antoine Quint  <graouts@apple.com>

        Support for SVG `beginEvent` event and `onbegin` attribute
        https://bugs.webkit.org/show_bug.cgi?id=150442

        Reviewed by Dean Jackson.

        Add support for the SVG `beginEvent` event, which is fired as an SVG timing element enters its active interval.
        Also add support for the SVG `onbegin` attribute which allows the definition of a JS event listener declaratively
        for the SVG `beginEvent` event.

        Tests: svg/animations/begin-event-attribute.svg
               svg/animations/begin-event-script.svg
               svg/animations/begin-event-syncbase.svg

        * dom/EventNames.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::smilBeginEventSender):
        (WebCore::smilEndEventSender):
        (WebCore::SVGSMILElement::~SVGSMILElement):
        (WebCore::SVGSMILElement::parseAttribute):
        (WebCore::SVGSMILElement::progress):
        (WebCore::SVGSMILElement::dispatchPendingEvent):
        * svg/svgattrs.in:

2015-10-23  Hyemi Shin  <hyemi.sin@samsung.com>

        ConvolverNode.buffer must have same sample-rate as the AudioContext 
        https://bugs.webkit.org/show_bug.cgi?id=150385 

        Reviewed by Chris Dumez.

        ConvolverNode.buffer must be of the same sample-rate as the AudioContext
        or an NOT_SUPPORTED_ERR exception MUST be thrown.

        Test : webaudio/convolver-setBuffer-different-samplerate.html

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/ConvolverNode.idl:

2015-10-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Migrate GraphicsContext::drawLineForDocumentMarker() away from LocalCurrentGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=150483

        Reviewed by Simon Fraser.

        LocalCurrentGraphicsContext is an ugly hack to work around the problem that many NS* functions
        operate on the current context rather than a context passed as an argument. This patch
        migrates from NSRectFillUsingOperation() which has this behavior to CGContextDrawTiledImage()
        which performs the same operation but with a passed-in CGContextRef. An added benefit is that
        we don't have to mess around with pattern-based NSColors. 

        No new tests because there is no behavior change.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::findImage):
        (WebCore::GraphicsContext::updateDocumentMarkerResources):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::makePatternColor): Deleted.

2015-10-22  Sam Weinig  <sam@webkit.org>

        Navigations on the same host (but with different schemes and ports) should not trigger universal links
        <rdar://problem/22811325>
        https://bugs.webkit.org/show_bug.cgi?id=150481

        Reviewed by Dan Bernstein.

        Add new helper which efficiently compares the hosts of two URLs.

        * platform/URL.cpp:
        (WebCore::hostsAreEqual):
        * platform/URL.h:

2015-10-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Timeline GCEvent Record type
        https://bugs.webkit.org/show_bug.cgi?id=150477

        Reviewed by Timothy Hatcher.

        This event is dispatched through the Heap domain, not Timelines.

        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGCEventData): Deleted.
        * inspector/TimelineRecordFactory.h:

2015-10-22  Gordon Sheridan  <gordon_sheridan@apple.com>

        Fix build for clang-700.0.59.5 by replacing deprecated calls to convert points between screen and window coordinates for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=150379

        Reviewed by Andy Estes.

        Provide WAKWindow versions of the non-deprecated methods for converting an NSRect between
        window and screen coordinates, which replace the deprecated methods that operated on an NSPoint.

        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow convertRectToScreen:]): Added.
        (-[WAKWindow convertRectFromScreen:]): Added.

2015-10-22  Alex Christensen  <achristensen@webkit.org>

        Fix Mac CMake build after r191433.

        * PlatformMac.cmake:
        Use CMakeLists.txt to generate UserAgentScripts.h and cpp.

2015-10-22  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r191113.

        Rollout r144451 since it regressed the visibility of the
        search cancel button when a search field is empty or showing
        placeholder text. Further investigation is needed.

        Reverted changeset:

        "[iOS] DOM click event may not be dispatched when page has
        :active style and <input type="search">"
        https://bugs.webkit.org/show_bug.cgi?id=144451
        http://trac.webkit.org/changeset/191113

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

        Add ways to log to log channels via a functional syntax, and via a TextStream
        https://bugs.webkit.org/show_bug.cgi?id=150472
 
        Reviewed by Tim Horton.
 
        Make it possible to write to a WTFLogChannel with a std::function that returns
        a const char*, and with stream syntax.
 
        Enhance TextStream to allow it to generate single-line output.

        * platform/Logging.cpp:
        (WebCore::logFunctionResult):
        * platform/Logging.h:
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::startGroup):
        (WebCore::TextStream::endGroup):
        (WebCore::TextStream::nextLine):
        (WebCore::TextStream::writeIndent):
        * platform/text/TextStream.h:
        (WebCore::TextStream::TextStream):

2015-10-22  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=150466

        Reviewed by Chris Dumez.

        * PlatformMac.cmake:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey):
        * page/mac/WheelEventDeltaFilterMac.mm:
        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:

2015-10-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Migrate WKSetPatternPhaseInUserSpace() and WKGetUserToBaseCTM() from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=150460

        Reviewed by Tim Horton.

        No reason to use WKSI for these calls.

        No new tests because there is no behavior change.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::getUserToBaseCTM):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::setPatternPhaseInUserSpace):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2015-10-22  Brady Eidson  <beidson@apple.com>

        Modern IDB: Basic createObjectStore implementation.
        https://bugs.webkit.org/show_bug.cgi?id=150455

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/createobjectstore-basic.html
               storage/indexeddb/modern/createobjectstore-failures.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::createObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::didCreateObjectStore):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::objectStoreNames):
        (WebCore::IDBClient::IDBDatabase::createObjectStore):
        (WebCore::IDBClient::IDBDatabase::didAbortTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        (WebCore::IDBClient::IDBDatabase::serverConnection):
        
        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp: Added.
        (WebCore::IDBClient::IDBObjectStore::create):
        (WebCore::IDBClient::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBClient::IDBObjectStore::~IDBObjectStore):
        (WebCore::IDBClient::IDBObjectStore::id):
        (WebCore::IDBClient::IDBObjectStore::name):
        (WebCore::IDBClient::IDBObjectStore::keyPathAny):
        (WebCore::IDBClient::IDBObjectStore::keyPath):
        (WebCore::IDBClient::IDBObjectStore::indexNames):
        (WebCore::IDBClient::IDBObjectStore::transaction):
        (WebCore::IDBClient::IDBObjectStore::autoIncrement):
        (WebCore::IDBClient::IDBObjectStore::add):
        (WebCore::IDBClient::IDBObjectStore::put):
        (WebCore::IDBClient::IDBObjectStore::openCursor):
        (WebCore::IDBClient::IDBObjectStore::get):
        (WebCore::IDBClient::IDBObjectStore::deleteFunction):
        (WebCore::IDBClient::IDBObjectStore::clear):
        (WebCore::IDBClient::IDBObjectStore::createIndex):
        (WebCore::IDBClient::IDBObjectStore::index):
        (WebCore::IDBClient::IDBObjectStore::deleteIndex):
        (WebCore::IDBClient::IDBObjectStore::count):
        * Modules/indexeddb/client/IDBObjectStoreImpl.h: Added.

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::requestCompleted):

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::serverConnection):
        (WebCore::IDBClient::IDBTransaction::objectStore):
        (WebCore::IDBClient::IDBTransaction::scheduleOperation):
        (WebCore::IDBClient::IDBTransaction::operationTimerFired):
        (WebCore::IDBClient::IDBTransaction::finishAbortOrCommit):
        (WebCore::IDBClient::IDBTransaction::didAbort):
        (WebCore::IDBClient::IDBTransaction::didCommit):
        (WebCore::IDBClient::IDBTransaction::createObjectStore):
        (WebCore::IDBClient::IDBTransaction::createObjectStoreOnServer):
        (WebCore::IDBClient::IDBTransaction::didCreateObjectStoreOnServer):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        (WebCore::IDBClient::IDBTransaction::originalDatabaseInfo):
        (WebCore::IDBClient::IDBTransaction::isVersionChange):
        
        * Modules/indexeddb/client/TransactionOperation.h: Added.
        (WebCore::IDBClient::TransactionOperation::perform):
        (WebCore::IDBClient::TransactionOperation::completed):
        (WebCore::IDBClient::TransactionOperation::identifier):
        (WebCore::IDBClient::TransactionOperation::transactionIdentifier):
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        (WebCore::IDBClient::createTransactionOperation):
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createObjectStore):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::performAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCreateObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::isVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createObjectStore):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::hasObjectStore):
        (WebCore::IDBDatabaseInfo::createNewObjectStore):
        (WebCore::IDBDatabaseInfo::addExistingObjectStore):
        (WebCore::IDBDatabaseInfo::objectStoreNames):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp: Copied from Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.cpp.
        (WebCore::IDBObjectStoreInfo::IDBObjectStoreInfo):
        (WebCore::IDBObjectStoreInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h: Copied from Source/WebCore/Modules/indexeddb/shared/IDBDatabaseInfo.h.
        (WebCore::IDBObjectStoreInfo::identifier):
        (WebCore::IDBObjectStoreInfo::name):
        (WebCore::IDBObjectStoreInfo::keyPath):
        (WebCore::IDBObjectStoreInfo::autoIncrement):

        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::requestIdentifier):
        (WebCore::IDBRequestData::transactionIdentifier):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::databaseIdentifier):
        (WebCore::IDBRequestData::requestIdentifier): Deleted.

        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::createObjectStoreSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didCreateObjectStore):
        (WebCore::InProcessIDBServer::createObjectStore):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBObjectStoreInfo>::copy):
        * platform/CrossThreadCopier.h:

2015-10-22  Alex Christensen  <achristensen@webkit.org>

        Initial NSURLSession WebResourceLoader implementation
        https://bugs.webkit.org/show_bug.cgi?id=150355

        Reviewed by Antti Koivisto.

        * platform/network/cf/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::AuthenticationChallenge): Export constructor for use in WebKit2.

2015-10-22  Frederic Wang  <fred.wang@free.fr>

        [Mac] Add support for the USE_TYPO_METRICS flag
        https://bugs.webkit.org/show_bug.cgi?id=150394

        Reviewed by Myles C. Maxfield.

        Make the Cocoa backend use the typo metrics for fonts with a MATH table when the OS/2 USE_TYPO_METRICS flag is set.

        No new tests because this is already tested by fonts/use-typo-metrics-1.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::fontHasMathTable): Add a function to verify whether a font has a MATH table.
        (WebCore::Font::platformInit): Verify whether the OS/2 USE_TYPO_METRICS flag is set and use the typo metrics if that is the case.

2015-10-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement touch-action: manipulation; for iOS
        https://bugs.webkit.org/show_bug.cgi?id=149854
        <rdar://problem/23017145>

        Reviewed by Benjamin Poulain.

        Implements the manipulation value for the CSS property touch-action. Adds support for
        parsing the touch-action property and two of its values: auto and manipulation.

        Tests: css3/touch-action/touch-action-computed-style.html
               css3/touch-action/touch-action-manipulation-fast-clicks.html
               css3/touch-action/touch-action-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TouchAction):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * dom/Element.cpp:
        (WebCore::Element::allowsDoubleTapGesture): Here, we determine whether an element that resulted from
            hit-testing a touch should allow double-tap gestures. To do this, we walk up the element's parents,
            stopping when we detect an element that disallows double tap gestures by having a touch-action other
            than auto or by hitting the root node.
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::allowsDoubleTapGesture):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2015-10-22  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r181972): Scroll position changes to top of youtube page when switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=150428

        Reviewed by Antti Koivisto.

        The bug was caused by updateFocusAppearance in WebPage::restoreSelectionInFocusedEditableElement
        revealing the focused element which was added in r181972. Fixed the bug by adding an option to
        suppress this behavior here.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateFocusAppearanceSoon):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::updateFocusAppearanceAfterAttachIfNeeded):
        (WebCore::Element::updateFocusAppearance):
        * dom/Element.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::updateFocusAppearance):
        * html/HTMLAreaElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::didAttachRenderers):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
        * html/HTMLTextAreaElement.h:

2015-10-22  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix build break since r191439
        https://bugs.webkit.org/show_bug.cgi?id=150441

        Reviewed by Csaba Osztrogonác.

        No new tests, no new behaviours.

        * platform/Logging.cpp:
        (WebCore::registerNotifyCallback):

2015-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r191423.

        Deprecate removed class WebKitDOMHTMLBaseFontElement.

        * PlatformGTK.cmake:
        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_html_base_font_element_init):
        (webkit_dom_html_base_font_element_class_init):
        (webkit_dom_html_base_font_element_get_color):
        (webkit_dom_html_base_font_element_set_color):
        (webkit_dom_html_base_font_element_get_face):
        (webkit_dom_html_base_font_element_set_face):
        (webkit_dom_html_base_font_element_get_size):
        (webkit_dom_html_base_font_element_set_size):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/WebKitDOMHTMLPrivate.cpp:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBaseFontElement.idl:

2015-10-22  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Add writable stream attributes
        https://bugs.webkit.org/show_bug.cgi?id=150389

        Reviewed by Darin Adler.

        This patch adds the three writable stream attributes, which are closed, ready and state. They are implemented
        according to the spec.

        Current test set suffices, expectations were adjusted accordingly.

        * Modules/streams/WritableStream.js:
        (initializeWritableStream): Style fix.
        (closed):
        (ready):
        (state): Implemented according to the spec.
        * Modules/streams/WritableStreamInternals.js:
        (isWritableStream): Implemented according to the spec.

2015-10-22  Frederic Wang  <fred.wang@free.fr>

        Rollout r190440 for the moment. It broke the build.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Deleted.

2015-10-22  Frederic Wang  <fred.wang@free.fr>

        Unreviewed compilation fix on Mac.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Use a pointer for the third argument of CFArrayContainsValue.

2015-10-21  Frederic Wang  <fred.wang@free.fr>

        Unreviewed compilation fix on Mac.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Add missing font argument.

2015-10-21  Frederic Wang  <fred.wang@free.fr>

        [Mac] Add support for the USE_TYPO_METRICS flag
        https://bugs.webkit.org/show_bug.cgi?id=150394

        Reviewed by Myles C. Maxfield.

        Make the Cocoa backend use the typo metrics for fonts with a MATH table when the OS/2 USE_TYPO_METRICS flag is set.

        No new tests because this is already tested by fonts/use-typo-metrics-1.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Verify whether the OS/2 USE_TYPO_METRICS flag is set and use the typo metrics if that is the case.

2015-10-21  Zalan Bujtas  <zalan@apple.com>

        Print out the render tree from command line.
        https://bugs.webkit.org/show_bug.cgi?id=150416

        Use system-wide notification server (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/notify_register_dispatch.3.html)
        to print out the render tree for the live documents.

        Usage: notifyutil -p com.apple.WebKit.showRenderTree

        Reviewed by Simon Fraser.

        No change in functionality.

        * platform/Logging.cpp:
        (WebCore::registerNotifyCallback):
        * platform/Logging.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::printRenderTreeForLiveDocuments):

2015-10-21  Alex Christensen  <achristensen@webkit.org>

        Fix CMake clean build after r191423.

        * CMakeLists.txt:
        HTMLBaseFontElement.idl no longer generates any JavaScript bindings.

2015-10-21  Brian Burg  <bburg@apple.com>

        Unreviewed, CMake build fix after r191433.

        * CMakeLists.txt: add WritableStreamInternals.js to WebCore_BUILTINS_SOURCES.

2015-10-21  Brian Burg  <bburg@apple.com>

        Restructure generate-js-bindings script to be modular and testable
        https://bugs.webkit.org/show_bug.cgi?id=149929

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

            Define JavaScriptCore_SCRIPTS_DIR explicitly so the add_custom_command and
            shared file lists are identical between JavaScriptCore and WebCore.

            The output files additionally depend on all builtin generator script files.

        * DerivedSources.make:

            Use JavaScriptCore_SCRIPTS_DIR so that the rule for code generation and
            shared file lists are identical between JavaScriptCore and WebCore.

            The output files additionally depend on all builtin generator script files.

        * WebCore.xcodeproj/project.pbxproj:

            Define JavaScriptCore_SCRIPTS_DIR before calling DerivedSources.make.
            This will eventually be merged with the other similar script paths.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):

            Update the generated builtin macro names.

        * generate-js-builtins: Removed.

2015-10-21  Alex Christensen  <achristensen@webkit.org>

        Recommit r191428.

        I don't think it was supposed to be reverted in r191429, and it really does fix the build.

        * loader/EmptyClients.h:
        (WebCore::EmptyContextMenuClient::~EmptyContextMenuClient):
        Remove customizeMenu again.

2015-10-21  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK][WK2] Fix build break since r191402, r191401
        https://bugs.webkit.org/show_bug.cgi?id=150432

        Unreviewed EFL and GTK build fix.

        * loader/EmptyClients.h:

2015-10-21  Alex Christensen  <achristensen@webkit.org>

        Build fix after r191422.

        * page/ContextMenuClient.h:
        (WebCore::ContextMenuClient::~ContextMenuClient):
        Completely remove customizeMenu.

2015-10-21  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove unnecessary default quota setting in DatabaseContext::databaseExceededQuota
        https://bugs.webkit.org/show_bug.cgi?id=150356

        Reviewed by Darin Adler.

        All ports have supported DatabaseContext::databaseExceededQuota(). Thus we don't need to
        keep a test code to extend database quota anymore.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseExceededQuota): Deleted.

2015-10-21  Chris Dumez  <cdumez@apple.com>

        Un-expose obsolete HTMLBaseFontElement
        https://bugs.webkit.org/show_bug.cgi?id=150397

        Reviewed by Anders Carlsson.

        Un-expose obsolete HTMLBaseFontElement:
        - https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features

        This means that we no longer expose HTMLBaseFontElement on the global
        Window object. Firefox and Chrome do not expose it either.

        Also, document.createElement("basefont") now returns an HTMLUnknownElement
        as per the specification. Firefox and Chrome return a generic HTMLElement
        instead but I don't think this is a big compatibility risk.

        No new tests, already covered by existing tests.

        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::HTMLBaseFontElement):
        * html/HTMLBaseFontElement.h:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLTagNames.in:

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Get rid of WebContextMenuClient::customizeMenu, it's no longer used
        https://bugs.webkit.org/show_bug.cgi?id=150427

        Reviewed by Tim Horton.
        * loader/EmptyClients.cpp:
        (WebCore::EmptyContextMenuClient::customizeMenu): Deleted.
        * loader/EmptyClients.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):

2015-10-21  Anders Carlsson  <andersca@apple.com>

        Remove dead MHTML code
        https://bugs.webkit.org/show_bug.cgi?id=150426

        Reviewed by Tim Horton.

        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):
        (WebCore::MHTMLArchive::generateMHTMLDataUsingBinaryEncoding): Deleted.
        * loader/archive/mhtml/MHTMLArchive.h:

2015-10-21  Dean Jackson  <dino@apple.com>

        Null dereference loading Blink layout test svg/filters/display-none-filter-primitive.html
        https://bugs.webkit.org/show_bug.cgi?id=150212
        <rdar://problem/23137376>

        Reviewed by Brent Fulgham.

        Handle the case where a filter element doesn't have a renderer. Inspired by the Blink
        commit:
        https://chromium.googlesource.com/chromium/src.git/+/fb79f7fc46552d45127acd2959a23662ad8f271e

        Test: svg/filters/display-none-filter-primitive.html

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::appendEffectToEffectReferences):

2015-10-21  Brady Eidson  <beidson@apple.com>

        Modern IDB: Add basic transaction aborting.
        https://bugs.webkit.org/show_bug.cgi?id=150148

        Reviewed by Alex Christensen.

        Tests: storage/indexeddb/modern/double-abort.html
               storage/indexeddb/modern/versionchange-abort-then-reopen.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * Modules/indexeddb/IndexedDB.h:
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::didAbortTransaction):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        
        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::abortTransaction):
        (WebCore::IDBClient::IDBDatabase::didCommitOrAbortTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::abort):
        (WebCore::IDBClient::IDBTransaction::isFinishedOrFinishing):
        (WebCore::IDBClient::IDBTransaction::activationTimerFired):
        (WebCore::IDBClient::IDBTransaction::didAbort):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        
        * Modules/indexeddb/server/IDBBackingStore.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::abortTransaction):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::create):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::MemoryBackingStoreTransaction):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::~MemoryBackingStoreTransaction):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::commit):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::isVersionChange):
        
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::setDatabaseInfo):
        (WebCore::IDBServer::MemoryIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::abortTransaction):
        (WebCore::IDBServer::MemoryIDBBackingStore::commitTransaction):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::beginTransactionInBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performAbortTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::originalDatabaseInfo):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::idbErrorName):
        (WebCore::idbErrorDescription):
        * Modules/indexeddb/shared/IDBError.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didAbortTransaction):
        (WebCore::InProcessIDBServer::abortTransaction):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-10-21  Chris Dumez  <cdumez@apple.com>

        bgsound should use HTMLUnknownElement interface
        https://bugs.webkit.org/show_bug.cgi?id=148857
        <rdar://problem/22589036>

        Reviewed by Sam Weinig.

        The blink, bgsound, isindex, multicol, nextid, and spacer elements must
        use the HTMLUnknownElement interface, as per the HTML specification:
        https://html.spec.whatwg.org/multipage/obsolete.html#other-elements,-attributes-and-apis

        WebKit was using HTMLUnknownElement for all of them except bgsound.
        This patch fixes the issue and aligns our behavior with Chrome and
        Firefox.

        No new tests, already covered by existing tests.

        * html/HTMLTagNames.in:

2015-10-21  Antoine Quint  <graouts@apple.com>

        Support for the SVG `onend` attribute
        https://bugs.webkit.org/show_bug.cgi?id=150393

        Reviewed by Dean Jackson.

        Add support for the SVG `onend` attribute to SVG timing and animation elements, which allow the definition
        of a JS event listener declaratively for the SVG `endEvent` event.

        Tests: svg/animations/end-event-attribute-expected.svg
               svg/animations/end-event-attribute.svg
               svg/animations/end-event-syncbase-expected.svg
               svg/animations/end-event-syncbase.svg

        * dom/EventNames.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseAttribute):
        * svg/svgattrs.in:

2015-10-21  Nan Wang  <n_wang@apple.com>

        AX: Expose table size and cell indexes on iOS
        https://bugs.webkit.org/show_bug.cgi?id=150366

        Add support to expose table row/column count and cell indexes on iOS.

        Reviewed by Chris Fleizach.

        Test: accessibility/aria-table-attributes.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableParent]):
        (-[WebAccessibilityObjectWrapper accessibilityElementForRow:andColumn:]):
        (-[WebAccessibilityObjectWrapper accessibilityRowCount]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnCount]):
        (-[WebAccessibilityObjectWrapper accessibilityARIARowCount]):
        (-[WebAccessibilityObjectWrapper accessibilityARIAColumnCount]):
        (-[WebAccessibilityObjectWrapper accessibilityARIARowIndex]):
        (-[WebAccessibilityObjectWrapper accessibilityARIAColumnIndex]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):

2015-10-21  Chris Dumez  <cdumez@apple.com>

        HTMLIFrameElement.sandbox should be a DOMSettableTokenList
        https://bugs.webkit.org/show_bug.cgi?id=150377

        Reviewed by Ryosuke Niwa.

        HTMLIFrameElement.sandbox should be a DOMSettableTokenList as per the
        HTML specification:
        - https://html.spec.whatwg.org/multipage/embedded-content.html#htmliframeelement

        Chrome and Firefox match the specification but Safari/WebKit was uding
        a DOMString.

        Test: fast/frames/sandbox-attribute.html

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::sandbox):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:

2015-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        ASSERTION FAILED: markFontData in FontCascade::emphasisMarkHeight
        https://bugs.webkit.org/show_bug.cgi?id=150171

        Reviewed by Myles C. Maxfield.

        It happens with several tests like fast/ruby/text-emphasis.html in
        the GTK Debug bot. The tests seem to pass in Release and the rendering
        looks correct as well removing the assert. The thing is that
        for some reason we can get an empty GlyphData from
        FontCascade::getEmphasisMarkGlyphData() when it ends up falling
        back to system (FontCascadeFonts::glyphDataForSystemFallback).

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::getEmphasisMarkGlyphData): Return
        Optional<GlyphData> instead of returning a boolean and an out
        parameter. If we get an invalid GlyphData, Nullopt is
        returned. Also use a SurrogatePairAwareTextIterator to handle
        surrogate pairs.
        (WebCore::FontCascade::emphasisMarkAscent):
        (WebCore::FontCascade::emphasisMarkDescent):
        (WebCore::FontCascade::emphasisMarkHeight):
        (WebCore::FontCascade::drawEmphasisMarks):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphData::isValid): Return whether the GlyphData is valid.

2015-10-20  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Fix availableLogicalSpace computation with non-zero baseSize flex tracks
        https://bugs.webkit.org/show_bug.cgi?id=150359

        Reviewed by Zalan Bujtas.

        The availableLogicalSpace computation was incorrect whenever
        the flex tracks had a non-zero baseSize before the 1fr unit
        size resolution. That happened because when assigning the new
        baseSize to the flex track, we were unconditionally
        subtracting the whole baseSize to the
        availableLogicalSpace. That's correct if the track is a "pure"
        flex track, i.e. 2fr, but if the track had a non-zero baseSize
        (like minmax(10px, 1fr)) then both the new and the old base
        sizes were incorrectly used to compute the
        availableLogicalSpace.

        We can test the amount of remaining freeSpace by using content
        distribution to align and item place on a non-zero baseSize
        flex track. The content distribution will be accurate if and
        only if the availableLogicalSpace computation is correct.

        Test: fast/css-grid-layout/flex-content-distribution.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):

2015-10-21  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Construct a writable stream
        https://bugs.webkit.org/show_bug.cgi?id=150360

        Reviewed by Darin Adler.

        This patch initializes a writable stream according to the spec. To do it we need two internal functions, which
        are syncWritableStreamStateWithQueue and errorWritableStream, which are also implemented as a quite direct
        translation from the spec.

        Current test set suffices, expectations are updated accordingly.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSBuiltinInternals.h:
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h: Build infrastructure.
        * Modules/streams/WritableStream.js:
        (initializeWritableStream): Function that acts as constructor of WritableStream.
        * Modules/streams/WritableStreamInternals.js:
        (syncWritableStreamStateWithQueue):
        (errorWritableStream): As per spec.

2015-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess: DNS prefetch happens in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=147824

        Reviewed by Chris Dumez.

        Use FrameLoaderClient to do the DNS prefetch.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):

2015-10-21  Frederic Wang  <fred.wang@free.fr>

        [FreeType] Add support for the USE_TYPO_METRICS flag
        https://bugs.webkit.org/show_bug.cgi?id=150340

        Reviewed by Martin Robinson.

        Test: fonts/use-typo-metrics-1.html

        Make the FreeType backend use the typo metrics when the OS/2 USE_TYPO_METRICS flag is set.
        Similar work should be done for other backends, see bug 131839.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit): Verify whether the OS/2 USE_TYPO_METRICS flag is set and use the typo metrics if that's the case.

2015-10-20  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replace 0 and NULL with nullptr in WebCore/loader.
        https://bugs.webkit.org/show_bug.cgi?id=149657

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * loader/CookieJar.cpp:
        (WebCore::networkingContext):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::frameLoader):
        (WebCore::DocumentLoader::popArchiveForSubframe):
        (WebCore::DocumentLoader::clearArchiveResources):
        (WebCore::DocumentLoader::clearMainResource):
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::cancel):
        (WebCore::DocumentThreadableLoader::setDefersLoading):
        (WebCore::DocumentThreadableLoader::clearResource):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::createJavaAppletWidget):
        (WebCore::EmptyFrameLoaderClient::createNetworkingContext):
        * loader/EmptyClients.h:
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):
        * loader/FTPDirectoryParser.h:
        (WebCore::ListResult::clear):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::clearProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::closeAndRemoveChild):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::detachViewsAndDocumentLoader):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::stateMachine):
        * loader/FrameNetworkingContext.h:
        (WebCore::FrameNetworkingContext::invalidate):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::replaceState):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::updateFromElement):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::releaseResources):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::resourceLoadScheduler):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::releaseResources):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::TextResourceDecoder):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::clearClient):
        (WebCore::ThreadableLoaderClientWrapper::done):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::fallbackURLLongerThan):
        (WebCore::ApplicationCache::ApplicationCache):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::fallbackURLs):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::setApplicationCache):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::candidateApplicationCacheGroup):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::StorageIDJournal::Record::Record):
        (WebCore::StorageIDJournal::Record::restore):
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed):
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::disconnectFrameForPageCache):
        (WebCore::DOMApplicationCache::willDestroyGlobalObjectInFrame):
        (WebCore::DOMApplicationCache::applicationCacheHost):
        (WebCore::DOMApplicationCache::scriptExecutionContext):
        (WebCore::DOMApplicationCache::toEventType):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::create):
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::archiveResourceForURL):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::createResource):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::rawDataRepresentation):
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create):
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/archive/mhtml/MHTMLParser.cpp:
        (WebCore::MHTMLParser::parseArchiveWithHeader):
        (WebCore::MHTMLParser::parseNextPart):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImageClient.h:
        (WebCore::CachedImageClient::imageChanged):
        (WebCore::CachedImageClient::newImageAnimationFrameAvailable):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::calculateIncrementalDataChunk):
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::dataReceived):
        (WebCore::CachedRawResourceClient::redirectReceived):
        (WebCore::CachedRawResourceClient::getOrCreateReadBuffer):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::clearResourceToRevalidate):
        * loader/cache/CachedResourceClientWalker.h:
        (WebCore::CachedResourceClientWalker::next):
        * loader/cache/CachedResourceHandle.cpp:
        (WebCore::CachedResourceHandleBase::CachedResourceHandleBase):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::canRequest): Return value is bool.
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::document):
        (WebCore::CachedResourceLoader::setDocument):
        (WebCore::CachedResourceLoader::clearDocumentLoader):
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        * loader/cf/ResourceLoaderCFNet.cpp:
        (WebCore::ResourceLoader::shouldCacheResponse): Return value is bool.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::synchronousNativeIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        (WebCore::IconDatabase::cleanupSyncThread):
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::open):
        (WebCore::iconDatabase):
        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::invalidate):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::invalidate):
        * loader/icon/PageURLRecord.cpp:
        (WebCore::PageURLRecord::~PageURLRecord):
        (WebCore::PageURLRecord::setIconRecord):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * loader/soup/CachedRawResourceSoup.cpp:
        (WebCore::CachedRawResource::getOrCreateReadBuffer):

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, GTK API test fix after r191351.

        Reverted API change for GTK bindings.

        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, Another GTK build fix after r191351.

        * html/HTMLCollection.idl:

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, Another GTK build fix after r191351.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elementsForNativeBindings):
        (WebCore::HTMLFieldSetElement::elementsForObjC): Deleted.
        * html/HTMLFieldSetElement.h:
        * html/HTMLFieldSetElement.idl:

2015-10-20  Chris Fleizach  <cfleizach@apple.com>

        AX: CrashTracer: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::AccessibilityTable::tableElement const + 116
        https://bugs.webkit.org/show_bug.cgi?id=150349

        Reviewed by Brent Fulgham.

        The crash point for this bug says that the parentElement of the firstBody is garbage when it's accessed. 
        Unfortunately, I could not reproduce this in-situ or with a test. 
        So my speculative solution is to recalculate those body elements to ensure that they're valid before we access.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::isDataTable):

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, GTK build fix after r191351.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elementsForNativeBindings):
        (WebCore::HTMLFormElement::elementsForObjC): Deleted.
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:

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

        Add basic TextStream output for Images
        https://bugs.webkit.org/show_bug.cgi?id=150350

        Reviewed by Darin Adler.

        Add a TextStream output operator for Image, and virtual dump() member functions
        that the various image types override to dump their own data.
        
        Add isFoo() functions for each image type (surprising that these didn't already
        exist) so we can print the image type.
        
        Make isAnimated() const, and isBitmapImage() private.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::dump):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::dump):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.cpp:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::dump):
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::dump):
        (WebCore::operator<<):
        * platform/graphics/Image.h:
        (WebCore::Image::isGeneratedImage):
        (WebCore::Image::isCrossfadeGeneratedImage):
        (WebCore::Image::isNamedImageGeneratedImage):
        (WebCore::Image::isGradientImage):
        (WebCore::Image::isSVGImage):
        (WebCore::Image::isAnimated):
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::dump):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dump):
        * platform/graphics/cg/PDFDocumentImage.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dump):
        * svg/graphics/SVGImage.h:

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Use tighter typing for collections / node lists' item() / namedItem() methods
        https://bugs.webkit.org/show_bug.cgi?id=150347

        Reviewed by Darin Adler.

        Use tighter typing for collections / node lists' item() / namedItem() methods.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        * dom/LiveNodeList.h:
        * dom/StaticNodeList.cpp:
        (WebCore::StaticElementList::item):
        * dom/StaticNodeList.h:
        * html/CachedHTMLCollection.h:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.idl:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elements):
        (WebCore::HTMLFieldSetElement::elementsForObjC):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::customElementAfter):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::item):
        (WebCore::HTMLFormElement::elements):
        (WebCore::HTMLFormElement::elementsForObjC):
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem):
        (WebCore::HTMLSelectElement::item):
        (WebCore::HTMLSelectElement::setOption):
        * html/HTMLSelectElement.idl:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::deleteCell):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::deleteRow):
        * html/RadioNodeList.cpp:
        (WebCore::toRadioButtonInputElement):
        (WebCore::RadioNodeList::value):
        (WebCore::RadioNodeList::setValue):
        * html/RadioNodeList.h:
        * html/RadioNodeList.idl:

2015-10-20  Chris Dumez  <cdumez@apple.com>

        Only HTML spaces should be stripped from a <script>'s 'for' / 'event' attributes
        https://bugs.webkit.org/show_bug.cgi?id=150335

        Reviewed by Darin Adler.

        Only HTML spaces should be stripped from a <script>'s 'for' / 'event' attributes:
        https://html.spec.whatwg.org/multipage/scripting.html#prepare-a-script (step 12.3)
        https://html.spec.whatwg.org/multipage/infrastructure.html#space-character

        Previously, we were uding the wrong stripping function and we were stripping
        some non-HTML spaces.

        Test: fast/dom/script-for-event-spaces.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::isScriptForEventSupported):

2015-10-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_GRID_LAYOUT) build after r191128
        https://bugs.webkit.org/show_bug.cgi?id=150321

        Reviewed by Darin Adler.

        * css/CSSGrammar.y.in: Typo fix.

2015-10-20  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build by disabling MAC_GESTURE_EVENTS on 10.9 and 10.10

        * Configurations/FeatureDefines.xcconfig:

2015-10-13  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: computeMainAxisExtentForChild(child, MainOrPreferredSize, mainSize) in WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax
        https://bugs.webkit.org/show_bug.cgi?id=149459

        Reviewed by Darin Adler.

        This was regressed after 189567 where min-height|width:auto
        support was added to flex items. The merge from Blink changes
        was not correctly done for assertions. In particular we were
        asserting if the resolved main size was not strictly greater
        than 0, but 0 is actually a valid value.

        Test: fast/flexbox/crash-resolved-main-size-zero.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):

2015-10-20  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Rework some readable stream internals that can be common to writable streams
        https://bugs.webkit.org/show_bug.cgi?id=150133

        Reviewed by Darin Adler.

        There are some things in ReadableStream internals that be be used also for Writable Streams so it was necessary
        to move some functions and refactor some code that can be shared by both implementations.

        Queue was written with the functions declared at the implementation and keeping the improvement of having the
        total size calculated instead of having to transverse the whole array.

        The strategy is kept as an object and a common method is used to validate it as per spec.

        Promises are reworked to keep in an internal slot inside the promise object the resolve and reject
        functions. For convinience three functions were written, one to create the promise (and keep internally the
        resolve and reject functions), one to resolve and another to reject. Promises can still be created with
        Promise.resolve or reject as the resolve and rejectStreamsPromise functions operate under the assumption that
        the internal slots might not exist.

        invokeOrNoop and promiseInvokeOrNoop were moved to the common code as they will be also used by WritableStream.

        Current test set suffices.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/WebCoreJSBuiltinInternals.h:
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h: Build infrastructure.
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream): Reworked queue and strategy.
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader):
        (errorReadableStream):
        (getReadableStreamDesiredSize):
        (cancelReadableStream):
        (closeReadableStream):
        (closeReadableStreamReader):
        (enqueueInReadableStream):
        (readFromReadableStreamReader): Reworked queue, strategy and promises.
        (invokeOrNoop): Deleted.
        (promiseInvokeOrNoop): Deleted.
        * Modules/streams/StreamInternals.js: Added.
        (invokeOrNoop):
        (promiseInvokeOrNoop): Moved from ReadableStreamInternals.js.
        (validateAndNormalizeQueuingStrategy):
        (createNewStreamsPromise):
        (resolveStreamsPromise):
        (rejectStreamsPromise):
        (newQueue):
        (dequeueValue):
        (enqueueValueWithSize): Added according to the spec.
        * bindings/js/WebCoreBuiltinNames.h: Updated private names according to the new slots.

2015-10-20  Yoav Weiss  <yoav@yoav.ws>

        Rename the PICTURE_SIZES flag to CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=150275

        Reviewed by Dean Jackson.

        No new tests, since there is no functional change.

        * Configurations/FeatureDefines.xcconfig:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

2015-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        ASSERTION FAILED: m_state == Initialized in SubresourceLoader::didReceiveResponse()
        https://bugs.webkit.org/show_bug.cgi?id=150327

        Reviewed by Antti Koivisto.

        This is how it happens:

        1. print() is called while the document is still loading, so
           m_shouldPrintWhenFinishedLoading is set to true
        2. DataURLDecoder::decode() finishes in the work queue thread,
           the completion handler is scheduled in the main thread
        3. The load is cancelled
          3.1. SubresourceLoader::willCancel sets m_state = Finishing
          3.2. DOMWindow::finishedLoading() is called, and since
               m_shouldPrintWhenFinishedLoading is true, it does the print.
          3.3. Cancellation finishes and ResourceLoader::releaseResources()
               is called that sets m_reachedTerminalState = true

        So, between 3.1 and 3.3, the state is Finishing, but
        m_reachedTerminalState is false. What happens, in the GTK+ port at
        least, is that the nested main loop used to make print()
        synchronous, processes the DataURLDecoder::decode() completion
        handler that was pending. The completion handler returns early if
        m_reachedTerminalState is true, but it's not yet in this
        particular case. So, it ends up calling didReceiveResponse,
        because the decode didn't fail, when the subresource loader state
        is Finishing.

        I think there are two things here. One is that we shouldn't start
        a print that was waiting for the load to finish when it
        failed. That would fix the problem. But it's probably a good idea
        to also check for cancellation in the DataURLDecoder::decode()
        completion handler.

        Fixes printing/print-close-crash.html in GTK+ Debug.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL): Return early from
        DataURLDecoder::decode() completion handler if the load was cancelled.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::finishedLoading): Do not start a print that
        was witing for the load to finish when it failed.

2015-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        FontCascade::typesettingFeatures() is not privy to font-variant-* nor font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=149775

        Reviewed by Darin Adler.

        This patch has two pieces:

        We used to have a boolean, enableLigatures, which affected how we perform shaping in both our
        simple and complex text codepaths. However, in this brave new world of font-feature-settings
        and font-variant-*, there are many properties which may affect shaping (and multiple kinds
        of ligatures). This patch renames this boolean to requiresShaping, and teaches it about all
        the various properties which affect text shaping.

        Similarly, one of the places which used this enableLigatures boolean was to tell CoreText
        if it should disable ligatures. However, we now have much finer-grained control over
        ligatures during font creation. This patch moves the responsibility of dictating which
        font features should be enabled entirely to the Font. Therefore, getCFStringAttributes()
        doesn't know anything about ligatures anymore; the logic inside font creation is used
        instead.

        An added benefit of moving all the font feature logic to one place is that we can implement
        the feature resolution algorithm described in the CSS3 fonts spec. This patch adds a test to
        makes sure that text-rendering, font-feature-settings, and font-variant-* play together
        nicely.

        Test: fast/text/multiple-feature-properties.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        (WebCore::FontCascade::operator=):
        (WebCore::FontCascade::update):
        (WebCore::FontCascade::drawText):
        (WebCore::FontCascade::drawEmphasisMarks):
        (WebCore::FontCascade::width):
        (WebCore::FontCascade::adjustSelectionRectForText):
        (WebCore::FontCascade::offsetForPosition):
        (WebCore::FontCascade::codePath):
        (WebCore::FontCascade::floatWidthForSimpleText):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::requiresShaping):
        (WebCore::FontCascade::computeRequiresShaping):
        (WebCore::FontCascade::enableLigatures): Deleted.
        (WebCore::FontCascade::computeEnableLigatures): Deleted.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::applyFontTransforms):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::canRenderCombiningCharacterSequence):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes):
        * svg/SVGFontData.h:

2015-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Shadow GraphicsContext's ImageInterpolationQuality inside GraphicsContextState
        https://bugs.webkit.org/show_bug.cgi?id=150306

        Reviewed by Simon Fraser.

        When getting the ImageInterpolationQuality, there is no need to round-trip through
        the platform's graphics context. This patch migrates this piece of state to the
        existing idiom of having a setter in GraphicsContext.cpp which sets the relevent
        state in GraphicsContextState and then calls into a platform-specific setter.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality):
        (WebCore::GraphicsContext::setImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::imageInterpolationQuality): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::convertInterpolationQuality):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality):
        (WebCore::GraphicsContext::setImageInterpolationQuality): Deleted.
        (WebCore::GraphicsContext::imageInterpolationQuality): Deleted.

2015-10-19  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary Node::toInputElement() virtual function
        https://bugs.webkit.org/show_bug.cgi?id=150341

        Reviewed by Darin Adler.

        Drop unnecessary Node::toInputElement() virtual function and use the
        usual is<HTMLInputElement>() / downcast< HTMLInputElement >() instead.

2015-10-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191324.
        https://bugs.webkit.org/show_bug.cgi?id=150352

        Shadowing CTM's state is not necessary (Requested by litherum
        on #webkit).

        Reverted changeset:

        "Host GraphicsContext's CTM inside GraphicsContextState"
        https://bugs.webkit.org/show_bug.cgi?id=150146
        http://trac.webkit.org/changeset/191324

2015-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Host GraphicsContext's CTM inside GraphicsContextState
        https://bugs.webkit.org/show_bug.cgi?id=150146

        There are 6 operations which interact with CTMs:
        - Get
        - Set
        - Concatenate
        - Scale
        - Rotate
        - Translate

        This patch modifies all these operations so that these operations shadow the
        platform's CTM inside GraphicsContextState. This way, we don't have to consult
        with the underlying graphics context in order to know the current CTM.

        There are currently many places in the Core Graphics ports where we will change
        the platform's CTM out from under the GraphicsContext. This patch migrates
        those users to going through GraphicsContext, thereby preserving the integrity
        of the shadowed state.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.cpp: Setters deletate to platform calls.
        The getter can just consult with the shadowed state.
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::checkCTMInvariants): Make sure the shadowed state
        matches the platform graphics context's state.
        * platform/graphics/Image.h:
        (WebCore::Image::nativeImageForCurrentFrame):
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Renaming functions.
        (WebCore::GraphicsContext::resetPlatformCTM):
        (WebCore::GraphicsContext::getPlatformCTM):
        (WebCore::GraphicsContext::translatePlatformCTM):
        (WebCore::GraphicsContext::concatPlatformCTM):
        (WebCore::GraphicsContext::setPlatformCTM):
        (WebCore::GraphicsContext::rotatePlatformCTM):
        (WebCore::GraphicsContext::scalePlatformCTM):
        (WebCore::GraphicsContext::getCTM): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::scale): Deleted.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        Renaming functions.
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::flush):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scalePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::rotatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::translatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::concatPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::setPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::scale): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::rotate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::translate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp: Renaming functions. Also,
        migrate CTM setters to go through GraphicsContext.
        (WebCore::GraphicsContext::resetPlatformCTM):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::scalePlatformCTM):
        (WebCore::GraphicsContext::rotatePlatformCTM):
        (WebCore::GraphicsContext::translatePlatformCTM):
        (WebCore::GraphicsContext::concatPlatformCTM):
        (WebCore::GraphicsContext::setPlatformCTM):
        (WebCore::GraphicsContext::getPlatformCTM):
        (WebCore::GraphicsContext::scale): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::getCTM): Deleted.
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::flush):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scalePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::rotatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::translatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::concatPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::setPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::scale): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::rotate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::translate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Deleted.
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isEssentiallyEqualTo): Equality comparison on floats
        is not a good idea. Instead, this function is more valuable. (However, note that
        it is expected for values in a CTM to hold values close to 0, which means that
        this function might erroneously return false (similar to operator=()).
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::scalePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::rotatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::translatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::concatPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::setPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::scale): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::rotate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::translate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Deleted.
        * platform/mac/DragImageMac.mm:
        (WebCore::drawAtPoint):
        * platform/spi/cg/CoreGraphicsSPI.h:

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Remove unused support for long presses from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=150345

        Reviewed by Beth Dakin.

        * page/Chrome.cpp:
        (WebCore::Chrome::didBeginTrackingPotentialLongMousePress): Deleted.
        (WebCore::Chrome::didRecognizeLongMousePress): Deleted.
        (WebCore::Chrome::didCancelTrackingPotentialLongMousePress): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Deleted.
        (WebCore::EventHandler::clear): Deleted.
        (WebCore::EventHandler::handleMousePressEvent): Deleted.
        (WebCore::EventHandler::eventMayStartDrag): Deleted.
        (WebCore::EventHandler::handleMouseReleaseEvent): Deleted.
        (WebCore::EventHandler::beginTrackingPotentialLongMousePress): Deleted.
        (WebCore::EventHandler::recognizeLongMousePress): Deleted.
        (WebCore::EventHandler::cancelTrackingPotentialLongMousePress): Deleted.
        (WebCore::EventHandler::clearLongMousePressState): Deleted.
        (WebCore::EventHandler::handleLongMousePressMouseMovedEvent): Deleted.
        (WebCore::EventHandler::handleMouseMoveEvent): Deleted.
        (WebCore::EventHandler::handleDrag): Deleted.
        * page/EventHandler.h:
        * page/Settings.in:

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        No new tests, just moving code around.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSWindowSPI.h: Added.

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

        Restore an assertion to the way it was before r191310, which was correct.

        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::compositeOperatorName):

2015-10-19  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * dom/EventNames.in:
        * dom/make_event_factory.pl:
        (generateImplementation):

2015-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the binding generator after r191176
        https://bugs.webkit.org/show_bug.cgi?id=150320

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::getConstructData):

2015-10-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191307.
        https://bugs.webkit.org/show_bug.cgi?id=150338

        broke lots of API tests, need time to figure out whats up
        (Requested by thorton on #webkit).

        Reverted changeset:

        "WKView being inside WKWebView leads to weird API issues"
        https://bugs.webkit.org/show_bug.cgi?id=150174
        http://trac.webkit.org/changeset/191307

2015-10-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191295, r191297, and r191301.
        https://bugs.webkit.org/show_bug.cgi?id=150337

        ASSERTs in 5 tests (Requested by litherum on #webkit).

        Reverted changesets:

        "Host GraphicsContext's CTM inside GraphicsContextState"
        https://bugs.webkit.org/show_bug.cgi?id=150146
        http://trac.webkit.org/changeset/191295

        "[iOS] Build fix after r191295"
        http://trac.webkit.org/changeset/191297

        "Unreviewed build fix after r191295."
        http://trac.webkit.org/changeset/191301

2015-10-16  Brian Burg  <bburg@apple.com>

        Unify handling of JavaScriptCore scripts that are used in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=150245

        Reviewed by Alex Christensen.

        Use the new JavaScriptCore_SCRIPTS_DIR variable.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

            No need to export other variables like InspectorScripts anymore.

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

        Add TextStream formatters for FillLayer and all it entails
        https://bugs.webkit.org/show_bug.cgi?id=150312

        Reviewed by Tim Horton.

        Add TextStream output formatters for FillLayer, and all the enum
        types used by it.
        
        Drive-by fixes for CompositeOperator and BlendMode string conversions.
        compositeOperatorNames was missing the "difference" string, and compositeOperatorName()
        would do an OOB memory access if blendOp was zero.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Length.cpp:
        (WebCore::operator<<):
        * platform/Length.h:
        * platform/LengthSize.cpp: Added.
        (WebCore::operator<<):
        * platform/LengthSize.h:
        * platform/text/TextStream.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::operator<<):
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyleConstants.cpp: Added.
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        WKView being inside WKWebView leads to weird API issues
        https://bugs.webkit.org/show_bug.cgi?id=150174

        Reviewed by Darin Adler.

        No new tests, just moving code around.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSWindowSPI.h: Added.

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build

        * Configurations/FeatureDefines.xcconfig:

2015-10-19  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r191295.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::translatePlatformCTM):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::concatPlatformCTM):
        (WebCore::GraphicsContext::setPlatformCTM):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::rotatePlatformCTM):
        (WebCore::GraphicsContext::scalePlatformCTM):
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::flush):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scalePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::rotatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::translatePlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::concatPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::setPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::syncContext):
        (WebCore::GraphicsContextPlatformPrivate::scale): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::rotate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::translate): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Deleted.

2015-10-19  Tim Horton  <timothy_horton@apple.com>

        Add magnify and rotate gesture event support for Mac
        https://bugs.webkit.org/show_bug.cgi?id=150179
        <rdar://problem/8036240>

        Reviewed by Darin Adler.

        No new tests.

        * Configurations/FeatureDefines.xcconfig:
        New feature flag.

        * Configurations/WebCore.xcconfig:
        Don't exclude generated gesture sources; they are already #ifdef-guarded.

        * DerivedSources.make:
        Add GestureEvent.idl for ENABLE_MAC_GESTURE_EVENTS too.

        * WebCore.xcodeproj/project.pbxproj:
        Add GestureEvents.cpp.

        * bindings/objc/DOMEvents.mm:
        (kitClass):
        Support DOMGestureEvent on Mac if the new flag is enabled.

        * dom/mac/GestureEvents.cpp: Added.
        * page/mac/EventHandlerMac.mm:

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        * page/EventHandler.h:
        Enable some gesture-related code on Mac if the new flag is enabled.

        * platform/PlatformEvent.h:

2015-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Build fix after r191295

        Unreviewed.

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

2015-10-19  Myles C. Maxfield  <mmaxfield@apple.com>

        Host GraphicsContext's CTM inside GraphicsContextState
        https://bugs.webkit.org/show_bug.cgi?id=150146

        Reviewed by Simon Fraser.

        There are 6 operations which interact with CTMs:
        - Get
        - Set
        - Concatenate
        - Scale
        - Rotate
        - Translate

        This patch modifies all these operations so that these operations shadow the
        platform's CTM inside GraphicsContextState. This way, we don't have to consult
        with the underlying graphics context in order to know the current CTM.

        There are currently many places in the Core Graphics ports where we will change
        the platform's CTM out from under the GraphicsContext. This patch migrates
        those users to going through GraphicsContext, thereby preserving the integrity
        of the shadowed state.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.cpp: Setters deletate to platform calls.
        The getter can just consult with the shadowed state.
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::applyDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::checkCTMInvariants): Make sure the shadowed state
        matches the platform graphics context's state.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Renaming functions.
        (WebCore::GraphicsContext::resetPlatformCTM):
        (WebCore::GraphicsContext::getPlatformCTM):
        (WebCore::GraphicsContext::translatePlatformCTM):
        (WebCore::GraphicsContext::concatPlatformCTM):
        (WebCore::GraphicsContext::setPlatformCTM):
        (WebCore::GraphicsContext::rotatePlatformCTM):
        (WebCore::GraphicsContext::scalePlatformCTM):
        (WebCore::GraphicsContext::getCTM): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::scale): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp: Renaming functions. Also,
        migrate CTM setters to go through GraphicsContext.
        (WebCore::GraphicsContext::resetPlatformCTM):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::drawPatternCallback):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::scalePlatformCTM):
        (WebCore::GraphicsContext::rotatePlatformCTM):
        (WebCore::GraphicsContext::translatePlatformCTM):
        (WebCore::GraphicsContext::concatPlatformCTM):
        (WebCore::GraphicsContext::setPlatformCTM):
        (WebCore::GraphicsContext::getPlatformCTM):
        (WebCore::GraphicsContext::scale): Deleted.
        (WebCore::GraphicsContext::rotate): Deleted.
        (WebCore::GraphicsContext::translate): Deleted.
        (WebCore::GraphicsContext::concatCTM): Deleted.
        (WebCore::GraphicsContext::setCTM): Deleted.
        (WebCore::GraphicsContext::getCTM): Deleted.
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::save):
        (WebCore::GraphicsContextPlatformPrivate::restore):
        (WebCore::GraphicsContextPlatformPrivate::flush):
        (WebCore::GraphicsContextPlatformPrivate::clip):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::GraphicsContextPlatformPrivate::setCTM):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isEssentiallyEqualTo): Equality comparison on floats
        is not a good idea. Instead, this function is more valuable. (However, note that
        it is expected for values in a CTM to hold values close to 0, which means that
        this function might erroneously return false (similar to operator=()).
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::concatPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::setPlatformCTM):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM): Deleted.
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Deleted.
        * platform/mac/DragImageMac.mm:
        (WebCore::drawAtPoint):

2015-10-19  Chris Dumez  <cdumez@apple.com>

        Null dereference loading Blink layout test fast/forms/color/input-color-onchange-event.html
        https://bugs.webkit.org/show_bug.cgi?id=150192
        <rdar://problem/23135050>

        Reviewed by Darin Adler.

        Calling internals.selectColorInColorChooser() with a non-Element would
        cause a null dereference. This is because in such case, the implementation
        method is passed a null pointer and we would fail to null-check it. This
        patch now does the null-check.

        No new tests, existing test was updated.

        * testing/Internals.cpp:
        (WebCore::Internals::selectColorInColorChooser):

2015-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_GRID_LAYOUT) build after r190840
        https://bugs.webkit.org/show_bug.cgi?id=150322

        Reviewed by Ryosuke Niwa.

        * html/HTMLDetailsElement.cpp:

2015-10-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should generate names for JSBuiltins partial interface methods using ImplementedBy value
        https://bugs.webkit.org/show_bug.cgi?id=150163

        Reviewed by Darin Adler.

        Covered by updated binding tests.

        Updating generation of JS built-in function/attribute name to use the ImplementedBy value of the interface if any.
        This allows splitting JS built-ins just like is done for IDLs.
        Updated accordingly the JS Builtin header include.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetAttributeGetterName): Updated to pass function object and not only function name.
        (GetAttributeSetterName): Ditto.
        (GetFunctionName): Removed unneeded code plus updated to pass function object and not only function name.
        (GenerateConstructorHelperMethods): Making direct use of GetJSBuiltinFunctionNameFromString since there is no function object for the constructor.
        (GetJSBuiltinFunctionName): Updated to take into accound ImplementedBy value if any.
        (GetJSBuiltinFunctionNameFromString):
        (GetJSBuiltinScopeName): Returns either the interface name or its ImplementedBy value.
        (AddJSBuiltinIncludesIfNeeded): Updating name of the header in case of partial interface.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        (-[DOMTestInterface builtinAttribute]):
        (-[DOMTestInterface setBuiltinAttribute:]):
        (-[DOMTestInterface builtinFunction]):
        * bindings/scripts/test/TestSupplemental.idl: Added JSBuiltin attribute and function.

2015-10-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should allow generating private JS functions
        https://bugs.webkit.org/show_bug.cgi?id=150167

        Reviewed by Darin Adler.

        Introducing the "Private" keyword for that purpose.
        Applying it to MediaDevices.getUserMedia which can be used directly or through navigator.webkitGetUserMedia
        which could be implemented as JS builtin based on it.

        "Private" functions are added to the prototype with a corresponding private symbol.
        This symbol must be defined in bindings/js/WebCoreBuiltinNames.h.

        Adding a getUserMediaFromJS function visible from builtins script.
        Implementing MediaDevices.getUserMedia as a JS builtin based on it.

        Adding binding generator test.

        * CMakeLists.txt: Adding MediaDevices.js.
        * DerivedSources.make: Ditto.
        * Modules/mediastream/MediaDevices.h:
        (WebCore::MediaDevices::getUserMediaFromJS):
        * Modules/mediastream/MediaDevices.idl: Marking getUserMediaFromJS private and getUserMedia JSBuiltin.
        * Modules/mediastream/MediaDevices.js: Added.
        (getUserMedia):
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h:
        (WebCore::JSBuiltinFunctions::JSBuiltinFunctions):
        (WebCore::JSBuiltinFunctions::mediaDevicesBuiltins):
        * bindings/scripts/CodeGeneratorGObject.pm: Skipping generation of Private functions.
        (SkipFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Disabling addition of private function in table and adding private member field to the prototype.
        * bindings/scripts/CodeGeneratorObjC.pm: Skipping generation of Private functions.
        (SkipFunction):
        * bindings/scripts/IDLAttributes.txt: Adding Private keyword.
        * bindings/scripts/test/JS/JSTestObj.cpp: Adding Private keyword test.
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::jsTestObjPrototypeFunctionPrivateMethod):
        * bindings/scripts/test/TestObj.idl:

2015-10-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStream tee
        https://bugs.webkit.org/show_bug.cgi?id=146315

        Reviewed by Darin Adler.

        Covered by rebased test.

        * Modules/streams/ReadableStream.js:
        (tee): Removing not implemented exception throwing.
        * Modules/streams/ReadableStreamInternals.js:
        (teeReadableStream): Implementing as per spec.
        (teeReadableStreamPullFunction): Ditto.
        (teeReadableStreamBranch2CancelFunction): Ditto.

2015-10-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Add skeleton for initial WritableStream support
        https://bugs.webkit.org/show_bug.cgi?id=149951

        Reviewed by Darin Adler.

        This basically adds an empty WritableStream object without initializing the object. It also adds all empty
        methods by raising an exception.

        The reason why the object is not fully initialized is that it requires some other support and some refactorings
        to share more code with ReadableStream and we will make in following patches.

        Tests are covered by current set and their expectations are properly updated.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h: Build infrastructure.
        * Modules/streams/WritableStream.idl: Added all methods and attributes.
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        (write):
        (closed):
        (ready):
        (state): Added all by throwing an EvalError.

2015-10-18  Chris Dumez  <cdumez@apple.com>

        Script element with an empty for or event attributes should not execute
        https://bugs.webkit.org/show_bug.cgi?id=148855
        <rdar://problem/22588156>

        Reviewed by Darin Adler.

        A script element with an empty for or event attributes should not execute
        as per:
        https://html.spec.whatwg.org/multipage/scripting.html#prepare-a-script (step 12)

        Our implementation had a bug where it would not correctly differentiate
        an empty attribute from a missing one. This patch fixes this.

        No new tests, already covered by existing test.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::isScriptForEventSupported):

2015-10-18  Chris Dumez  <cdumez@apple.com>

        WebKit must support all JavaScript MIME types in HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=148854
        <rdar://problem/22588195>

        Reviewed by Darin Adler.

        WebKit did not execute certain EcmaScript MIME types although the HTML
        specification says all user agents should support those:
        https://html.spec.whatwg.org/multipage/scripting.html#javascript-mime-type

        In particular, the following MIME types are now recognized as valid and
        executed: "application/x-ecmascript", "text/javascript1.0",
        "text/javascript1.4", "text/javascript1.5", "text/x-javascript",
        "text/x-ecmascript".

        The new behavior is consistent with Firefox.

        No new tests, already covered by existing test.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedJavaScriptMIMETypes):

2015-10-18  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Win] Fix the Windows builds.
        https://bugs.webkit.org/show_bug.cgi?id=150300

        Reviewed by Darin Adler.

        Add missing files to WebCore.vcxproj.
        Add missing #includes to CSSAllInOne.cpp and HTMLElementsAllInOne.cpp.

        No new tests, no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * css/CSSAllInOne.cpp:
        * html/HTMLElementsAllInOne.cpp:

2015-10-18  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix the builds with ENABLE_CONTENT_EXTENSIONS=OFF.
        https://bugs.webkit.org/show_bug.cgi?id=150302

        Reviewed by Darin Adler.

        Add missing #if ENABLE(CONTENT_EXTENSIONS).

        No new tests, no behavior change.

        * page/UserContentController.h:

2015-10-18  Joonghun Park  <jh718.park@samsung.com>

        [EFL] Fix debug build break since r191198
        https://bugs.webkit.org/show_bug.cgi?id=150277

        Reviewed by Darin Adler.

        No new tests, no new behaviours.

        Use the correct %"PRIu64" for uint64_t,
        instead of %llu.

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::fireVersionChangeEvent):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/legacy/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::processPendingOpenCalls):
        (WebCore::IDBDatabaseBackend::openConnectionInternal):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange):

2015-10-18  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix the builds with ENABLE_INDEX_DATABASE=OFF.
        https://bugs.webkit.org/show_bug.cgi?id=150301

        Reviewed by Darin Adler.

        Add missing #if ENABLE(INDEXED_DATABASE).

        No new tests, no behavior change.

        * page/Page.cpp:

2015-10-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] [Win] Remove unused code from GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=150304

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setAllowsFontSmoothing): Deleted.

2015-10-18  Antti Koivisto  <antti@apple.com>

        Computed style should work correctly with slotted elements that have display:none
        https://bugs.webkit.org/show_bug.cgi?id=150237

        Reviewed by Andreas Kling..

        If an element has display:none we don't normally retain or even compute its style (as it is not rendered).
        If getComputedStyle is invoked for such element we resolve the style (along with any ancestors) and cache
        it separately to rare data. This path needs to work with slotted elements in shadow trees.

        This patch also make computedStyle() iterative rather than recursive.

        Test: fast/shadow-dom/computed-style-display-none.html

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

            Pass in the parent style instead of invoking computedStyle() recursively.

        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::beforeOrAfterPseudoElement):
        (WebCore::Element::existingComputedStyle):
        (WebCore::Element::resolveComputedStyle):

            Iterative resolve function that uses composed tree iterator.

        (WebCore::Element::computedStyle):

            Factor into helpers.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::computedStyle):

            Use the composed tree iterator.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectOption):

            Call updateValidity() before calling renderer->updateFromElement(). Calling updateFromElement()
            may end up in Element::computedStyle() which can asserts if validity is not up to date.

2015-10-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

        This user default is currently on by default. Therefore, by setting the user default,
        users can only disable kerning / ligatures (rather than enable it).

        There are a few reasons why we should stop honoring it:

        1. In the brave new world of font-feature-settings and font-variant-ligatures, there
        are many different kinds of ligatures which may be enabled at will. The simplistic
        statement of "turn on ligatures" no longer has any meaning.

        2. If a user wants to disable kerning / ligatures, he/she can do it with a user
        stylesheet.

        3. The default isn't able to be tested with DumpRenderTree or WebKitTestRunner.

        4. I have never heard of anyone actually using this user default.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::setDefaultKerning): Deleted.
        (WebCore::FontCascade::setDefaultLigatures): Deleted.
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::advancedTextRenderingMode):

2015-10-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191250 and r191253.
        https://bugs.webkit.org/show_bug.cgi?id=150296

        Broke all the tests on Windows (Requested by ap on #webkit).

        Reverted changesets:

        "Stop honoring the user default
        "WebKitKerningAndLigaturesEnabledByDefault""
        https://bugs.webkit.org/show_bug.cgi?id=150287
        http://trac.webkit.org/changeset/191250

        "Build fix after r191250"
        http://trac.webkit.org/changeset/191253

2015-10-17  David Hyatt  <hyatt@apple.com>

        Implement the CSS4 'revert' keyword.
        https://bugs.webkit.org/show_bug.cgi?id=149702

        Reviewed by Simon Fraser.

        Added new tests in fast/css and fast/css/variables.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add CSSRevertValue to the project and makefiles.

        * css/CSSParser.cpp:
        (WebCore::parseKeywordValue):
        Make sure to handle "revert" in the keyword parsing path (along with inherit/initial/unset).

        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseCustomPropertyDeclaration):
        At the parser level, "revert" is just like inherit/initial/unset and gets its own special
        singleton value, CSSRevertValue.

        * css/CSSRevertValue.cpp: Added.
        (WebCore::CSSRevertValue::customCSSText):
        * css/CSSRevertValue.h: Added.
        (WebCore::CSSRevertValue::create):
        (WebCore::CSSRevertValue::equals):
        (WebCore::CSSRevertValue::CSSRevertValue):
        This value is identical to the inherit/initial/unset values, i.e., its own special value
        that can be used to indicate a revert when doing style resolution.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssValueType):
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isInheritedValue):
        (WebCore::CSSValue::isInitialValue):
        (WebCore::CSSValue::isUnsetValue):
        (WebCore::CSSValue::isRevertValue):
        Add the RevertClass to CSSValue and make sure it is handled in all the appropriate methods.

        * css/CSSValueKeywords.in:
        Add the "revert" keyword to the list of allowed CSS keywords.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createRevertValue):
        Add support for a CSSRevertValue singleton, just like inherit/unset/initial.

        * css/FontLoader.cpp:
        (WebCore::FontLoader::resolveFontStyle):
        Add "unset" and "revert" as special keywords to be ignored. This code seems to be turned off,
        but patching it anyway.

        * css/SelectorChecker.h:
        Add a MatchDefault value of 0 to the LinkMatchMask. This enables it to be used as an index
        to the correct value in Property (in the style resolution code).

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initForStyleResolve):
        Delete any lingering old CascadedProperty rollbacks for UA/user rules.

        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        Pass along the MatchResult as an additional parameter, since we need it to lazily compute
        the cascade rollbacks if the "revert" keyword is encountered.

        (WebCore::StyleResolver::cascadedPropertiesForRollback):
        This method will lazily create and return a new CascadedProperties pointer that is cached
        in the StyleResolver's state. This will contain only UA rules (for user reverts) and UA/user
        rules (for author reverts). These will only be computed at most once for a given element
        when doing a reversion, and they will be computed lazily, i.e., only if a revert is
        requested.

        (WebCore::StyleResolver::applyProperty):
        Pass along the LinkMatchMask and the MatchResult to applyProperty. This way we know specifically
        which link type we were computing if we have to revert (so that we roll back and look at the
        same index in the reverted version). The MatchResult is passed along because it is needed
        to build the CascadedProperties rollbacks.

        The basic idea is that if a revert is encountered, the level that the rule came from is
        checked. If it is UA level, just treat as "unset." If it is author or user level, get
        the correct CascadedProperties rollback and repeat the applyProperty using the property
        found in the rollback. If the property is not present in the cascade rollback, then the
        revert becomes an unset.

        (WebCore::StyleResolver::CascadedProperties::hasCustomProperty):
        (WebCore::StyleResolver::CascadedProperties::customProperty):
        Helpers used by applyProperty to check on custom properties, since they can revert too
        just like a regular property can.

        (WebCore::StyleResolver::CascadedProperties::setPropertyInternal):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::CascadedProperties::setDeferred):
        Passing along the CascadeLevel (UA, User, Author) so that it can be stored in the Property.
        This way when we do property application, we always know where the rule came from so
        that the reversion can be handled properly.

        (WebCore::StyleResolver::CascadedProperties::addStyleProperties):
        (WebCore::cascadeLevelForIndex):
        (WebCore::StyleResolver::CascadedProperties::addMatches):
        When style properties are added, also figure out the CascadeLevel and pass it along to be
        stored in the Property. We use the MatchResult's ranges to know where a property comes from.

        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        (WebCore::StyleResolver::applyCascadedProperties):
        Pass along the MatchResult so we know how to build the rollback.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::cascadeLevel):
        (WebCore::StyleResolver::State::setCascadeLevel):
        (WebCore::StyleResolver::State::authorRollback):
        (WebCore::StyleResolver::State::userRollback):
        (WebCore::StyleResolver::State::setAuthorRollback):
        (WebCore::StyleResolver::State::setUserRollback):
        (WebCore::StyleResolver::state):
        (WebCore::StyleResolver::cascadeLevel):
        (WebCore::StyleResolver::setCascadeLevel):
        Move CascadedProperties into the header. Add CascadeLevel to Property. Add the level and
        rollbacks to the resolver's state.

2015-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete FontPlatformData::allowsLigatures()
        https://bugs.webkit.org/show_bug.cgi?id=150286

        Reviewed by Dan Bernstein.

        This function is only used to force ligatures on for complex fonts (where "complex"
        means "does not support the letter 'a'"). However, ligatures are turned on for all
        fonts by default, which means that this function is unnecessary.

        Required ligatures, such as those which make these complex scripts legible, are always
        enabled, no matter what.

        Test: fast/text/required-ligatures.html

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::allowsLigatures): Deleted.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes):

2015-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

        This user default is currently on by default. Therefore, by setting the user default,
        users can only disable kerning / ligatures (rather than enable it).

        There are a few reasons why we should stop honoring it:

        1. In the brave new world of font-feature-settings and font-variant-ligatures, there
        are many different kinds of ligatures which may be enabled at will. The simplistic
        statement of "turn on ligatures" no longer has any meaning.

        2. If a user wants to disable kerning / ligatures, he/she can do it with a user
        stylesheet.

        3. The default isn't able to be tested with DumpRenderTree or WebKitTestRunner.

        4. I have never heard of anyone actually using this user default.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::setDefaultKerning): Deleted.
        (WebCore::FontCascade::setDefaultLigatures): Deleted.
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::advancedTextRenderingMode):

2015-10-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Stop using WKAXRegisterRemoteApp
        https://bugs.webkit.org/show_bug.cgi?id=150283

        Reviewed by Alexey Proskuryakov.

        * platform/spi/ios/GraphicsServicesSPI.h: Added declaration of GSSystemRootDirectory.

2015-10-17  Chris Dumez  <cdumez@apple.com>

        td and th should use HTMLTableDataCellElement and HTMLTableHeaderCellElement interfaces
        https://bugs.webkit.org/show_bug.cgi?id=148859
        <rdar://problem/22588664>

        Reviewed by Ryosuke Niwa.

        td and th should use HTMLTableDataCellElement and HTMLTableHeaderCellElement interfaces
        as per the latest HTML specification:
        https://html.spec.whatwg.org/multipage/tables.html#htmltabledatacellelement
        https://html.spec.whatwg.org/multipage/tables.html#htmltableheadercellelement

        This patch aligns our behavior with the specification and IE. Firefox and Chrome do not
        seem to expose HTMLTableDataCellElement / HTMLTableHeaderCellElement at this time.

        The compatibility risk is low, given that the API stays the same and those new
        interfaces inherit the pre-existing HTMLTableCellElement interface.

        No new tests, already covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::HTMLTableCellElement):
        (WebCore::HTMLTableCellElement::colSpan): Deleted.
        * html/HTMLTableCellElement.h:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableDataCellElement.h: Added.
        * html/HTMLTableDataCellElement.idl: Added.
        * html/HTMLTableHeaderCellElement.h: Added.
        * html/HTMLTableHeaderCellElement.idl: Added.
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell):
        * html/HTMLTagNames.in:

2015-10-17  Zalan Bujtas  <zalan@apple.com>

        RenderBlockFlow::xPositionForFloatIncludingMargin/yPositionForFloatIncludingMargin/flipFloatForWritingModeForChild
        should all take FloatingObject reference.
        https://bugs.webkit.org/show_bug.cgi?id=150267

        Reviewed by Simon Fraser.

        No change in behaviour.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromFloats):
        (WebCore::RenderBlockFlow::paintFloats):
        (WebCore::RenderBlockFlow::clipOutFloatingObjects):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::flipFloatForWritingModeForChild):
        (WebCore::RenderBlockFlow::hitTestFloats):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::xPositionForFloatIncludingMargin):
        (WebCore::RenderBlockFlow::yPositionForFloatIncludingMargin):

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

        Sort the project file.

        * WebCore.xcodeproj/project.pbxproj:

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

        Enhance TextStream for logging, remove subclasses, log more things
        https://bugs.webkit.org/show_bug.cgi?id=150269

        Reviewed by Zalan Bujtas.

        Remove the various TextStream subclasses that only existed to support indenting,
        and output additional types. Add output for more WebCore and WebKit2 types, and
        just use TextStream everywhere.
        
        TextStream is enhance to support grouping (open paren and intent), with a 
        stack-based class to open/end a group.
        
        Remove some SVG-specific duplicate output functions.
        
        Outdent namespace contents of GraphicsTypes.h.
        
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ViewportArguments.cpp:
        (WebCore::operator<<):
        * dom/ViewportArguments.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::operator<<):
        (WebCore::ViewportConfiguration::description):
        (WebCore::ViewportConfigurationTextStream::ViewportConfigurationTextStream): Deleted.
        (WebCore::ViewportConfigurationTextStream::increaseIndent): Deleted.
        (WebCore::ViewportConfigurationTextStream::decreaseIndent): Deleted.
        (WebCore::dumpProperty): Deleted.
        (WebCore::ViewportConfigurationTextStream::writeIndent): Deleted.
        (WebCore::ViewportConfigurationTextStream::operator<<): Deleted.
        * page/ViewportConfiguration.h:
        * page/scrolling/ScrollingConstraints.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<):
        * page/scrolling/ScrollingCoordinator.h:
        * platform/animation/TimingFunction.cpp: Added.
        (WebCore::operator<<):
        * platform/animation/TimingFunction.h:
        * platform/graphics/Color.cpp:
        (WebCore::operator<<):
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::operator<<):
        * platform/graphics/FloatPoint3D.h:
        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/FloatRoundedRect.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::operator<<):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/ca/PlatformCAAnimation.cpp: Added.
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::operator<<):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::operator<<):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::operator<<):
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::operator<<): Deleted.
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::operator<<): Deleted.
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::operator<<):
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::operator<<):
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::startGroup):
        (WebCore::TextStream::endGroup):
        (WebCore::TextStream::nextLine):
        (WebCore::TextStream::writeIndent):
        * platform/text/TextStream.h:
        (WebCore::TextStream::operator<<):
        (WebCore::TextStream::dumpProperty):
        (WebCore::TextStream::increaseIndent):
        (WebCore::TextStream::decreaseIndent):
        (WebCore::TextStream::GroupScope::GroupScope):
        (WebCore::TextStream::GroupScope::~GroupScope):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<): Deleted.
        * rendering/svg/SVGRenderTreeAsText.h:

2015-10-17  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Finalize bug 149952 patch
        https://bugs.webkit.org/show_bug.cgi?id=150238

        Reviewed by Darin Adler.

        No change in behavior.

        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructor<JSClass>::finishCreation): Marked as inline.
        (WebCore::JSDOMConstructor<JSClass>::getConstructData): Marked as inline.

2015-10-16  Zalan Bujtas  <zalan@apple.com>

        RenderBlockFlow::*logical*ForFloat should take FloatingObject reference.
        https://bugs.webkit.org/show_bug.cgi?id=150266

        Reviewed by Simon Fraser.

        No change in behaviour.

        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        (WebCore::ComputeFloatOffsetAdapter<FloatTypeValue>::collectIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::repaintOverhangingFloats):
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::removeFloatingObjectsBelow):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::lowestInitialLetterLogicalBottom):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::hasOverhangingFloat):
        (WebCore::RenderBlockFlow::addIntrudingFloats):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::logicalTopForFloat):
        (WebCore::RenderBlockFlow::logicalBottomForFloat):
        (WebCore::RenderBlockFlow::logicalLeftForFloat):
        (WebCore::RenderBlockFlow::logicalRightForFloat):
        (WebCore::RenderBlockFlow::logicalWidthForFloat):
        (WebCore::RenderBlockFlow::logicalHeightForFloat):
        (WebCore::RenderBlockFlow::setLogicalTopForFloat):
        (WebCore::RenderBlockFlow::setLogicalLeftForFloat):
        (WebCore::RenderBlockFlow::setLogicalHeightForFloat):
        (WebCore::RenderBlockFlow::setLogicalWidthForFloat):
        (WebCore::RenderBlockFlow::logicalSizeForFloat): Deleted.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addOverflowFromChild):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::addOverflowFromChild):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/line/LineWidth.cpp:
        (WebCore::newFloatShrinksLine):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computeDeltasForContainingBlockLine):

2015-10-16  Jiewen Tan  <jiewen_tan@apple.com>

        Avoid to insert TAB before HTML element.
        https://bugs.webkit.org/show_bug.cgi?id=149295
        <rdar://problem/22746706>

        Reviewed by Ryosuke Niwa.

        This is a merge of Blink r175047:
        https://codereview.chromium.org/306583005

        This patch avoids InsertTextCommand::insertTab before HTML element because
        we can't set Text node as document element.

        Test: editing/execCommand/insert-tab-to-html-element-crash.html

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTab):

2015-10-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191204.
        https://bugs.webkit.org/show_bug.cgi?id=150263

        This change is causing existing tests to fail (Requested by
        ryanhaddad on #webkit).

        Reverted changeset:

        "Computed style should work correctly with slotted elements
        that have display:none"
        https://bugs.webkit.org/show_bug.cgi?id=150237
        http://trac.webkit.org/changeset/191204

2015-10-16  Alex Christensen  <achristensen@webkit.org>

        Disabled content blockers should not block any loads
        https://bugs.webkit.org/show_bug.cgi?id=150261

        Reviewed by Brady Eidson.

        This fix was tested manually by reloading without content blockers
        on websites with iframes and content blockers that block the contents of the iframes.

        * page/UserContentController.cpp:
        (WebCore::UserContentController::removeAllUserContentExtensions):
        (WebCore::contentExtensionsEnabled):
        (WebCore::UserContentController::processContentExtensionRulesForLoad):
        (WebCore::UserContentController::actionsForResourceLoad):
        Check the DocumentLoader of the main frame when checking if content extensions are disabled,
        because that is the DocumentLoader that has the flag from reloading without content blockers.

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

        Make TextStream the canonical way to log classes in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=150256

        Reviewed by Sam Weinig.

        We vacillated between PrintStream and TextStream as being the canonical way
        to stringify WebCore data structures. This patch solidifies TextStream
        as the solution, since it has convenient stream syntax, and is what we
        use for render tree dumps.

        Remove TextStream member functions that output non-simple structs
        (sizes, points and rects), replacing them with free operator<< functions
        in the .cpp file for the relevant class. Formatting is currently consistent
        with RenderTreeAsText output, to avoid breaking tests.

        Remove custom FloatRect outputting in SVG and RemoteLayerTreeTransaction.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::operator<<):
        (WebCore::FloatPoint::dump): Deleted.
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.cpp:
        (WebCore::operator<<):
        (WebCore::FloatRect::dump): Deleted.
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::FloatSize):
        (WebCore::operator<<):
        (WebCore::FloatSize::dump): Deleted.
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntPoint.cpp:
        (WebCore::operator<<):
        (WebCore::IntPoint::dump): Deleted.
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.cpp:
        (WebCore::operator<<):
        (WebCore::IntRect::dump): Deleted.
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.cpp:
        (WebCore::operator<<):
        (WebCore::IntSize::dump): Deleted.
        * platform/graphics/IntSize.h:
        * platform/graphics/LayoutPoint.cpp: Copied from Source/WebCore/platform/graphics/IntPoint.cpp.
        (WebCore::operator<<):
        * platform/graphics/LayoutPoint.h:
        * platform/graphics/LayoutRect.cpp:
        (WebCore::operator<<):
        * platform/graphics/LayoutRect.h:
        * platform/graphics/LayoutSize.cpp: Copied from Source/WebCore/platform/graphics/IntPoint.cpp.
        (WebCore::operator<<):
        * platform/graphics/LayoutSize.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::dump):
        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<): Deleted.

2015-10-16  Brent Fulgham  <bfulgham@apple.com>

        Hide all plugin names except Flash, Java, and QuickTime
        https://bugs.webkit.org/show_bug.cgi?id=149014

        Reviewed by Darin Adler.

        Revise plugin interface so that sites cannot iterate over all plugins to obtain
        a list of installed plugins for fingerprinting purposes. Sites need to ask for
        specific plugins by name, rather than iterating and comparing to avoid making
        this information accessible for fingerprinting purposes.

        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::length): Only return length of the plugins we are
        allowing to be seen.
        (WebCore::DOMPluginArray::item): Only iterate through the plugins we are
        allowing to be seen.
        * plugins/PluginData.cpp:
        (WebCore::PluginData::publiclyVisiblePlugins): Added.
        * plugins/PluginData.h:

2015-10-16  Brady Eidson  <beidson@apple.com>

        "enum class" some IDB enums.
        https://bugs.webkit.org/show_bug.cgi?id=150246

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBIsValidKeyPath):
        (WebCore::IDBParseKeyPath):
        (WebCore::IDBKeyPath::IDBKeyPath):
        (WebCore::IDBKeyPath::isValid):
        (WebCore::IDBKeyPath::operator==):
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IDBKeyPath.h:
        (WebCore::IDBKeyPath::IDBKeyPath):
        (WebCore::IDBKeyPath::type):
        (WebCore::IDBKeyPath::array):
        (WebCore::IDBKeyPath::string):
        (WebCore::IDBKeyPath::isNull):
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IndexedDB.h:
        * Modules/indexeddb/legacy/LegacyDatabase.cpp:
        (WebCore::LegacyDatabase::createObjectStore):
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp:
        (WebCore::LegacyObjectStore::createIndex):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * inspector/InspectorIndexedDBAgent.cpp:

2015-10-16  Anders Carlsson  <andersca@apple.com>

        Add indexeddb/shared to the include paths.

        * WebCore.vcxproj/WebCoreIncludeCommon.props:

2015-10-16  Antti Koivisto  <antti@apple.com>

        Computed style should work correctly with slotted elements that have display:none
        https://bugs.webkit.org/show_bug.cgi?id=150237

        Reviewed by Andreas Kling.

        If an element has display:none we don't normally retain or even compute its style (as it is not rendered).
        If getComputedStyle is invoked for such element we resolve the style (along with any ancestors) and cache
        it separately to rare data. This path needs to work with slotted elements in shadow trees.

        This patch also make computedStyle() iterative rather than recursive.

        Test: fast/shadow-dom/computed-style-display-none.html

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

            Pass in the parent style instead of invoking computedStyle() recursively.

        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::beforeOrAfterPseudoElement):
        (WebCore::Element::existingComputedStyle):
        (WebCore::Element::resolveComputedStyle):

            Iterative resolve function that uses composed tree iterator.

        (WebCore::Element::computedStyle):

            Factor into helpers.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::computedStyle):

            Use the composed tree iterator.

2015-10-16  David Hyatt  <hyatt@apple.com>

        ASSERT in imported/blink/fast/block/float/overhanging-float-crashes-when-sibling-becomes-formatting-context.html
        https://bugs.webkit.org/show_bug.cgi?id=150249

        Reviewed by Myles Maxfield.

        Covered by existing tests.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        Make sure the "unset" value has an equals implementation.

2015-10-16  Brady Eidson  <beidson@apple.com>

        Modern IDB: Handle versionchange events.
        https://bugs.webkit.org/show_bug.cgi?id=150149

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/versionchange-event.html
        
        - IDBVersionChangeEvents are now dispatched to open connections when a
          version upgrade request comes in.
        - Once all of those open connections have closed, the version upgrade 
          request is handled.

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
        (WebCore::IDBClient::IDBConnectionToServer::registerDatabaseConnection):
        (WebCore::IDBClient::IDBConnectionToServer::unregisterDatabaseConnection):
        * Modules/indexeddb/client/IDBConnectionToServer.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::fireVersionChangeEvent):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabase::invokeTransactionScheduler):
        (WebCore::IDBServer::UniqueIDBDatabase::transactionSchedulingTimerFired):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2015-10-16  Zalan Bujtas  <zalan@apple.com>

        First line box in paragraph using initial-letter overflows.
        https://bugs.webkit.org/show_bug.cgi?id=147977
        <rdar://problem/22901553>

        Reviewed by David Hyatt.

        When initial-letter float is present, we should shrink the first
        line even if it's not intersected with the block's current height.
        This is because of the sunken behaviour of initial-letter. 

        Test: fast/css-generated-content/initial-letter-first-line-wrapping.html

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::positionNewFloatOnLine):
        * rendering/line/LineWidth.cpp:
        (WebCore::newFloatShrinksLine):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/line/LineWidth.h:

2015-10-16  Keith Rollin  <krollin@apple.com>

        The value sanitization algorithm for input[type=url] should strip whitespaces
        https://bugs.webkit.org/show_bug.cgi?id=148864
        rdar://problem/22589358

        Reviewed by Chris Dumez.

        Follow the sanitization algorithm specified in:
        https://html.spec.whatwg.org/multipage/forms.html#url-state-(type=url)

        Chrome also has the same issue with url.html. Firefox passes.  All
        three browsers have multiple issues with type-change-state.html, with
        each browser having a different set of failures. Addressing this in
        WebKit is another issue outside the scope of bz=148864. For now, I'm
        updating that test to capture current WebKit behavior.

        No new tests (covered by existing tests):
        - web-platform-tests/html/semantics/forms/the-input-element/type-change-state.html
        - web-platform-tests/html/semantics/forms/the-input-element/url.html

        * html/TextFieldInputType.h:
        * html/URLInputType.cpp:
        (WebCore::URLInputType::sanitizeValue):
        * html/URLInputType.h:

2015-10-16  Antti Koivisto  <antti@apple.com>

        Remove NodeRenderingTraversal
        https://bugs.webkit.org/show_bug.cgi?id=150226

        Reviewed by Chris Dumez.

        It has been reduced to an implementation detail of FocusController. Move the remaining
        functions there as they have no general utility (and are wrong for focus navigation too).

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/NodeRenderingTraversal.cpp: Removed.
        * dom/NodeRenderingTraversal.h: Removed.
        * page/FocusController.cpp:
        (WebCore::firstChildInScope):
        (WebCore::lastChildInScope):
        (WebCore::parentInScope):
        (WebCore::nextInScope):
        (WebCore::previousInScope):
        (WebCore::FocusNavigationScope::FocusNavigationScope):
        (WebCore::FocusNavigationScope::focusNavigationScopeOf):
        (WebCore::FocusController::findElementWithExactTabIndex):
        (WebCore::nextElementWithGreaterTabIndex):
        (WebCore::previousElementWithLowerTabIndex):
        (WebCore::FocusController::nextFocusableElement):
        (WebCore::FocusController::previousFocusableElement):

2015-10-16  David Hyatt  <hyatt@apple.com>

        Build fix. "all" keyword introduction exposed a typo bug in the grid-area property definition.

        * css/CSSPropertyNames.in:

2015-10-16  Tim Horton  <timothy_horton@apple.com>

        Hook up autolayout intrinsic sizing for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=150219
        <rdar://problem/20016905>

        Reviewed by Simon Fraser.

        New API test: WebKit2.AutoLayoutIntegration.

        * page/FrameView.cpp:
        (WebCore::FrameView::autoSizeIfEnabled):
        When autosizing a document in which the body expands to the size of 
        the view (a feature of quirks mode), the first (width-determining)
        autosizing will resize the view to the document height (which is at 
        least the body height), and the second time around, the height will
        not decrease (because it was expanded to the size of the view).

        Instead, the first time around, we should use the computed width,
        but shrink the height back down to the minimum, and then expand
        only as much as needed to fit the content.

2015-10-16  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBDatabase.close().
        https://bugs.webkit.org/show_bug.cgi?id=150150

        Reviewed by Alex Christensen.

        No new tests (Covered by changes to storage/indexeddb/modern/opendatabase-versions.html).

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionClosed):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::~IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::close):
        (WebCore::IDBClient::IDBDatabase::maybeCloseInServer):
        (WebCore::IDBClient::IDBDatabase::commitTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        (WebCore::IDBClient::IDBDatabase::databaseConnectionIdentifier):

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::result):

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::databaseConnectionClosed):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::hasNonFinishedTransactions):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::databaseConnectionClosed):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-10-16  Chris Dumez  <cdumez@apple.com>

        HTMLPreloadScanner should preload iframes
        https://bugs.webkit.org/show_bug.cgi?id=150097
        <rdar://problem/23094475>

        Reviewed by Antti Koivisto.

        HTMLPreloadScanner should preload iframes to decrease page load time.

        Tests:
        - fast/preloader/frame-src.html
        - http/tests/loading/preload-no-store-frame-src.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        (WebCore::TokenPreloadScanner::initiatorFor):
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
        (WebCore::TokenPreloadScanner::StartTagScanner::setUrlToLoad): Deleted.
        (WebCore::TokenPreloadScanner::StartTagScanner::charset): Deleted.
        * html/parser/HTMLPreloadScanner.h:

2015-10-16  David Hyatt  <hyatt@apple.com>

        Implement the "all" CSS property.
        https://bugs.webkit.org/show_bug.cgi?id=116966

        Reviewed by Zalan Bujtas.

        Added new tests in fast/css.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        Don't support "all" from computed style for now.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Make sure to bail after checking inherit/unset/initial for all, since you can't actually
        accept longhand values in the shorthand declarations.

        (WebCore::CSSParser::parseAnimationProperty):
        "all" for animations is a special value and should not be confused with the property. It
        animates everything and does not omit unicode-bidi/direction the way the "all" property does.

        * css/CSSPropertyNames.in:
        Add the "all" property to the list and use a special keyword in the Longhands value, "all",
        that makeprop.pl will look for. This way we don't have to dump every single CSS property
        into the Longhands expression, since that would be nuts.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        Look for a common value across all properties supported by "all". That way you can get
        back inherit/initial/unset from it.

        * css/makeprop.pl:
        Make the perl script look for "all" in the longhand list, and if it sees it, put every
        single CSS property into the list for the all shorthand.

2015-10-16  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should use templated JSXXConstructor
        https://bugs.webkit.org/show_bug.cgi?id=149952

        Reviewed by Darin Adler.

        Adding constructor templates:
        - JSDOMConstructor: usual JS constructors
        - JSDOMNamedConstructor: for named constructors
        - JSDOMConstructorNotConstructable: for objects that cannot be constructed directly from JS.

        Binding generator is using these 3 templates and is generating specializations for construct, initializeProperties and s_info.
        These templates may also be used for private or custom constructors as examplified by JSImageConstructor
        and JSReadableStream reader and controller private constructors.

        Updated binding generator to use those templates.
        Updated JSImageConstructor.cpp to use JSDOMNamedConstructor.
        Updated default template implementation of JSBuiltinConstructor::createObject.
        Updated generated helper routines of binding generator to fit with the templates.

        A further patch should remove DOMConstructorWithDocument and DOMConstructorJSBuiltinObject. 

        Covered by binding tests.

        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructorNotConstructable::create):
        (WebCore::JSDOMConstructorNotConstructable::createStructure):
        (WebCore::JSDOMConstructorNotConstructable::JSDOMConstructorNotConstructable):
        (WebCore::JSDOMConstructorNotConstructable::initializeProperties):
        (WebCore::JSDOMConstructorNotConstructable<JSClass>::finishCreation):
        (WebCore::JSDOMConstructor::create):
        (WebCore::JSDOMConstructor::createStructure):
        (WebCore::JSDOMConstructor::JSDOMConstructor):
        (WebCore::JSDOMConstructor::initializeProperties):
        (WebCore::JSDOMConstructor<JSClass>::finishCreation):
        (WebCore::JSDOMConstructor<JSClass>::getConstructData):
        (WebCore::JSDOMNamedConstructor::create):
        (WebCore::JSDOMNamedConstructor::createStructure):
        (WebCore::JSDOMNamedConstructor::JSDOMNamedConstructor):
        (WebCore::JSDOMNamedConstructor::initializeProperties):
        (WebCore::JSDOMNamedConstructor<JSClass>::finishCreation):
        (WebCore::JSDOMNamedConstructor<JSClass>::getConstructData):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::image):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::initializeProperties):
        (WebCore::JSImageConstructor::construct):
        (WebCore::createImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetConstructorTemplateClassName):
        (GenerateConstructorDeclaration):
        (GenerateOverloadedConstructorDefinition):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (GenerateImplementation): Deleted.
        (GenerateConstructorDefinitions): Deleted.
        (HasCustomSetter): Deleted.
        (HasCustomMethod): Deleted.
        (NeedsConstructorProperty): Deleted.
        (ComputeFunctionSpecial): Deleted.
        (AddJSBuiltinIncludesIfNeeded): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
        (WebCore::JSTestActiveDOMObjectPrototype::finishCreation): Deleted.
        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject): Deleted.
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::initializeProperties):
        (WebCore::JSTestCallback::callbackWithNoParam): Deleted.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation): Deleted.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject): Deleted.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::createPrototype): Deleted.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getPrototype): Deleted.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::destroy): Deleted.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::initializeProperties):
        (WebCore::JSTestCustomNamedGetterPrototype::finishCreation): Deleted.
        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::construct):
        (WebCore::JSTestEventConstructorConstructor::initializeProperties):
        (WebCore::JSTestEventConstructorPrototype::finishCreation): Deleted.
        (WebCore::JSTestEventConstructor::JSTestEventConstructor): Deleted.
        (WebCore::JSTestEventConstructor::getPrototype): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::initializeProperties):
        (WebCore::JSTestEventTargetPrototype::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::initializeProperties):
        (WebCore::JSTestExceptionPrototype::finishCreation): Deleted.
        (WebCore::JSTestException::JSTestException): Deleted.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation): Deleted.
        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable): Deleted.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        (WebCore::JSTestInterfaceConstructor::initializeProperties):
        (WebCore::JSTestInterfaceConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::createJSObject):
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
        (WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::createPrototype): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::getPrototype): Deleted.
        (WebCore::JSTestJSBuiltinConstructor::destroy): Deleted.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
        (WebCore::JSTestMediaQueryListListenerPrototype::finishCreation): Deleted.
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener): Deleted.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorPrototype::finishCreation): Deleted.
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor): Deleted.
        (WebCore::jsTestNamedConstructorConstructor): Deleted.
        (WebCore::JSTestNamedConstructor::getConstructor): Deleted.
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots): Deleted.
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::construct):
        (WebCore::JSTestNodeConstructor::initializeProperties):
        (WebCore::JSTestNodePrototype::finishCreation): Deleted.
        (WebCore::JSTestNode::JSTestNode): Deleted.
        (WebCore::JSTestNode::getPrototype): Deleted.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::initializeProperties):
        (WebCore::JSTestNondeterministicPrototype::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        (WebCore::JSTestObjConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
        (WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
        (WebCore::constructJSTestOverloadedConstructors1): Deleted.
        (WebCore::constructJSTestOverloadedConstructors2): Deleted.
        (WebCore::JSTestOverloadedConstructorsPrototype::finishCreation): Deleted.
        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors): Deleted.
        (WebCore::JSTestOverloadedConstructors::createPrototype): Deleted.
        (WebCore::JSTestOverloadedConstructors::getPrototype): Deleted.
        (WebCore::JSTestOverloadedConstructors::destroy): Deleted.
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestOverrideBuiltinsPrototype::finishCreation): Deleted.
        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins): Deleted.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        (WebCore::JSTestTypedefsConstructor::initializeProperties):
        (WebCore::JSTestTypedefsPrototype::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::initializeProperties):
        (WebCore::JSattributePrototype::finishCreation): Deleted.
        (WebCore::JSattribute::JSattribute): Deleted.
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::initializeProperties):
        (WebCore::JSreadonlyPrototype::finishCreation): Deleted.
        (WebCore::JSreadonly::JSreadonly): Deleted.

2015-10-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] ASSERTION FAILED: !m_adoptionIsRequired in MediaSourceGStreamer::addSourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=150229

        Reviewed by Philippe Normand.

        This happens in the debug bot in all media source tests that run
        that code. The problem is that we are creating a RefPtr without
        adopting the reference.

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::addSourceBuffer): Use
        SourceBufferPrivateGStreamer::create().
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::create): Added to make
        sure you can't create a SourceBufferPrivateGStreamer without
        adopting the reference.
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        Takes a reference to the client instead of a PassRefPtr.
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:

2015-10-15  Roopesh Chander  <roop@roopc.net>

        [Content Extensions] Content blocking rules are not consulted for pings
        https://bugs.webkit.org/show_bug.cgi?id=149873

        Reviewed by Alex Christensen.

        This patch makes requests sent through the PingLoader
        respect content blocking rules. Specifically, the following
        are now subject to content blocking rules:
 
         1. <a ping> pings
         2. Images loaded in unload / beforeunload / pagehide handlers
         3. X-XSS-Protection / CSP violation reports

        Tests: http/tests/contentextensions/block-cookies-in-csp-report.html
               http/tests/contentextensions/block-cookies-in-image-load-in-onunload.html
               http/tests/contentextensions/block-cookies-in-ping.html
               http/tests/contentextensions/block-csp-report.html
               http/tests/contentextensions/block-image-load-in-onunload.html
               http/tests/contentextensions/block-ping.html
               http/tests/contentextensions/hide-on-csp-report.html

        * loader/PingLoader.cpp:
        (WebCore::processContentExtensionRulesForLoad):
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):

2015-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include Garbage Collection Event in Timeline
        https://bugs.webkit.org/show_bug.cgi?id=142510

        Reviewed by Geoffrey Garen and Brian Burg.

        Tests: inspector/heap/garbageCollected.html
               inspector/heap/gc.html

        * ForwardingHeaders/heap/HeapObserver.h: Added.
        * ForwardingHeaders/inspector/agents/InspectorHeapAgent.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Forwarding headers.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::vm):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::vm):
        * inspector/WorkerInspectorController.h:
        Implement InspectorEnvironment::vm and create a Heap agent for the
        Page inspector controller.

2015-10-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r191156.
        https://bugs.webkit.org/show_bug.cgi?id=150215

        Introduced crashing test (Requested by bradee-oh on #webkit).

        Reverted changeset:

        "Modern IDB: Support IDBDatabase.close()."
        https://bugs.webkit.org/show_bug.cgi?id=150150
        http://trac.webkit.org/changeset/191156

2015-10-15  Brady Eidson  <beidson@apple.com>

        Modern IDB: Support IDBDatabase.close().
        https://bugs.webkit.org/show_bug.cgi?id=150150

        Reviewed by Alex Christensen.

        No new tests (Covered by changes to storage/indexeddb/modern/opendatabase-versions.html).

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionClosed):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::~IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::close):
        (WebCore::IDBClient::IDBDatabase::maybeCloseInServer):
        (WebCore::IDBClient::IDBDatabase::commitTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:
        (WebCore::IDBClient::IDBDatabase::databaseConnectionIdentifier):

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::result):

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::databaseConnectionClosed):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::hasNonFinishedTransactions):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::databaseConnectionClosed):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

2015-10-15  David Hyatt  <hyatt@apple.com>

        Patch parseKeywordValue to accept "unset" so that it goes down the faster parsing path.
        https://bugs.webkit.org/show_bug.cgi?id=150213

        Reviewed by Dean Jackson.

        No new tests as correctness doesn't change (just speed).

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

2015-10-15  David Hyatt  <hyatt@apple.com>

        Add support for the CSS 'unset' keyword.
        https://bugs.webkit.org/show_bug.cgi?id=148614

        Reviewed by Dean Jackson.

        Added new test in fast/css, and existing variables tests also use unset in several tests.

        * WebCore.xcodeproj/project.pbxproj:
        Add CSSUnsetValue.cpp to the project.

        * bindings/objc/DOMCSS.mm:
        (kitClass):
        Make sure UNSET is handled in the switch.

        * css/CSSParser.cpp:
        (WebCore::parseKeywordValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseCustomPropertyDeclaration):
        Add cases to create a CSSUnsetValue properly.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::styleImage):
        (WebCore::CSSToStyleMap::mapFillAttachment):
        (WebCore::CSSToStyleMap::mapFillClip):
        (WebCore::CSSToStyleMap::mapFillComposite):
        (WebCore::CSSToStyleMap::mapFillBlendMode):
        (WebCore::CSSToStyleMap::mapFillOrigin):
        (WebCore::CSSToStyleMap::mapFillImage):
        (WebCore::CSSToStyleMap::mapFillRepeatX):
        (WebCore::CSSToStyleMap::mapFillRepeatY):
        (WebCore::convertToLengthSize):
        (WebCore::CSSToStyleMap::mapFillSize):
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType):
        (WebCore::CSSToStyleMap::mapAnimationDelay):
        (WebCore::CSSToStyleMap::mapAnimationDirection):
        (WebCore::CSSToStyleMap::mapAnimationDuration):
        (WebCore::CSSToStyleMap::mapAnimationFillMode):
        (WebCore::CSSToStyleMap::mapAnimationIterationCount):
        (WebCore::CSSToStyleMap::mapAnimationName):
        (WebCore::CSSToStyleMap::mapAnimationPlayState):
        (WebCore::CSSToStyleMap::mapAnimationProperty):
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        (WebCore::CSSToStyleMap::mapAnimationTrigger):
        The background and animation functions need to check for unset and be able to map it properly to initial. This is done
        with a new treatAsInitial method on CSSValue that can take the property ID and check for both initial
        or unset on a non-inherited property.

        * css/CSSUnsetValue.cpp: Added.
        (WebCore::CSSUnsetValue::customCSSText):
        * css/CSSUnsetValue.h: Added.
        (WebCore::CSSUnsetValue::create):
        (WebCore::CSSUnsetValue::equals):
        (WebCore::CSSUnsetValue::CSSUnsetValue):
        This new value looks exactly like CSSInheritedValue and CSSInitialValue.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssValueType):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::isInvalidCustomPropertyValue):
        (WebCore::CSSValue::treatAsInheritedValue):
        (WebCore::CSSValue::treatAsInitialValue):
        * css/CSSValue.h:
        (WebCore::CSSValue::isUnsetValue):
        Add isUnsetValue and the UnsetClass. Add support for treatAsInheritedValue and treatAsInitialValue to have
        a way to query for initial/inherit or the matching unset type.

        * css/CSSValueKeywords.in:
        Add the unset keyword.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::CSSValuePool):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createUnsetValue):
        Have a singleton model for unset just like we do for inherit/initial.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Handle unset correctly. It maps to inherit for inherited properties and initial for non-inherited ones.

2015-10-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate to CGContextSetBaseCTM() and CGContextResetClip() from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=150155

        Reviewed by Tim Horton.

        No new tests because there is no behavior change.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::platformApplyDeviceScaleFactor):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2015-10-15  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * platform/network/mac/ResourceHandleMac.mm:

2015-10-15  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Stop using WKSetNSURLConnectionDefersCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=150189

        Reviewed by Anders Carlsson.

        * platform/ios/WebCoreSystemInterfaceIOS.mm: Removed definition.
        * platform/mac/WebCoreSystemInterface.h: Removed declaration.
        * platform/mac/WebCoreSystemInterface.mm: Removed definition.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Changed to use -[NSURLConnection setDefersLoading:].
        (WebCore::ResourceHandle::platformSetDefersLoading): Ditto.

        * platform/spi/cocoa/NSURLConnectionSPI.h: Added declaration of
          -[NSURLConnection setDefersLoading:].

2015-10-15  Dean Jackson  <dino@apple.com>

        CSSKeyframesRule::appendRule is deprecated, but is actually the spec
        https://bugs.webkit.org/show_bug.cgi?id=150113

        Reviewed by Simon Fraser.

        I stupidly deprecated the wrong function in
        http://trac.webkit.org/changeset/174469

        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::insertRule): Swap the code between these two.
        (WebCore::CSSKeyframesRule::appendRule):

2015-10-14  David Hyatt  <hyatt@apple.com>

        Implement CSS Variables.
        https://bugs.webkit.org/show_bug.cgi?id=19660

        Reviewed by Dean Jackson.

        Added new tests in fast/css/custom-properties and fast/css/variables.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add CSSVariableValue.cpp and CSSVariableDependentValue.cpp to builds.

        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):
        Handle the new CSS_PARSER_WHITESPACE value.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        Patched to make sure style is updated so that dynamic changes to custom properties are reflected
        immediately when querying values.

        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::item):
        The custom properties table is a reference and not a pointer now.

        * css/CSSCustomPropertyValue.h:
        (WebCore::CSSCustomPropertyValue::create):
        (WebCore::CSSCustomPropertyValue::createInvalid):
        (WebCore::CSSCustomPropertyValue::customCSSText):
        (WebCore::CSSCustomPropertyValue::equals):
        (WebCore::CSSCustomPropertyValue::isInvalid):
        (WebCore::CSSCustomPropertyValue::containsVariables):
        (WebCore::CSSCustomPropertyValue::value):
        (WebCore::CSSCustomPropertyValue::CSSCustomPropertyValue):
        The CSSCustomPropertyValue represents a custom property/value pair in the back end. It holds on
        to both the property name and a CSSValueList that has the original parser terms. This class also
        doubles as the invalid-at-compute-time value for custom properties when they contain cycles, etc.

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::buildParserValueSubstitutingVariables):
         * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::buildParserValueSubstitutingVariables):
        Hands back a CSSParserValue for a function with variables replaced with their real values (or fallback).

        * css/CSSGrammar.y.in:
        Many changes to support the var() syntax and to handle error conditions and cases.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        Null check the value here. Shouldn't happen, but being paranoid.

        (WebCore::CSSParser::parseVariableDependentValue):
        This function converts a CSSValueList back into a CSSParserValueList and then passes
        it off to the parser. If the result parses, successfully, then the parsed CSSValue is handed back.

        (WebCore::CSSParser::parseValue):
        Detect when a property value contains variables and simply make a CSSVariableDependentValue to hold
        a copy of the parser value list (as a CSSValueList). We defer parsing the list until compute-time
        when we know the values of the variables to use.

        (WebCore::CSSParser::parseCustomPropertyDeclaration):
        Add support for inherit, initial and variable references in custom properties.

        (WebCore::CSSParser::detectFunctionTypeToken):
        Add support for detection of the "var" token.

        (WebCore::CSSParser::realLex):
        Fix the parsing of custom properties to allow "--" and to allow them to start with digits, e.g., "--0".

        * css/CSSParser.h:
        Add parseVariableDependentValue function for handling variable substitution and subsequent parsing
        of the resolved parser value list.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::containsVariables):
        Get rid of the toString() function (no longer needed) and replace it with containsVariables(). This
        check is used to figure out if a parser value list has variables and thus needs to defer parsing
        until later.

        (WebCore::CSSParserValue::createCSSValue):
        Add support for the creation of values for variables, CSSVariableValues.

        (WebCore::CSSParserValueList::toString): Deleted.
        No longer needed.

        * css/CSSParserValues.h:
        Add CSSParserVariable as a new kind of parser value. This represents a var() that is encountered
        during parsing. It is similar to a function except it has to hold both the reference (custom property name)
        and fallback arguments.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        Add support for CSS_PARSER_WHITESPACE as a way of preserving whitespace as a parsed item (variables can
        be only whitespace, and this has to be retained).

        (WebCore::CSSPrimitiveValue::buildParserValue):
        Conversion from a CSSPrimitiveValue back into a parser value is handled by this function.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isParserOperator):
        (WebCore::CSSPrimitiveValue::parserOperator):
        Add ability to get parser operator info. Add the buildParserValue declaration.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        (WebCore::CSSValue::isInvalidCustomPropertyValue):
        * css/CSSValue.h:
        Add support for variable values and variable dependent values.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::customCSSText):
        Improve serialization to not output extra spaces when a comma operator is a value.

        (WebCore::CSSValueList::containsVariables):
        Whether or not a CSSVariableValue can be found somewhere within the list (or its descendants).

        (WebCore::CSSValueList::checkVariablesForCycles):
        Called to check variables for cycles.

        (WebCore::CSSValueList::buildParserValueSubstitutingVariables):
        (WebCore::CSSValueList::buildParserValueListSubstitutingVariables):
        Functions that handle converting the value list to a parser value list while making
        variable substitutions along the way.

        * css/CSSValueList.h:
        Add the new buildParserXXX functions.

        * css/CSSVariableDependentValue.cpp: Added.
        (WebCore::CSSVariableDependentValue::checkVariablesForCycles):
        * css/CSSVariableDependentValue.h: Added.
        (WebCore::CSSVariableDependentValue::create):
        (WebCore::CSSVariableDependentValue::customCSSText):
        (WebCore::CSSVariableDependentValue::equals):
        (WebCore::CSSVariableDependentValue::propertyID):
        (WebCore::CSSVariableDependentValue::valueList):
        (WebCore::CSSVariableDependentValue::CSSVariableDependentValue):
        This value represents a list of terms that have not had variables substituted yet. The list
        is held by the value so that it can be converted back into a parser value list once the
        variable values are known.

        * css/CSSVariableValue.cpp: Added.
        (WebCore::CSSVariableValue::CSSVariableValue):
        (WebCore::CSSVariableValue::customCSSText):
        (WebCore::CSSVariableValue::equals):
        (WebCore::CSSVariableValue::buildParserValueListSubstitutingVariables):
        * css/CSSVariableValue.h: Added.
        (WebCore::CSSVariableValue::create):
        (WebCore::CSSVariableValue::name):
        (WebCore::CSSVariableValue::fallbackArguments):
        This value represents a var() itself. It knows how to do the substitution of the variable
        value and to apply fallback if that value is not present.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::borderSpacingValue):
        (WebCore::StyleProperties::getLayeredShorthandValue):
        (WebCore::StyleProperties::getShorthandValue):
        (WebCore::StyleProperties::getCommonValue):
        (WebCore::StyleProperties::getPropertyCSSValue):
        (WebCore::StyleProperties::getPropertyCSSValueInternal):
        (WebCore::StyleProperties::asText):
        (WebCore::StyleProperties::copyPropertiesInSet):
        * css/StyleProperties.h:
        Patched to factor property fetching into an internal method so that variables can work with shorthands
        in the CSS OM.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Resolve variable values at compute time. If they fail to resolve, use inherit or initial as the
        value (depending on whether the property inherits by default).

        (WebCore::StyleResolver::resolvedVariableValue):
        Helper function that calls parseVariableDependentValue and gets the resolved result.

        (WebCore::StyleResolver::applyCascadedProperties):
        After custom properties have been collected, we check for cycles and perform variable substitutions.
        This way we get all the variables replaced before we inherit down the style tree.

        * css/StyleResolver.h:
        Add resolvedVariableValue declaration.

        * css/makeprop.pl:
        Make sure custom properties are inherited by default.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::checkVariablesInCustomProperties):
        This function handles updating variables with cycles to be invalid in the RenderStyle. It then also
        handles the replacement of variables found in custom properties with resolved values. All custom
        properties are either invalid or are real non-variable-dependent value lists after this function
        completes.

        * rendering/style/RenderStyle.h:
        Add checkVariablesInCustomProperties declaration.

        * rendering/style/StyleCustomPropertyData.h:
        (WebCore::StyleCustomPropertyData::create):
        (WebCore::StyleCustomPropertyData::copy):
        (WebCore::StyleCustomPropertyData::operator==):
        (WebCore::StyleCustomPropertyData::operator!=):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::getCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::values):
        (WebCore::StyleCustomPropertyData::hasCustomProperty):
        (WebCore::StyleCustomPropertyData::containsVariables):
        (WebCore::StyleCustomPropertyData::setContainsVariables):
        (WebCore::StyleCustomPropertyData::StyleCustomPropertyData):
        Miscellaneous cleanup, and the addition of whether or not the properties still contain variable
        dependent values that need to be resolved.

2015-10-15  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !(ENABLE(SHADOW_DOM) || ENABLE(DETAILS_ELEMENT)) build after r191112
        https://bugs.webkit.org/show_bug.cgi?id=150175

        Reviewed by Antti Koivisto.

        * dom/ComposedTreeAncestorIterator.h:
        (WebCore::ComposedTreeAncestorIterator::traverseParent):
        * dom/ComposedTreeIterator.cpp:
        (WebCore::ComposedTreeIterator::initializeShadowStack):
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):

2015-10-15  Csaba Osztrogonác  <ossy@webkit.org>

        Get rid of the only once used isIntegerArray function
        https://bugs.webkit.org/show_bug.cgi?id=150170

        Reviewed by Geoffrey Garen.

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

2015-10-15  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build.

        * page/EventHandler.h:

2015-10-15  Zalan Bujtas  <zalan@apple.com>

        Anonymous table objects: Collapse anonymous table rows.
        https://bugs.webkit.org/show_bug.cgi?id=150154

        Reviewed by David Hyatt.

        Merge anonymous table rows when they are not needed anymore.
        Generated table rows can be collapsed into one when there's no
        non-generated sibling table row left in the tree.

        Import W3C CSS2.1 anonymous table tests.

        * rendering/RenderObject.cpp:
        (WebCore::collapseAnonymousTableRowsIfNeeded):
        (WebCore::RenderObject::destroyAndCleanupAnonymousWrappers):

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

        Un-indent contents of the WebCore namespace
        in GraphicsContext.h. No code changes.

        * platform/graphics/GraphicsContext.h:

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

        Move ImageBuffer:clip() into GraphicsContextCG
        https://bugs.webkit.org/show_bug.cgi?id=150140

        Reviewed by Zalan Bujtas.

        Move the guts of CG's ImageBuffer:clip() into GraphicsContextCG.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipToNativeImage):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::clip):

2015-10-14  Brady Eidson  <beidson@apple.com>

        Modern IDB: Add basic transaction committing.
        https://bugs.webkit.org/show_bug.cgi?id=150147

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/opendatabase-versions.html

        * Modules/indexeddb/IDBTransaction.h:

        * Modules/indexeddb/IndexedDB.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::didCommitTransaction):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
        (WebCore::IDBClient::IDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBClient::IDBDatabase::commitTransaction):
        (WebCore::IDBClient::IDBDatabase::didCommitTransaction):
        (WebCore::IDBClient::IDBDatabase::didAbortTransaction):
        (WebCore::IDBClient::IDBDatabase::didCommitOrAbortTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h:

        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::IDBFactory::open):

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onSuccess):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:

        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::db):
        (WebCore::IDBClient::IDBTransaction::hasPendingActivity):
        (WebCore::IDBClient::IDBTransaction::isActive):
        (WebCore::IDBClient::IDBTransaction::scheduleOperationTimer):
        (WebCore::IDBClient::IDBTransaction::operationTimerFired):
        (WebCore::IDBClient::IDBTransaction::commit):
        (WebCore::IDBClient::IDBTransaction::didCommit):
        (WebCore::IDBClient::IDBTransaction::fireOnComplete):
        (WebCore::IDBClient::IDBTransaction::fireOnAbort):
        (WebCore::IDBClient::IDBTransaction::enqueueEvent):
        (WebCore::IDBClient::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        (WebCore::IDBClient::IDBTransaction::database):
        
        * Modules/indexeddb/legacy/LegacyTransaction.cpp:
        (WebCore::LegacyTransaction::db):
        * Modules/indexeddb/legacy/LegacyTransaction.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::registerTransaction):
        (WebCore::IDBServer::IDBServer::unregisterTransaction):
        (WebCore::IDBServer::IDBServer::commitTransaction):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::generateUniqueCallbackIdentifier):
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCommitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performErrorCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        (WebCore::IDBServer::UniqueIDBDatabase::server):
        
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        (WebCore::IDBDatabaseInfo::setVersion):
        
        * Modules/indexeddb/shared/IDBError.cpp:
        (WebCore::IDBError::isolatedCopy):
        * Modules/indexeddb/shared/IDBError.h:

        * Modules/indexeddb/shared/IDBRequestData.h:

        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::isolatedCopy):
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didCommitTransaction):
        (WebCore::InProcessIDBServer::commitTransaction):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * WebCore.xcodeproj/project.pbxproj:

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBResourceIdentifier>::copy):
        (WebCore::IDBError>::copy):
        * platform/CrossThreadCopier.h:

2015-10-15  Daniel Bates  <dabates@apple.com>

        [iOS] DOM click event may not be dispatched when page has :active style and <input type="search">
        https://bugs.webkit.org/show_bug.cgi?id=144451
        <rdar://problem/23099482>

        Reviewed by Simon Fraser.

        Fixes an issue where a DOM click event is not dispatched to an element in a subframe on a page
        that has a <input type="search"> and defines a CSS :active pseudo-class for the HTML body element.

        On iOS we only dispatch a DOM click event if the content does not change as part
        of dispatching a DOM mousemove event at the tapped element. In particular, we do not
        dispatch a DOM click event if there is a visibility change to some element on the page
        as part of dispatching a mousemove event at the tapped element. For a web page
        that specifies CSS :active pseudo-class and contains a search field, applying/unapplying
        this pseudo-class as part of dispatching a DOM mousemove event may cause the
        visibility of the search field cancel button to change; => a DOM click event will not
        be dispatched to the tapped element.

        Tests: fast/events/can-click-element-on-page-with-active-pseudo-class-and-search-field.html
               fast/forms/search/search-cancel-button-visible-when-input-becomes-disabled.html
               fast/forms/search/search-cancel-button-visible-when-input-becomes-readonly.html
               fast/forms/search/search-cancel-in-formerly-invisible-element.html
               fast/forms/search/search-cancel-toggle-visibility-initially-hidden.html
               fast/forms/search/search-cancel-toggle-visibility-initially-visible.html

        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::updateCancelButtonVisibility): Write logic for determining
        whether the visibility of the cancel button changed in terms of m_isCancelButtonVisible
        instead of querying for the current style data as the latter is overwritten on a full
        style recalculation.
        (WebCore::RenderSearchField::RenderSearchField): Deleted.
        (WebCore::RenderSearchField::visibilityForCancelButton): Deleted.
        * rendering/RenderSearchField.h: Define instance variable m_isCancelButtonVisible to
        store the visibility state of the cancel button.

2015-10-15  Antti Koivisto  <antti@apple.com>

        Implement iterator for traversing composed ancestors
        https://bugs.webkit.org/show_bug.cgi?id=150162

        Reviewed by Andreas Kling.

        The existing general purpose ComposedTreeIterator can traverse parent chain but not efficiently
        (since it builds stack). Add a separate stackless iterator for ancestor chain traversal.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedTreeAncestorIterator.h: Added.
        (WebCore::ComposedTreeAncestorIterator::operator*):
        (WebCore::ComposedTreeAncestorIterator::operator->):
        (WebCore::ComposedTreeAncestorIterator::operator==):
        (WebCore::ComposedTreeAncestorIterator::operator!=):
        (WebCore::ComposedTreeAncestorIterator::operator++):
        (WebCore::ComposedTreeAncestorIterator::get):
        (WebCore::ComposedTreeAncestorIterator::ComposedTreeAncestorIterator):
        (WebCore::ComposedTreeAncestorIterator::traverseParent):
        (WebCore::ComposedTreeAncestorAdapter::ComposedTreeAncestorAdapter):
        (WebCore::ComposedTreeAncestorAdapter::begin):
        (WebCore::ComposedTreeAncestorAdapter::end):
        (WebCore::ComposedTreeAncestorAdapter::first):
        (WebCore::composedTreeAncestors):
        * dom/ComposedTreeIterator.h:
        * dom/ContainerNode.h:
        (WebCore::Node::highestAncestor):
        (WebCore::Node::isTreeScope):
        (WebCore::Node::needsNodeRenderingTraversalSlowPath): Deleted.

            With NodeRenderingTraversal::parent removed this bit is no longer used.

        * dom/Element.cpp:
        (WebCore::Element::shadowRoot):
        (WebCore::Element::addShadowRoot):
        (WebCore::shouldUseNodeRenderingTraversalSlowPath): Deleted.
        (WebCore::Element::resetNeedsNodeRenderingTraversalSlowPath): Deleted.
        * dom/Element.h:
        (WebCore::Element::didAddUserAgentShadowRoot):
        (WebCore::Element::alwaysCreateUserAgentShadowRoot):
        * dom/Node.cpp:
        (WebCore::Node::derefEventTarget):
        (WebCore::Node::updateAncestorsForStyleRecalc):
        (WebCore::traverseStyleParent): Deleted.
        (WebCore::traverseFirstStyleParent): Deleted.

            Switch to iterator interface.

        * dom/Node.h:
        (WebCore::Node::isDocumentFragment):
        (WebCore::Node::isShadowRoot):
        (WebCore::Node::isNamedFlowContentNode):
        (WebCore::Node::hasCustomStyleResolveCallbacks):
        (WebCore::Node::setHasCustomStyleResolveCallbacks):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::setStyleChange):
        (WebCore::Node::setNeedsNodeRenderingTraversalSlowPath): Deleted.
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::traverseParent):
        (WebCore::NodeRenderingTraversal::traverseFirstChild):
        (WebCore::NodeRenderingTraversal::traverseLastChild):
        (WebCore::NodeRenderingTraversal::traversePreviousSibling):
        (WebCore::NodeRenderingTraversal::nextInScope):
        (WebCore::NodeRenderingTraversal::previousInScope):
        (WebCore::NodeRenderingTraversal::parentInScope):
        (WebCore::NodeRenderingTraversal::lastChildInScope):
        (WebCore::NodeRenderingTraversal::parentSlow): Deleted.
        * dom/NodeRenderingTraversal.h:
        (WebCore::NodeRenderingTraversal::parent): Deleted.

            No longer used.

        * html/HTMLSummaryElement.cpp:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::isChildAllowed):

            Switch to iterator interface.

        * style/RenderTreePosition.cpp:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::updateTextRendererAfterContentChange):

            Switch to iterator interface.

2015-10-14  Zhuo Li  <zachli@apple.com>

        Augment <input type=search>’s recent search history with the time each entry was added,
        in order to allow time-based clearing of search history.
        https://bugs.webkit.org/show_bug.cgi?id=148388.

        Reviewed by Darin Adler.

        Replace Vector<String> with Vector<RecentSearch>, where RecentSearch is a struct
        that consists search string and time, for recent searches in order to store additional time
        information.

        * WebCore.xcodeproj/project.pbxproj: Added SearchPopupMenuCocoa.h and SearchPopupMenuCocoa.mm
        and sort the project file.
        * loader/EmptyClients.cpp:
        (WebCore::EmptySearchPopupMenu::saveRecentSearches):
        (WebCore::EmptySearchPopupMenu::loadRecentSearches):
        * platform/SearchPopupMenu.h:
        * platform/cocoa/SearchPopupMenuCocoa.h: Added methods for SeachPopupMenuMac in WebKit
        and WebPageProxyCocoa in WebKit2 to call.
        * platform/cocoa/SearchPopupMenuCocoa.mm: Added.
        (WebCore::searchFieldRecentSearchesStorageDirectory): Recent searches with the new structure
        are stored in a new location.
        (WebCore::searchFieldRecentSearchesPlistPath): Get the path for the plist of the recent
        searches entries.
        (WebCore::RetainPtr<NSMutableDictionary> readSearchFieldRecentSearchesPlist): Return the
        recent searches plist as NSMutableDictionary.
        (WebCore::fromNSDatetoSystemClockTime): Convert from NSDate to system_clock::time_point.
        (WebCore::fromSystemClockTimetoNSDate): Convert from system_clock::time_point to NSDate.
        (WebCore::SearchPopupMenuCocoa::saveRecentSearches): Add a dictionary where it has two pairs
        that the first one is the search string and the second one is the time.
        (WebCore::SearchPopupMenuCocoa::loadRecentSearches): We expect the recent search item in the
        plist to be a two-pair dictionary, and convert the dictionary to the struct RecentSearch.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::saveRecentSearches): Only save the RecentSearch's search
        string on Windows platform, which is what we used to do.
        (WebCore::SearchPopupMenuWin::loadRecentSearches): Since we need to construct a
        RecentSearch, we get the string from the app's preferences, and set the time to be
        std::chrono::system_clock::time_point::min().
        * platform/win/SearchPopupMenuWin.h:
        * rendering/RenderSearchField.cpp: Now that m_recentSearches are Vector<RecentSearch>,
        we cannot use -removeAll with a search string. Use -removeAllMatching instead to remove the
        item that has its member search string equal to the search string user inputs.
        (WebCore::RenderSearchField::addSearchResult):
        (WebCore::RenderSearchField::itemText):

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

        Use RefPtr<Image> return type for StyleImage::image()
        https://bugs.webkit.org/show_bug.cgi?id=150112

        Reviewed by Andreas Kling.
        
        Change StyleImage::image() and subclasses to return RefPtr<Image>
        instead of a PassRefPtr<Image>.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::image):
        * rendering/RenderImageResource.h:
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::image):
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::image):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.cpp:
        (WebCore::StyleCachedImageSet::image):
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::image):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:

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

        Give subclasses of CSSImageGeneratorValue a consistent image() return type
        https://bugs.webkit.org/show_bug.cgi?id=150111

        Reviewed by Andreas Kling.
        
        CSSImageGeneratorValue and subclasses had signatures of the non-virtual image() function
        with mistmatched return types; some returned RefPtr<Image>, and others PassRefPtr<Image>. Make
        them all the same.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::image):
        * css/CSSImageGeneratorValue.h:
        * css/CSSNamedImageValue.cpp:
        (WebCore::CSSNamedImageValue::image):
        * css/CSSNamedImageValue.h:

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

        Move some EventHandler initialization to the header
        https://bugs.webkit.org/show_bug.cgi?id=150139

        Reviewed by Andreas Kling.

        No new tests, just cleanup.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Deleted.
        * page/EventHandler.h:
        Also found one member which was unused, and a few that were uninitialized.
        It's likely the uninitialized ones didn't actually cause any trouble because
        they are reset in lots of places, but this seems better.

2015-10-14  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Make blocked async XHR call onerror
        https://bugs.webkit.org/show_bug.cgi?id=146706

        Reviewed by Brady Eidson.

        Test: http/tests/contentextensions/async-xhr-onerror.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::networkErrorTimerFired):
        (WebCore::XMLHttpRequest::abortError):
        * xml/XMLHttpRequest.h:
        Make a timer that calls networkError in 0 time if a content blocker blocks the asynchronous load.
        It is necessary to call setPendingActivity and dropProtection (which calls unsetPendingActivity)
        to keep a reference to the XMLHttpRequest alive.

2015-10-14  Andy Estes  <aestes@apple.com>

        [iOS] QuickLook documents loaded over https do not load their subresources
        https://bugs.webkit.org/show_bug.cgi?id=150145
        <rdar://problem/22884521>

        Reviewed by Alexey Proskuryakov.

        When QuickLook generates an HTML preview of a document, subresources are referenced using the x-apple-ql-id scheme,
        for which QuickLook installs an NSURLProtocol. If a document is loaded over https, then this scheme needs to be
        considered secure in order to avoid mixed content errors.

        Test: http/tests/quicklook/secure-document-with-subresources.html

        * platform/SchemeRegistry.cpp:
        (WebCore::secureSchemes): Registered QLPreviewProtocol() as a secure scheme.

2015-10-14  Jiewen Tan  <jiewen_tan@apple.com>

        Postpone mutation events before invoke Editor::Command command(Document*, const String&, bool).
        https://bugs.webkit.org/show_bug.cgi?id=149299
        <rdar://problem/22746995>

        Reviewed by Andreas Kling.

        Test: editing/inserting/insert-with-mutation-event.html

        This is a merge of a part of Blink r166294:
        https://codereview.chromium.org/141103006

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

2015-10-14  Dean Jackson  <dino@apple.com>

        Implement CanvasRenderingContext2D::commit
        https://bugs.webkit.org/show_bug.cgi?id=150110
        <rdar://problem/23057398>

        Reviewed by Anders Carlsson.

        As part of getting as close as possible to the HTML5 specification,
        implement the commit() method on 2d canvas, even though it doesn't
        do anything.

        Test: fast/canvas/commit.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::commit): Intercept it here to
        avoid adding a method to the actual implementation.
        * html/canvas/CanvasRenderingContext2D.idl: Add commit.

2015-10-14  Alex Christensen  <achristensen@webkit.org>

        Add SPI for reloading without content blockers
        https://bugs.webkit.org/show_bug.cgi?id=150058
        rdar://problem/22742222

        Reviewed by Sam Weinig.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        * loader/FrameLoader.h:
        * page/Page.h:
        (WebCore::Page::userContentController):
        (WebCore::Page::userContentExtensionsEnabled): Deleted.
        (WebCore::Page::setUserContentExtensionsEnabled): Deleted.
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::loadRequest):
        (WebCore::UserInputBridge::reloadFrame):
        (WebCore::UserInputBridge::stopLoadingFrame):
        * replay/UserInputBridge.h:
        Pass a bool from the reloadWithoutContentBlockers call to the DocumentLoader, 
        which stores the state of whether the content blockers are enabled or not.
        Remove the state from the Page and copying the state from the Page to the DocumentLoader
        because that caused issues with the content blockers being re-enabled at the wrong time.

2015-10-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Rename JSDOMWrapper to JSDOMObject and JSDOMWrapperWithImplementation to JSDOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=150120

        Reviewed by Sam Weinig.

        No change in behavior.

        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::getInlineCachedWrapper):
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::createWrapper):
        (WebCore::getStaticValueSlotEntryWithoutCaching<JSDOMObject>):
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMObject::JSDOMObject):
        (WebCore::JSDOMWrapper::~JSDOMWrapper):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/ScriptWrappable.h:
        * bindings/js/ScriptWrappableInlines.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetParentClassName):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::JSTestEventTarget):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::JSTestException):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::JSTestInterface):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministic::JSTestNondeterministic):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::JSTestObj):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::JSTestTypedefs):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::JSattribute):
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::JSreadonly):
        * bindings/scripts/test/JS/JSreadonly.h:
        * dom/make_names.pl:
        (printWrapperFunctions):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):

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

        Change GraphicsContext image-drawing functions to take references
        https://bugs.webkit.org/show_bug.cgi?id=150108

        Reviewed by Tim Horton and Sam Weinig.

        Change GraphicsContext::drawImage(), drawTiledImage(), drawImageBuffer(), clipToImageBuffer()
        and isCompatibleWithBuffer() to take references, and adjust calling code, adding
        null-checks where necessary.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::image):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawImageIntoBuffer):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintPanScrollIcon):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::isCompatibleWithBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::endShadowLayer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::ImageBackingSurfaceClient::ImageBackingSurfaceClient):
        (WebCore::CoordinatedImageBacking::update):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/ImageQualityController.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::shouldPaintAtLowQuality):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        (WebCore::RenderEmbeddedObject::paintContents):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImageResourceStyleImage.cpp:
        (WebCore::RenderImageResourceStyleImage::shutdown):
        (WebCore::RenderImageResourceStyleImage::image):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::drawPlatformResizerImage):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage): Deleted.
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2015-10-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r53318): background-repeat: space with gradients doesn't render correctly
        https://bugs.webkit.org/show_bug.cgi?id=150068

        Reviewed by Simon Fraser.

        This is a regression of r53318 in which we were trying to make the pattern
        of the gradient image as small as possible: 1-pixel wide or tall. But this
        broke the rendering of the background image when container element has the
        style background-repeat: space. The reason for this is tiling the gradient
        image is done completely by CG. To do the tiling, we start by creating a
        CGPattern by calling CGPatternCreate() which takes the rect of the pattern
        and the step. If the width or the height of the pattern image is adjusted
        to be 1-pixel wide or tall, that will force CG to leave a space after every
        it draws the pattern image which is 1-pixel wide or tall which is wrong.
        
        The fix is to disable this optimization altogether if the container element
        has the style background-repeat: space.

        Test: fast/gradients/background-image-repeat-space.html

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::adjustParametersForTiledDrawing):
        * platform/graphics/Gradient.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):

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

        Add helper funtion for checking pointer equivalency and use it
        https://bugs.webkit.org/show_bug.cgi?id=150022

        Reviewed by Darin Adler.

        A common pattern in WebCore code is to check for equivalency of two pointers,
        either both null, or both non-null and with equal values. This was written in
        several different ways in different places.
        
        Add arePointingToEqualData() to standardize this pattern.

        This obviates the need for StyleImage::imagesEquivalent(), counterDataEquivalent()
        etc.
        
        Also change some comparisons of DataRef<> which checked the pointer and then the
        values to use DataRef<>::operator== which does the same thing. Comparisons of
        m_grid and m_gridItem only checked pointer equality, so this is probably a bug fix there.

        * page/animation/CSSPropertyAnimation.cpp: if ((!a && !b) || a == b) is redundant so fix,
        and add checks for a and b RenderStyle* first.
        (WebCore::PropertyWrapperGetter::equals):
        (WebCore::StyleImagePropertyWrapper::equals):
        (WebCore::PropertyWrapperShadow::equals):
        (WebCore::PropertyWrapperMaybeInvalidColor::equals):
        (WebCore::FillLayerPropertyWrapperGetter::equals):
        (WebCore::FillLayerStyleImagePropertyWrapper::equals):
        (WebCore::FillLayersPropertyWrapper::equals):
        (WebCore::ShorthandPropertyWrapper::equals):
        (WebCore::PropertyWrapperFlex::equals):
        (WebCore::PropertyWrapperSVGPaint::equals):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::equalIgnoringHeaderFields):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::operator==):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImageData::operator==):
        * rendering/style/RenderStyle.cpp: Some nullptr cleanup.
        (WebCore::RenderStyle::getCachedPseudoStyle):
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::changeAffectsVisualOverflow):
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::setWillChange):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::operator==):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::operator==):
        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::imagesEquivalent): Deleted.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        (WebCore::cursorDataEquivalent): Deleted.
        (WebCore::quotesDataEquivalent): Deleted.
        (WebCore::StyleRareInheritedData::shadowDataEquivalent): Deleted.
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::counterDataEquivalent): Deleted.
        (WebCore::StyleRareNonInheritedData::shadowDataEquivalent): Deleted.
        (WebCore::StyleRareNonInheritedData::willChangeDataEquivalent): Deleted.
        (WebCore::StyleRareNonInheritedData::reflectionDataEquivalent): Deleted.
        (WebCore::StyleRareNonInheritedData::animationDataEquivalent): Deleted.
        (WebCore::StyleRareNonInheritedData::transitionDataEquivalent): Deleted.
        * rendering/style/StyleRareNonInheritedData.h:

2015-10-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Split TypesettingFeatures into kerning and ligatures bools
        https://bugs.webkit.org/show_bug.cgi?id=150074

        Reviewed by Simon Fraser.

        Our TypesettingFeatures type represents whether kerning or ligatures are enabled
        when laying out text. However, now that I have implemented font-feature-settings
        and font-variant-*, this type is wildly inadequate. There are now multiple kinds
        of ligatures, and many other features which are neither kerning nor ligatures.
        Adding tons of information to this type doesn't make sense because 1) We already
        have a FontVariantSettings struct which contains this information, and 2) None
        of the users of TypesettingFeatures care about most of these new features.

        In this new world of font features, the font-kerning property isn't changing.
        Therefore, all the code which relies only on the Kerning value in
        TypesettingFeatures doesn't need to change. The places which rely on Ligatures,
        however, need to be updated to understand that there are many different kinds
        of ligatures.

        Indeed, after inspection, all of the places which inspect ligatures are more
        interested in a high-level concept of whether or not we can trust some simple
        computation. Therefore, we really have two things we care about: Kerning, and
        this high-level concept.

        This patch is the second step to update our view of the world to include
        font-feature-settings and font-variant-*. In particular, this patch simply
        splits TypesettingFeatures into two Booleans, one for Kerning, and one for
        Ligatures (which has no behavior change). Then, once they are separated, I can
        migrate the Ligatures Boolean to take on its new meaning.

        This change is purely mechanical.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontCascadeDescription::Kerning):
        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        (WebCore::FontCascade::operator=):
        (WebCore::FontCascade::update):
        (WebCore::FontCascade::drawText):
        (WebCore::FontCascade::drawEmphasisMarks):
        (WebCore::FontCascade::width):
        (WebCore::FontCascade::adjustSelectionRectForText):
        (WebCore::FontCascade::offsetForPosition):
        (WebCore::FontCascade::setDefaultKerning):
        (WebCore::FontCascade::setDefaultLigatures):
        (WebCore::FontCascade::codePath):
        (WebCore::FontCascade::floatWidthForSimpleText):
        (WebCore::FontCascade::setDefaultTypesettingFeatures): Deleted.
        (WebCore::FontCascade::defaultTypesettingFeatures): Deleted.
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::enableKerning):
        (WebCore::FontCascade::enableLigatures):
        (WebCore::FontCascade::computeEnableKerning):
        (WebCore::FontCascade::computeEnableLigatures):
        (WebCore::FontCascade::typesettingFeatures): Deleted.
        (WebCore::FontCascade::computeTypesettingFeatures): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontCascadeDescription::FontCascadeDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontCascadeDescription::setKerning):
        (WebCore::FontCascadeDescription::initialKerning):
        * platform/graphics/TypesettingFeatures.h: Removed.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::canRenderCombiningCharacterSequence):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/line/BreakingContext.h:
        (WebCore::WordTrailingSpace::width):
        * svg/SVGFontData.h:

2015-10-13  Zalan Bujtas  <zalan@apple.com>

        Anonymous table objects: inline parent box requires inline-table child.
        https://bugs.webkit.org/show_bug.cgi?id=150090

        Reviewed by David Hyatt.

        According to the CSS2.1 specification, if a child needs anonymous table wrapper
        and the child's parent is an inline box, the generated table needs to be inline-table.
        (inline-block and block parents generate non-inline table) 

        Import W3C CSS2.1 anonymous table tests.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::childRequiresTable):
        (WebCore::RenderElement::addChild):
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::newChildIsInline):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::addChildToContinuation):
        * rendering/RenderInline.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::createAnonymousWithParentRenderer):

2015-10-13  Dean Jackson  <dino@apple.com>

        Device motion and orientation should only be visible from the main frame's security origin
        https://bugs.webkit.org/show_bug.cgi?id=150072
        <rdar://problem/23082036>

        Reviewed by Brent Fulgham.

        There are reports that gyroscope and accelerometer information can
        be used to detect keyboard entry. One initial step to reduce the
        risk is to forbid device motion and orientation events from
        being fired in frames that are a different security origin from the main page.

        Manual test: deviceorientation-main-frame-only.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::isSameSecurityOriginAsMainFrame): New helper function.
        (WebCore::DOMWindow::addEventListener): Check if we are the main frame, or the
        same security origin as the main frame. If not, don't add the event
        listeners.

2015-10-12  Dean Jackson  <dino@apple.com>

        ASSERT(m_motionManager) on emgn.com page
        https://bugs.webkit.org/show_bug.cgi?id=150070
        <rdar://problem/18383732>

        Reviewed by Simon Fraser.

        In the WebCoreMotionManager init method, we call
        into another setup method on the main thread.
        However, if a listener was attached before that
        ran, we'd ASSERT. This wasn't actually causing a bug
        because the main thread initialization would
        check the listeners once it got a chance to run.

        The fix is to only check status when we've
        actually initialized.

        * platform/ios/WebCoreMotionManager.h: New m_initialized boolean.
        * platform/ios/WebCoreMotionManager.mm: Check m_initialized before doing real work.
        (-[WebCoreMotionManager init]):
        (-[WebCoreMotionManager addMotionClient:]):
        (-[WebCoreMotionManager removeMotionClient:]):
        (-[WebCoreMotionManager addOrientationClient:]):
        (-[WebCoreMotionManager removeOrientationClient:]):
        (-[WebCoreMotionManager initializeOnMainThread]):

2015-10-13  Chris Dumez  <cdumez@apple.com>

        Avoid useless copies in range-loops that are using 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=150091

        Reviewed by Sam Weinig.

        Avoid useless copies in range-loops that are using 'auto'. Also use
        'auto*' instead of 'auto' when range values are pointers for clarity.

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

        Move Image::drawPattern for CG into GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=150077

        Reviewed by Myles C. Maxfield.

        In order to consolidate code that calls into Core Graphics inside
        GraphicsContext, move the body of Image::drawPattern() into
        GraphicsContextCG.cpp, and do the same for Cairo.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::drawPatternCallback):
        (WebCore::patternReleaseCallback):
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::drawPatternCallback): Deleted.
        (WebCore::patternReleaseCallback): Deleted.

2015-10-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix font-kerning
        https://bugs.webkit.org/show_bug.cgi?id=150080

        Reviewed by Sam Weinig.

        This is the last property in CSS3 Fonts which is prefixed.

        Test: fast/text/font-kerning.html

        * css/CSSPropertyNames.in:

2015-10-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add debug settings for using giant tiles (4096x4096)
        https://bugs.webkit.org/show_bug.cgi?id=149977
        <rdar://problem/23017093>

        Reviewed by Tim Horton.

        Instead of creating the GraphicsLayer with a fixed size 512x512, we need
        to read the useGiantTiles setting. If its value is true, we set the layer
        tileSize to 4096x4096.

        * page/Settings.in:
        Define the name of the setting and its default value.
        
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::tileSize):
        Define tileSize() in the base class GraphicsLayerClient. This is going to
        be overridden RenderLayerBacking.
        
        * platform/graphics/TiledBacking.h:
        (WebCore::defaultTileSize):
        Define the default tileSize which will depend on the useGiantTiles
        setting.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerTileSize):
        Implement the virtual function GraphicsLayerCA::platformCALayerTileSize().
        It passes the call to client GraphicsLayerClient which can be RenderLayerBacking
        in our case.

        * platform/graphics/ca/GraphicsLayerCA.h:
        Override base class function PlatformCALayerClient::PlatformCALayerClient().

        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerTileSize):
        Define platformCALayerTileSize() in the base class PlatformCALayerClient.
        This is going to be overridden GraphicsLayerCA.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::TileController):
        No need for the member m_tileSize.
        
        (WebCore::TileController::computeTileCoverageRect):
        Use the function tileSize() instead of using the static values.
        
        (WebCore::TileController::tileSize):
        The tileSize will be retrieved from the owning graphics layer.
        
        * platform/graphics/ca/TileController.h:
        No need for the member m_tileSize. The tileSize will be retrieved from the owning graphics layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        Use the function tileSize() instead of using the static values.
        
        (WebCore::RenderLayerBacking::tileSize):
        Override base class function GraphicsLayerClient::tileSize().
        
        * rendering/RenderLayerBacking.h:
        Define the concrete method RenderLayerBacking::tilSize().

2015-10-13  Antti Koivisto  <antti@apple.com>

        Try to fix ENABLE(DETAILS_ELEMENT) with SHADOW_DOM disabled.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        * dom/Node.cpp:
        (WebCore::traverseStyleParent):

2015-10-13  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Fix license and copyrights of WebCore js binding builtin files
        https://bugs.webkit.org/show_bug.cgi?id=150027

        Reviewed by Darin Adler.

        Fixing copyright on all three files.
        Moving to BSD-like license as they should have been in the first place.
        Ordering lexicographically the builtin names in WebCoreBuiltinNames.h.

        No change in behaviour.

        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h:
        * bindings/js/WebCoreJSBuiltinInternals.h:

2015-10-12  Antti Koivisto  <antti@apple.com>

        Implement iterator for traversing composed DOM
        https://bugs.webkit.org/show_bug.cgi?id=149997

        Reviewed by Ryosuke Niwa.

        ComposedTreeIterator traverses the DOM in composed tree order. This means it enters
        shadow trees and follows slots created by Shadow DOM API correctly.

        auto children = composedTreeChildren(containerNode);
        for (auto& composedChild : children)
            ...

        auto descendants = composedTreeDescendants(containerNode);
        for (auto& composedDescendant : descendants)
            ...

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedTreeIterator.cpp: Added.
        (WebCore::ComposedTreeIterator::initializeShadowStack):
        (WebCore::ComposedTreeIterator::traverseNextInShadowTree):
        (WebCore::ComposedTreeIterator::traverseNextSiblingSlot):
        (WebCore::ComposedTreeIterator::traversePreviousSiblingSlot):
        (WebCore::ComposedTreeIterator::traverseParentInShadowTree):
        * dom/ComposedTreeIterator.h: Added.
        (WebCore::ComposedTreeIterator::operator*):
        (WebCore::ComposedTreeIterator::operator->):
        (WebCore::ComposedTreeIterator::operator==):
        (WebCore::ComposedTreeIterator::operator!=):
        (WebCore::ComposedTreeIterator::ShadowContext::ShadowContext):
        (WebCore::ComposedTreeIterator::ComposedTreeIterator):
        (WebCore::ComposedTreeIterator::traverseNext):
        (WebCore::ComposedTreeIterator::traverseNextSibling):
        (WebCore::ComposedTreeIterator::traversePreviousSibling):
        (WebCore::ComposedTreeIterator::traverseParent):
        (WebCore::ComposedTreeChildAdapter::Iterator::Iterator):
        (WebCore::ComposedTreeChildAdapter::Iterator::operator++):
        (WebCore::ComposedTreeChildAdapter::Iterator::operator--):
        (WebCore::ComposedTreeChildAdapter::ComposedTreeChildAdapter):
        (WebCore::ComposedTreeChildAdapter::begin):
        (WebCore::ComposedTreeChildAdapter::end):
        (WebCore::ComposedTreeChildAdapter::at):
        (WebCore::composedTreeChildren):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::parentSlow):
        (WebCore::NodeRenderingTraversal::nextInScope):
        (WebCore::NodeRenderingTraversal::firstChildSlow): Deleted.
        (WebCore::NodeRenderingTraversal::nextSiblingSlow): Deleted.
        (WebCore::NodeRenderingTraversal::previousSiblingSlow): Deleted.
        * dom/NodeRenderingTraversal.h:
        (WebCore::NodeRenderingTraversal::parent):
        (WebCore::NodeRenderingTraversal::firstChild): Deleted.
        (WebCore::NodeRenderingTraversal::nextSibling): Deleted.
        (WebCore::NodeRenderingTraversal::previousSibling): Deleted.
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::computeNextSibling):

            Restore the full assert.

        (WebCore::RenderTreePosition::invalidateNextSibling):
        (WebCore::RenderTreePosition::previousSiblingRenderer):
        (WebCore::RenderTreePosition::nextSiblingRenderer):

            Make these member functions.
            Use the iterator. This is fixes some bugs and allows enabling a test case.

        * style/RenderTreePosition.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::textRendererIsNeeded):

2015-10-13  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Use GUniquePtr for GtkIconInfo
        https://bugs.webkit.org/show_bug.cgi?id=150082

        Reviewed by Carlos Garcia Campos.

        GtkIconInfo cab be wrapped by a smart pointer, GUniqueptr.

        No new test required since no functionality changed.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::getStockSymbolicIconForWidgetType):

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

        Unreviewed, fix debug build warning.

        %llu needs 'long long unsigned int'.

        Type casting unit64_t to long long unsigned int.

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange):

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

        Speculative Cairo build fixes after r190910.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

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

        Fix iOS and Efl builds.

        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::drawPattern):

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

        Remove Image::spaceSize() and ImageBuffer::spaceSize()
        https://bugs.webkit.org/show_bug.cgi?id=150064

        Reviewed by Tim Horton.

        Image spacing when tiled should not be a property of the image; but a description
        of how it's drawn, like tile size. So remove spacing from Image and ImageBuffer,
        and pass it in as an argument.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::spaceSize): Deleted.
        (WebCore::Image::setSpaceSize): Deleted.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::spaceSize): Deleted.
        (WebCore::ImageBuffer::setSpaceSize): Deleted.
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:

2015-10-12  Andreas Kling  <akling@apple.com>

        Have TransformState::mappedSecondaryQuad() return an Optional<FloatQuad>.
        <https://webkit.org/b/150057>

        Reviewed by Simon Fraser.

        Using Optional instead of std::unique_ptr allows us to signal the absence of a
        secondary quad without incurring a heap allocation in cases where one is present.

        This dodges ~132000 malloc/free pairs on loading thelocal.se

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect):
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::mappedSecondaryQuad):
        * platform/graphics/transforms/TransformState.h:

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

        Followup to:
        Modern IDB: Start version change transaction for connections to new database.
        https://bugs.webkit.org/show_bug.cgi?id=150033

        Reviewed by NOBODY (Fixing existing test flakiness)

        No new tests (Covered by existing tests)

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations): Early return if a version change transaction
          is already in progress.

2015-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Font Features] Tiny cleanup regarding FontCascade::typesettingFeatures()
        https://bugs.webkit.org/show_bug.cgi?id=150051

        Reviewed by Simon Fraser.

        There are no typesetting features which aren't kerning nor ligatures.

        No new tests because there is no behavior difference.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::codePath):
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures): Deleted.

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

        Add a CGContextStateSaver and use it
        https://bugs.webkit.org/show_bug.cgi?id=150049

        Reviewed by Tim Horton.

        Add a stack-based graphics state save/restore class for CGContext,
        like the one we have for GraphicsContext, and use it in GraphicsContextCG.
        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawJoinedLines):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::CGContextStateSaver::CGContextStateSaver):
        (WebCore::CGContextStateSaver::~CGContextStateSaver):
        (WebCore::CGContextStateSaver::save):
        (WebCore::CGContextStateSaver::restore):

2015-10-12  Zalan Bujtas  <zalan@apple.com>

        display: table-cell; bug when resizing window
        https://bugs.webkit.org/show_bug.cgi?id=138167

        Reviewed by David Hyatt.

        Clean up anonymous table wrappers all the way up to RenderTable.
        This patch ensures that we don't keep the generated RenderTable/RenderSection/RenderCaption/RenderRow
        objects around in the tree anymore when the last child is destroyed.

        Import W3C CSS2.1 anonymous table tests.

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

2015-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r182192): Ligatures do not interact correctly with SHY in some fonts
        https://bugs.webkit.org/show_bug.cgi?id=150006

        Reviewed by Simon Fraser.

        When performing font transforms and we encounter kCGFontIndexInvalid, we filter it out of the
        GlyphBuffer. However, this filter was only interacting with part of the GlyphBuffer instead
        of the whole thing. This causes glyph IDs from one font to be rendered with other fonts,
        thereby showing garbage glyphs.

        However, now that <rdar://problem/20230073> is fixed, we don't need to perform this filter in
        the first place.

        Test: fast/text/undefined-glyph-with-ligature.html

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::copyItem):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):

2015-10-12  Antoine Quint  <graouts@apple.com>

        [SVG] Handle endEvent for svg animations
        https://bugs.webkit.org/show_bug.cgi?id=121587

        Reviewed by Dean Jackson.

        Add support for the "endEvent" SVG event triggered when an animation completes, as
        specified in http://www.w3.org/TR/SMIL3/smil-timing.html#q135. This event doesn't
        bubble and can't be canceled. Added test coverage for the event through the DOM
        Events API as well as the declarative SMIL Animation syntax.

        Adapted from a Chromium patch by pavan.e@samsung.com
        https://chromium.googlesource.com/chromium/blink/+/4d415ca0268231aa80e3552fe21bf3480a6978f8

        Tests: svg/animations/end-event-declarative-expected.svg
               svg/animations/end-event-declarative.svg
               svg/animations/end-event-script-expected.svg
               svg/animations/end-event-script.svg

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::smilEndEventSender):
        (WebCore::SVGSMILElement::~SVGSMILElement):
        (WebCore::SVGSMILElement::progress):
        (WebCore::SVGSMILElement::dispatchPendingEvent):
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::hasConditionsConnected):

2015-10-12  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Increase limit of parallel network requests.
        https://bugs.webkit.org/show_bug.cgi?id=150035

        Reviewed by Alex Christensen.

        If the limit is too low, other network requests will often be blocked until
        active requests finishes. This can affect performance in a negative way.

        * platform/network/curl/ResourceHandleManager.cpp:

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

        Modern IDB: Start version change transaction for connections to new database.
        https://bugs.webkit.org/show_bug.cgi?id=150033

        Reviewed by Alex Christensen.

        No new tests (Covered by changes to existing tests).

        * CMakeLists.txt:
        * Modules/indexeddb/IDBDatabase.h:
        
        * Modules/indexeddb/client/IDBAnyImpl.cpp:
        (WebCore::IDBClient::IDBAny::IDBAny):
        (WebCore::IDBClient::IDBAny::~IDBAny):
        (WebCore::IDBClient::IDBAny::idbDatabase):
        (WebCore::IDBClient::IDBAny::domStringList):
        (WebCore::IDBClient::IDBAny::idbCursor):
        (WebCore::IDBClient::IDBAny::idbCursorWithValue):
        (WebCore::IDBClient::IDBAny::idbFactory):
        (WebCore::IDBClient::IDBAny::idbIndex):
        (WebCore::IDBClient::IDBAny::idbObjectStore):
        (WebCore::IDBClient::IDBAny::idbTransaction):
        (WebCore::IDBClient::IDBAny::scriptValue):
        (WebCore::IDBClient::IDBAny::integer):
        (WebCore::IDBClient::IDBAny::string):
        (WebCore::IDBClient::IDBAny::keyPath):
        * Modules/indexeddb/client/IDBAnyImpl.h:
        (WebCore::IDBClient::IDBAny::create):
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
        (WebCore::IDBClient::IDBConnectionToServer::registerDatabaseConnection):
        (WebCore::IDBClient::IDBConnectionToServer::unregisterDatabaseConnection):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        
        * Modules/indexeddb/client/IDBDatabaseImpl.cpp: Added.
        (WebCore::IDBClient::IDBDatabase::create):
        (WebCore::IDBClient::IDBDatabase::IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::~IDBDatabase):
        (WebCore::IDBClient::IDBDatabase::name):
        (WebCore::IDBClient::IDBDatabase::version):
        (WebCore::IDBClient::IDBDatabase::objectStoreNames):
        (WebCore::IDBClient::IDBDatabase::createObjectStore):
        (WebCore::IDBClient::IDBDatabase::transaction):
        (WebCore::IDBClient::IDBDatabase::deleteObjectStore):
        (WebCore::IDBClient::IDBDatabase::close):
        (WebCore::IDBClient::IDBDatabase::activeDOMObjectName):
        (WebCore::IDBClient::IDBDatabase::canSuspendForPageCache):
        (WebCore::IDBClient::IDBDatabase::startVersionChangeTransaction):
        * Modules/indexeddb/client/IDBDatabaseImpl.h: Added.
        (WebCore::IDBClient::IDBDatabase::info):
        
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::onError):
        (WebCore::IDBClient::IDBOpenDBRequest::onSuccess):
        (WebCore::IDBClient::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBClient::IDBOpenDBRequest::requestCompleted):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
        
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::result):
        (WebCore::IDBClient::IDBRequest::source):
        (WebCore::IDBClient::IDBRequest::transaction):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        (WebCore::IDBClient::IDBRequest::connection):
        
        * Modules/indexeddb/client/IDBTransactionImpl.cpp:
        (WebCore::IDBClient::IDBTransaction::create):
        (WebCore::IDBClient::IDBTransaction::IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::~IDBTransaction):
        (WebCore::IDBClient::IDBTransaction::mode):
        (WebCore::IDBClient::IDBTransaction::db):
        (WebCore::IDBClient::IDBTransaction::error):
        (WebCore::IDBClient::IDBTransaction::objectStore):
        (WebCore::IDBClient::IDBTransaction::abort):
        (WebCore::IDBClient::IDBTransaction::activeDOMObjectName):
        (WebCore::IDBClient::IDBTransaction::canSuspendForPageCache):
        * Modules/indexeddb/client/IDBTransactionImpl.h:
        (WebCore::IDBClient::IDBTransaction::info):
        
        * Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp:
        (WebCore::IDBClient::IDBVersionChangeEvent::IDBVersionChangeEvent):
        (WebCore::IDBClient::IDBVersionChangeEvent::eventInterface):
        * Modules/indexeddb/client/IDBVersionChangeEventImpl.h:
        (WebCore::IDBClient::IDBVersionChangeEvent::create):
        
        * Modules/indexeddb/legacy/LegacyDatabase.h:
        
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::registerDatabaseConnection):
        (WebCore::IDBServer::IDBServer::unregisterDatabaseConnection):
        (WebCore::IDBServer::IDBServer::deleteDatabase):
        * Modules/indexeddb/server/IDBServer.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::info):
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
        (WebCore::IDBServer::UniqueIDBDatabase::hasAnyOpenConnections):
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabase::addOpenDatabaseConnection):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp: 
        (WebCore::IDBServer::nextDatabaseConnectionIdentifier):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::create):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction):

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::identifier):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::database):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionToClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::closePending):
        
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::create):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::databaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::info):
        
        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        (WebCore::IDBDatabaseInfo::name):
        (WebCore::IDBDatabaseInfo::version):
        (WebCore::IDBDatabaseInfo::IDBDatabaseInfo): Deleted.
        
        * Modules/indexeddb/shared/IDBError.h:
        
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::requestedVersion):
        * Modules/indexeddb/shared/IDBRequestData.h:
        
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::nextClientResourceNumber):
        (WebCore::nextServerResourceNumber):
        (WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
        (WebCore::IDBResourceIdentifier::emptyValue):
        (WebCore::IDBResourceIdentifier::deletedValue):
        (WebCore::nextResourceNumber): Deleted.
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::error):
        (WebCore::IDBResultData::openDatabaseSuccess):
        (WebCore::IDBResultData::openDatabaseUpgradeNeeded):
        (WebCore::IDBResultData::databaseInfo):
        (WebCore::IDBResultData::transactionInfo):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::type):
        (WebCore::IDBResultData::databaseConnectionIdentifier):
        
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::IDBTransactionInfo):
        (WebCore::IDBTransactionInfo::versionChange):
        (WebCore::IDBTransactionInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::identifier):
        (WebCore::IDBTransactionInfo::mode):
        (WebCore::IDBTransactionInfo::newVersion):
        
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::fireVersionChangeEvent):
        * Modules/indexeddb/shared/InProcessIDBServer.h:
        
        * WebCore.xcodeproj/project.pbxproj:
        
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBTransactionInfo>::copy):
        * platform/CrossThreadCopier.h:

2015-10-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r184895): border-image should always slice the SVG image to nine pieces when drawing it in the container element
        https://bugs.webkit.org/show_bug.cgi?id=149901
        <rdar://problem/21995596>

        Reviewed by Darin Adler.

        The nine-pieces algorithm should be applied to the border-image regardless
        whether the image has an intrinsic size or not. It is not guaranteed to have
        a meaningful border-image in all the cases of non-intrinsic size images. But
        it should work as expected in most of the cases. 

        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        Revert the changes which were added to return whether the image has
        intrinsic size or not.
        
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        Size of the image is now the return value of calculateImageIntrinsicDimensions().
        
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::updateContent):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage):
        Size of the image is now the return value of calculateImageIntrinsicDimensions().
        
        * rendering/style/NinePieceImage.cpp:
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::paint):
        Delete the logic for the non-intrinsic case. Both intrinsic and non-intrinsic
        cases will be treated the same.

        (WebCore::NinePieceImage::computeNineRects):
        (WebCore::NinePieceImage::computeSideTileScale):
        (WebCore::NinePieceImage::computeMiddleTileScale):
        (WebCore::NinePieceImage::computeTileScales):
        (WebCore::NinePieceImage::computeIntrinsicRects): Deleted.
        (WebCore::NinePieceImage::computeIntrinsicSideTileScale): Deleted.
        (WebCore::NinePieceImage::computeIntrinsicMiddleTileScale): Deleted.
        (WebCore::NinePieceImage::computeIntrinsicTileScales): Deleted.
        Remove *Intrinsic* from the name of the functions.

        (WebCore::NinePieceImage::computeNonIntrinsicRects): Deleted.
        (WebCore::NinePieceImage::computeNonIntrinsicTileScales): Deleted.
        Delete the *NonIntrinsic* functions.

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

        Clip-path transitions sometimes trigger endless animation timers
        https://bugs.webkit.org/show_bug.cgi?id=150018

        Reviewed by Tim Horton.
        
        Transitioning -webkit-clip-path could trigger endless animation
        timers, because when CompositeAnimation::updateTransitions() calls
        isTargetPropertyEqual(), a false negative answer triggers canceling the
        current transition and starting a new one over and over.
        
        This happened because StyleRareNonInheritedData simply tested pointer
        equality for m_clipPath and m_shapeOutside. Both of these need to do deep
        equality testing, requiring the implementation of operator== in BasicShapes
        classes.
        
        In addition, the PropertyWrappers in CSSPropertyAnimation need equals()
        implementations that also do more than pointer equality testing.

        Tests: transitions/clip-path-transitions.html
               transitions/shape-outside-transitions.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperClipPath::equals):
        (WebCore::PropertyWrapperShape::equals):
        * rendering/ClipPathOperation.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::operator==):
        (WebCore::BasicShapeEllipse::operator==):
        (WebCore::BasicShapePolygon::operator==):
        (WebCore::BasicShapeInset::operator==):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::operator==):
        (WebCore::BasicShapeRadius::operator==):
        * rendering/style/ShapeValue.cpp:
        (WebCore::pointersOrValuesEqual):
        (WebCore::ShapeValue::operator==):
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::operator!=):
        (WebCore::ShapeValue::operator==): Deleted.
        (WebCore::ShapeValue::ShapeValue): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::clipPathOperationsEquivalent):
        (WebCore::StyleRareNonInheritedData::shapeOutsideDataEquivalent):
        * rendering/style/StyleRareNonInheritedData.h:

2015-10-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Test font-variant-* and font-feature-settings on Yosemite and Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=149778

        Reviewed by Simon Fraser.

        We can simply call the function which enables features on Yosemite and Mavericks.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):

2015-10-09  Anders Carlsson  <andersca@apple.com>

        Don't allow plug-ins to override image types for <embed> elements
        https://bugs.webkit.org/show_bug.cgi?id=149979

        Reviewed by Tim Horton.

        Stop allowing plug-ins to take over image types for <embed> elements. We already do this
        for <object> elements, but had to make <embed> elements exempt because of webkit.org/b/49016.
        The QuickTime plug-in hasn't supported image types since Lion, so there's no point in keeping this code around.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::HTMLAppletElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::shouldPreferPlugInsForImages): Deleted.
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2015-10-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, fixing debug builds with Clang on Linux
        by including the stdio.h header where it's required
        under a debug configuration.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        * rendering/SimpleLineLayoutFunctions.cpp:

2015-10-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, followup to r190643.

        Inline the std::function<> constructor wrappings around lambdas
        into a single line, instead of spanning it across four lines.

        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::networkState):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::activeChanged):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekMainCb):
        (webKitWebSrcSeekDataCb):

2015-10-11  Brian Burg  <bburg@apple.com>

        Add missing builtins files to the Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=150015

        Reviewed by Yusuke Suzuki.

        * WebCore.xcodeproj/project.pbxproj:

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

        Cleanup and simplification of SVG path-related classes
        https://bugs.webkit.org/show_bug.cgi?id=150011

        Reviewed by Zalan Bujtas.

        Many SVG path-related subclasses were stateful, but only because code in
        SVGPathUtilities kept global copies around for no reason. A microbenchmark
        showed that there was no benefit to keeping global singletons of SVGPathBuilder,
        SVGPathSegListBuilder, SVGPathByteStreamBuilder, SVGPathStringBuilder,
        SVGPathTraversalStateBuilder, SVGPathParser and SVGPathBlender.
        
        Making these classes not be re-usable makes the code much simpler, allowing
        their SVGPathSources, SVGPathConsumers, SVGPathByteStream etc. to be stored
        by reference, and eliminating the cleanup() function which created annoying
        ordering issues.
        
        Code that uses SVGPathParser and SVGPathBlender is further simplified by having
        these classes expose only static functions, hiding any internal statefulness.

        * svg/SVGPathBlender.cpp: Remove the m_progress member variable and instead
        pass progress to the various blend functions, as we do for other blend functions.
        Expose two only static functions. Pointers to references.
        (WebCore::SVGPathBlender::addAnimatedPath):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        (WebCore::SVGPathBlender::SVGPathBlender):
        (WebCore::SVGPathBlender::blendAnimatedDimensonalFloat):
        (WebCore::SVGPathBlender::blendAnimatedFloatPoint):
        (WebCore::SVGPathBlender::blendMoveToSegment):
        (WebCore::SVGPathBlender::blendLineToSegment):
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        (WebCore::SVGPathBlender::cleanup): Deleted.
        * svg/SVGPathBlender.h: Make the constructor take a ref to the destination Path,
        which is stored by reference.
        * svg/SVGPathBuilder.cpp:
        (WebCore::SVGPathBuilder::SVGPathBuilder):
        (WebCore::SVGPathBuilder::moveTo):
        (WebCore::SVGPathBuilder::lineTo):
        (WebCore::SVGPathBuilder::curveToCubic):
        (WebCore::SVGPathBuilder::closePath):
        * svg/SVGPathBuilder.h:
        (WebCore::SVGPathBuilder::setCurrentPath): Deleted.
        * svg/SVGPathByteStreamBuilder.cpp: References, assertions removed.
        (WebCore::SVGPathByteStreamBuilder::SVGPathByteStreamBuilder):
        * svg/SVGPathByteStreamBuilder.h:
        (WebCore::SVGPathByteStreamBuilder::writeType):
        (WebCore::SVGPathByteStreamBuilder::setCurrentByteStream): Deleted.
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathParser.cpp: Expose some static helper functions for parsing
        to byte streams and strings. References.
        (WebCore::SVGPathParser::parse):
        (WebCore::SVGPathParser::parseToByteStream):
        (WebCore::SVGPathParser::parseToString):
        (WebCore::SVGPathParser::SVGPathParser):
        (WebCore::SVGPathParser::parseClosePathSegment):
        (WebCore::SVGPathParser::parseMoveToSegment):
        (WebCore::SVGPathParser::parseLineToSegment):
        (WebCore::SVGPathParser::parseLineToHorizontalSegment):
        (WebCore::SVGPathParser::parseLineToVerticalSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::parseArcToSegment):
        (WebCore::SVGPathParser::parsePathData):
        (WebCore::SVGPathParser::decomposeArcToCubic):
        (WebCore::SVGPathParser::parsePathDataFromSource): Deleted.
        (WebCore::SVGPathParser::cleanup): Deleted.
        * svg/SVGPathParser.h:
        (WebCore::SVGPathParser::setCurrentConsumer): Deleted.
        (WebCore::SVGPathParser::setCurrentSource): Deleted.
        * svg/SVGPathSegListBuilder.cpp:
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):
        * svg/SVGPathSegListBuilder.h:
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathElement): Deleted.
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList): Deleted.
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegRole): Deleted.
        * svg/SVGPathStringBuilder.cpp:
        (WebCore::SVGPathStringBuilder::cleanup): Deleted.
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::SVGPathTraversalStateBuilder):
        (WebCore::SVGPathTraversalStateBuilder::moveTo):
        (WebCore::SVGPathTraversalStateBuilder::lineTo):
        (WebCore::SVGPathTraversalStateBuilder::curveToCubic):
        (WebCore::SVGPathTraversalStateBuilder::closePath):
        (WebCore::SVGPathTraversalStateBuilder::continueConsuming):
        (WebCore::SVGPathTraversalStateBuilder::totalLength):
        (WebCore::SVGPathTraversalStateBuilder::currentPoint):
        (WebCore::SVGPathTraversalStateBuilder::setDesiredLength): Deleted.
        * svg/SVGPathTraversalStateBuilder.h:
        (WebCore::SVGPathTraversalStateBuilder::pathSegmentIndex):
        (WebCore::SVGPathTraversalStateBuilder::setCurrentTraversalState): Deleted.
        * svg/SVGPathUtilities.cpp: Remove globals accessors, making things on the stack
        instead. Use SVGPathParser helper functions where possible.
        (WebCore::buildPathFromString):
        (WebCore::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::buildPathFromByteStream):
        (WebCore::buildSVGPathSegListFromByteStream):
        (WebCore::buildStringFromByteStream):
        (WebCore::buildStringFromSVGPathSegList):
        (WebCore::buildSVGPathByteStreamFromString):
        (WebCore::buildAnimatedSVGPathByteStream):
        (WebCore::addToSVGPathByteStream):
        (WebCore::getSVGPathSegAtLengthFromSVGPathByteStream):
        (WebCore::getTotalLengthOfSVGPathByteStream):
        (WebCore::getPointAtLengthOfSVGPathByteStream):
        (WebCore::buildStringFromPath):
        (WebCore::globalSVGPathBuilder): Deleted.
        (WebCore::globalSVGPathSegListBuilder): Deleted.
        (WebCore::globalSVGPathByteStreamBuilder): Deleted.
        (WebCore::globalSVGPathStringBuilder): Deleted.
        (WebCore::globalSVGPathTraversalStateBuilder): Deleted.
        (WebCore::globalSVGPathParser): Deleted.
        (WebCore::globalSVGPathBlender): Deleted.
        * svg/SVGPathUtilities.h:
        * svg/SVGToOTFFontConversion.cpp: CFFBuilder no longer inherits from SVGPathBuilder.
        It did nothing with the Path, re-implemented all the functions, and only made use of
        the m_current member var, so just make it inherit from SVGPathConsumer, and have
        its own m_current.
        (WebCore::SVGToOTFFontConverter::transcodeGlyphPaths):

2015-10-10  Antti Koivisto  <antti@apple.com>

        Remove InsertionPoint and ContentDistributor
        https://bugs.webkit.org/show_bug.cgi?id=150004

        Rubber-stamped by Sam Weinig.

        Now that <details> is on top of the modern Shadow DOM remove the last vestiges of the V0 Shadow DOM API.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        * css/StyleResolver.cpp:
        * dom/ContainerNode.cpp:
        * dom/Element.cpp:
        (WebCore::shouldUseNodeRenderingTraversalSlowPath):
        (WebCore::Element::resetNeedsNodeRenderingTraversalSlowPath):
        * dom/Node.cpp:
        (WebCore::Node::parentOrShadowHostElement):
        (WebCore::Node::insertedInto):
        (WebCore::Node::insertionParentForBinding): Deleted.
        * dom/Node.h:
        (WebCore::Node::isCharacterDataNode):
        (WebCore::Node::isFrameOwnerElement):
        (WebCore::Node::isPluginElement):
        (WebCore::Node::isImageControlsRootElement):
        (WebCore::Node::isImageControlsButtonElement):
        (WebCore::Node::isDocumentFragment):
        (WebCore::Node::isShadowRoot):
        (WebCore::Node::isInsertionPointNode): Deleted.
        (WebCore::Node::isInsertionPoint): Deleted.
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::traverseParent):
        (WebCore::NodeRenderingTraversal::traverseFirstChild):
        (WebCore::NodeRenderingTraversal::traverseLastChild):
        (WebCore::NodeRenderingTraversal::traverseNextSibling):
        (WebCore::NodeRenderingTraversal::traversePreviousSibling):
        (WebCore::NodeRenderingTraversal::parentSlow):
        (WebCore::NodeRenderingTraversal::nextInScope):
        (WebCore::NodeRenderingTraversal::previousInScope):
        (WebCore::NodeRenderingTraversal::parentInScope):
        (WebCore::NodeRenderingTraversal::lastChildInScope):
        (WebCore::NodeRenderingTraversal::nodeCanBeDistributed): Deleted.
        (WebCore::NodeRenderingTraversal::findFirstSiblingEnteringInsertionPoints): Deleted.
        (WebCore::NodeRenderingTraversal::findFirstEnteringInsertionPoints): Deleted.
        (WebCore::NodeRenderingTraversal::findFirstFromDistributedNode): Deleted.
        (WebCore::NodeRenderingTraversal::findLastSiblingEnteringInsertionPoints): Deleted.
        (WebCore::NodeRenderingTraversal::findLastEnteringInsertionPoints): Deleted.
        (WebCore::NodeRenderingTraversal::findLastFromDistributedNode): Deleted.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::distributor): Deleted.
        * html/HTMLInputElement.cpp:
        * html/HTMLSlotElement.cpp:
        * html/HTMLSlotElement.h:
        * html/shadow/ContentDistributor.cpp: Removed.
        * html/shadow/ContentDistributor.h: Removed.
        * html/shadow/InsertionPoint.cpp: Removed.
        * html/shadow/InsertionPoint.h: Removed.
        * page/FocusController.cpp:
        (WebCore::FocusController::previousFocusableElement):
        * testing/Internals.cpp:

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

        Use references and more const in SVGPathUtilities
        https://bugs.webkit.org/show_bug.cgi?id=150007

        Reviewed by Zalan Bujtas.
        
        SVGPathUtilities had lots of pointers whose non-nullness was asserted,
        little const, and was very trigger-happy with stack allocations. Clean
        that all up.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPathAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::begin):
        (WebCore::SVGPathByteStream::end):
        (WebCore::SVGPathByteStream::append):
        * svg/SVGPathByteStreamSource.cpp:
        (WebCore::SVGPathByteStreamSource::SVGPathByteStreamSource):
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathByteStream):
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::SVGPathElement): Deleted.
        * svg/SVGPathElement.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::globalSVGPathBuilder):
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::globalSVGPathByteStreamBuilder):
        (WebCore::globalSVGPathStringBuilder):
        (WebCore::globalSVGPathTraversalStateBuilder):
        (WebCore::globalSVGPathParser):
        (WebCore::globalSVGPathBlender):
        (WebCore::buildPathFromString):
        (WebCore::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::buildPathFromByteStream):
        (WebCore::buildSVGPathSegListFromByteStream):
        (WebCore::buildStringFromByteStream):
        (WebCore::buildStringFromSVGPathSegList):
        (WebCore::buildSVGPathByteStreamFromString):
        (WebCore::buildAnimatedSVGPathByteStream):
        (WebCore::addToSVGPathByteStream):
        (WebCore::getSVGPathSegAtLengthFromSVGPathByteStream):
        (WebCore::getTotalLengthOfSVGPathByteStream):
        (WebCore::getPointAtLengthOfSVGPathByteStream):
        (WebCore::buildStringFromPath):
        * svg/SVGPathUtilities.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animValDidChange):

2015-10-10  Andreas Kling  <akling@apple.com>

        Reduce pointless malloc traffic in ElementRuleCollector.
        <https://webkit.org/b/150003>

        Reviewed by Antti Koivisto.

        Don't use a unique_ptr for the m_matchedRules vector in ElementRuleCollector.
        This is one of our heaviest sources of transient allocations, with ~88000
        malloc/free pairs on loading theverge.com.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::sortMatchedRules):
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::hasMatchedRules):

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

        [iOS] Remove unnecessary iOS version checks
        https://bugs.webkit.org/show_bug.cgi?id=150002

        Reviewed by Alexey Proskuryakov.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * loader/cocoa/DiskCacheMonitorCocoa.h:
        (WebCore::DiskCacheMonitor::monitorFileBackingStoreCreation):
        * page/mac/SettingsMac.mm:
        (WebCore::sansSerifTraditionalHanFontFamily):
        (WebCore::sansSerifSimplifiedHanFontFamily):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::appendOpenTypeFeature):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::getSystemFontFallbackForCharacters):
        (WebCore::platformLookupFallbackFont):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/ios/wak/WAKWindow.mm:
        (+[WAKWindow hasLandscapeOrientation]):
        (-[WAKWindow hostLayer]):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::createCookies):
        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate):
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/spi/cocoa/AVKitSPI.h:
        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/spi/cocoa/NEFilterSourceSPI.h:
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * platform/spi/cocoa/SecuritySPI.h:
        * platform/spi/ios/LaunchServicesSPI.h:
        * platform/spi/mac/AVFoundationSPI.h:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextFlags.h:
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::cachedSystemFontDescription):
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendKERNTable):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2015-10-10  Antti Koivisto  <antti@apple.com>

        Rewrite HTMLDetailsElement using HTMLSlotElement
        https://bugs.webkit.org/show_bug.cgi?id=149698

        Reviewed by Andreas Kling.

        Use the modern Shadow DOM to implement <details> element. After this the legacy InsertionPoint and
        related code can be removed.

        Based on a patch by Ryosuke.

        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::EventPath):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::removeAllEventListeners):
        (WebCore::ShadowRoot::findAssignedSlot):
        (WebCore::ShadowRoot::addSlotElementByName):
        (WebCore::ShadowRoot::removeSlotElementByName):
        (WebCore::ShadowRoot::invalidateSlotAssignments):
        (WebCore::ShadowRoot::invalidateDefaultSlotAssignments):
        (WebCore::ShadowRoot::assignedNodesForSlot):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::create):
        (WebCore::ShadowRoot::distributor):
        (WebCore::ShadowRoot::isOrphan):
        * dom/SlotAssignment.cpp:
        (WebCore::slotNameFromAttributeValue):

            Rename for clarity.

        (WebCore::slotNameFromSlotAttribute):

            SlotAssignment can now be specialized by providing function that maps from node to slot name.
            This is the default function that gets the name from the slot attribute.

        (WebCore::SlotAssignment::SlotAssignment):
        (WebCore::SlotAssignment::findAssignedSlot):

            Use the name mapping function.
            Ensure that the slots are assigned.

        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::removeSlotElementByName):
        (WebCore::SlotAssignment::assignedNodesForSlot):
        (WebCore::SlotAssignment::invalidate):
        (WebCore::SlotAssignment::invalidateDefaultSlot):
        (WebCore::SlotAssignment::resolveAllSlotElements):
        (WebCore::SlotAssignment::assignSlots):

            Use the name mapping function.

        (WebCore::SlotAssignment::assignToSlot):

            Factor into function.

        (WebCore::treatNullAsEmpty): Deleted.
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::~SlotAssignment):
        (WebCore::SlotAssignment::defaultSlotName):

            Add static getter for emptyAtom for clarity.

        (WebCore::SlotAssignment::SlotAssignment): Deleted.
        * html/HTMLDetailsElement.cpp:
        (WebCore::summarySlotName):
        (WebCore::slotNameFunction):

            Slot name function for <details>. It assigns the first <summary> child to the summary slot and others
            to the default content slot if the element is open.

        (WebCore::HTMLDetailsElement::create):
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLDetailsElement::isActiveSummary):
        (WebCore::HTMLDetailsElement::parseAttribute):
        (WebCore::HTMLDetailsElement::toggleOpen):
        (WebCore::summaryQuerySelector): Deleted.
        (WebCore::DetailsContentElement::create): Deleted.
        (WebCore::DetailsSummaryElement::create): Deleted.
        (WebCore::HTMLDetailsElement::findMainSummary): Deleted.
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer): Deleted.
        * html/HTMLDetailsElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::createElementRenderer):
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLSummaryElement::detailsElement):
        (WebCore::HTMLSummaryElement::isActiveSummary):
        (WebCore::isClickableControl):
        (WebCore::HTMLSummaryElement::supportsFocus):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        (WebCore::HTMLSummaryElement::willRespondToMouseClickEvents):
        (WebCore::SummaryContentElement::create): Deleted.
        (WebCore::HTMLSummaryElement::childShouldCreateRenderer): Deleted.
        (WebCore::HTMLSummaryElement::isMainSummary): Deleted.
        * html/HTMLSummaryElement.h:
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::rendererIsNeeded):
        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::computeNextSibling):

            Skip the verification assert for shadow host children. Getting this right requires
            better shadow-aware traversal code.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        (WebCore::Style::attachChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachSlotAssignees):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachChildren):
        (WebCore::Style::detachShadowRoot):
        (WebCore::Style::detachSlotAssignees):
        (WebCore::Style::detachRenderTree):
        (WebCore::Style::resolveChildren):
        (WebCore::Style::resolveSlotAssignees):
        (WebCore::Style::resolveTree):
        (WebCore::Style::attachDistributedChildren): Deleted.
        (WebCore::Style::detachDistributedChildren): Deleted.

            Remove InsertionPoint related code paths.

2015-10-10  Andreas Kling  <akling@apple.com>

        SerializedScriptValue should use a compact encoding for 8-bit strings.
        <https://webkit.org/b/149934>

        Reviewed by Antti Koivisto.

        We were encoding known 8-bit strings in a 16-bit format when serializing script values.

        Extend the format to support 8-bit strings. The 8-bittiness is encoded in the highest bit
        of the string length. This is possible while supporting all older formats due to string
        lengths >= 0x7FFFFFFF being disallowed.

        This patch knocks ~1 MB off of theverge.com, where some ad or tracker or whatever likes to
        do a ton of postMessage() business.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CurrentVersion): Bump the serialization format version. Also updated the grammar
        comment to describe the new format. Artistic license applied in description of bitfield.

        (WebCore::writeLittleEndianUInt16): Deleted.

        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::deserializeString):
        (WebCore::CloneDeserializer::readString):
        (WebCore::CloneDeserializer::readStringData): Support 8-bit strings. I kept the string
        length limit at UINT_MAX/sizeof(UChar) since the highest bit of the length is no longer
        available. Besides, it seems flimsy to support longer strings if they happen to have all
        8-bit characters.

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

        [iOS] Remove project support for iOS 8
        https://bugs.webkit.org/show_bug.cgi?id=149993

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2015-10-09  Zalan Bujtas  <zalan@apple.com>

        Check if start and end positions are still valid after updating them through VisibleSelection.
        https://bugs.webkit.org/show_bug.cgi?id=149982

        Reviewed by Ryosuke Niwa.

        This patch is required to be able to clean up anonymous tables structure.
        In certain edge cases, start/end positions could become nullptr after various text splitting
        operations. 

        Covered by editing/execCommand/crash-137961.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::applyInlineStyle):

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

        Rename RenderObject::isRoot() to isDocumentElementRenderer()
        https://bugs.webkit.org/show_bug.cgi?id=149976

        Reviewed by Zalan Bujtas.

        RenderObject::isRoot() was confusingly named, because it returns true for
        the document element's renderer, not for the actual root (the RenderView).
        In this way it mismatched RenderLayer::isRootLayer(), which returned true
        for the RenderView's layer.
        
        Rename it to the more accurate isDocumentElementRenderer().

        * dom/Node.cpp:
        (WebCore::Node::renderRect):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::renderRectForPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::selectionGaps):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::requiresColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::computeBackgroundIsKnownToBeObscured):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::createsNewFormattingContext):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::fixedBackgroundPaintsInLocalCoordinates):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::rendererForRootBackground):
        (WebCore::shouldRepaintForImageAnimation):
        * rendering/RenderElement.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderLayer.cpp:
        (WebCore::shouldSuppressPaintingLayer):
        (WebCore::paintForFixedRootBackground):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::rendererBackgroundColor):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintSlowRepaintObject):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isDocumentElementRenderer):
        (WebCore::RenderObject::isRoot): Deleted.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::shouldApplyViewportClip):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isOverflowHidden):

2015-10-09  Nan Wang  <n_wang@apple.com>

        AX: ARIA 1.1 implement aria-colcount, aria-colindex, aria-colspan, aria-rowcount, aria-rowindex and aria-rowspan
        https://bugs.webkit.org/show_bug.cgi?id=148967

        Reviewed by Chris Fleizach.

        Added support for ARIA 1.1 table/grid related attributes. Created new attributes for mac, so
        VoiceOver can pick up the information and speak accordingly.

        Test: accessibility/mac/aria-table-attributes.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::AccessibilityARIAGridCell):
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        (WebCore::AccessibilityARIAGridCell::parentRowGroup):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::title):
        (WebCore::AccessibilityTable::ariaColumnCount):
        (WebCore::AccessibilityTable::ariaRowCount):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::AccessibilityTableCell):
        (WebCore::AccessibilityTableCell::titleUIElement):
        (WebCore::AccessibilityTableCell::ariaColumnIndex):
        (WebCore::AccessibilityTableCell::ariaRowIndex):
        (WebCore::AccessibilityTableCell::ariaColumnSpan):
        (WebCore::AccessibilityTableCell::ariaRowSpan):
        * accessibility/AccessibilityTableCell.h:
        (WebCore::AccessibilityTableCell::setARIAColIndexFromRow):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        (WebCore::AccessibilityTableRow::addChildren):
        (WebCore::AccessibilityTableRow::ariaColumnIndex):
        (WebCore::AccessibilityTableRow::ariaRowIndex):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2015-10-09  Anders Carlsson  <andersca@apple.com>

        Remove hack that allowed plug-ins to always take over certain image formats
        https://bugs.webkit.org/show_bug.cgi?id=149972

        Reviewed by Tim Horton.

        This hack was added 8 years ago to allow a certain plug-in to show multi-page TIFF images on uspto.gov. 
        We now support said TIFFs natively, and the plug-in has been discontinued so it's safe to get rid of this.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::shouldUsePlugin): Deleted.

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

        Garbage texture data with composited table row
        https://bugs.webkit.org/show_bug.cgi?id=148984

        Reviewed by Zalan Bujtas.
        
        Don't pretend to know if the layer for a table header, section or cell is
        opaque, since table painting is special.

        Test: compositing/contents-opaque/table-parts.html

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

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

        Garbage pixels on enphaseenergy.com site
        https://bugs.webkit.org/show_bug.cgi?id=149915
        rdar://problem/22976184

        Reviewed by Darin Adler.
        
        When the <html> gets a composited RenderLayer, and we ask whether its background
        is opaque, return false, since the document element's background propagates
        to the root, and is painted by the RenderView.
        
        Also improve the compositing logging to indicate when fore- and background layers
        are present.

        Test: compositing/contents-opaque/negative-z-before-html.html

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

2015-10-09  Antoine Quint  <graouts@apple.com>

        Dynamic background color changes do not update until a layout is forced
        https://bugs.webkit.org/show_bug.cgi?id=131623

        Compute correct repaint rect for decorated RenderSVGRoots.

        The current implementation of clippedOverflowRectForRepaint() uses the
        generic repaint-rect calculations in SVGRenderSupport. Those in turn make
        use of repaintRectInLocalCoordinates(), which for RenderSVGRoot is the
        union of the painted children (w/ some expansion). If there're no children,
        or they do not fill the entire content box, then a repaint would not
        repaint the correct parts.
        Fix by calculating the union of the border-box and the SVG content
        when the SVG root is decorated (has background/border/etc.)

        Adapted from a Chromium patch by fs@opera.com
        https://src.chromium.org/viewvc/blink?revision=170890&view=revision

        Reviewed by Darin Adler.

        Tests: svg/repaint/add-background-property-on-root.html
               svg/repaint/add-border-property-on-root.html
               svg/repaint/add-outline-property-on-root.html
               svg/repaint/change-background-color.html
               svg/repaint/remove-background-property-on-root.html
               svg/repaint/remove-border-property-on-root.html
               svg/repaint/remove-outline-property-on-root.html

        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::styleDidChange):
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):

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

        [iOS WK2] Fix assertion in ViewportConfiguration::setDefaultConfiguration seen in testing
        https://bugs.webkit.org/show_bug.cgi?id=149959

        Reviewed by Tim Horton.

        When loading tests which set a flexible viewport, ViewportConfiguration::setDefaultConfiguration()
        is called first with testingParameters() and then with webpageParameters(). This
        would trigger the assertion that m_defaultConfiguration.initialScaleIsSet but
        the new initial scale is zero.
        
        The assertion seems wrong anyway; it's consulting m_defaultConfiguration.initialScaleIsSet
        but defaultConfiguration.initialScale, so fix it to test defaultConfiguration.initialScaleIsSet.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setDefaultConfiguration):

2015-10-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(STREAM_API) build after r190794
        https://bugs.webkit.org/show_bug.cgi?id=149955

        Reviewed by Darin Adler.

        * bindings/js/WebCoreJSBuiltinInternals.h:
        (WebCore::JSBuiltinInternalFunctions::visit):
        (WebCore::JSBuiltinInternalFunctions::init):

2015-10-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the binding generator after r190785
        https://bugs.webkit.org/show_bug.cgi?id=149956

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::getConstructData):

2015-10-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Backgrounds bleed out of natively rendered text fields
        https://bugs.webkit.org/show_bug.cgi?id=149843
        <rdar://problem/22896977>

        Reviewed by Darin Adler.

        When natively rendering a text field with a background on Mac, the background bleeds out
        of the text field's border when the graphics context is scaled (as a result of a retina
        display or zoom/scale effects). This is because when we render the text field in bezeled
        style within a certain frame, AppKit adds 1 device pixel insets on all sides of the frame,
        which renders a text field that is slightly smaller than the frame. To adjust for this, we
        inflate the paint rect.

        Test: fast/forms/hidpi-textfield-background-bleeding.html

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

2015-10-09  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Refactor WebCore JS builtins to prepare for automatic generation
        https://bugs.webkit.org/show_bug.cgi?id=149751

        Reviewed by Darin Adler.

        Adding annotations to JS files to know whether they should be under a compilation flag and
        whether they are JS internals or JS tied to WebIDL.
        If a file is said as JS internals, all function names should be exported automatically.
        Added WebCoreJSBuiltins.h to simplify handling of builtins in JSVMClientData.
        Added WebCoreJSInternals.h to simplify handling of builtin private function in JSDOMWindowBase.
        Renamed WebCoreJSClientData to JSVMClientData.

        Covered by existing tests.

        * CMakeLists.txt:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableStream.js:
        * Modules/streams/ReadableStreamController.js:
        * Modules/streams/ReadableStreamInternals.js:
        * Modules/streams/ReadableStreamReader.js:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::normalWorld):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::visitChildren):
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        (WebCore::JSDOMWindowBase::destroy): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        * bindings/js/WebCoreJSBuiltinInternals.h: Added.
        (WebCore::JSBuiltinInternalFunctions::JSBuiltinInternalFunctions):
        (WebCore::JSBuiltinInternalFunctions::readableStreamInternals):
        (WebCore::JSBuiltinInternalFunctions::visit):
        (WebCore::JSBuiltinInternalFunctions::init):
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSBuiltins.h: Added.
        (WebCore::JSBuiltinFunctions::JSBuiltinFunctions):
        (WebCore::JSBuiltinFunctions::byteLengthQueuingStrategyBuiltins):
        (WebCore::JSBuiltinFunctions::countQueuingStrategyBuiltins):
        (WebCore::JSBuiltinFunctions::readableStreamBuiltins):
        (WebCore::JSBuiltinFunctions::readableStreamControllerBuiltins):
        (WebCore::JSBuiltinFunctions::readableStreamInternalsBuiltins):
        (WebCore::JSBuiltinFunctions::readableStreamReaderBuiltins):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::JSVMClientData):
        (WebCore::JSVMClientData::~JSVMClientData):
        (WebCore::JSVMClientData::builtinFunctions):
        (WebCore::initNormalWorldClientData):
        (WebCore::JSVMClientData::normalWorld): Deleted.
        (WebCore::JSVMClientData::getAllWorlds): Deleted.

2015-10-09  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Rationalize JSXXConstructor class definition
        https://bugs.webkit.org/show_bug.cgi?id=149923

        Reviewed by Darin Adler.

        Declaration of JSXXConstructor::construct and JSXXConstructor::getConstructData
        as long as JSXX is constructable from JavaScript.

        Previously, JSXXConstructor::construct was not generated in case of CustomConstructor.
        It is now generated and directly calls the custom constructor function.

        getConstructData was declared conditionally with #if in case of ConstructorConditional.
        The #if are now within getConstructData body.

        Covered by binding tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateOverloadedConstructorDefinition):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (GenerateConstructorDefinitions):.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::getConstructData):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::construct):
        (WebCore::JSTestEventConstructorConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        (WebCore::JSTestInterfaceConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::construct):
        (WebCore::JSTestJSBuiltinConstructorConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        (WebCore::JSTestNamedConstructorNamedConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::construct):
        (WebCore::JSTestNodeConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        (WebCore::JSTestObjConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors1):
        (WebCore::constructJSTestOverloadedConstructors2):
        (WebCore::constructJSTestOverloadedConstructors3):
        (WebCore::constructJSTestOverloadedConstructors4):
        (WebCore::constructJSTestOverloadedConstructors5):
        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
        (WebCore::JSTestOverloadedConstructorsConstructor::getConstructData):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        (WebCore::JSTestTypedefsConstructor::getConstructData):

2015-10-07  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Include freeSpace in GridSizingData struct
        https://bugs.webkit.org/show_bug.cgi?id=149876

        Reviewed by Darin Adler.

        During the layout process we keep the free space for rows and
        columns in two variables that are passed to a few methods
        along with the GridSizingData struct. Those two variables
        should clearly be part of GridSizingData as they're temporary
        values used just for the sake of the layout.

        No new tests required as this is just a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::GridSizingData::freeSpaceForDirection):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::applyStretchAlignmentToTracksIfNeeded):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::contentDistributionOffset):
        (WebCore::RenderGrid::computeContentPositionAndDistributionOffset):
        * rendering/RenderGrid.h:

2015-10-08  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Remove unneeded calls to compute(Content)LogicalWidth(Height)
        https://bugs.webkit.org/show_bug.cgi?id=149926

        Reviewed by Darin Adler.

        In order to resolve a Length to a LayoutUnit we need to
        provide a maximum value so that i.e. percentages are correctly
        computed. That maximum value was computeLogicalWidth() for
        columns and computeContentLogicalHeight() for rows. We were
        calling it for every single track with a definite size instead
        of computing it once and reusing it multiple times.

        This brings some nice performance improvements:
        - 2.9%  in /Layout/fixed-grid-lots-of-data
        - 2.95% in /Layout/fixed-grid-lots-of-stretched-data

        No new tests required as there is no change in functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        * rendering/RenderGrid.h:

2015-10-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, build fix for ENABLE(MEDIA_SESSION) after r190030.

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

2015-10-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, build fixes for ENABLE(MEDIA_SESSION) after r190030.

        * Modules/mediasession/HTMLMediaElementMediaSession.cpp:
        (WebCore::HTMLMediaElementMediaSession::session):
        * Modules/mediasession/HTMLMediaElementMediaSession.h:
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::controls):
        * Modules/mediasession/MediaSession.h:

2015-10-08  Jiewen Tan  <jiewen_tan@apple.com>

        Gracefully handle XMLDocumentParser being detached by mutation events.
        https://bugs.webkit.org/show_bug.cgi?id=149485
        <rdar://problem/22811489>

        This is a merge of Blink change 200026,
        https://codereview.chromium.org/1267283002

        Reviewed by Darin Adler.

        Test: fast/parser/xhtml-dom-character-data-modified-crash.html

        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::createLeafTextNode):
        Renamed from enterText() to make it more descriptive. 

        (WebCore::XMLDocumentParser::updateLeafTextNode):
        Renamed from exitText to firm up this stage.

        (WebCore::XMLDocumentParser::end):
        Gracefully handle stopped states.

        (WebCore::XMLDocumentParser::enterText): Deleted.
        (WebCore::XMLDocumentParser::exitText): Deleted.

        * xml/parser/XMLDocumentParser.h:
        Rename enterText to createLeafTextNode.
        Rename exitText to updateLeafTextNode.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::endDocument):
        Rename function calls and firm up updateLeafTextNode stage accordingly.

2015-10-08  Chris Dumez  <cdumez@apple.com>

        data: URLs should not be preloaded
        https://bugs.webkit.org/show_bug.cgi?id=149829

        Reviewed by Darin Adler.

        Fix review comments after r190605:
        Use protocolIs() instead of String::startsWith().

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload):

2015-10-08  Chris Dumez  <cdumez@apple.com>

        Revert r187626 (and r188025) as it caused a PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=149898
        <rdar://problem/22657123>

        Reviewed by Myles Maxfield.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::Font::systemFallbackFontForCharacter):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::FontDescriptionKey): Deleted.
        (WebCore::FontDescriptionKey::computeHash): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::traitsMask): Deleted.
        (WebCore::FontCascadeDescription::FontCascadeDescription): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::setScript):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::setFeatureSettings): Deleted.
        (WebCore::FontCascadeDescription::initialVariantAlternates): Deleted.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2015-10-08  Andreas Kling  <akling@apple.com>

        Generated frame tree names should be kept reasonably long.
        <https://webkit.org/b/149874>

        Reviewed by Darin Adler.

        Some clumsy advertising script is going around assigning JavaScript source code
        to the "name" attribute of iframes. This is causing WebKit to generate way too huge
        names for anonymous descendants of such iframes.

        Previously, the generated name of an anonymous subframe would be its slash-separated
        path from the root frame, with the "name" attribute of each ancestor between the
        slashes, or "<!--frame${index in parent}-->" for anonymous ancestors.

        These ad scripts are often over 100kB in size, with multiple subframes, so we'd end
        up with frame names looking like this:

        "<!--framePath //<MONSTER BLOB OF JAVASCRIPT FROM HELL>/<!--frame0--><!--frame0-->-->"

        While this is worth fixing for the memory usage alone, we've been making it way
        worse by also using these paths when recording the back/forward history parts of
        WebKit session state.

        This patch makes generated paths always use index-in-parent as the "directory name"
        for ancestors of anonymous subframes. The above example path will now instead be:

        "<!--framePath //<!--frame0-->/<!--frame0-->/<!--frame0-->-->"

        Test: fast/frames/long-names-in-nested-subframes.html

        * page/FrameTree.cpp:
        (WebCore::FrameTree::indexInParent):
        (WebCore::FrameTree::uniqueChildName):
        * page/FrameTree.h:

2015-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190701.
        https://bugs.webkit.org/show_bug.cgi?id=149937

        "It did not help, will try a full roll out instead" (Requested
        by cdumez on #webkit).

        Reverted changeset:

        "Partial revert of r187626 as it caused a PLT regression"
        https://bugs.webkit.org/show_bug.cgi?id=149898
        http://trac.webkit.org/changeset/190701

2015-10-08  Zalan Bujtas  <zalan@apple.com>

        Fallback to the RenderView when repaint container is null.
        https://bugs.webkit.org/show_bug.cgi?id=149903

        Reviewed by Simon Fraser.

        Reduces code complexity at the calling sites.

        No change in functionality.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):

2015-10-08  Jiewen Tan  <jiewen_tan@apple.com>

        Add NULL check for renderBox::layer() on applying zoom level change
        https://bugs.webkit.org/show_bug.cgi?id=149302
        <rdar://problem/22747292>

        Reviewed by Darin Adler.

        Test: fast/css/zoom-on-nested-scroll-crash.html

        This is a merge of Blink r158238:
        https://chromiumcodereview.appspot.com/23526081

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

2015-10-08  Brady Eidson  <beidson@apple.com>

        Update Inspector to only work with Legacy IDB (for now).
        https://bugs.webkit.org/show_bug.cgi?id=149928.

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBAny.h:
        (WebCore::IDBAny::isLegacy):
        
        * Modules/indexeddb/legacy/LegacyAny.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2015-10-08  Antti Koivisto  <antti@apple.com>

        CrashTracer: [USER] com.apple.WebKit.WebContent at …Core::SelectorChecker::checkScrollbarPseudoClass const + 217
        https://bugs.webkit.org/show_bug.cgi?id=149921
        rdar://problem/22731359

        Reviewed by Andreas Kling.

        Test: svg/css/use-window-inactive-crash.html

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isWindowInactive):

            Null check page.

2015-10-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Format string issues in LegacyRequest.cpp
        https://bugs.webkit.org/show_bug.cgi?id=149866

        Reviewed by Csaba Osztrogonác.

        Cast enums to ints before printing them to placate GCC's -Wformat.

        * Modules/indexeddb/legacy/LegacyRequest.cpp:
        (WebCore::LegacyRequest::dispatchEvent):
        (WebCore::LegacyRequest::enqueueEvent):

2015-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190716.
        https://bugs.webkit.org/show_bug.cgi?id=149924

        broke mac build from time to time (Requested by youenn on
        #webkit).

        Reverted changeset:

        "Automate WebCore JS builtins generation and build system"
        https://bugs.webkit.org/show_bug.cgi?id=149751
        http://trac.webkit.org/changeset/190716

2015-10-08  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Percentages of indefinite sizes to be resolved as auto
        https://bugs.webkit.org/show_bug.cgi?id=149810

        Reviewed by Darin Adler.

        Specs mention that percentages in grid track sizes must be
        resolved as 'auto' if the grid container has an indefinite
        size in the corresponding axis.

        The 'auto' keyword used to be resolved as
        minmax(min-content,max-content) but since r189911 it's
        resolved as minmax(auto,auto). Updated the implementation so
        we properly resolve those percentages.

        No new tests as the behavior does not change at all. That's
        because 'auto' as min-track sizing function is the same as
        min-content (unless we have a specified value for
        min-{width|height}, but those cases were already handled in the
        code), and as a max sizing function is works as max-content.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::gridTrackSize):

2015-10-08  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Automate WebCore JS builtins generation and build system
        https://bugs.webkit.org/show_bug.cgi?id=149751

        Reviewed by Darin Adler.

        Adding annotations to JS files to know whether they should be under a compilation flag and
        whether they are JS internals or JS tied to WebIDL.
        If a file is said as JS internals, all function names are exported automatically.
        Added auto generation of WebCoreJSBuiltins.cpp
        Added auto generation of JSBuiltinFunctions class inside WebCoreJSBuiltins that takes the role of
        WebCoreJSClientData as wrapper for builtins.
        Added auto generation of WebCoreJSBuiltinInternals.h which contain a wrapper around all private functions, used by
        JSDOMWindowBase. The class is named JSBuiltinInternalFunctions.
        Renamed WebCoreJSClientData to JSVMClientData.

        The remaining manual part for private functions is the pairing between private identifiers and
        the private JS functions within JSDOMWindowBase::finishCreation.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableStream.js:
        * Modules/streams/ReadableStreamInternals.js:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::normalWorld):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::visitChildren):
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSClientData::JSClientData):
        (WebCore::JSClientData::~JSClientData):
        (WebCore::JSClientData::builtinFunctions):
        (WebCore::initNormalWorldClientData):
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Deleted.
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamControllerBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamInternalsBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamReaderBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::byteLengthQueuingStrategyBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::countQueuingStrategyBuiltins): Deleted.
        * generate-js-builtins-allinone: Added.
        (retrieveGenerationParameters):
        (retrieveFilesWithParameters):
        (retrieveFilesWithParameters.FileInput):
        (writeConditional):
        (JSBuiltinFunctions):
        (Private):
        (JSBuiltinInternalFunctions):
        (copytempfile):

2015-10-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generated JS constructors should use GlobalObject references
        https://bugs.webkit.org/show_bug.cgi?id=149872

        Reviewed by Darin Adler.

        Updated binding generator to generate JS DOM constructors code with JSDOMGlobalOBject references.
        Updated WebCore JS binding layer accordingly.

        Covered by updated binding tests.

        * bindings/js/DOMConstructorWithDocument.h:
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        (WebCore::DOMConstructorWithDocument::finishCreation):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMStructure):
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorJSBuiltinObject::DOMConstructorJSBuiltinObject):
        (WebCore::getDOMStructure):
        (WebCore::deprecatedGetDOMStructure):
        (WebCore::getDOMPrototype):
        (WebCore::createJSBuiltin):
        (WebCore::createWrapper):
        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSBuiltinConstructor::JSBuiltinConstructor):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::image):
        (WebCore::JSDOMWindow::touch):
        (WebCore::JSDOMWindow::touchList):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        (WebCore::JSDOMWrapperWithImplementation::JSDOMWrapperWithImplementation):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        (WebCore::JSImageConstructor::finishCreation):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::create):
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::JSBuiltinReadableStreamReaderPrivateConstructor::createJSObject):
        (WebCore::JSBuiltinReadableStreamControllerPrivateConstructor::createJSObject):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::create):
        (WebCore::JSTestActiveDOMObjectConstructor::createStructure):
        (WebCore::JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor):
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject):
        (WebCore::JSTestActiveDOMObject::getConstructor):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (WebCore::JSTestActiveDOMObject::create):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::create):
        (WebCore::JSTestCallbackConstructor::createStructure):
        (WebCore::JSTestCallbackConstructor::JSTestCallbackConstructor):
        (WebCore::JSTestCallback::getConstructor):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::createStructure):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::JSTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::create):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::create):
        (WebCore::JSTestCustomNamedGetterConstructor::createStructure):
        (WebCore::JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor):
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetter::getConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (WebCore::JSTestCustomNamedGetter::create):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::create):
        (WebCore::JSTestEventConstructorConstructor::createStructure):
        (WebCore::JSTestEventConstructorConstructor::JSTestEventConstructorConstructor):
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        (WebCore::JSTestEventConstructor::getConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::create):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::create):
        (WebCore::JSTestEventTargetConstructor::createStructure):
        (WebCore::JSTestEventTargetConstructor::JSTestEventTargetConstructor):
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        (WebCore::JSTestEventTarget::JSTestEventTarget):
        (WebCore::JSTestEventTarget::getConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::create):
        (WebCore::JSTestExceptionConstructor::createStructure):
        (WebCore::JSTestExceptionConstructor::JSTestExceptionConstructor):
        (WebCore::JSTestExceptionConstructor::finishCreation):
        (WebCore::JSTestException::JSTestException):
        (WebCore::JSTestException::getConstructor):
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestException::create):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::create):
        (WebCore::JSTestGenerateIsReachableConstructor::createStructure):
        (WebCore::JSTestGenerateIsReachableConstructor::JSTestGenerateIsReachableConstructor):
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable):
        (WebCore::JSTestGenerateIsReachable::getConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        (WebCore::JSTestGenerateIsReachable::create):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::create):
        (WebCore::JSTestInterfaceConstructor::createStructure):
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        (WebCore::JSTestInterface::JSTestInterface):
        (WebCore::JSTestInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::create):
        (WebCore::JSTestJSBuiltinConstructorConstructor::createStructure):
        (WebCore::JSTestJSBuiltinConstructorConstructor::JSTestJSBuiltinConstructorConstructor):
        (WebCore::JSTestJSBuiltinConstructorConstructor::finishCreation):
        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor):
        (WebCore::JSTestJSBuiltinConstructor::getConstructor):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        (WebCore::JSTestJSBuiltinConstructor::create):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::create):
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListener::getConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::create):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::create):
        (WebCore::JSTestNamedConstructorConstructor::createStructure):
        (WebCore::JSTestNamedConstructorNamedConstructor::create):
        (WebCore::JSTestNamedConstructorNamedConstructor::createStructure):
        (WebCore::JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::JSTestNamedConstructorNamedConstructor):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructor::getConstructor):
        (WebCore::JSTestNamedConstructor::getNamedConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::create):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::create):
        (WebCore::JSTestNodeConstructor::createStructure):
        (WebCore::JSTestNodeConstructor::JSTestNodeConstructor):
        (WebCore::JSTestNodeConstructor::finishCreation):
        (WebCore::JSTestNode::JSTestNode):
        (WebCore::JSTestNode::getConstructor):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::create):
        (WebCore::JSTestNondeterministicConstructor::createStructure):
        (WebCore::JSTestNondeterministicConstructor::JSTestNondeterministicConstructor):
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        (WebCore::JSTestNondeterministic::JSTestNondeterministic):
        (WebCore::JSTestNondeterministic::getConstructor):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        (WebCore::JSTestNondeterministic::create):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::create):
        (WebCore::JSTestObjConstructor::createStructure):
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObjConstructor::finishCreation):
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::JSTestObj::getConstructor):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::create):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::create):
        (WebCore::JSTestOverloadedConstructorsConstructor::createStructure):
        (WebCore::JSTestOverloadedConstructorsConstructor::JSTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructors::getConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructors::create):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::create):
        (WebCore::JSTestOverrideBuiltinsConstructor::createStructure):
        (WebCore::JSTestOverrideBuiltinsConstructor::JSTestOverrideBuiltinsConstructor):
        (WebCore::JSTestOverrideBuiltinsConstructor::finishCreation):
        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins):
        (WebCore::JSTestOverrideBuiltins::getConstructor):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        (WebCore::JSTestOverrideBuiltins::create):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::create):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterface::getConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::create):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::create):
        (WebCore::JSTestTypedefsConstructor::createStructure):
        (WebCore::JSTestTypedefsConstructor::JSTestTypedefsConstructor):
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        (WebCore::JSTestTypedefs::JSTestTypedefs):
        (WebCore::JSTestTypedefs::getConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefs::create):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::create):
        (WebCore::JSattributeConstructor::createStructure):
        (WebCore::JSattributeConstructor::JSattributeConstructor):
        (WebCore::JSattributeConstructor::finishCreation):
        (WebCore::JSattribute::JSattribute):
        (WebCore::JSattribute::getConstructor):
        * bindings/scripts/test/JS/JSattribute.h:
        (WebCore::JSattribute::create):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::create):
        (WebCore::JSreadonlyConstructor::createStructure):
        (WebCore::JSreadonlyConstructor::JSreadonlyConstructor):
        (WebCore::JSreadonlyConstructor::finishCreation):
        (WebCore::JSreadonly::JSreadonly):
        (WebCore::JSreadonly::getConstructor):
        * bindings/scripts/test/JS/JSreadonly.h:
        (WebCore::JSreadonly::create):

2015-10-08  Philippe Normand  <pnormand@igalia.com>

        WebRTC: Add event names needed by updated RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=149875

        Reviewed by Eric Carlson.

        The track event name was recently added in the WebRTC spec. The
        icegatheringstatechange event has been part of the spec for a while but
        was not registered in our DOM events.

        * dom/EventNames.h: Add track and icegatheringstatechange even names.

2015-10-07  Keith Rollin  <krollin@apple.com>

        script.text shouldn't include text from non-direct children of the script element
        https://bugs.webkit.org/show_bug.cgi?id=148851
        <rdar://problem/22587759>

        Reviewed by Chris Dumez.

        Don't include text from non-direct children in script.text. Per:
        https://html.spec.whatwg.org/multipage/scripting.html#dom-script-text
        Chrome and Firefox behavior match the spec.

        Test: fast/dom/script-subtext-in-script-elements.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptContent):

2015-10-07  Chris Dumez  <cdumez@apple.com>

        Partial revert of r187626 as it caused a PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=149898

        Reviewed by Myles C. Maxfield.

        Do a partial revert of r187626 as it caused a regression on PLT.

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::FontDescriptionKey): Deleted.
        (WebCore::FontDescriptionKey::computeHash): Deleted.

2015-10-07  Zalan Bujtas  <zalan@apple.com>

        RenderObject::computeRectForRepaint/computeFloatRectForRepaint should return the computed rectangle.
        https://bugs.webkit.org/show_bug.cgi?id=149883

        Reviewed by Simon Fraser.

        Reduces code complexity at the calling sites.
 
        No change in functionality.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderInline.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::selectionRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::computeFloatRectForRepaint):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::selectionRectForRepaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRectsForLineBoxes):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeFloatRectForRepaint):
        (WebCore::RenderSVGForeignObject::computeRectForRepaint):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::computeFloatRectForRepaint):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        (WebCore::SVGRenderSupport::computeFloatRectForRepaint):
        * rendering/svg/SVGRenderSupport.h:

2015-10-07  Antti Koivisto  <antti@apple.com>

        Implement :host pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=149440
        rdar://problem/22731953

        Reviewed by Ryosuke Niwa.

        This implements the basic non-function :host syntax.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:
        (WebCore::computeMatchBasedOnRuleHash):
        (WebCore::RuleSet::addRule):
        * css/RuleSet.h:
        (WebCore::RuleSet::cuePseudoRules):
        (WebCore::RuleSet::hostPseudoClassRules):
        (WebCore::RuleSet::focusPseudoClassRules):
        (WebCore::RuleSet::universalRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2015-10-07  Nan Wang  <n_wang@apple.com>

        AX: ARIA 1.1 @aria-placeholder
        https://bugs.webkit.org/show_bug.cgi?id=148970

        Reviewed by Chris Fleizach.

        Added support for aria-placeholder attribute.

        Modified accessibility/placeholder.html test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::placeholderValue):
        * html/HTMLAttributeNames.in:

2015-10-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190664.
        https://bugs.webkit.org/show_bug.cgi?id=149877

        mac build is sometimes borken due to missing generated header
        file (Requested by youenn on #webkit).

        Reverted changeset:

        "Automate WebCore JS builtins generation and build system"
        https://bugs.webkit.org/show_bug.cgi?id=149751
        http://trac.webkit.org/changeset/190664

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

        will-change should trigger stacking context based purely on properties
        https://bugs.webkit.org/show_bug.cgi?id=148068

        Reviewed by Zalan Bujtas.

        Previously, our will-change implementation didn't trigger stacking context
        on an inline if the will-change property didn't apply to inlines (like 'transform').
        However, this doesn't agree with the CSS-WG consensus (https://lists.w3.org/Archives/Public/www-style/2015Sep/0112.html).
        
        Change behavior to have stacking context creation behavior for will-change be
        identical for inlines and blocks.

        Test: fast/css/will-change/will-change-creates-stacking-context-inline.html

        * rendering/RenderInline.cpp:
        (WebCore::inFlowPositionedInlineAncestor):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::willChangeCreatesStackingContext):
        * rendering/style/WillChangeData.cpp:
        (WebCore::propertyCreatesStackingContext):
        (WebCore::WillChangeData::addFeature):
        (WebCore::propertyCreatesStackingContextOnBoxesOnly): Deleted.
        * rendering/style/WillChangeData.h:
        (WebCore::WillChangeData::canCreateStackingContextOnInline): Deleted.

2015-10-07  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Modify grid item height doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=149840

        Reviewed by Sergio Villar Senin.

        When computing the logical height of content-sized grid tracks we
        need to clear grid item's override height if it needs to be laid
        out again.

        Currently we are doing so only in the case of percentage heights
        or when the grid track's width has changed; these situations would
        obviously mark grid items as needing layout.

        However, there are other situations, like the one defined in this
        bug, which would imply a new layout of the grid items; hence we
        need to clear its override value if we want the layout logic to be
        computed correctly.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):

2015-10-07  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Automate WebCore JS builtins generation and build system
        https://bugs.webkit.org/show_bug.cgi?id=149751

        Reviewed by Darin Adler.

        Adding annotations to JS files to know whether they should be under a compilation flag and
        whether they are JS internals or JS tied to WebIDL.
        If a file is said as JS internals, all function names are exported automatically.
        Added auto generation of WebCoreJSBuiltins.cpp
        Added auto generation of JSBuiltinFunctions class inside WebCoreJSBuiltins that takes the role of
        WebCoreJSClientData as wrapper for builtins. Renamed WebCoreJSClientData to JSClientData.
        Added auto generation of PrivateWebCoreJSBuiltins that is a wrapper around all private functions, used by
        JSDOMWindowBase. The class is named JSBuiltinInternalFunctions.

        The remaining manual part for private functions is the pairing between private identifiers and
        the private JS functions within JSDOMWindowBase::finishCreation.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableStream.js:
        * Modules/streams/ReadableStreamInternals.js:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::normalWorld):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::visitChildren):
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::getAllWorlds):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSClientData::JSClientData):
        (WebCore::JSClientData::~JSClientData):
        (WebCore::JSClientData::builtinFunctions):
        (WebCore::initNormalWorldClientData):
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Deleted.
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamControllerBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamInternalsBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::readableStreamReaderBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::byteLengthQueuingStrategyBuiltins): Deleted.
        (WebCore::WebCoreJSClientData::countQueuingStrategyBuiltins): Deleted.
        * generate-js-builtins-allinone: Added.
        (retrieveGenerationParameters):
        (retrieveFilesWithParameters):
        (retrieveFilesWithParameters.FileInput):
        (writeConditional):
        (JSBuiltinFunctions):
        (Private):
        (JSBuiltinInternalFunctions):
        (copytempfile):

2015-10-05  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Implement grid gutters
        https://bugs.webkit.org/show_bug.cgi?id=149800

        Reviewed by Darin Adler.

        Authors can now specify the gutters between grid lines, i.e.,
        the space between two consecutive grid lines. This can be done
        using the new '-webkit-grid-column-gap 'and
        '-webkit-grid-row-gap' properties (or the '-webkit-grid-gap'
        shorthand).

        From the track sizing algorithm POV, gutters are treated as
        fixed size columns. The primary consequence is that grids are
        enlarged (depending on the number of tracks). Gutters also
        affect the sizing of content-sized tracks and fr tracks as
        long as the grid have spanning items. Those tracks will become
        smaller as gutters will consume part of the item's size, so
        the tracks won't need to grow as much as they used to.

        Tests: fast/css-grid-layout/grid-gutters-and-alignment.html
               fast/css-grid-layout/grid-gutters-and-flex-content.html
               fast/css-grid-layout/grid-gutters-and-tracks.html
               fast/css-grid-layout/grid-gutters-get-set.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridGapShorthand):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::guttersSize):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        * rendering/RenderGrid.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator==):

2015-10-07  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Progress bar is broken on recent GTK+
        https://bugs.webkit.org/show_bug.cgi?id=149831

        Reviewed by Carlos Garcia Campos.

        The gtk progress bar has been broken after bumping up to Gtk+-3.16. This is because
        the way of rendering progress bar changed after gtk+-3.13.7. See more
        https://mail.gnome.org/archives/commits-list/2014-August/msg03865.html
        gtk_render_activity is no longer valid to paint a progress bar on a newer gtk+.
        It should be done with gtk_render_background and gtk_render_frame.

        Test: fast/dom/HTMLProgressElement/native-progress-bar.html

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintProgressBar):

2015-10-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add autocleanups
        https://bugs.webkit.org/show_bug.cgi?id=149588

        Reviewed by Darin Adler.

        * PlatformGTK.cmake:
        * bindings/scripts/gobject-generate-headers.pl:

2015-10-06  Zalan Bujtas  <zalan@apple.com>

        Paint artifacts when hovering on http://jsfiddle.net/Sherbrow/T87Mn/
        https://bugs.webkit.org/show_bug.cgi?id=149535
        rdar://problem/22874920

        Reviewed by Simon Fraser.

        When due to some style change, a renderer's self-painting layer is getting destroyed 
        and the parent's overflow is no longer set to visible, we don't clean up the overflow part.

        When a renderer has a self-painting layer, the parent stops tracking the child's 
        visual overflow rect. All overflow painting is delegated to the self-painting layer.
        However when this layer gets destroyed, no-one issues repaint to clean up
        the overflow bits.
        This patch ensures that we issue a repaint when the self-painting layer is destroyed
        and the triggering style change requires full repaint.

        Test: fast/repaint/overflow-hidden-with-self-painting-child-layer.html

        * rendering/RenderLayer.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):

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

        [Mac] REGRESSION(r173318): Seeks never complete for media loaded with QTKit.
        https://bugs.webkit.org/show_bug.cgi?id=149845

        Reviewed by Darin Adler.

        When converting from time-as-double to MediaTime, a regression was introduced
        when checking whether m_seekTo was set to a valid value or not. The clause
        `time != -1` should be translated to `time.isValid()`, not `!time.isValid()`.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::timeChanged):

2015-10-06  Brady Eidson  <beidson@apple.com>

        Rename IDBRequestIdentifier to IDBResourceIdentifier.
        https://bugs.webkit.org/show_bug.cgi?id=149861

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        Turns out having an object representing a (connection ID + unique ID pair) is useful for more than just IDBRequests.

        * CMakeLists.txt:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::deleteDatabase):
        (WebCore::IDBClient::IDBConnectionToServer::openDatabase):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        (WebCore::IDBClient::IDBRequest::resourceIdentifier):
        (WebCore::IDBClient::IDBRequest::requestIdentifier): Deleted.
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::requestIdentifier):
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp: Renamed from Source/WebCore/Modules/indexeddb/shared/IDBRequestIdentifier.cpp.
        (WebCore::nextResourceNumber):
        (WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
        (WebCore::IDBResourceIdentifier::emptyValue):
        (WebCore::IDBResourceIdentifier::deletedValue):
        (WebCore::IDBResourceIdentifier::isHashTableDeletedValue):
        * Modules/indexeddb/shared/IDBResourceIdentifier.h: Renamed from Source/WebCore/Modules/indexeddb/shared/IDBRequestIdentifier.h.
        (WebCore::IDBResourceIdentifier::isEmpty):
        (WebCore::IDBResourceIdentifier::hash):
        (WebCore::IDBResourceIdentifier::operator==):
        (WebCore::IDBResourceIdentifier::connectionIdentifier):
        (WebCore::IDBResourceIdentifierHash::hash):
        (WebCore::IDBResourceIdentifierHash::equal):
        (WebCore::IDBResourceIdentifierHashTraits::emptyValue):
        (WebCore::IDBResourceIdentifierHashTraits::isEmptyValue):
        (WebCore::IDBResourceIdentifierHashTraits::constructDeletedValue):
        (WebCore::IDBResourceIdentifierHashTraits::isDeletedValue):
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::requestIdentifier):
        * WebCore.xcodeproj/project.pbxproj:

2015-10-06  Nan Wang  <n_wang@apple.com>

        AX: ARIA 1.1: aria-orientation now defaults to undefined, supported on more elements, and role-specific defaults are defined.
        https://bugs.webkit.org/show_bug.cgi?id=132177

        Reviewed by Chris Fleizach.

        Added role-specific defaults and changed general default to undefined.
        Also added more elements to support aria-orientation on Mac.

        Test: accessibility/mac/aria-orientation.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::orientation):
        (WebCore::AccessibilityObject::isDescendantOfObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isColorWell):
        (WebCore::AccessibilityObject::isSplitter):
        (WebCore::AccessibilityObject::isToolbar):
        (WebCore::AccessibilityObject::isChecked):
        (WebCore::AccessibilityObject::isEnabled):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::orientation):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::scrollBar):
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::orientation):
        (WebCore::AccessibilityScrollbar::isEnabled):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2015-10-06  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] GStreamer compile errors.
        https://bugs.webkit.org/show_bug.cgi?id=149839

        Reviewed by Alex Christensen.

        Help MSVC to resolve ambiguous calls.

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::networkState):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::activeChanged):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekMainCb):
        (webKitWebSrcSeekDataCb):

2015-10-06  Chris Dumez  <cdumez@apple.com>

        Refactor TokenPreloadScanner::StartTagScanner::processAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=149847

        Reviewed by Antti Koivisto.

        Refactor TokenPreloadScanner::StartTagScanner::processAttribute() to only
        process attributes that make sense given the current tagId. In particular,
        - We only process the charset parameter if the tag is a link or a script.
        - We only process the sizes / srcset attributes if the tag is an img.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        (WebCore::TokenPreloadScanner::StartTagScanner::setUrlToLoad): Deleted.

2015-10-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator XXConstructor::finishCreation should take references as parameters
        https://bugs.webkit.org/show_bug.cgi?id=149838

        Reviewed by Darin Adler.

        Updated the binding generator so that XXConstructor::finishCreation
        takes a JSDOMGlobalObject& in lieu of a JSDOMGlobalObject*.

        Covered by rebased binding tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::create):
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::create):
        (WebCore::JSTestCallbackConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::create):
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::create):
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::create):
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::create):
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::create):
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::create):
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::create):
        (WebCore::JSTestJSBuiltinConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::create):
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::create):
        (WebCore::JSTestNamedConstructorNamedConstructor::create):
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::create):
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::create):
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::create):
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::create):
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::create):
        (WebCore::JSTestOverrideBuiltinsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::create):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::create):
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::create):
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::create):
        (WebCore::JSreadonlyConstructor::finishCreation):

2015-10-06  Jiewen Tan  <jiewen_tan@apple.com>

        Fix crash in ApplyStyleCommand::applyRelativeFontStyleChange()
        https://bugs.webkit.org/show_bug.cgi?id=149300
        <rdar://problem/22747046>

        Reviewed by Chris Dumez.

        This is a merge of Blink r167845 and r194944:
        https://codereview.chromium.org/177093016
        https://codereview.chromium.org/1124863003

        Test: editing/style/apply-style-crash2.html
              editing/style/apply-style-crash3.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        The issue was that we would traverse the DOM tree past the beyondEnd 
        under some circumstances and thus NodeTraversal::next() would return 
        null unexpectedly. This CL adds a check to make sure startNode != beyondEnd 
        before traversing to avoid the problem.

        Besides that, this CL hardens changing font style over unknown elements.
        When adjusting the start node position of where to apply a font style
        command, check that we haven't stepped off the end.

        This CL also adds a few more assertions to catch similar issues 
        more easily in the future.

2015-10-06  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Don't need to reset auto-margins during grid items layout
        https://bugs.webkit.org/show_bug.cgi?id=149764

        Reviewed by Darin Adler.

        This patch implements a refactoring of the auto-margin alignment code for grid
        items so it uses start/end and before/after margin logic terms.

        I addition, it avoids resetting the auto-margin values, which requires an extra
        layout, before applying the alignment logic.

        No new tests because there is no behavior change.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeMarginLogicalHeightForChild): Computing margins if child needs layout.
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching):
        (WebCore::RenderGrid::updateAutoMarginsInRowAxisIfNeeded): Using start/end logical margins.
        (WebCore::RenderGrid::updateAutoMarginsInColumnAxisIfNeeded): Using before/after logical margins.
        (WebCore::RenderGrid::columnAxisOffsetForChild): Just added comment.
        (WebCore::RenderGrid::rowAxisOffsetForChild): Just added comment.

2015-10-06  Tim Horton  <timothy_horton@apple.com>

        Tile map shows a green rect when threaded scrolling is disabled
        https://bugs.webkit.org/show_bug.cgi?id=149716

        Reviewed by Darin Adler.

        Green is supposed to indicate that we're using the fast path; if threaded
        scrolling is disabled, we're definitely not doing that.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::TileController):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::update):
        Default to the "we have no ScrollingCoordinator" purple indication;
        if a ScrollingCoordinator comes along it will setScrollingModeIndication
        and change it from this default.

2015-10-06  Zalan Bujtas  <zalan@apple.com>

        Remove redundant isComposited() function and replace
        hasLayer() && layer()->isComposited() with RenderObject::isComposited().
        https://bugs.webkit.org/show_bug.cgi?id=149846

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderView.cpp:
        (WebCore::rendererObscuresBackground):
        (WebCore::isComposited): Deleted.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):

2015-10-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190619.
        https://bugs.webkit.org/show_bug.cgi?id=149849

        borke the binding tests on iOS at least (Requested by youenn
        on #webkit).

        Reverted changeset:

        "Binding generator XXConstructor::finishCreation should take
        references as parameters"
        https://bugs.webkit.org/show_bug.cgi?id=149838
        http://trac.webkit.org/changeset/190619

2015-10-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Slider knobs should scale when rendering while zoomed
        https://bugs.webkit.org/show_bug.cgi?id=149835
        <rdar://problem/22897080>

        Reviewed by Darin Adler.

        Make slider knobs follow suit with the rest of the unscaled form controls
        by rendering to an offscreen buffer when the page is zoomed or scaled and
        then rendering a scaled version of the offscreen buffer onto the page.

        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellOrFocusRingIntoRectWithView): Helper function for drawing
            cells and/or focus rings.
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext): Refactored to
            handle drawing slider knobs as well.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb): Use scaled rendering when necessary.

2015-10-06  Chris Dumez  <cdumez@apple.com>

        [Web IDL] 'length' property is wrong for variadic operations
        https://bugs.webkit.org/show_bug.cgi?id=149714

        Reviewed by Darin Adler.

        The value of the 'length' property was wrong for variadic operations:
        - https://heycam.github.io/webidl/#dfn-optional-argument

        The final argument of a variadic operation is considered to be an
        optional argument. Therefore, we should not account for it when
        computing the value of the 'length' property. This patch fixes WebKit's
        behavior to match the specification.

        Test: fast/dom/variadic-operations-length.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionLength):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):

2015-10-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should add builtin header for JSBuiltin attributes
        https://bugs.webkit.org/show_bug.cgi?id=149837

        Reviewed by Darin Adler.

        Ensured XXBuiltins.h header is included for builtin attributes.
        Renamed AddIncludesForJSBuiltinMethods as AddJSBuiltinIncludesIfNeeded.
        Test loop is done through all functions and attributes to handle conditional correctly.

        Covered by existing and added binding tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (AddJSBuiltinIncludesIfNeeded):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:

2015-10-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator XXConstructor::finishCreation should take references as parameters
        https://bugs.webkit.org/show_bug.cgi?id=149838

        Reviewed by Darin Adler.

        Updated the binding generator so that XXConstructor::finishCreation
        takes a JSDOMGlobalObject& in lieu of a JSDOMGlobalObject*.

        Covered by rebased binding tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::create):
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::create):
        (WebCore::JSTestCallbackConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::create):
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::create):
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::create):
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::create):
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::create):
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::create):
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::create):
        (WebCore::JSTestJSBuiltinConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::create):
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::create):
        (WebCore::JSTestNamedConstructorNamedConstructor::create):
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::create):
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::create):
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::create):
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::create):
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::create):
        (WebCore::JSTestOverrideBuiltinsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::create):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::create):
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::create):
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::create):
        (WebCore::JSreadonlyConstructor::finishCreation):

2015-10-06  Hunseop Jeong  <hs85.jeong@samsung.com>

        [Cairo] fast/canvas/canvas-imageSmoothingFoo tests failed after r190383.
        https://bugs.webkit.org/show_bug.cgi?id=149752

        Reviewed by Carlos Garcia Campos.

        CG's low interpolation quality setting is equivalent to most other browsers default or high settings.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):

2015-10-06  Daniel Bates  <dbates@webkit.org>

        Enable XSLT when building WebKit for iOS using the public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=149827

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

2015-10-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct positioning error introduced in r190235
        https://bugs.webkit.org/show_bug.cgi?id=149631
        <rdar://problem/22635080>

        Reviewed by Simon Fraser.

        Covered by existing compositing tests:
          css3/filters/clipping-overflow-scroll-with-pixel-moving-effect-on.html
          fast/layers/no-clipping-overflow-hidden-added-after-transform.html
          fast/layers/no-clipping-overflow-hidden-added-after-transition.html
          fast/layers/no-clipping-overflow-hidden-hardware-acceleration.html
          transforms/2d/preserve3d-not-fixed-container.html

        * platform/graphics/ca/TileGrid.cpp:
        (TileGrid::platformCALayerPaintContents): No need to do this extra flipping step
        on Windows.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback): We should always flip the
        coordinate system when drawing these layers on Windows.
        (shouldInvertBeforeDrawingContent): Deleted.
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::displayCallback): We do not need to flip coordinates
        for these tiled layers; that's already accounted for in common tile drawing code.

2015-10-06  Emanuele Aina  <emanuele.aina@collabora.com>

        Fix ENABLE_OPENGL=OFF builds
        https://bugs.webkit.org/show_bug.cgi?id=146511

        Reviewed by Darin Adler.

        * platform/graphics/texmap/BitmapTextureGL.h:
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperShaderProgram.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        Fix TEXTURE_MAPPER_GL vs. TEXTURE_MAPPER guards to make sure that
        ENABLE_OPENGL=OFF only disables the GL-related parts.

2015-10-06  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r190611.

        * PlatformWin.cmake:
        Forward headers from contentextensions.

2015-10-06  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/html.
        https://bugs.webkit.org/show_bug.cgi?id=149662

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::typeMismatchFor):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::receiveDroppedFiles):
        * html/FormController.cpp:
        (WebCore::FormControlState::serializeTo):
        (WebCore::FormControlState::deserialize):
        (WebCore::SavedFormState::serializeTo):
        (WebCore::SavedFormState::getReferencedFilePaths):
        (WebCore::FormController::createSavedFormStateMap):
        (WebCore::FormController::formElementsState):
        (WebCore::FormController::restoreControlStateIn):
        (WebCore::FormController::getReferencedFilePaths):
        * html/HTMLAnchorElement.cpp:
        (WebCore::hasNonEmptyBox):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::length):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::firstNamedItem):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::formWouldHaveSecureSubmission):
        (WebCore::HTMLFormElement::removedFrom):
        (WebCore::HTMLFormElement::length):
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::getTextFieldValues):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        (WebCore::HTMLFormElement::removeFromPastNamesMap):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * html/HTMLInputElement.cpp:
        (WebCore::parseAcceptAttribute):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaGroup):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::index):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::saveLastSelection):
        (WebCore::HTMLSelectElement::setActiveSelectionAnchorIndex):
        (WebCore::HTMLSelectElement::setActiveSelectionEndIndex):
        (WebCore::HTMLSelectElement::selectedIndex):
        (WebCore::HTMLSelectElement::deselectItemsWithoutValidation):
        (WebCore::HTMLSelectElement::saveFormControlState):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::appendFormData):
        (WebCore::HTMLSelectElement::reset):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        * html/InputType.cpp:
        (WebCore::populateInputTypeFactoryMap):
        * html/MediaController.cpp:
        (MediaController::duration):
        (MediaController::setCurrentTime):
        (MediaController::play):
        (MediaController::setPlaybackRate):
        (MediaController::setVolume):
        (MediaController::setMuted):
        (playbackStateWaiting):
        (MediaController::updateMediaElements):
        (MediaController::bringElementUpToSpeed):
        (MediaController::isBlocked):
        (MediaController::hasEnded):
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::hasAudio):
        (MediaController::hasVideo):
        (MediaController::hasClosedCaptions):
        (MediaController::setClosedCaptionsVisible):
        (MediaController::supportsScanning):
        (MediaController::beginScrubbing):
        (MediaController::endScrubbing):
        (MediaController::canPlay):
        (MediaController::isLiveStream):
        (MediaController::hasCurrentSrc):
        (MediaController::returnToRealtime):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::revoke):
        (WebCore::PublicURLManager::stop):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::getCachedMaxIndex):
        (WebCore::WebGLBuffer::setCachedMaxIndex):
        (WebCore::WebGLBuffer::setTarget):
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::loseContextGroup):
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::checkStatus):
        (WebCore::WebGLFramebuffer::deleteObjectImpl):
        (WebCore::WebGLFramebuffer::initializeAttachments):
        (WebCore::WebGLFramebuffer::drawBuffers):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::deleteTexture):
        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::initializeAttributes):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::ensureNoahsArkCondition):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * html/parser/XSSAuditor.cpp:
        (WebCore::semicolonSeparatedValueContainsJavaScriptURL):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateActiveCuesFontSize):
        * html/track/AudioTrackList.cpp:
        (AudioTrackList::getTrackById):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrackCueList.cpp:
        (WebCore::TextTrackCueList::getCueById):
        (WebCore::TextTrackCueList::activeCues):
        * html/track/TextTrackList.cpp:
        (TextTrackList::getTrackIndexRelativeToRenderedTracks):
        (TextTrackList::invalidateTrackIndexesAfterTrack):
        * html/track/TrackListBase.cpp:
        (TrackListBase::isAnyTrackEnabled):
        * html/track/VideoTrackList.cpp:
        (VideoTrackList::getTrackById):

2015-10-06  Alex Christensen  <achristensen@webkit.org>

        Report error when main resource is blocked by content blocker
        https://bugs.webkit.org/show_bug.cgi?id=149719
        rdar://problem/21970595

        Reviewed by Brady Eidson.

        Test: http/tests/contentextensions/main-resource.html

        * English.lproj/Localizable.strings:
        * contentextensions/ContentExtensionActions.h:
        * contentextensions/ContentExtensionError.h:
        (WebCore::ContentExtensions::make_error_code):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::globalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        Instead of nulling out the ResourceRequest, processContentExtensionRulesForLoad 
        now returns a status indicating whether the request should be blocked.
        This is needed because the DocumentLoader needs a CachedResource with an error representing the blocking
        (WebCore::ContentExtensions::ContentExtensionsBackend::displayNoneCSSRule):
        * contentextensions/ContentExtensionsBackend.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        Dispatch an error if the resource is blocked by a content blocker.
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::cancelledError):
        (WebCore::FrameLoader::blockedByContentBlockerError):
        (WebCore::FrameLoader::connectionProperties):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::removeAllUserContentExtensions):
        (WebCore::UserContentController::processContentExtensionRulesForLoad):
        (WebCore::UserContentController::actionsForResourceLoad):
        * page/UserContentController.h:
        * platform/efl/ErrorsEfl.cpp:
        (WebCore::blockedError):
        (WebCore::blockedByContentBlockerError):
        (WebCore::cannotShowURLError):
        * platform/efl/ErrorsEfl.h:
        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::blockedError):
        (WebCore::blockedByContentBlockerError):
        (WebCore::cannotShowURLError):
        * platform/gtk/ErrorsGtk.h:

2015-10-06  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        JSBuiltinConstructor must always add builtin header
        https://bugs.webkit.org/show_bug.cgi?id=149759

        Reviewed by Darin Adler.

        Covered by TestJSBuiltinConstructor.idl.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddIncludesForJSBuiltinMethods): Forces adding the builtin header when the JSBuiltinConstructor is present.
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp: Expectation.

2015-10-05  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Migrate streams API to JS Builtins
        https://bugs.webkit.org/show_bug.cgi?id=147092

        Reviewed by Darin Adler.

        Moved ReadableStream implementation from C++ to JS Builtins.
        Created specific private constructors for ReadableStreamReader and ReadableStreamController.
        Added these constructors to  JSDOMWindowBase.
        Constructors are based on a template found in JSDOMConstructor which might serve to webidl-generated classes as well.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/streams/ReadableStream.cpp: Removed.
        * Modules/streams/ReadableStream.h: Removed.
        * Modules/streams/ReadableStream.idl:
        * Modules/streams/ReadableStream.js:
        (strategy.size):
        (initializeReadableStream):
        (cancel):
        (getReader):
        (pipeTo):
        (tee):
        (locked):
        * Modules/streams/ReadableStreamController.h:
        * Modules/streams/ReadableStreamController.idl:
        * Modules/streams/ReadableStreamController.js: Added.
        (enqueue):
        (error):
        (close):
        (desiredSize):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamReader):
        (privateInitializeReadableStreamController):
        (isReadableStream):
        (isReadableStreamReader):
        (isReadableStreamController):
        (errorReadableStream):
        (requestReadableStreamPull):
        (getReadableStreamDesiredSize):
        (releaseReadableStreamReader):
        (cancelReadableStream):
        (finishClosingReadableStream):
        (closeReadableStream):
        (closeReadableStreamReader):
        (enqueueInReadableStream):
        (readFromReadableStreamReader):
        (invokeOrNoop):
        (promiseInvokeOrNoop):
        * Modules/streams/ReadableStreamReader.cpp: Removed.
        * Modules/streams/ReadableStreamReader.h:
        * Modules/streams/ReadableStreamReader.idl:
        * Modules/streams/ReadableStreamReader.js: Copied from Source/WebCore/Modules/streams/ReadableStream.js.
        (cancel):
        (read):
        (releaseLock):
        (closed):
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMConstructor.h: Added.
        (WebCore::JSBuiltinConstructor::create):
        (WebCore::JSBuiltinConstructor::createStructure):
        (WebCore::JSBuiltinConstructor::JSBuiltinConstructor):
        (WebCore::JSBuiltinConstructor::initializeProperties):
        (WebCore::JSBuiltinConstructor<JSClass>::finishCreation):
        (WebCore::JSBuiltinConstructor<JSClass>::construct):
        (WebCore::JSBuiltinConstructor<JSClass>::getConstructData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::finishCreation):
        * bindings/js/JSReadableStreamControllerCustom.cpp: Removed.
        * bindings/js/JSReadableStreamCustom.cpp: Removed.
        * bindings/js/JSReadableStreamPrivateConstructors.cpp: Added.
        (WebCore::constructJSReadableStreamController):
        (WebCore::constructJSReadableStreamReader):
        (WebCore::JSBuiltinConstructor<JSReadableStreamReader>::createJSObject):
        (WebCore::JSBuiltinConstructor<JSReadableStreamController>::createJSObject):
        (WebCore::JSBuiltinReadableStreamReaderPrivateConstructor::createInitializeFunction):
        (WebCore::JSBuiltinReadableStreamControllerPrivateConstructor::createInitializeFunction):
        (WebCore::createReadableStreamReaderPrivateConstructor):
        (WebCore::createReadableStreamControllerPrivateConstructor):
        * bindings/js/JSReadableStreamPrivateConstructors.h: Added.
        * bindings/js/JSReadableStreamReaderCustom.cpp: Removed.
        * bindings/js/ReadableJSStream.cpp: Removed.
        * bindings/js/ReadableJSStream.h: Removed.
        * bindings/js/WebCoreBuiltinNames.h: Added.
        (WebCore::WebCoreBuiltinNames::WebCoreBuiltinNames):
        * bindings/js/WebCoreJSBuiltins.cpp:
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::builtinNames):
        (WebCore::WebCoreJSClientData::readableStreamControllerBuiltins):
        (WebCore::WebCoreJSClientData::readableStreamReaderBuiltins):

2015-10-05  Chris Dumez  <cdumez@apple.com>

        data: URLs should not be preloaded
        https://bugs.webkit.org/show_bug.cgi?id=149829

        Reviewed by Ryosuke Niwa.

        Update the HTMLPreloadScanner so that data: URLs do not get preloaded.
        There is no need as the data is already available.

        Test: fast/preloader/image-data-url.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload):

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

        [iOS] REGRESSION(r190434): Media continues to play when locking screen
        https://bugs.webkit.org/show_bug.cgi?id=149822

        Reviewed by Brent Fulgham.

        In MediaSessionManagerIOS.mm, both -applicationWillEnterForeground: and
        -applicationDidBecomeActive: called
        PlatformMediaSessionManager::applicationWillEnterForeground(), leading to the
        PlatformMediaSession's m_interruptionCount becoming increasingly unbalanced.

        Rename PlatformMediaSessionManager::applicationWillEnterForeground() to
        applicationDidEnterForeground() to more correctly reflect when this notification will be
        called. Add a new method, MediaSessionManagerIOS::applicationWillEnterForeground(bool),
        whose paramater is whether the screen was locked. This allows the beginInterruption() and
        endInterruption() methods to be correctly balanced.

        Drive-by fix: remove the unimplemented declarations for application{will,did}Enter{Fore,Back}ground()
        from PlatformMediaSession.h.

        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationDidEnterForeground):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::applicationDidEnterBackground):
        (WebCore::MediaSessionManageriOS::applicationWillEnterForeground):
        (-[WebMediaSessionHelper applicationWillEnterForeground:]):
        (-[WebMediaSessionHelper applicationDidBecomeActive:]):
        * testing/Internals.cpp:
        (WebCore::Internals::applicationDidEnterForeground):
        (WebCore::Internals::applicationWillEnterForeground): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-10-05  Alex Christensen  <achristensen@webkit.org>

        Invalid CSS Selector for Content Blockers invalidates others
        https://bugs.webkit.org/show_bug.cgi?id=148446
        rdar://problem/22918235

        Reviewed by Benjamin Poulain.

        Test: http/tests/contentextensions/invalid-selector.html

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::isValidSelector):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        Add a check to see if a selector is valid before adding it.

2015-10-05  Jiewen Tan  <jiewen_tan@apple.com>

        CSSGradientValue should check whether gradientLength is zero or not.
        https://bugs.webkit.org/show_bug.cgi?id=149373
        <rdar://problem/22771418>

        Reviewed by Darin Adler.

        This is a merge of Blink r158220,
        https://chromiumcodereview.appspot.com/24350008

        Test: fast/gradients/css3-repeating-radial-gradients-crash.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        Check whether gradientLength > 0 before using it as denominator.

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

        EXT_texture_filter_anisotropic extension exposed with WEBKIT_ prefix
        https://bugs.webkit.org/show_bug.cgi?id=149765
        <rdar://problem/22983722>

        Reviewed by Beth Dakin.

        We can now remove the WEBKIT_ prefix from this extension.

        Test: fast/canvas/webgl/unprefixed-anisotropic-extension.html

        * html/canvas/WebGL2RenderingContext.cpp: Support the prefixed and unprefixed form.
        (WebCore::WebGL2RenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):

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

        Reference cycles during SVG dependency invalidation
        https://bugs.webkit.org/show_bug.cgi?id=149824
        <rdar://problem/22771412>

        Reviewed by Tim Horton.

        Detect any reference cycles as we are invalidating.

        This is mostly a merge of the following Blink commit:
        https://chromium.googlesource.com/chromium/blink/+/a4bc83453bda89823b672877dc02247652a02d51

        Test: svg/custom/reference-cycle.svg

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies): Keep around a hash
        table of dependencies, so that we can detect if an element is already
        present before marking it.

2015-10-05  Jiewen Tan  <jiewen_tan@apple.com>

        Fix null pointer dereference in WebSocket::connect()        
        https://bugs.webkit.org/show_bug.cgi?id=149311
        <rdar://problem/22748858>

        Reviewed by Chris Dumez.

        This is a merge of Blink r187441,
        https://codereview.chromium.org/785933005

        Test: http/tests/websocket/construct-in-detached-frame.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        Call function implemented below instead of duplicating the code.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::shouldBypassMainWorldContentSecurityPolicy):
        * page/ContentSecurityPolicy.h:
        Factor the logic to check shouldBypassMainWorldContentSecurityPolicy into 
        a function in this class. Check Frame pointers are not null before getting 
        shouldBypassMainWorldContentSecurityPolicy via those pointers.
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        This got fixed as a bonus.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        This got fixed as a bonus too.

2015-10-05  Beth Dakin  <bdakin@apple.com>

        WebCore::IOSurface should ask the IOSurface for the pixel format instead of 
        caching it
        https://bugs.webkit.org/show_bug.cgi?id=149820
        -and corresponding-
        rdar://problem/22976230

        Reviewed by Tim Horton.

        Also there is no reason to make YUV be iOS only, so this patch removes those 
        PLATFORM checks.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::IOSurface):
        (IOSurface::format):
        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-10-02  Ryosuke Niwa  <rniwa@webkit.org>

        ShadowRoot with leading or trailing white space cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=149782

        Reviewed by Chris Dumez.

        Fixed the crash by adding a null pointer check since a TextNode that appears as a direct child
        of a ShadowRoot doesn't have a parent element.

        Test: fast/shadow-dom/shadow-root-with-child-whitespace-text-crash.html

        * style/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::previousSiblingRenderer):

2015-10-05  Beth Dakin  <bdakin@apple.com>

        Build fix. 

        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-10-05  Beth Dakin  <bdakin@apple.com>

        Unreviewed build fix.

        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-10-05  Brady Eidson  <beidson@apple.com>

        Modernize IDBRequest::ReadyState into an enum class.
        https://bugs.webkit.org/show_bug.cgi?id=149817

        Reviewed by Alex Christensen.

        No new tests (Refactor, no behavior change).

        * Modules/indexeddb/IDBRequest.h:
        
        * Modules/indexeddb/legacy/LegacyOpenDBRequest.cpp:
        (WebCore::LegacyOpenDBRequest::shouldEnqueueEvent):
        
        * Modules/indexeddb/legacy/LegacyRequest.cpp:
        (WebCore::LegacyRequest::LegacyRequest):
        (WebCore::LegacyRequest::result):
        (WebCore::LegacyRequest::error):
        (WebCore::LegacyRequest::errorCode):
        (WebCore::LegacyRequest::readyState):
        (WebCore::LegacyRequest::markEarlyDeath):
        (WebCore::LegacyRequest::abort):
        (WebCore::LegacyRequest::setCursorDetails):
        (WebCore::LegacyRequest::setPendingCursor):
        (WebCore::LegacyRequest::setResultCursor):
        (WebCore::LegacyRequest::finishCursor):
        (WebCore::LegacyRequest::shouldEnqueueEvent):
        (WebCore::LegacyRequest::stop):
        (WebCore::LegacyRequest::dispatchEvent):
        (WebCore::LegacyRequest::transactionDidFinishAndDispatch):
        (WebCore::LegacyRequest::enqueueEvent):
        * Modules/indexeddb/legacy/LegacyRequest.h:

2015-10-05  Jiewen Tan  <jiewen_tan@apple.com>

        Cleaning up after revision 190339
        https://bugs.webkit.org/show_bug.cgi?id=149732

        Reviewed by Myles C. Maxfield.

        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::compileStyleSheet):

2015-10-05  Beth Dakin  <bdakin@apple.com>

        Errant space!!
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::releaseGraphicsContext):
        (IOSurface::convertToFormat):

2015-10-05  Beth Dakin  <bdakin@apple.com>

        Compress snapshots on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149814
        -and corresponding-
        rdar://problem/22976230

        Reviewed by Simon Fraser.

        Though the default is still RGBA, it is now possible to create an IOSurface 
        that uses the YUV422 pixel format.
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::surfaceFromPool):
        (IOSurface::create):
        (IOSurface::createFromImage):
        (IOSurface::IOSurface):
        (IOSurface::releaseGraphicsContext):

        In order to have a YUV IOSurface, we actually have to create an RGBA surface 
        first and then convert it to YUV, so this class method will handle that.
        (IOSurface::convertToFormat):

        Necessary SPI.
        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-10-05  Zalan Bujtas  <zalan@apple.com>

        Mark the line dirty when RenderQuote's text changes.
        https://bugs.webkit.org/show_bug.cgi?id=149784
        rdar://problem/22558169

        Reviewed by Antti Koivisto.

        When quotation mark changes ( " -> ' or empty string), we
        need to mark the line dirty to ensure its content gets laid out properly.

        Test: fast/inline/quotation-text-changes-dynamically.html

        * rendering/RenderQuote.cpp:
        (WebCore::quoteTextRenderer):
        (WebCore::RenderQuote::updateText):
        (WebCore::fragmentChild): Deleted.

2015-10-03  Filip Pizlo  <fpizlo@apple.com>

        Allow an object's marking state to track The Three Colors
        https://bugs.webkit.org/show_bug.cgi?id=149654

        Reviewed by Geoffrey Garen.

        No new tests because no new behavior.

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

2015-10-05  Katlyn Graff  <kgraff@apple.com>

        Update setImageSmoothingQuality for additional reviews.
        https://bugs.webkit.org/show_bug.cgi?id=149541

        Reviewed by Chris Dumez.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setImageSmoothingQuality):

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

        Remove unused HistoryItem::targetItem()
        <https://webkit.org/b/149803>

        Reviewed by Anders Carlsson.

        This is ancient code with no remaining clients since 2010 (r53650)

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::findTargetItem): Deleted.
        (WebCore::HistoryItem::targetItem): Deleted.
        * history/HistoryItem.h:

2015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix -webkit-font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=149722

        Reviewed by Sam Weinig.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFeatureSettings):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialFontFeatureSettings):
        (WebCore::StyleBuilderCustom::applyInheritFontFeatureSettings):
        (WebCore::StyleBuilderCustom::applyInitialWebkitFontFeatureSettings): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitFontFeatureSettings): Deleted.

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

        [GStreamer] Replace uses of std::bind() with lambdas
        https://bugs.webkit.org/show_bug.cgi?id=149802

        Reviewed by Carlos Garcia Campos.

        Instead of std::bind(), use C++ lambdas to create std::function<>
        wrappers in GStreamer-related class implementations.

        Ref-counted classes are protected by capturing a RefPtr object.
        GstObject-derived objects are protected by capturing a GRefPtr object.
        Necessary specializations for WebKitVideoSink and WebKitWebSrc are added.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<WebKitVideoSink>):
        (WTF::derefGPtr<WebKitVideoSink>):
        (WTF::refGPtr<WebKitWebSrc>):
        (WTF::derefGPtr<WebKitWebSrc>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::streamChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::activeChanged):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):

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

        Remove unused HistoryItem::parent
        <https://webkit.org/b/149803>

        Reviewed by Anders Carlsson.

        Remove the effectively-unused "parent" field from HistoryItem.
        This also allows us to get rid of a HistoryItem constructor.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Deleted.
        (WebCore::HistoryItem::reset): Deleted.
        (WebCore::HistoryItem::parent): Deleted.
        (WebCore::HistoryItem::setParent): Deleted.
        * history/HistoryItem.h:
        (WebCore::HistoryItem::create): Deleted.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::initializeItem): Deleted.

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

        GLContext should control ownership of context-related objects
        https://bugs.webkit.org/show_bug.cgi?id=149794

        Reviewed by Martin Robinson.

        Creation of GLContext objects can depend on various platform-specific
        objects like native window representations. Since these objects are
        used solely for the GLContext purposes, it would make sense to allow
        GLContext to provide an extensible way to impose ownership on these
        objects and control their lifetime.

        GLContext::Data is declared with a defaulted virtual destructor.
        Users of these implementations can declare classes that derive from
        GLContext::Data and store context-related objects in instances of the
        derived class, and ensure that these objects are properly cleaned up
        when GLContext destroys the Data object.

        The GLContext::Data object is managed through a protected
        std::unique_ptr<> member in the GLContext class. For now the member
        is only set in GLContextEGL::createWindowContext() and is destroyed
        during the GLContext destruction.

        The local OffscreenContextData class in
        PlatformDisplayWayland::createSharingGLContext() derives from
        GLContext::Data and is used to store the wl_surface and
        EGLNativeWindowType (aka wl_egl_window) objects for offscreen
        GLContexts under the Wayland platform that are used for the sharing
        context and WebGL, effectively avoiding the leak that would further
        propagate problems into the compositor and the graphics library.
        (Such offscreen contexts are actually mimicked via a 1x1px
        wl_egl_window object that acts as a dummy base for the related
        wl_surface object).

        * platform/graphics/GLContext.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::createSharingGLContext):

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

        Make gdk.h inclusion in FontPlatformDataFreeType.cpp properly GTK-specific
        https://bugs.webkit.org/show_bug.cgi?id=149793

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        Instead of including <gdk/gdk.h> header for all platforms but EFL, only
        include it for the GTK platform, since no other platform depends on the
        GDK library.

2015-10-03  Ricky Mondello  <rmondello@apple.com>

        "Plug-in is blocked" message doesn't draw correctly
        https://bugs.webkit.org/show_bug.cgi?id=149741
        <rdar://problem/22920949>

        Patch by Conrad Shultz and Ricky Mondello.

        Reviewed by Anders Carlsson.

        No new tests are added.

        Add PluginData API to check whether a MIME type is supported, regardless of plug-in visibility.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::getWebVisibleMimesAndPluginIndices): Adopt getMimesAndPluginIndiciesForPlugins.
        (WebCore::PluginData::getMimesAndPluginIndices): Added.
        (WebCore::PluginData::getMimesAndPluginIndiciesForPlugins): Essentially factored out of
            getWebVisibleMimesAndPluginIndices.
        (WebCore::PluginData::supportsMimeType): Added. Somewhat similar to preexisting supportsWebVisibleMimeType.
        * plugins/PluginData.h: Declare supportsMimeType.

2015-10-02  Antti Koivisto  <antti@apple.com>

        Inserting a child to a slot assigned node doesn't trigger repaint
        https://bugs.webkit.org/show_bug.cgi?id=149739

        Reviewed by Ryosuke Niwa.

        Test: fast/shadow-dom/insert-child-to-assigned-node.html

        * dom/Node.cpp:
        (WebCore::Node::derefEventTarget):
        (WebCore::traverseStyleParent):
        (WebCore::traverseFirstStyleParent):
        (WebCore::Node::updateAncestorsForStyleRecalc):

            Traverse in style parent order.

2015-10-02  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, rolling out r190520, some tests assert / crash.

        * ForwardingHeaders/heap/HeapObserver.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorHeapAgent.h: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController): Deleted.
        (WebCore::InspectorController::vm): Deleted.
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::vm): Deleted.
        * inspector/WorkerInspectorController.h:

2015-10-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include Garbage Collection Event in Timeline
        https://bugs.webkit.org/show_bug.cgi?id=142510

        Reviewed by Geoffrey Garen.

        Tests: inspector/heap/garbageCollected.html
               inspector/heap/gc.html

        * ForwardingHeaders/heap/HeapObserver.h: Added.
        * ForwardingHeaders/inspector/agents/InspectorHeapAgent.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Forwarding headers.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::vm):
        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::vm):
        * inspector/WorkerInspectorController.h:
        Implement InspectorEnvironment::vm and create a Heap agent for the
        Page inspector controller.

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

        [MSE] Browser crashes when appending invalid data to MSE source buffer
        https://bugs.webkit.org/show_bug.cgi?id=149689

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-stpp-crash.html

        Bail out early (as specced) after disconnecting the SourceBuffer from its MediaSource.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):

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

        ASSERTION FAILED: param >= 0 in AnimationBase::updateStateMachine()
        https://bugs.webkit.org/show_bug.cgi?id=149737
        rdar://problem/19017465

        Reviewed by Dean Jackson.

        CoreAnimation can give us an animation beginTime that is slightly into the future,
        which results in 'param' here being < 0, so relax the assertion slightly.
        
        Fixes lots of assertions running iOS WK2 layout tests.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2015-10-02  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Fix linker warnings.
        https://bugs.webkit.org/show_bug.cgi?id=149754

        Reviewed by Alex Christensen.

        Avoid compiling these files twice, they are already included in
        RenderingAllInOne.cpp.

        * PlatformWinCairo.cmake:

2015-10-02  Alex Christensen  <achristensen@webkit.org>

        Reloading without content blockers doesn't apply to resource loads after the main frame finishes
        https://bugs.webkit.org/show_bug.cgi?id=149430
        rdar://problem/22742222

        Reviewed by Geoffrey Garen.

        Test: http/tests/contentextensions/disable-blocker.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::userContentExtensionsEnabled):
        (WebCore::DocumentLoader::setUserContentExtensionsEnabled):
        Store and use the state of whether content blockers are enabled or not on the DocumentLoader
        so that it stays constant for a document's entire life.  This state comes from the Page when
        making the DocumentLoader in WebKit2.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::removeAllUserContentExtensions):
        (WebCore::UserContentController::processContentExtensionRulesForLoad):
        (WebCore::UserContentController::actionsForResourceLoad):
        * page/UserContentController.h:

2015-10-02  Antoine Quint  <graouts@apple.com>

        popstate is fired at the wrong time on load
        https://bugs.webkit.org/show_bug.cgi?id=94265

        Reviewed by Darin Adler.

        Don't fire popstate event on initial document load

        According to the specification [1], a popstate event should only be fired
        when the document has a "last entry" and the entry being navigated to isn't
        it.  A document is created without a "last entry" and gets one just after
        this check when it is first navigated to, so a popstate should be fired any
        time a document is navigated to except for the first time after it has been
        created.

        Patch adapted from work by jl@opera.com on Blink [2].

        [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#traverse-the-history (step 12-14 in particular)
        [2] https://src.chromium.org/viewvc/blink?revision=165221&view=revision

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

2015-10-02  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Support for Content Alignment in grid layout
        https://bugs.webkit.org/show_bug.cgi?id=145520

        Reviewed by Darin Adler.

        According to CSS Box Alignment specification, Content Distribution
        alignment controls alignment of the box's content within the box. The
        alignment container is the grid container's content box. The alignment
        subjects are the grid tracks.

        This patch implements Grid Layout support for Content Distribution
        alignment along both block/column and inline/row axis, which are handled
        by align-content and justify-content properties respectively.

        This patch provides support for overflow handling, similar to what
        Self Alignment provides with grid items, and both <content-position>
        and <content-distribution> values.

        Baseline Alignment is still missing because it requires some additional
        behavior to be supported on grids before considering its implementation.

        Tests: css3/overwrite-content-alignment.html
               css3/overwrite-self-alignment.html
               fast/css-grid-layout/grid-align-content-distribution-vertical-lr.html
               fast/css-grid-layout/grid-align-content-distribution-vertical-rl.html
               fast/css-grid-layout/grid-align-content-distribution.html
               fast/css-grid-layout/grid-align-content-vertical-lr.html
               fast/css-grid-layout/grid-align-content-vertical-rl.html
               fast/css-grid-layout/grid-align-content.html
               fast/css-grid-layout/grid-content-alignment-overflow.html
               fast/css-grid-layout/grid-content-alignment-with-different-sized-tracks.html
               fast/css-grid-layout/grid-content-alignment-with-span-vertical-lr.html
               fast/css-grid-layout/grid-content-alignment-with-span-vertical-rl.html
               fast/css-grid-layout/grid-content-alignment-with-span.html
               fast/css-grid-layout/grid-justify-content-distribution-vertical-lr.html
               fast/css-grid-layout/grid-justify-content-distribution-vertical-rl.html
               fast/css-grid-layout/grid-justify-content-distribution.html
               fast/css-grid-layout/grid-justify-content-vertical-lr.html
               fast/css-grid-layout/grid-justify-content-vertical-rl.html
               fast/css-grid-layout/grid-justify-content.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        * rendering/RenderGrid.cpp:
        (WebCore::ContentAlignmentData::ContentAlignmentData):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::resolveContentDistributionFallback):
        (WebCore::offsetToStartEdge):
        (WebCore::offsetToEndEdge):
        (WebCore::contentDistributionOffset):
        (WebCore::RenderGrid::computeContentPositionAndDistributionColumnOffset):
        (WebCore::RenderGrid::computeContentPositionAndDistributionRowOffset):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::computePreferredLogicalWidths): Deleted.
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection): Deleted.
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection): Deleted.
        (WebCore::RenderGrid::cachedGridCoordinate): Deleted.
        (WebCore::RenderGrid::rowPositionForChild): Deleted.
        * rendering/RenderGrid.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolvedAlignContentPosition):
        (WebCore::RenderStyle::resolvedAlignContentDistribution):
        (WebCore::RenderStyle::resolvedJustifyContentPosition):
        (WebCore::RenderStyle::resolvedJustifyContentDistribution):
        * rendering/style/RenderStyle.h:

2015-10-02  Dean Jackson  <dino@apple.com>

        Attempted build fix.

        * DerivedSources.make:
        * page/make_settings.pl:
        (printGetterAndSetter):

2015-10-01  Dean Jackson  <dino@apple.com>

        Expose WEBGL_debug_renderer_info
        https://bugs.webkit.org/show_bug.cgi?id=149735
        <rdar://problem/18343500>

        Reviewed by Simon Fraser.

        Take two at landing this.

        Enable the extension that allows content to query
        for the GPUs vendor and details.

        Now that we're enabling this, there was no need for
        the internal setting that identified privileged situations.
        However, since this meant that WEBGL_debug_shaders was
        also exposed, I explicitly disable it since it is
        not yet conformant.

        Test: fast/canvas/webgl/webgl-debug-renderer-info.html
        as well as the general conformance suite.

        * html/canvas/WebGL2RenderingContext.cpp: No need to guard around allowPrivilegedExtensions().
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::allowPrivilegedExtensions): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * page/Settings.in: Remove privilegedWebGLExtensions.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Forbid the translated shader
        extension while it is still buggy.
        (WebCore::Extensions3DOpenGL::supportsExtension):

2015-10-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the #if guard in PointerLockController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=149705

        Reviewed by Gyuyoung Kim.

        * page/PointerLockController.cpp:

2015-10-01  Dean Jackson  <dino@apple.com>

        Rollout r190446 for the moment. It broke the build.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::allowPrivilegedExtensions):
        * html/canvas/WebGLRenderingContextBase.h:
        * page/Settings.in:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Deleted.

2015-10-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, fix build warning after r190434

        Fix error: variable ‘interruption’ set but not used [-Werror=unused-but-set-variable]

        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption):

2015-10-01  Dean Jackson  <dino@apple.com>

        Expose WEBGL_debug_renderer_info
        https://bugs.webkit.org/show_bug.cgi?id=149735
        <rdar://problem/18343500>

        Reviewed by Simon Fraser.

        Enable the extension that allows content to query
        for the GPUs vendor and details.

        Now that we're enabling this, there was no need for
        the internal setting that identified privileged situations.
        However, since this meant that WEBGL_debug_shaders was
        also exposed, I explicitly disable it since it is
        not yet conformant.

        Test: fast/canvas/webgl/webgl-debug-renderer-info.html
        as well as the general conformance suite.

        * html/canvas/WebGL2RenderingContext.cpp: No need to guard around allowPrivilegedExtensions().
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::allowPrivilegedExtensions): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * page/Settings.in: Remove privilegedWebGLExtensions.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Forbid the translated shader
        extension while it is still buggy.
        (WebCore::Extensions3DOpenGL::supportsExtension):

2015-10-01  Eric Carlson  <eric.carlson@apple.com>

        [iOS] AirPlay should not stop when the screen locks
        https://bugs.webkit.org/show_bug.cgi?id=148315
        <rdar://problem/22770703>

        Reviewed by Jer Noble.

        Tested by media/video-interruption-with-resume-allowing-play.html
                  media/video-interruption-with-resume-not-allowing-play.html

        * Modules/webaudio/AudioContext.h: overrideBackgroundPlaybackRestriction -> 
          shouldOverrideBackgroundPlaybackRestriction.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspendPlayback): Fix a typo in the logging.
        (WebCore::HTMLMediaElement::mayResumePlayback): Ditto.
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction): Renamed from
          overrideBackgroundPlaybackRestriction.
        (WebCore::HTMLMediaElement::overrideBackgroundPlaybackRestriction): Deleted.
        * html/HTMLMediaElement.h:

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::stateName):
        (WebCore::interruptionName): New, log the name of the interruption.
        (WebCore::PlatformMediaSession::beginInterruption): Log the interruption type. Don't
          increment the interruption counter if we are going to ignore it. Incorporate logic
          from doInterruption.
        (WebCore::PlatformMediaSession::doInterruption): Deleted.
        (WebCore::PlatformMediaSession::shouldDoInterruption): Deleted.
        (WebCore::PlatformMediaSession::forceInterruption): Deleted.

        * platform/audio/PlatformMediaSession.h: Add SuspendedUnderLock interruption type.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::applicationDidEnterBackground): Call beginInterruption
          when appropriate.

2015-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        Slot elements should support fallback contents
        https://bugs.webkit.org/show_bug.cgi?id=149701

        Reviewed by Antti Koivisto.

        Following discussions on Github discussions [1] [2], we're adding the default rule of `display: contents`
        on slot elements and making slot elements render its children when there are no assigned nodes [3].

        Make these changes by attaching renderers on direct-children of slot elements when there are no assigned
        nodes during render tree construction. Note `display: contents` will be aded in webkit.org/b/149439.

        [1] https://github.com/w3c/webcomponents/issues/317
        [2] https://github.com/w3c/webcomponents/issues/308
        [3] https://github.com/w3c/webcomponents/issues/308#issuecomment-143655347

        Tests: fast/shadow-dom/css-scoping-shadow-slot-fallback.html
               fast/shadow-dom/shadow-layout-after-slot-fallback-changes.html

        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachSlotAssignees):
        (WebCore::Style::detachSlotAssignees):
        (WebCore::Style::resolveSlotAssignees):

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        Latch does not clear when a scroll snap animation is triggered
        https://bugs.webkit.org/show_bug.cgi?id=149681
        <rdar://problem/22733922>

        Reviewed by Simon Fraser.

        Test: tiled-drawing/scrolling/latched-div-with-scroll-snap.html

        The scroll snap animation logic bypasses some of the normal clean-up code used
        for wheel event handling. When this happens, the scroll latching state is not
        cleared. In some cases this "stale" latch state is used when starting a new
        gesture in the same frame. This causes the wrong page element to receive the
        mouse wheel events, and hilarity ensues.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformNotifyIfEndGesture): Clear latched state when
        ending the gesture.

2015-10-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed CMake build fixes.

        * CMakeLists.txt: Match original Windows build flags for WebCoreTest.
        * PlatformAppleWin.cmake: Use the same build defines as the
        original Windows build.

2015-09-30  João Oliveira  <hello@jxs.pt>

        Web Inspector: Adjust font size of Developer Tools using Command,+ or Command,-
        https://bugs.webkit.org/show_bug.cgi?id=149590

        Reviewed by Joseph Pecoraro.

        Patch by João Oliveira and Brian Burg.

        Expose the frontend page's zoom factor so we can implement relative zoom.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::zoomFactor): Added.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * page/Frame.h:
        (WebCore::Frame::pageZoomFactor):

2015-10-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Websites with invalid auth header keep loading forever
        https://bugs.webkit.org/show_bug.cgi?id=149710

        Reviewed by Martin Robinson.

        We don't correctly handle a null realm from the server when
        retrieving and storing credentials from libsecret. First
        secret_attributes_build() fails because we pass a null domain, and
        we pass null attributes to secret_service_search() that returns
        early on a g_return macro and the callback is never called so the
        load doesn't continue after the auth challenge.

        * platform/network/gtk/CredentialBackingStore.cpp:
        (WebCore::createAttributeHashTableFromChallenge):
        (WebCore::CredentialBackingStore::credentialForChallenge):
        (WebCore::CredentialBackingStore::storeCredentialsForChallenge):

2015-10-01  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Refactor binding generator to factor JS DOM class m_impl handling
        https://bugs.webkit.org/show_bug.cgi?id=149660

        Reviewed by Darin Adler.

        Added JSDOMWrapperWithImplementation template class to move m_impl out of the binding generator.
        Updated custom bindings to use impl() instead of m_impl directly.
        Updated binding generator accordingly.

        Covered by existing tests and binding tests.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        (WebCore::JSDOMStringMap::deleteProperty):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapperWithImplementation::impl):
        (WebCore::JSDOMWrapperWithImplementation::~JSDOMWrapperWithImplementation):
        (WebCore::JSDOMWrapperWithImplementation::JSDOMWrapperWithImplementation):
        (WebCore::JSDOMWrapperWithImplementation::releaseImpl):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetParentClassName):
        (GetImplClassName):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject):
        (WebCore::JSTestActiveDOMObject::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (WebCore::JSTestActiveDOMObject::~JSTestActiveDOMObject):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (WebCore::JSTestCustomNamedGetter::~JSTestCustomNamedGetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
        (WebCore::jsTestEventConstructorAttr1): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::~JSTestEventConstructor):
        (WebCore::JSTestEventConstructor::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::JSTestEventTarget):
        (WebCore::JSTestEventTarget::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::~JSTestEventTarget):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::JSTestException):
        (WebCore::JSTestException::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestException::~JSTestException):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable):
        (WebCore::jsTestGenerateIsReachableConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        (WebCore::JSTestGenerateIsReachable::~JSTestGenerateIsReachable):
        (WebCore::JSTestGenerateIsReachable::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::JSTestInterface):
        (WebCore::JSTestInterface::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::jsTestJSBuiltinConstructorConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
        (WebCore::JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::jsTestMediaQueryListListenerConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListener::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
        (WebCore::jsTestNamedConstructorConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::~JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructor::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministic::JSTestNondeterministic):
        (WebCore::jsTestNondeterministicNondeterministicReadonlyAttr): Deleted.
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        (WebCore::JSTestNondeterministic::~JSTestNondeterministic):
        (WebCore::JSTestNondeterministic::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::JSTestObj::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::~JSTestObj):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
        (WebCore::jsTestOverloadedConstructorsConstructor): Deleted.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructors::~JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructors::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        (WebCore::JSTestOverrideBuiltins::~JSTestOverrideBuiltins):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfaceValue): Deleted.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterface::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::JSTestTypedefs):
        (WebCore::JSTestTypedefs::getOwnPropertySlot): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefs::~JSTestTypedefs):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::JSattribute):
        (WebCore::jsattributeReadonly): Deleted.
        * bindings/scripts/test/JS/JSattribute.h:
        (WebCore::JSattribute::~JSattribute):
        (WebCore::JSattribute::finishCreation): Deleted.
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::JSreadonly):
        (WebCore::jsreadonlyConstructor): Deleted.
        * bindings/scripts/test/JS/JSreadonly.h:
        (WebCore::JSreadonly::~JSreadonly):
        (WebCore::JSreadonly::finishCreation): Deleted.

2015-10-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the ARM build after r190192
        https://bugs.webkit.org/show_bug.cgi?id=149620

        Reviewed by Darin Adler.

        * platform/graphics/FontFeatureSettings.h:
        (WebCore::fontFeatureTag):

2015-10-01  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Add support for private WebCore JS builtins functions
        https://bugs.webkit.org/show_bug.cgi?id=149518

        Reviewed by Darin Adler.

        Using ReadableStream tee method as a testbed to add support for private WebCore JS builtins functions.
        Private functions are hooked to JSDOMWindowBase, as it is the one connected to WebCoreClientData.
        WebCoreClientData is responsible to export the private function symbols to the VM.

        Updated generate-js-builtins script to generate a class that can create and own all JS functions.
        This class is used by JSDOMWindowBase to create the JS builtin functions.
        It is also used to manage the GC of these objects.

        Covered by rebased tests.

        * CMakeLists.txt: Adding ReadableStreamInternals builtin files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * Modules/streams/ReadableStream.idl: Adding tee declaration as builtin
        * Modules/streams/ReadableStream.js:
        (tee): Calling @teeReadableStream
        * Modules/streams/ReadableStreamInternals.js: Barebone @teeReadableStream implementation.
        (teeReadableStream):
        * WebCore.vcxproj/WebCore.vcxproj: Adding ReadableStreamInternals builtin files.
        * WebCore.xcodeproj/project.pbxproj: Adding ReadableStreamInternals builtin files.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase): Creating ReadableStreamInternalsBuiltinFunctions object.
        (WebCore::JSDOMWindowBase::finishCreation): Creating builtin functions through ReadableStreamInternalsBuiltinFunctions and registering them to the JS engine.
        (WebCore::JSDOMWindowBase::visitChildren): Ensuring GC does not collect private builtin functions through ReadableStreamInternalsBuiltinFunctions object
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Exporting private names of ReadableStreamInternalsBuiltins
        (WebCore::WebCoreJSClientData::readableStreamBuiltins):
        (WebCore::WebCoreJSClientData::readableStreamInternalsBuiltins):
        * generate-js-builtins: Adding support for ReadableStreamInternalsBuiltinFunctions and exportNames.

2015-10-01  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should make mutable CachedAttribute member fields
        https://bugs.webkit.org/show_bug.cgi?id=148056

        Reviewed by Chris Dumez.

        Making mutable CachedAttribute member fields.
        Removing const_cast from custom binding code.
        Rebased bindings tests.

        No change in behavior.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::cacheState):
        (WebCore::JSPopStateEvent::state):
        * bindings/js/JSReadableStreamReaderEventCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:

2015-10-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Create ByteLengthQueuingStrategy object as per spec
        https://bugs.webkit.org/show_bug.cgi?id=147153

        Reviewed by Darin Adler.

        Added ByteLengthQueuingStream class as the spec defines at https://streams.spec.whatwg.org/#blqs-class.

        Tests are covered by current set.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreJSBuiltins.cpp: Added build instructions.
        * Modules/streams/ByteLengthQueuingStrategy.idl: Added.
        * Modules/streams/ByteLengthQueuingStrategy.js: Copied from Source/WebCore/bindings/js/WebCoreJSBuiltins.cpp.
        (size): Return byteLength attribute of the chunk.
        (initializeByteLengthQueuingStrategy): Initialize the highWaterMark property.
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Initialize the blqs builtins.
        (WebCore::WebCoreJSClientData::byteLengthQueuingStrategyBuiltins): Return the attribute.

2015-10-01  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Clean up all uses of PassRefPtr in Modules/geolocation
        https://bugs.webkit.org/show_bug.cgi?id=149552

        Reviewed by Darin Adler.

        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::GeoNotifier):
        (WebCore::GeoNotifier::setFatalError):
        * Modules/geolocation/GeoNotifier.h:
        (WebCore::GeoNotifier::create):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeoposition):
        (WebCore::createPositionError):
        (WebCore::Geolocation::Watchers::add):
        (WebCore::Geolocation::getCurrentPosition):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::startRequest):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationError.h:
        * Modules/geolocation/GeolocationPosition.h:
        * Modules/geolocation/Geoposition.h:
        (WebCore::Geoposition::create):
        (WebCore::Geoposition::isolatedCopy):
        (WebCore::Geoposition::Geoposition):
        * Modules/geolocation/PositionError.h:
        * Modules/geolocation/PositionOptions.h:

2015-09-30  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][Gtk] Try to fix the build after r190379.
        https://bugs.webkit.org/show_bug.cgi?id=149693

        Reviewed by Gyuyoung Kim.

        * Modules/indexeddb/server/MemoryIDBBackingStore.h:

2015-09-30  Katlyn Graff  <kgraff@apple.com>

        Add support for the imageSmoothingQuality property for CanvasRenderingContext2D.
        https://bugs.webkit.org/show_bug.cgi?id=149541

        Reviewed by Ryosuke Niwa.

        As documented here: https://html.spec.whatwg.org/multipage/scripting.html#image-smoothing
        Exposes the smooothing quality of algorithms used for scaling images. Valid input
        values are low, medium, and high: associated algorithms are expected to vary for
        differing hardware. setImageSmoothingQuality provides a handle into CGInterpolationQuality.

        Test: fast/canvas/canvas-imageSmoothingQuality.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::State::operator=):
        (WebCore::smoothingToInterpolationQuality):
        (WebCore::CanvasRenderingContext2D::imageSmoothingQuality):
        (WebCore::CanvasRenderingContext2D::setImageSmoothingQuality):
        (WebCore::CanvasRenderingContext2D::setImageSmoothingEnabled):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2015-09-30  Dean Jackson  <dino@apple.com>

        GraphicsContext3D::mappedSymbolName should initialize count variable
        https://bugs.webkit.org/show_bug.cgi?id=149692
        <rdar://problem/22871304>

        Reviewed by Simon Fraser.

        While debugging another WebGL issue, I noticed that some
        OpenGL renderers can get into a state where they
        drop resources (e.g. a GPU reset). If we don't detect that
        in time, we might try to ask for the currently attached
        resources and our in-parameter will not be set. In this
        case, initialize it to zero so that we don't do silly things.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::mappedSymbolName): Initialize count to 0.

2015-09-30  Dean Jackson  <dino@apple.com>

        Crash in gleLookupHashObject when context is lost
        https://bugs.webkit.org/show_bug.cgi?id=149690
        <rdar://problem/22751585>
        <rdar://problem/22465495>

        Reviewed by Simon Fraser.

        When we received notification that the GPU has reset,
        we were nulling out and deleting our OpenGL contexts
        and then trying to do it all over again. The fix was
        to flip the order of operations.

        While there I added some logging, and changed the
        way we check GPU status to make sure we do a check
        after the first draw call.

        Unfortunately we can't test automatically because it
        involves resetting the GPU which can possibly cause
        concurrent tests to fail.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Move forceContextLost()
        to be the first thing we do after we've realised we need to
        bail.

2015-09-30  Brady Eidson  <beidson@apple.com>

        Add UniqueIDBDatabase object, IDBBackingStore objects, and a database operation thread.
        https://bugs.webkit.org/show_bug.cgi?id=149678

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/opendatabase-request-event.html

        - UniqueIDBDatabase represents a specific IDB database instance that can have multiple 
          connections to it.
        - IDBBackingStore is an abstract representation of a unique database's backing store, 
          and has a concrete in-memory implementation for now.
        - The database thread exists on IDBServer and is for offloading actual database I/O from 
          the main thread.

        * CMakeLists.txt:

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::isolatedCopy):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::openDatabase):
        (WebCore::IDBClient::IDBConnectionToServer::didOpenDatabase):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::IDBFactory::openInternal):

        * Modules/indexeddb/server/IDBBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h.
        (WebCore::IDBServer::IDBBackingStore::~IDBBackingStore):

        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::IDBServer::getOrCreateUniqueIDBDatabase):
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::openDatabase):
        (WebCore::IDBServer::IDBServer::deleteDatabase):
        (WebCore::IDBServer::IDBServer::postDatabaseTask):
        (WebCore::IDBServer::IDBServer::postDatabaseTaskReply):
        (WebCore::IDBServer::IDBServer::databaseThreadEntry):
        (WebCore::IDBServer::IDBServer::databaseRunLoop):
        (WebCore::IDBServer::IDBServer::handleTaskRepliesOnMainThread):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/IDBServerOperation.cpp: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h.
        (WebCore::IDBServer::IDBServerOperation::create):
        (WebCore::IDBServer::IDBServerOperation::IDBServerOperation):
        * Modules/indexeddb/server/IDBServerOperation.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBServer.h.
        (WebCore::IDBServer::IDBServerOperation::connection):
        (WebCore::IDBServer::IDBServerOperation::requestData):

        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp.
        (WebCore::IDBServer::MemoryIDBBackingStore::create):
        (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::~MemoryIDBBackingStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::getOrEstablishDatabaseInfo):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp: Added.
        (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
        (WebCore::IDBServer::UniqueIDBDatabase::openDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabase::handleOpenDatabaseOperations):
        (WebCore::IDBServer::UniqueIDBDatabase::openBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didOpenBackingStore):
        * Modules/indexeddb/server/UniqueIDBDatabase.h: Copied from Source/WebCore/Modules/indexeddb/server/IDBServer.h.
        (WebCore::IDBServer::UniqueIDBDatabase::create):

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h.
        (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):
        (WebCore::IDBDatabaseInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBDatabaseInfo.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h.
        (WebCore::IDBDatabaseInfo::IDBDatabaseInfo):

        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::didDeleteDatabase):
        (WebCore::InProcessIDBServer::openDatabase):
        (WebCore::InProcessIDBServer::didOpenDatabase):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

        * WebCore.xcodeproj/project.pbxproj:

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBDatabaseInfo>::copy):
        (WebCore::IDBDatabaseIdentifier>::copy):
        * platform/CrossThreadCopier.h:

2015-09-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash when using an SVG font with > 390 glyphs
        https://bugs.webkit.org/show_bug.cgi?id=149677
        <rdar://problem/21676402>

        Reviewed by Simon Fraser.

        The "Charset Index" in OTF are indices into a collection of strings. There are
        390 predefined strings in this collection. We were currently assigning each
        glyph to one of these strings. However, if there are more glyphs than strings,
        we will be using invalid indices.

        The values of the strings themselves are not necessary for SVG fonts. Therefore,
        the solution is to create a single dummy string, and have all glyphs target it.

        Tests: svg/custom/many-glyphs.svg

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendCFFTable):

2015-09-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r188331: "NetworkProcess: DNS prefetch happens in the Web Process"
        <rdar://problem/22560715>

        Speculative roll out of r188331 as we had a ~2.5% PLT regression around
        the time it landed and it seems the most likely culprit. I'll reland if
        the perf bots do not recover after the roll out.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * loader/FrameLoaderClient.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):

2015-09-30  Timothy Horton  <timothy_horton@apple.com>

        Compute document marker rects at use time instead of paint time
        https://bugs.webkit.org/show_bug.cgi?id=149643

        Reviewed by Darin Adler.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::DocumentMarkerController):
        (WebCore::DocumentMarkerController::detach):
        Store and zero the Document backpointer.

        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        Remove some useless comments.

        (WebCore::updateRenderedRectsForMarker):
        Use Range to compute the (unclipped, absolute) text rects, and store them
        on the RenderedDocumentMarker.

        (WebCore::DocumentMarkerController::invalidateRectsForAllMarkers):
        (WebCore::DocumentMarkerController::invalidateRectsForMarkersInNode):
        Mark the relevant markers' rects as invalid, and notify the ChromeClient.

        (WebCore::DocumentMarkerController::updateRectsForInvalidatedMarkersOfType):
        Run through all markers, computing rects for ones that don't have valid rects.
        We will do layout (once) if necessary. However, this is most commonly
        called from a place where layout should already be up to date, so this
        should not happen often. updateRenderedRectsForMarker also asserts
        that layout is up to date.

        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        Retrieve all markers of the given type, clip them by overflow clip and
        frame clip, and return them to the caller.

        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersFor):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (DocumentMarkerController::setMarkersActive):
        (DocumentMarkerController::hasMarkers):
        Modern iteration.
        
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect): Deleted.
        * dom/DocumentMarkerController.h:

        * dom/Document.cpp:
        (WebCore::Document::Document):
        Pass the Document to the DocumentMarkerController.

        * dom/RenderedDocumentMarker.h:
        (WebCore::RenderedDocumentMarker::contains):
        (WebCore::RenderedDocumentMarker::setUnclippedAbsoluteRects):
        (WebCore::RenderedDocumentMarker::unclippedAbsoluteRects):
        (WebCore::RenderedDocumentMarker::invalidate):
        (WebCore::RenderedDocumentMarker::isValid):
        (WebCore::RenderedDocumentMarker::addRenderedRect): Deleted.
        (WebCore::RenderedDocumentMarker::renderedRects): Deleted.
        Instead of keeping "rendered" rects, keep unclipped rects in absolute
        document coordinates. Invalidation will happen wholesale instead of
        based on dirty rects, because computation no longer happens at paint
        time, so it's safe to throw all of the rects away.
        Keep track of whether we have valid rects or not.

        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        We don't need to do a fake whole-document paint just to compute the
        document marker rects. They are computed on demand, using layout information
        instead of paint-time information.

        * page/ChromeClient.h:
        Remove an unnecessary semicolon.
        Add didInvalidateDocumentMarkerRects, which DocumentMarkerController
        will call whenever document marker rects are invalidated (and when e.g.
        the find holes PageOverlay should repaint itself).

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        Invalidate document marker's layout-computed rects after layout is complete.
        They'll be lazily recomputed when next requested.

        (WebCore::FrameView::willPaintContents):
        Remove the pre-painting invalidation of document marker rects.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDocumentMarker): Deleted.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Deleted.
        (WebCore::InlineTextBox::paintDocumentMarkers): Deleted.
        Don't bother computing rendered rects for document markers at paint time.
        Just do the actual painting work (which, for replacement markers, is
        nothing at all).

        * rendering/InlineTextBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        When RenderLayers move, invalidate document marker rects.

        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer): Deleted.
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        Don't bother computing rendered rects for document markers at paint time.

        * testing/Internals.cpp:
        (WebCore::markerTypeFrom):
        (WebCore::markerTypesFrom):
        Add markerTypeFrom, which returns MarkerType enum values for the input string
        instead of a MarkerTypes class.

        (WebCore::Internals::dumpMarkerRects):
        Dump all markers for the given type, and request them from DocumentMarkerController
        instead of from the RenderedDocumentMarker, because we want fully clipped
        rects, which can only be obtained from DocumentMarkerController.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::getTextRectangles):
        Avoid enclosing unnecessarily, to avoid inflating zero-width text rects
        to have a non-zero width. Callers appear to be OK with non-integral positions.

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

2015-09-30  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r190262): User media unit test failures after r190262
        https://bugs.webkit.org/show_bug.cgi?id=149580

        Reviewed by Darin Adler.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::getStats): Drive-by fix to deal with optional param.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::constraintsValidated): Swap the track parameter order.
        * Modules/mediastream/UserMediaRequest.h:

        * platform/mediastream/MediaStreamCreationClient.h:
        (WebCore::MediaStreamCreationClient::validateRequestConstraints): Swap the track parameter order.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints): If there is no 
          constraint for a media type, don't return a device of that type.

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable): Ditto.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints): Ditto.

        * platform/mock/TimerEventBasedMock.h:
        (WebCore::TimerEvent::~TimerEvent): Clear the m_mock pointer.

        * platform/mock/UserMediaClientMock.h:
        (WebCore::UserMediaClientMock::fire): Deal with empty device vectors.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Don't register UserMediaController, it isn't needed for
          WKTR.

2015-09-29  Antti Koivisto  <antti@apple.com>

        Use separate style resolver for user agent shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=149626

        Reviewed by Andreas Kling.

        We now support separate style resolvers for shadow trees. Use this mechanism to have a separate
        per-document style resolver for user agent shadow trees. This isolates user agent shadow trees
        from author style better and simplifies the style resolver. It can also avoid some unnecessary style recalcs.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):

            Change interface so that only the new rules are provided.

        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addElementStyleProperties):
        (WebCore::ElementRuleCollector::collectMatchingRules):

            We can remove special bailout as shadow tree style resolver won't have other author style

        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):

            Remove the exception that disables property whitelists for UA stylesheets. We don't seem to use the feature.

        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::MatchingUARulesScope::MatchingUARulesScope): Deleted.
        (WebCore::MatchingUARulesScope::~MatchingUARulesScope): Deleted.
        (WebCore::MatchingUARulesScope::isMatchingUARules): Deleted.

            Remove this unnecessary hack.

        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addStyleRule):
        (WebCore::RuleSet::copyShadowPseudoElementRulesFrom):

            Also copy WebVTT rules. They are currently a sort of mixture of UA and author shadow tree.

        (WebCore::shrinkMapVectorsToFit):
        * css/RuleSet.h:
        (WebCore::RuleData::containsUncommonAttributeSelector):
        (WebCore::RuleData::linkMatchType):
        (WebCore::RuleData::hasDocumentSecurityOrigin):
        (WebCore::RuleData::propertyWhitelistType):
        (WebCore::RuleData::descendantSelectorIdentifierHashes):
        (WebCore::RuleSet::ruleCount):
        (WebCore::RuleSet::hasShadowPseudoElementRules):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        (WebCore::StyleInvalidationAnalysis::invalidateIfNeeded):

            Don't invalidate the whole tree when author shadow pseudo element rules change. Just invalidate the shadow trees.

        (WebCore::StyleInvalidationAnalysis::invalidateStyleForTree):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        (WebCore::invalidateIfNeeded): Deleted.
        (WebCore::invalidateStyleForTree): Deleted.
        * css/StyleInvalidationAnalysis.h:
        (WebCore::StyleInvalidationAnalysis::dirtiesAllStyle):
        (WebCore::StyleInvalidationAnalysis::hasShadowPseudoElementRulesInAuthorSheet):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets):

            Simpler interface.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::document):
        (WebCore::StyleResolver::documentSettings):
        (WebCore::StyleResolver::ruleSets):
        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::collectActiveStyleSheets):
        (WebCore::AuthorStyleSheets::analyzeStyleSheetChange):

            Cleanups.

        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):
        (WebCore::AuthorStyleSheets::updateStyleResolver):

            Factor to a function.
            Copy any author shadow pseudo elements to user agent shadow tree resolver.

        (WebCore::AuthorStyleSheets::activeStyleSheetsForInspector):
        * dom/AuthorStyleSheets.h:
        * dom/Document.cpp:
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::userAgentShadowTreeStyleResolver):

            Use separate resolver.

        (WebCore::Document::fontsNeedUpdate):
        (WebCore::Document::clearStyleResolver):
        * dom/Document.h:
        (WebCore::Document::ensureStyleResolver):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::styleResolver):

            Return document-global shadow tree resolver for ua trees.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveShadowTree):

            Take styleChange of shadow root into account.

2015-09-30  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Support HiDPI Properly in WebKitGtk+ with the TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=141782

        Reviewed by Carlos Garcia Campos.

        This patch fixes HiDPI issue in the TextureMapper.
        To support HiDPI in the TextureMapper, we need to draw scaled contents
        in the TextureMapperTile, and apply the global scale in the root layer
        to apply transforms correctly.

        Supporting the device scale is handled at LayerTreeHostGtk and
        TextureMapperBackingStore, and GraphicsLayerTextureMapper doesn't handle
        the device scale directly.

        From the TextureMapperLayer, deviceScale and pageScale do not have to be
        handled differently. These are multiplied and provided to
        TextureMapperBackingStore.

        * platform/graphics/texmap/TextureMapperTile.cpp:
        (WebCore::TextureMapperTile::updateContents):
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:

            Modified to increase the cover rect for tiles creation. For the image
            contents, it just creates texture with a image size, regardless of the
            contents scale.

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

            Apply the device scale to the graphics context before painting contents.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToImage):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):

            Apply the device scale and the page scale to the backing store

2015-09-29  Ryosuke Niwa  <rniwa@webkit.org>

        ASSERTION FAILED: !isUnreachableNode(m_target.get()) when hovering over any input element
        https://bugs.webkit.org/show_bug.cgi?id=149589

        Reviewed by Darin Adler.

        The bug was caused by target not being reset across shadow boundary when SHADOW_DOM was disabled.

        No new tests since exiting tests cover this in debug builds. e.g. editing/deleting/5290534.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::EventPath):

2015-09-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Avoid reparsing an XSLT stylesheet after the first failure.
        https://bugs.webkit.org/show_bug.cgi?id=149188
        <rdar://problem/22709912>

        Reviewed by Dave Hyatt.

        Patch by Jiewen Tan, jiewen_tan@apple.com.

        Test: svg/custom/invalid-xslt-crash.svg

        * xml/XSLStyleSheet.h:
        Add a new member variable m_compilationFailed that tracks whether
        compilation has failed. Default value is false.

        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::compileStyleSheet):
        Return early if the compilation has failed before. After compiling the
        style sheet, if we failed, set m_compilationFailed to true.

2015-09-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/loader.
        https://bugs.webkit.org/show_bug.cgi?id=149397

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::parseAccessControlExposeHeadersAllowList):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::detachChildren):
        (WebCore::FrameLoader::shouldClose):
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::currentFramesMatchItem):
        * loader/SubframeLoader.cpp:
        (WebCore::findPluginMIMETypeFromURL):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        (WebCore::ApplicationCache::urlMatchesFallbackNamespace):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::stopDeferringEvents):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::StorageIDJournal::~StorageIDJournal):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/archive/Archive.cpp:
        (WebCore::Archive::clearAllSubframeArchivesImpl):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::generateMHTMLData):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::switchClientsToRevalidatedResource):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResources):
        (WebCore::CachedResourceLoader::isPreloaded):
        (WebCore::CachedResourceLoader::printPreloadStats):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::notifyPendingLoadDecisions):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::writeToDatabase):

2015-09-29  Chris Dumez  <cdumez@apple.com>

        sectionRowIndex must return -1 when its parent is not a table, tbody, thead, or tfoot
        https://bugs.webkit.org/show_bug.cgi?id=148841
        <rdar://problem/22586870>

        Reviewed by Ryosuke Niwa.

        Update HTMLTableRowElement.sectionRowIndex to match the specification:
        https://html.spec.whatwg.org/multipage/tables.html#dom-tr-sectionrowindex

        In particular, it now returns -1 if the parent is not a table, tbody,
        thead and tfoot.

        No new tests, already covered by existing test.

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::sectionRowIndex):

2015-09-29  Daniel Bates  <dabates@apple.com>

        Make WebKit for iOS Simulator build with the public iOS 9 SDK
        https://bugs.webkit.org/show_bug.cgi?id=149652

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj: Add private header pthreadSPI.h. Also move entry for IDBTransaction.h so that it is in sorted order.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Substitute AVPlayerViewControllerDelegate_WebKitOnly for AVPlayerViewControllerDelegate.
        * platform/spi/cocoa/AVKitSPI.h: As of iOS 9, AVPlayerViewControllerDelegate is a public protocol. Separate out WebKit-specific SPI into protocol
        AVPlayerViewControllerDelegate_WebKitOnly, which extends AVPlayerViewControllerDelegate. Also, the properties -[AVPlayerViewController allowsPictureInPicturePlayback] and -[AVPlayerViewController delegate] are public in iOS 9.
        * platform/spi/cocoa/pthreadSPI.h: Added.
        * platform/spi/ios/LaunchServicesSPI.h: Add more SPI.
        * platform/spi/ios/MediaPlayerSPI.h: Ignore deprecation warnings for UIPopoverController and UIActionSheet.

2015-09-29  Brady Eidson  <beidson@apple.com>

        Followup to "Move WebKit2 AsyncTask to WebCore CrossThreadTask."
        https://bugs.webkit.org/show_bug.cgi?id=149651

        Rubberstamped by Alex Christensen.

        No new tests (No change in behavior).

        * platform/CrossThreadTask.h: Now in WebCore, use the WebCore namespace.

2015-09-29  Brady Eidson  <beidson@apple.com>

        Move WebKit2 AsyncTask to WebCore CrossThreadTask.
        https://bugs.webkit.org/show_bug.cgi?id=149651

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).
        
        It will be needed in WebCore to support IndexedDB.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/CrossThreadTask.h: Renamed from Source/WebKit2/Shared/AsyncTask.h.
        (WebKit::CrossThreadTask::CrossThreadTask):
        (WebKit::CrossThreadTask::performTask):
        (WebKit::createCrossThreadTask):

2015-09-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Snap offsets should update when style is programmatically changed
        https://bugs.webkit.org/show_bug.cgi?id=135964
        <rdar://problem/18162411>

        Reviewed by Darin Adler.

        Tests:  css3/scroll-snap/scroll-snap-style-changed-coordinates.html
                css3/scroll-snap/scroll-snap-style-changed-repeat.html

        Updating scroll snap style properties now programmatically updates the scroll snap container. Does not yet
        handle the case of reparented elements with scroll snap coordinates. Adds some plumbing the FrameView and
        RenderLayerCompositor to immediately update the scrolling coordinator when updating the FrameView due to
        style changes.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScrollingCoordinatorScrollSnapProperties): Calls on the compositor to reupdate scroll snap
            properties on the FrameView.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp: Sets snap offsets to an empty vector when appropriate.
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat): Ditto.
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Ditto.
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Ditto.
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapPropertiesWithFrameView): Updates scroll snap properties
            from a given FrameView.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateScrollSnapPropertiesWithFrameView):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollSnapPropertiesWithFrameView): Updates the scrolling coordinator's
            scroll snap properties.
        * rendering/RenderLayerCompositor.h: Plumb scroll snap property updating to the FrameView.
        * rendering/RenderLayerModelObject.cpp: Checks for style changes and updates snap offsets when appropriate.
        (WebCore::scrollSnapContainerRequiresUpdateForStyleUpdate): Ditto.
        (WebCore::RenderLayerModelObject::styleDidChange): Ditto.

2015-09-29  Jer Noble  <jer.noble@apple.com>

        REGRESSION: WebAudio user-gesture restriction is no longer lifted by touchstart event
        https://bugs.webkit.org/show_bug.cgi?id=149367

        Reviewed by Eric Carlson.

        Use processingUserGestureForMedia() rather than processingUserGesture(),
        as the former includes touchstart and the latter does not.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::willBeginPlayback):
        (WebCore::AudioContext::willPausePlayback):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted):
        (WebCore::MediaElementSession::dataLoadingPermitted):
        (WebCore::MediaElementSession::fullscreenPermitted):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):

2015-09-29  Ryosuke Niwa  <rniwa@webkit.org>

        Update style/layout when a slot is added or removed
        https://bugs.webkit.org/show_bug.cgi?id=149593

        Reviewed by Antti Koivisto.

        Fixed the bug by forcing the render tree reconstruction on the shadow host when a slot is inserted or removed.
        We should optimize these reconstructions by only triggering them on the affected slot elements in the future.

        Also fixed a bug that we were not invalidating the slot assignments when a default slot is introduced dynamically
        after the slot assignment algorithm had run.

        Test (existing): fast/shadow-dom/shadow-layout-after-slot-changes.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::addSlotElementByName): Passes in ShadowRoot.
        (WebCore::ShadowRoot::removeSlotElementByName): Ditto.
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName): Call setNeedsStyleRecalc.
        (WebCore::SlotAssignment::removeSlotElementByName): Call setNeedsStyleRecalc if the host is still alive since this
        function can be called while the host is being destructed in which case shadowRoot.host() would be nullptr.
        * dom/SlotAssignment.h:

2015-09-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Improve binding of JSBuiltinConstructor classes
        https://bugs.webkit.org/show_bug.cgi?id=149556

        Reviewed by Darin Adler.

        JSBuiltinConstructor classes no longer need definition of a DOM class.
        These classes no longer go through the JS wrapper cache.
        Removed code related to DOM class handling (m_impl, releaseImpl, WrapperOwner, toJS, ...)
        Updated creation code.

        Refactoring of the binding generator code to simplify whether generating or not some methods.

        Removed unneeded include of DOM class in JSXX.cpp (already done in JSXX.h)

        Added new binding test to cover JSBuiltinConstructor keyword.

        Covered by binding tests.

        * bindings/js/JSDOMBinding.h:
        (WebCore::createJSBuiltin):
        (WebCore::DOMConstructorObject::createStructure):.
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsImplementationClass):
        (ShouldGenerateToWrapped):
        (ShouldGenerateWrapperOwnerCode):
        (ShouldGenerateToJSDeclaration):
        (ShouldGenerateToJSImplementation):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateConstructorDefinition):
        (ComputeFunctionSpecial):.
        (UseJSBuiltins):.
        * bindings/scripts/test/GObject/WebKitDOMTestJSBuiltinConstructor.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestJSBuiltinConstructor):
        (webkit_dom_test_js_builtin_constructor_finalize):
        (webkit_dom_test_js_builtin_constructor_constructor):
        (webkit_dom_test_js_builtin_constructor_class_init):
        (webkit_dom_test_js_builtin_constructor_init):
        * bindings/scripts/test/GObject/WebKitDOMTestJSBuiltinConstructor.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestJSBuiltinConstructorPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp: Added.
        (WebCore::JSTestJSBuiltinConstructorPrototype::create):
        (WebCore::JSTestJSBuiltinConstructorPrototype::createStructure):
        (WebCore::JSTestJSBuiltinConstructorPrototype::JSTestJSBuiltinConstructorPrototype):
        (WebCore::JSTestJSBuiltinConstructorConstructor::create):
        (WebCore::JSTestJSBuiltinConstructorConstructor::createStructure):
        (WebCore::JSTestJSBuiltinConstructorConstructor::constructJSTestJSBuiltinConstructor):
        (WebCore::JSTestJSBuiltinConstructorConstructor::JSTestJSBuiltinConstructorConstructor):
        (WebCore::JSTestJSBuiltinConstructorConstructor::finishCreation):
        (WebCore::JSTestJSBuiltinConstructorConstructor::getConstructData):
        (WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation):
        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor):
        (WebCore::JSTestJSBuiltinConstructor::createPrototype):
        (WebCore::JSTestJSBuiltinConstructor::getPrototype):
        (WebCore::JSTestJSBuiltinConstructor::destroy):
        (WebCore::JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor):
        (WebCore::jsTestJSBuiltinConstructorConstructor):
        (WebCore::JSTestJSBuiltinConstructor::getConstructor):
        (WebCore::JSTestJSBuiltinConstructor::visitChildren):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h: Added.
        (WebCore::JSTestJSBuiltinConstructor::create):
        (WebCore::JSTestJSBuiltinConstructor::createStructure):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructor.h: Added.
        * bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructor.mm: Added.
        (-[DOMTestJSBuiltinConstructor dealloc]):
        (-[DOMTestJSBuiltinConstructor finalize]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestJSBuiltinConstructorInternal.h: Added.
        * bindings/scripts/test/TestJSBuiltinConstructor.idl: Added.

2015-09-29  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] [Win] Remove reference to dead CountQueuingStrategy.h
        https://bugs.webkit.org/show_bug.cgi?id=149623

        Reviewed by Darin Adler.

        No new tests needed.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2015-09-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Build WebCore JS Builtins according the ENABLE flags
        https://bugs.webkit.org/show_bug.cgi?id=149624

        Reviewed by Csaba Osztrogonác.

        Created WebCoreJSBuiltins.cpp to include all JSXXBuiltins.cpp files with the right #ifdef.
        Added WebCoreJSBuiltins.cpp to CMake, win and mac build systems.

        No change in behavior.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreJSBuiltins.cpp: Added.

2015-09-29  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Flex tracks sizing alg must handle 0fr values
        https://bugs.webkit.org/show_bug.cgi?id=148944

        Reviewed by Darin Adler.

        We don't allow 0 as flexible size value, which is not following current
        specs; it just states that it must be a positive value. This patch
        adds such change in the parser but some additional logic must be added
        as well to handle 0 values during the flex tracks sizing algorithm.

        The old algorithm didn't take 0 values into account, so there is the risk
        of division by zero. Additionally, it was not handling fraction values
        in the best way. The last versions of the spec changed this algorithm in
        order to handle fraction values so that they don't cause exponential
        grow of tracks using values bigger than 1.

        This patch implements also such new algorithm, so we can deal not only
        with 0 values, but managing fraction values properly.

        No new tests, just some additional test cases and some of them rebaselined.

        * rendering/RenderGrid.cpp:
        (WebCore::normalizedFlexFraction):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeFlexFactorUnitSize): Added.
        (WebCore::RenderGrid::findFlexFactorUnitSize): Added.
        (WebCore::RenderGrid::GridTrackForNormalization): Deleted.
        (WebCore::RenderGrid::computeNormalizedFractionBreadth): Deleted.
        * rendering/RenderGrid.h:

2015-09-29  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the broken !ENABLE(STREAM_API) build
        https://bugs.webkit.org/show_bug.cgi?id=149525

        Reviewed by Darin Adler.

        * bindings/js/WebCoreJSClientData.h: Revert r190225.


2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::beginAndComputePageRectsWithPageSize):
        Helper function to share common code from numberOfPages() and
        spoolAllPagesWithBoundaries().
        (WebCore::PrintContext::numberOfPages): Use beginAndComputePageRectsWithPageSize().
        (WebCore::PrintContext::spoolAllPagesWithBoundaries): Use
        beginAndComputePageRectsWithPageSize() and don't flip the Y axis
        for non Cocoa platforms.
        * page/PrintContext.h:

2015-09-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Add support for WebIDL JSBuiltin attributes
        https://bugs.webkit.org/show_bug.cgi?id=149554

        Reviewed by Darin Adler.

        Covered by bindings tests.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Disabled GObject binding generation of JSBuiltin attribute.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetAttributeGetterName): Handling of Builtin function to retrieve BuiltinGenerator.
        (GetAttributeSetterName): Ditto.
        (GenerateAttributesHashTable): Set JSBuiltin attributes as "Accessor | Builtin".
        (GenerateImplementation): Skip implementation for JSBuiltin attributes
        * bindings/scripts/test/JS/JSTestObj.cpp: Adding binding test for JSBuiltin attributes.
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj jsBuiltinAttribute]):
        (-[DOMTestObj setJsBuiltinAttribute:]):
        (-[DOMTestObj jsBuiltinReadOnlyAttribute]):
        * bindings/scripts/test/TestObj.idl: Ditto.

2015-09-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Fix build after r190295.

        * PlatformWin.cmake: Add missing Forwarding Header.

2015-09-28  Brady Eidson  <beidson@apple.com>

        Add an IDB Server that can roundtrip a request back to the client.
        https://bugs.webkit.org/show_bug.cgi?id=149603

        Reviewed by NOBODY (Build fix).

        * Modules/indexeddb/IDBRequest.h: Remove unneeded #include, fixing the WK/WK2 builds.

2015-09-28  Brent Fulgham  <bfulgham@apple.com>

        Expose 'geometryFlipped' state for debugging/logging purposes
        https://bugs.webkit.org/show_bug.cgi?id=149557

        Reviewed by Simon Fraser.

        No new tests: No new behavior.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::geometryFlipped): Added.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::geometryFlipped): Added.
        (printLayer): Log flipped state of geometry.
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2015-09-28  Brady Eidson  <beidson@apple.com>

        Add an IDB Server that can roundtrip a request back to the client.
        https://bugs.webkit.org/show_bug.cgi?id=149603

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/deletedatabase-request-event.html

        This is a critical piece of IDB infrastructure that:
        - Puts a database client/server divide in place.
        - Client synchronously sends requests to the server, and asynchronously receives a response back from it.
        - Introduces a class structure that makes it easy for WebKit2 to add a thin layer to replace the 
          in-process server with an out-of-process server.

        To allow for the most basic of tests, the "delete database" request is hard coded as always failing 
        with an indeterminate error.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::debugString):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:

        * Modules/indexeddb/client/IDBConnectionToServer.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp.
        (WebCore::IDBClient::IDBConnectionToServer::create):
        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
        (WebCore::IDBClient::IDBConnectionToServer::identifier):
        (WebCore::IDBClient::IDBConnectionToServer::deleteDatabase):
        (WebCore::IDBClient::IDBConnectionToServer::didDeleteDatabase):

        * Modules/indexeddb/client/IDBConnectionToServer.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        (WebCore::IDBClient::IDBConnectionToServerDelegate::~IDBConnectionToServerDelegate):

        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::IDBFactory::create):
        (WebCore::IDBClient::IDBFactory::IDBFactory):
        (WebCore::IDBClient::IDBFactory::openInternal):
        (WebCore::IDBClient::IDBFactory::deleteDatabase):
        * Modules/indexeddb/client/IDBFactoryImpl.h:

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBOpenDBRequest::createDeleteRequest):
        (WebCore::IDBClient::IDBOpenDBRequest::createOpenRequest):
        (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):
        (WebCore::IDBClient::IDBOpenDBRequest::~IDBOpenDBRequest):
        (WebCore::IDBClient::IDBOpenDBRequest::requestCompleted):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h:
        (WebCore::IDBClient::IDBOpenDBRequest::databaseIdentifier):
        (WebCore::IDBClient::IDBOpenDBRequest::version):
        (WebCore::IDBClient::IDBOpenDBRequest::create): Deleted.

        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::enqueueEvent):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        (WebCore::IDBClient::IDBRequest::requestIdentifier):

        * Modules/indexeddb/server/IDBConnectionToClient.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp.
        (WebCore::IDBServer::IDBConnectionToClient::create):
        (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient):
        (WebCore::IDBServer::IDBConnectionToClient::identifier):
        (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase):
        * Modules/indexeddb/server/IDBConnectionToClient.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        (WebCore::IDBServer::IDBConnectionToClientDelegate::~IDBConnectionToClientDelegate):

        * Modules/indexeddb/server/IDBServer.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.cpp.
        (WebCore::IDBServer::IDBServer::create):
        (WebCore::IDBServer::IDBServer::IDBServer):
        (WebCore::IDBServer::IDBServer::registerConnection):
        (WebCore::IDBServer::IDBServer::unregisterConnection):
        (WebCore::IDBServer::IDBServer::deleteDatabase):
        * Modules/indexeddb/server/IDBServer.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.

        * Modules/indexeddb/shared/IDBError.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp.
        (WebCore::idbExceptionEntry):
        (WebCore::IDBError::IDBError):
        (WebCore::IDBError::operator=):
        (WebCore::IDBError::name):
        (WebCore::IDBError::message):
        * Modules/indexeddb/shared/IDBError.h: Copied from Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.cpp.
        (WebCore::IDBError::IDBError):
        (WebCore::IDBError::isNull):

        * Modules/indexeddb/shared/IDBRequestData.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp.
        (WebCore::IDBRequestData::IDBRequestData):
        * Modules/indexeddb/shared/IDBRequestData.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        (WebCore::IDBRequestData::requestIdentifier):
        (WebCore::IDBRequestData::databaseIdentifier):

        * Modules/indexeddb/shared/IDBRequestIdentifier.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.cpp.
        (WebCore::nextRequestNumber):
        (WebCore::IDBRequestIdentifier::IDBRequestIdentifier):
        (WebCore::IDBRequestIdentifier::emptyValue):
        (WebCore::IDBRequestIdentifier::deletedValue):
        (WebCore::IDBRequestIdentifier::isHashTableDeletedValue):
        * Modules/indexeddb/shared/IDBRequestIdentifier.h: Added.
        (WebCore::IDBRequestIdentifier::isEmpty):
        (WebCore::IDBRequestIdentifier::hash):
        (WebCore::IDBRequestIdentifier::operator==):
        (WebCore::IDBRequestIdentifier::connectionIdentifier):
        (WebCore::IDBRequestIdentifierHash::hash):
        (WebCore::IDBRequestIdentifierHash::equal):
        (WebCore::IDBRequestIdentifierHashTraits::emptyValue):
        (WebCore::IDBRequestIdentifierHashTraits::isEmptyValue):
        (WebCore::IDBRequestIdentifierHashTraits::constructDeletedValue):
        (WebCore::IDBRequestIdentifierHashTraits::isDeletedValue):

        * Modules/indexeddb/shared/IDBResultData.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp.
        (WebCore::IDBResultData::IDBResultData):
        * Modules/indexeddb/shared/IDBResultData.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBOpenDBRequestImpl.h.
        (WebCore::IDBResultData::requestIdentifier):
        (WebCore::IDBResultData::error):

        * Modules/indexeddb/shared/InProcessIDBServer.cpp: Added.
        (WebCore::InProcessIDBServer::create):
        (WebCore::InProcessIDBServer::InProcessIDBServer):
        (WebCore::InProcessIDBServer::identifier):
        (WebCore::InProcessIDBServer::connectionToServer):
        (WebCore::InProcessIDBServer::connectionToClient):
        (WebCore::InProcessIDBServer::deleteDatabase):
        (WebCore::InProcessIDBServer::didDeleteDatabase):
        * Modules/indexeddb/shared/InProcessIDBServer.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBRequestImpl.h.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * loader/EmptyClients.cpp:

        * page/DatabaseProvider.h:

        * page/Page.cpp:
        (WebCore::Page::idbConnection):
        * page/Page.h:

        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::debugString):
        * page/SecurityOriginData.h:

2015-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        relatedNode should be retargeted respecting slots
        https://bugs.webkit.org/show_bug.cgi?id=149591

        Reviewed by Antti Koivisto.

        This patch retargets relatedNode with respect to shadow boundaries after r190214 as specified in
        https://w3c.github.io/webcomponents/spec/shadow/#retargeting-relatedtarget

        Naively implementing the spec'ed behavior can result in O(n^2) behavior since we need to find the common tree scope
        ancestor for each target in the event path. This patch avoids this by implementing an O(1) incremental update step
        for when target's tree scope changes in the event path. See the description for moveToNewTreeScope below.

        Test: fast/shadow-dom/event-with-related-target.html

        * dom/EventContext.h: Replaced toMouseOrFocusEventContext by downcast<MouseOrFocusEventContext>.
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver): Removed the code for relatedNode. This class is now only used for touch events.
        (WebCore::EventPath): Added m_event as a member variable.

        (WebCore::RelatedNodeRetargeter): Added.

        (WebCore::RelatedNodeRetargeter::RelatedNodeRetargeter): Does the initial retargeting of relatedNode. When the
        tree scope of relatedNode and the target are the same, we immediately exit without collecting ancestor tree scopes
        of relatedNode as an optimization. We also special case when the relatedNode and the target are in two different
        documents (relatedNode should be nullptr) and when one is in document and the other one is not in the document
        (relatedNode should be the host of the outermost shadow root). Otherwise we have to do the real work by collecting
        all tree scope ancestors and walking downwards from the document tree scope (note target and relatedNode share the
        same document scope here since we would have exited early otherwise).

        (WebCore::RelatedNodeRetargeter::currentNode): Returned relatedNode retargeted for the current tree scope.

        (WebCore::RelatedNodeRetargeter::moveToNewTreeScope): Moves to a new tree scope. If the original target and
        relatedNode were in different trees, there is nothing to be done. Note that we can only move out of a shadow root
        to its host or move into a slot so newTreeScope (current target's tree scope) and previousTreeScope (previous
        target's tree scope) must have a child-parent relationship.

        If previousTreeScope did not contain the retargeted relatedNode, then neither can its child shadow trees. Thus,
        there is nothing to be done when moving into a slot in this case. If we're moving out of previousTreeScope, then
        newTreeScope may contain the retargeted relatedNode but that still doesn't require any work. So we exit early in
        both cases.

        Otherwise (previousTreeScope contained retargeted relatedNode), if we're moving out of a child shadow root
        (previousTreeScope) then relatedNode should also move to previousTreeScope's shadow host since previousTreeScope
        is a direct-child shadow tree of newTreeScope and previousTreeScope's shadow host resides in newTreeScope.

        If we're moving into a child shadow root via a slot, then there are three possibilities: relatedNode is in
        previousTreeScope, newTreeScope and its child shadow trees, or newTreeScope's sibling tree scopes and its children.
        If it is in previousTreeScope (m_lowestCommonAncestorIndex is zero) or in newTreeScope's sibling, then
        previousTreeScope is the lowest common tree scope ancestor so there is nothing to be done. If relatedNode is in
        newTreeScope, then the retargeted relatedNode is either the shadow host of the shadow tree that contains
        relatedNode or relatedNode itself.

        (WebCore::RelatedNodeRetargeter::checkConsistency): Finds the retargeted relatedNode in the simplest way to verify
        the correctness of the algorithm. We can disable this consistency check if it slows down debug builds too much.
        (WebCore::RelatedNodeRetargeter::nodeInLowestCommonAncestor): Finds the 
        (WebCore::RelatedNodeRetargeter::collectTreeScopes):
        (WebCore::EventPath::setRelatedTarget): Rewritten using RelatedNodeRetargeter.

2015-09-28  Alex Christensen  <achristensen@webkit.org>

        Build WK1 with CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=149604

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        Make a list of IDL files for the ObjC bindings.

2015-09-28  Chris Dumez  <cdumez@apple.com>

        Drop support for legacy EventException
        https://bugs.webkit.org/show_bug.cgi?id=149597
        <rdar://problem/22879795>

        Reviewed by Sam Weinig.

        Drop support for legacy EventException. Both Firefox and Chrome do not
        support it, and our implementation no longer throws such exceptions.

        No new tests, already covered by existing test.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/indexeddb/legacy/LegacyRequest.cpp:
        * Modules/indexeddb/legacy/LegacyTransaction.cpp:
        * Modules/websockets/WebSocket.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/WebKitDOMPrivate.cpp:
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase): Deleted.
        * dom/DOMAllInOne.cpp:
        * dom/DOMExceptions.in:
        * dom/EventException.cpp: Removed.
        * dom/EventException.h:
        (WebCore::EventException::EventException): Deleted.
        * dom/EventException.idl:
        * dom/EventListenerMap.cpp:
        * dom/EventTarget.cpp:
        * dom/MessagePort.cpp:
        * dom/Node.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * page/DOMWindow.cpp:
        * page/EventSource.cpp:
        * page/PerformanceUserTiming.h:
        * workers/AbstractWorker.cpp:
        * workers/Worker.cpp:
        * workers/WorkerGlobalScope.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequestUpload.cpp:

2015-09-28  Chris Dumez  <cdumez@apple.com>

        Object.getOwnPropertyNames() does not return named properties
        https://bugs.webkit.org/show_bug.cgi?id=149562
        <rdar://problem/22879779>

        Reviewed by Darin Adler.

        Previously, Object.getOwnPropertyNames() did not return named properties
        for interfaces with named property getters. This patch adds support for
        this in the JS bindings generator and uses it for HTMLCollection only
        for now. Other interfaces will be taken care of independently.

        Note that currently, even though the named properties are returned by
        Object.getOwnPropertyNames(), these properties are still not enumerated.
        This is because these are always unenumerable for existing DOM interfaces:
        - https://dom.spec.whatwg.org/#interface-htmlcollection
        - https://dom.spec.whatwg.org/#namednodemap

        In the future, we may need to extend support if some interfaces require
        those to be enumerable.

        Test: fast/dom/htmlcollection-getownpropertynames.html

        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::WebCore::RTCStatsResponse::supportedPropertyNames):
        * Modules/mediastream/RTCStatsResponse.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::supportedPropertyNames):
        * css/StyleSheetList.h:
        * dom/DOMNamedFlowCollection.cpp:
        (WebCore::DOMNamedFlowCollection::supportedPropertyNames):
        * dom/DOMNamedFlowCollection.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::supportedPropertyNames):
        * dom/NamedNodeMap.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::supportedPropertyNames):
        * html/HTMLCollection.h:
        (WebCore::CollectionNamedElementCache::propertyNames):
        (WebCore::CollectionNamedElementCache::appendToIdCache):
        (WebCore::CollectionNamedElementCache::appendToNameCache):
        (WebCore::CollectionNamedElementCache::memoryCost):
        (WebCore::CollectionNamedElementCache::append):
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::supportedPropertyNames):
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::supportedPropertyNames):
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::supportedPropertyNames):
        * plugins/DOMPluginArray.h:

2015-09-28  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Deadlock when downloading.
        https://bugs.webkit.org/show_bug.cgi?id=149596

        Reviewed by Alex Christensen.

        Avoid grabbing the same lock twice.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::addHeaders):

2015-09-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        An SVG inherits the container size of the previously drawn HTMLImageElement when drawing it on a canvas
        https://bugs.webkit.org/show_bug.cgi?id=148845

        Reviewed by Darin Adler.

        When drawing an SVG image on a canvas we need to make sure that the container
        size of the SVG is set to the image source size. If we do not do that, the
        previous container size will be used as the size of the image. When drawing
        it as HTMLImageElement, the renderer calls SVGImage::drawForContainer() which
        calls setContainerSize() and then calls draw(). This call ensures that the
        size is set correctly for cached images. But when drawing the SVGImage on
        CanvasRenderingContext2D, the SVGImage::draw() is called directly because
        it calls it through the base class method Image::draw().
        
        If the image.isSVGImage(), CanvasRenderingContext2D::drawImage() has to call
        SVGImage::setContainerSize() before calling Image::draw().

        Test: svg/as-image/svg-cached-draw-canvas.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        Call SVGImage::setContainerSize() before calling Image::draw().

2015-09-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rename all the variables and parameters of type HTMLImageElement in CanvasRenderingContext2D.cpp from 'image' to 'imageElement'

        Reviewed by Darin Adler.

        This does not change functionality in this file. It is a preparation for
        the fix of the https://bugs.webkit.org/show_bug.cgi?id=148845.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::normalizeRect):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        (WebCore::CanvasRenderingContext2D::setAlpha):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::drawImage):

2015-09-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement ES6 Module loader hook stubs in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=149574

        Reviewed by Ryosuke Niwa.

        In this patch, we implement the loader hooks in the WebCore side.
        Since the fetcher and actual evaluation code are separated from
        this patch, they become empty.

        Here, WebCore implements 3 loader hooks.

        1. resolve hook

            Takes the module name and resolve it to the unique module key.
            In WebCore, we use URL as a module key.
            And for the inlined module tag (e.g. <script type="module">import ...</script>),
            we use the ES6 symbol as a module key.
            In WebCore, we take the module name like "./hello.js" and resolve it by using
            the URL of the importer module.
            This functionality is implemented in this patch.

        2. fetch hook

            Fetches the resource specified by the module key. In WebCore, the module key is
            URL. We use CachedResource loading system to load the resource of the modules.
            The actual code of the fetch hook will be implemented in the subsequent patch.

        3. evaluate hook

            This is additional hook to instrument the module's execution for the inspector.
            The actual code of the evaluate hook will be implemented in the subsequent patch.

        In addition to that, we added required JSC forward headers for the module loader
        implementation.

        * CMakeLists.txt:
        * ForwardingHeaders/runtime/JSInternalPromise.h: Added.
        * ForwardingHeaders/runtime/JSInternalPromiseDeferred.h: Added.
        * ForwardingHeaders/runtime/JSModuleRecord.h: Added.
        * ForwardingHeaders/runtime/Symbol.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::moduleLoaderResolve):
        (WebCore::JSDOMWindowBase::moduleLoaderFetch):
        (WebCore::JSDOMWindowBase::moduleLoaderEvaluate):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSModuleLoader.cpp: Added.
        (WebCore::JSModuleLoader::JSModuleLoader):
        (WebCore::JSModuleLoader::resolve):
        (WebCore::JSModuleLoader::fetch):
        (WebCore::JSModuleLoader::evaluate):
        * bindings/js/JSModuleLoader.h: Added.
        (WebCore::JSModuleLoader::document):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::moduleLoader):

2015-09-26  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/inspector.
        https://bugs.webkit.org/show_bug.cgi?id=149579

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        (WebCore::DOMPatchSupport::removeChildAndMoveToNew):
        (WebCore::DOMPatchSupport::markNodeAsUsed):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        (WebCore::ChangeRegionOversetTask::timerFired):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::resetPseudoStates):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        (WebCore::InspectorDOMAgent::releaseBackendNodeIds):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getEventListeners):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        (WebCore::buildObjectForHighlight):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForSession):
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willDestroyCachedResource):
        (WebCore::InspectorResourceAgent::willRecalculateStyle):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::ruleIndexByStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannelsForExistingWorkers):
        (WebCore::InspectorWorkerAgent::destroyWorkerFrontendChannels):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::clear):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::frameWindowDiscarded):
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::discardInjectedScriptsFor):

2015-09-25  Eric Carlson  <eric.carlson@apple.com>

        Clean up user media request internal API
        https://bugs.webkit.org/show_bug.cgi?id=149527

        Reviewed by Tim Horton.

        No new tests, no functional change.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::constraintsValidated): Use track persistent ID to create vectors
          as that is what the platform code needs to map to a capture device.
        (WebCore::UserMediaRequest::userMediaAccessGranted): m_chosenXXDeviceUID -> m_XXDeviceUIDAllowed.
          Use the device IDs to create the MediaStream. Switch audio/video parameter order.
        (WebCore::UserMediaRequest::didCreateStream): Don't assume constraints are valid.
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::videoDeviceUIDs):
        (WebCore::UserMediaRequest::audioDeviceUIDs):
        (WebCore::UserMediaRequest::allowedVideoDeviceUID):
        (WebCore::UserMediaRequest::allowedAudioDeviceUID):
        (WebCore::UserMediaRequest::requiresAudio): Deleted.
        (WebCore::UserMediaRequest::requiresVideo): Deleted.
        (WebCore::UserMediaRequest::firstVideoDeviceUID): Deleted.
        (WebCore::UserMediaRequest::firstAudioDeviceUID): Deleted.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource): Call setPersistentId.

2015-09-25  Antti Koivisto  <antti@apple.com>

        Implement scoped styling for shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=149230

        Reviewed by Ryosuke Niwa.

        Test: fast/shadow-dom/css-scoping-shadow-with-rules-no-style-leak.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):

            Only use special path here for user agent shadow trees.

        * dom/AuthorStyleSheets.cpp:
        (WebCore::AuthorStyleSheets::AuthorStyleSheets):
        (WebCore::AuthorStyleSheets::removePendingSheet):
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):

            Basic support for ShadowRoot scoped stylesheets.

        * dom/AuthorStyleSheets.h:
        (WebCore::AuthorStyleSheets::activeStyleSheets):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::~InlineStyleSheetOwner):
        (WebCore::authorStyleSheetsForElement):
        (WebCore::InlineStyleSheetOwner::insertedIntoDocument):
        (WebCore::InlineStyleSheetOwner::removedFromDocument):
        (WebCore::InlineStyleSheetOwner::clearDocumentData):
        (WebCore::InlineStyleSheetOwner::childrenChanged):
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::isLoading):
        (WebCore::InlineStyleSheetOwner::sheetLoaded):
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):

            Basic support for ShadowRoot scoped inline stylesheets.

        * dom/InlineStyleSheetOwner.h:
        (WebCore::InlineStyleSheetOwner::sheet):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::styleResolver):

            Create and initialize ShadowRoot scoped style resolver.

        (WebCore::ShadowRoot::resetStyleResolver):
        (WebCore::ShadowRoot::authorStyleSheets):

            Collection of author stylesheets in the shadow tree.

        (WebCore::ShadowRoot::updateStyle):

            Trigger style recalc when stylesheets change.

        (WebCore::ShadowRoot::cloneNode):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::resetStyleInheritance):
        * html/HTMLStyleElement.h:
        * svg/SVGStyleElement.h:

2015-09-25  Alex Christensen  <achristensen@webkit.org>

        Clean up CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=149573

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * platform/graphics/DisplayRefreshMonitor.cpp:

2015-09-25  Tim Horton  <timothy_horton@apple.com>

        Scrolling a overflow: scroll region makes find overlay holes stick to the edge of the region
        https://bugs.webkit.org/show_bug.cgi?id=149572
        <rdar://problem/13093602>

        Reviewed by Simon Fraser.

        Test: fast/text/mark-matches-overflow-clip.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        Clip the rendered marker rect to the overflow rect.

        * testing/Internals.cpp:
        (WebCore::Internals::dumpMarkerRectsForNode):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a internals function to dump the rendered rects for a marker.

2015-09-25  Alex Christensen  <achristensen@webkit.org>

        [Win] Switch to CMake
        https://bugs.webkit.org/show_bug.cgi?id=148111

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.proj:

2015-09-25  Beth Dakin  <bdakin@apple.com>

        Clicking on a data detected item inside a form control always pops up a map 
        on force touch trackpad
        https://bugs.webkit.org/show_bug.cgi?id=149559
        -and corresponding-
        rdar://problem/22826796

        Reviewed by Tim Horton.

        The real bug here appears to be a bug in Lookup, but we can work around it. 
        For normal text, we call directly into Data Detectors for map results, and 
        that works fine. For text within form controls, we did not properly extract 
        the text for DD, so we sent it to Lookup instead, and Lookup has this bug 
        where they will pop open the map right away. If we properly extract the text 
        for form controls, then we can work around this bug.

        * editing/mac/DataDetection.mm:
        (WebCore::detectItemAtPositionWithRange):
        (WebCore::DataDetection::detectItemAroundHitTestResult):

2015-09-25  Brady Eidson  <beidson@apple.com>

        PassRefPtr<> to RefPtr<> conversion in legacy IndexedDB code.
        https://bugs.webkit.org/show_bug.cgi?id=149558

        Reviewed by Beth Dakin.

        No new tests (No behavior change.)
        
        This patch does not attempt to completely remove all PassRefPtr usage inside legacy IDB.

        It just switches over all PassRefPtr usage at the top level IDB interfaces that 
        modern IDB is implementing.

        The rest of the usage inside the legacy implementation can be dealt with later via `git rm`.

        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseError.h:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::IDBFactory::getDatabaseNames):
        (WebCore::IDBClient::IDBFactory::open):
        (WebCore::IDBClient::IDBFactory::deleteDatabase):
        * Modules/indexeddb/client/IDBFactoryImpl.h:
        * Modules/indexeddb/client/IDBRequestImpl.cpp:
        (WebCore::IDBClient::IDBRequest::result):
        (WebCore::IDBClient::IDBRequest::error):
        (WebCore::IDBClient::IDBRequest::source):
        (WebCore::IDBClient::IDBRequest::transaction):
        * Modules/indexeddb/client/IDBRequestImpl.h:
        * Modules/indexeddb/legacy/LegacyAny.cpp:
        (WebCore::LegacyAny::createInvalid):
        (WebCore::LegacyAny::createNull):
        (WebCore::LegacyAny::createString):
        (WebCore::LegacyAny::domStringList):
        (WebCore::LegacyAny::idbCursor):
        (WebCore::LegacyAny::idbCursorWithValue):
        (WebCore::LegacyAny::idbDatabase):
        (WebCore::LegacyAny::idbFactory):
        (WebCore::LegacyAny::idbIndex):
        (WebCore::LegacyAny::idbObjectStore):
        (WebCore::LegacyAny::idbTransaction):
        (WebCore::LegacyAny::LegacyAny):
        * Modules/indexeddb/legacy/LegacyAny.h:
        (WebCore::LegacyAny::create):
        * Modules/indexeddb/legacy/LegacyCursor.cpp:
        (WebCore::LegacyCursor::update):
        (WebCore::LegacyCursor::deleteFunction):
        * Modules/indexeddb/legacy/LegacyCursor.h:
        * Modules/indexeddb/legacy/LegacyDatabase.cpp:
        (WebCore::LegacyDatabase::objectStoreNames):
        (WebCore::LegacyDatabase::createObjectStore):
        (WebCore::LegacyDatabase::transaction):
        * Modules/indexeddb/legacy/LegacyDatabase.h:
        * Modules/indexeddb/legacy/LegacyFactory.cpp:
        (WebCore::LegacyFactory::getDatabaseNames):
        (WebCore::LegacyFactory::open):
        (WebCore::LegacyFactory::deleteDatabase):
        * Modules/indexeddb/legacy/LegacyFactory.h:
        * Modules/indexeddb/legacy/LegacyIndex.cpp:
        (WebCore::LegacyIndex::openCursor):
        (WebCore::LegacyIndex::count):
        (WebCore::LegacyIndex::openKeyCursor):
        (WebCore::LegacyIndex::get):
        (WebCore::LegacyIndex::getKey):
        * Modules/indexeddb/legacy/LegacyIndex.h:
        (WebCore::LegacyIndex::legacyObjectStore):
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp:
        (WebCore::LegacyObjectStore::indexNames):
        (WebCore::LegacyObjectStore::get):
        (WebCore::LegacyObjectStore::add):
        (WebCore::LegacyObjectStore::put):
        (WebCore::LegacyObjectStore::deleteFunction):
        (WebCore::LegacyObjectStore::clear):
        (WebCore::LegacyObjectStore::createIndex):
        (WebCore::LegacyObjectStore::index):
        (WebCore::LegacyObjectStore::openCursor):
        (WebCore::LegacyObjectStore::count):
        * Modules/indexeddb/legacy/LegacyObjectStore.h:
        (WebCore::LegacyObjectStore::keyPathAny):
        (WebCore::LegacyObjectStore::transaction):
        (WebCore::LegacyObjectStore::createIndex):
        (WebCore::LegacyObjectStore::count):
        * Modules/indexeddb/legacy/LegacyRequest.cpp:
        (WebCore::LegacyRequest::result):
        (WebCore::LegacyRequest::error):
        (WebCore::LegacyRequest::source):
        (WebCore::LegacyRequest::transaction):
        (WebCore::LegacyRequest::onSuccess):
        * Modules/indexeddb/legacy/LegacyRequest.h:
        * Modules/indexeddb/legacy/LegacyTransaction.cpp:
        (WebCore::LegacyTransaction::objectStore):
        * Modules/indexeddb/legacy/LegacyTransaction.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2015-09-25  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Incorrect position for windowless plugins.
        https://bugs.webkit.org/show_bug.cgi?id=149524

        Reviewed by Alex Christensen.

        Added method to get graphics context HDC.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::hdc):
        (WebCore::GraphicsContextPlatformPrivate::save):

2015-09-25  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Fix the broken !ENABLE(STREAM_API) build
        https://bugs.webkit.org/show_bug.cgi?id=149525

        Reviewed by Darin Adler.

        Removed some #ifdef ENABLE(STREAMS_API) to make build work when STREAMS_API is off.
        This is a temporary fix.

        * bindings/js/WebCoreJSClientData.h:
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::initNormalWorldClientData):

2015-09-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed, nit fix after r190229.

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

2015-09-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190232 and r190236.
        https://bugs.webkit.org/show_bug.cgi?id=149555

        "It did not help" (Requested by cdumez on #webkit).

        Reverted changesets:

        "Unreviewed, roll out r187615 as it seems to have caused a ~1%
        PLT regression."
        http://trac.webkit.org/changeset/190232

        "This started failing after this rollout:"
        http://trac.webkit.org/changeset/190236

2015-09-25  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove the need for DOMClass in case of JSBuiltinConstructor WebIDL
        https://bugs.webkit.org/show_bug.cgi?id=149522

        Reviewed by Darin Adler.

        Adding generation of the dummy DOM class for JSBuiltinConstructor interfaces.
        This is applied to CountQueuingStrategy.

        Covered by existing tests of CountQueuingStrategy.

        * Modules/streams/CountQueuingStrategy.h: Removed.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Removal of DOM class header include and generation of dummy class.
        (GenerateImplementation): Removal of DOM class header include.
        (UseDummyDOMClass): Helper routine.
        (GenerateDummyDOMClassForJSBuiltin): Ditto.

2015-09-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support composited content in WebView render-to-context methods
        https://bugs.webkit.org/show_bug.cgi?id=149516
        <rdar://problem/22635080>

        Reviewed by Simon Fraser.

        Extend the CACFLayerTreeHost implementation to render into a passed
        device context when requested. When no context is provided (the default
        case) paint as normal.

        Will be tested by existing compositing tests in a future bug. DumpRenderTree
        has to be extended to do this painting properly.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::paint): Accept an optional HDC argument, and
        pass it to the render method.
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Add missing SOFT_LINK
        command for the WKCACFViewDrawIntoDC.
        (WebCore::WKCACFViewLayerTreeHost::paint): Accept optional HDC argument and
        pass it to the parent class.
        (WebCore::WKCACFViewLayerTreeHost::render): Accept new optional HDC argument.
        If provided, call WKCACFViewDrawIntoDC. Otherwise, call WKCACFVIewDraw.
        (WebCore::WKCACFViewLayerTreeHost::setShouldInvertColors):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Drop [NotDeletable] from QuickTimePluginReplacement.postEvent()
        https://bugs.webkit.org/show_bug.cgi?id=149547

        Reviewed by Eric Carlson.

        Drop [NotDeletable] from QuickTimePluginReplacement.postEvent(). It does
        not appear to be needed and this is the last user of this non-standard
        IDL attribute. This patch also drops support for this IDL attribute.

        * Modules/plugins/QuickTimePluginReplacement.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (ComputeFunctionSpecial):
        * bindings/scripts/IDLAttributes.txt:

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Node.replaceChild() does not behave according to the specification
        https://bugs.webkit.org/show_bug.cgi?id=149546
        <rdar://problem/22571887>

        Reviewed by Ryosuke Niwa.

        Node.replaceChild() does not behave according to the specification. In
        particular, when replacing |child| with |node| we are supposed to remove
        |node| from its parent *before* removing |child| from its parent:
        - https://dom.spec.whatwg.org/#concept-node-replace (Steps 10 & 11)

        This patch reverses the order as per the specification. Our new behavior
        matches Firefox's behavior. Note that this patch also remove an
        optimization when replacing a child with its next sibling. This
        optimization was observable from JS. It seems likely this case is not
        common enough for it to be an issue. However, we can revisit if we see
        it regresses things.

        This leads to incorrect Mutation Records being queued in some cases.

        No new tests, already covered by existing test.

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

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r187615 as it seems to have caused a ~1% PLT regression.
        <rdar://problem/22657123>

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/FontCascade.cpp:
        (WebCore::operator==):
        (WebCore::makeFontSelectorFlags):
        (WebCore::makeFontCascadeCacheKey):
        (WebCore::computeFontCascadeCacheHash):

2015-09-24  David Hyatt  <hyatt@apple.com>

        Keep the already-parsed list of terms in custom property values so that we don't have to re-parse them
        later when doing variable resolution.
        https://bugs.webkit.org/show_bug.cgi?id=149544

        Reviewed by Dean Jackson.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::ComputedStyleExtractor::customPropertyText):
        Add a helper for getting the raw text. More closely parallels how non-custom properties work with the
        extractor.

        (WebCore::ComputedStyleExtractor::propertyValue):
        Change propertyValue to use customPropertyText.

        (WebCore::ComputedStyleExtractor::copyPropertiesInSet):
        Don't copy CSS custom properties into the style declaration. This is just used for things like editing, so
        we didn't need to be putting the custom properties into this set.

        (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
        Patched to go straight to the serialized string value.

        (WebCore::ComputedStyleExtractor::customPropertyValue): Deleted.
        Replaced by customPropertyText.

        * css/CSSComputedStyleDeclaration.h:
        Rename customPropertyValue to customPropertyText and make it just return a String.

        * css/CSSCustomPropertyValue.h:
        (WebCore::CSSCustomPropertyValue::create):
        (WebCore::CSSCustomPropertyValue::customCSSText):
        (WebCore::CSSCustomPropertyValue::name):
        (WebCore::CSSCustomPropertyValue::equals):
        (WebCore::CSSCustomPropertyValue::CSSCustomPropertyValue):
        (WebCore::CSSCustomPropertyValue::value): Deleted.
        Changed to hold both a CSSParserValueList, which it adopts from the CSSParser, and a string value that
        is constructed lazily only if the value is serialized. Now the problematic serialization code will only
        run if someone uses the CSS OM to trigger a serialization (this should be a rare occurrence, so perf
        improves with this change).

        * css/CSSGrammar.y.in:
        Change parsing of custom properties to be identical to regular properties. This refactoring allows
        us to simply invoke the parser from style declarations as well and makes everything behave more
        similarly to normal property parsing.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseCustomPropertyValue):
        (WebCore::CSSParser::parseCustomPropertyDeclaration):
        (WebCore::CSSParser::addCustomPropertyDeclaration): Deleted.
        * css/CSSParser.h:
        (WebCore::CSSParser::setCustomPropertyName):
        We now have a method for parsing custom properties that can be invoked from style declarations. The
        parser list is now adopted by the CSSCustomPropertyValue.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::toString):
        Build the string serialization code right into CSSParserValueList.

        * css/CSSParserValues.h:
        Add a toString() method for serialization.

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setProperty):
        (WebCore::MutableStyleProperties::setCustomProperty):
        Changed to use the new CSSParser functions. This makes the code behave almost identically to regular
        property parsing.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCustomPropertyData.h:
        Change the mapping on RenderStyle to store the custom CSS values. This way we can get to the original
        parser lists for each variable when it comes time to do variable resolution.

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Rewrite Range::insertNode() as per the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=149528

        Reviewed by Ryosuke Niwa.

        Rewrite Range::insertNode() as per the latest DOM specification:
        - https://dom.spec.whatwg.org/#concept-range-insert

        Our previous implementation seemed outdated as we were failing a lot of
        W3C tests that Firefox is passing.

        No new tests, already covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::ensurePreInsertionValidity):
        (WebCore::checkPreReplacementValidity):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/ContainerNode.h:
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::surroundContents):
        (WebCore::Range::toString): Deleted.
        (WebCore::Range::toHTML): Deleted.
        (WebCore::Range::text): Deleted.
        (WebCore::Range::createContextualFragment): Deleted.
        (WebCore::Range::detach): Deleted.
        (WebCore::Range::absoluteBoundingBox): Deleted.
        * dom/Range.h:

2015-09-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build failure.

        * bindings/js/WebCoreJSClientData.h: Make sure Streams API headers
        are only included if the feature is on.

2015-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Make event dispatching respect slotting
        https://bugs.webkit.org/show_bug.cgi?id=149243

        Reviewed by Antti Koivisto.

        There are primarily two cases to consider: getting out of a shadow root to its host,
        and moving into a slot from an assigned node.

        When getting out of a shadow root, either the event originated in its shadow tree
        including its nodes' shadow trees (1) or it moved into this shadow tree via a slot (2).
        In (1), event.target should be set to the shadow host. In (2), it should be set to the
        first node in the event path that belongs to the same tree as the shadow host. In order
        to find such a node in O(1), we use a stack of event targets in each (shadow) tree. We
        push event.target of the current tree whenever we move up to a slot from an assigned node
        and pop it out of the stack when we move out of the shadow tree.

        A follow up patch is needed to update the code to resolve related targets.

        Tests: fast/shadow-dom/event-inside-shadow-tree.html
               fast/shadow-dom/event-inside-slotted-node.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::EventPath):

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Drop XPATH_NAMESPACE_NODE from Node::NodeType enum
        https://bugs.webkit.org/show_bug.cgi?id=149532

        Reviewed by Ryosuke Niwa.

        Drop XPATH_NAMESPACE_NODE from Node::NodeType enum as there is currently
        no way to construct such Node in WebKit. This avoid having to handle this
        Node type everywhere.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap): Deleted.
        * bindings/objc/DOM.mm:
        (kitClass): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::adoptNode): Deleted.
        (WebCore::Document::childTypeAllowed): Deleted.
        (WebCore::Document::canAcceptChild): Deleted.
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics): Deleted.
        (WebCore::Node::textContent): Deleted.
        (WebCore::Node::ancestorElement): Deleted.
        * dom/Node.h:
        * dom/Range.cpp:
        (WebCore::Range::checkNodeWOffset):
        (WebCore::lengthOfContentsInNode): Deleted.
        (WebCore::Range::processContentsBetweenOffsets): Deleted.
        (WebCore::Range::surroundContents): Deleted.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup): Deleted.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::expandedNameLocalPart): Deleted.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        (WebCore::XPath::primaryNodeType): Deleted.
        * xml/XPathUtil.cpp:
        (WebCore::XPath::stringValue): Deleted.
        (WebCore::XPath::isValidContextNode): Deleted.

2015-09-24  David Hyatt  <hyatt@apple.com>

        Add support for CSS Custom Properties (in preparation for implementing CSS Variables).
        https://bugs.webkit.org/show_bug.cgi?id=130397

        Reviewed by Antti Koivisto.

        Added new tests in fast/css/custom-properties.

        * WebCore.xcodeproj/project.pbxproj:
        Add new header files to the project (CSSCustomPropertyValue and StyleCustomPropertyData).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::customPropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        If a custom property value is queried (i.e., it starts with "--"), then we use our
        customPropertyValue lookup to go to the RenderStyle and fetch the appropriate custom property
        value from the StyleCustomPropertyData.

        (WebCore::CSSComputedStyleDeclaration::length):
        (WebCore::CSSComputedStyleDeclaration::item):
        Patched to include custom properties in the returned array. They appear at the end of the array
        after the built-in properties.

        (WebCore::ComputedStyleExtractor::propertyMatches):
        Patched to check custom properties.

        (WebCore::ComputedStyleExtractor::copyPropertiesInSet):
        Make sure the custom properties get copied into the StyleDeclaration.

        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyValue):
        Patched to call customPropertyValue for custom properties.

        * css/CSSComputedStyleDeclaration.h:
        Add customPropertyValue() to ComputedStyleExtractor.

        * css/CSSCustomPropertyValue.h: Added.
        (WebCore::CSSCustomPropertyValue::create):
        (WebCore::CSSCustomPropertyValue::equals):
        (WebCore::CSSCustomPropertyValue::customCSSText):
        (WebCore::CSSCustomPropertyValue::name):
        (WebCore::CSSCustomPropertyValue::value):
        (WebCore::CSSCustomPropertyValue::CSSCustomPropertyValue):
        Custom properties are parsed as a property with an ID of CSSPropertyCustom and a CSSCustomPropertyValue
        that holds both the name and the value of the property. Ultimately we might want to just ditch property IDs in
        favor of AtomicStrings for all properties, and then the need to special case custom properties would go
        away. For now, though, this is the way we work custom properties into the existing system.

        * css/CSSGrammar.y.in:
        Add a production for recognizing custom properties and storing them using a property ID of CSSPropertyCustom
        and a CSSCustomPropertyValue that has the name/value pair.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        Patched to track seen custom properties and to handle them correctly.

        (WebCore::CSSParser::createStyleProperties):
        Pass in a seenCustomProperties table to ensure we bail when encountering the same custom property twice.

        (WebCore::CSSParser::addCustomPropertyDeclaration):
        Called from the grammar production to create the CSSCustomPropertyValue.

        (WebCore::isCustomPropertyIdentifier):
        Recognize the -- custom property during lexing.

        (WebCore::CSSParser::parseIdentifier):
        Patched to return a CUSTOM_PROPERTY token when a custom property is identified.

         * css/CSSParser.h:
        (WebCore::isCustomPropertyName):
        Add a helper function for asking if a property name is custom.

        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        Patched to add support for CSSCustomPropertyValue.

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyPriority):
        (WebCore::PropertySetCSSStyleDeclaration::setProperty):
        (WebCore::PropertySetCSSStyleDeclaration::removeProperty):
        Add code for handling custom properties in the CSS OM.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::getCustomPropertyValue):
        (WebCore::StyleProperties::getPropertyCSSValue):
        (WebCore::StyleProperties::getCustomPropertyCSSValue):
        (WebCore::MutableStyleProperties::removeProperty):
        (WebCore::MutableStyleProperties::removeCustomProperty):
        (WebCore::StyleProperties::propertyIsImportant):
        (WebCore::StyleProperties::customPropertyIsImportant):
        (WebCore::MutableStyleProperties::setProperty):
        (WebCore::MutableStyleProperties::setCustomProperty):
        (WebCore::MutableStyleProperties::addParsedProperty):
        (WebCore::MutableStyleProperties::findPropertyIndex):
        (WebCore::ImmutableStyleProperties::findCustomPropertyIndex):
        (WebCore::MutableStyleProperties::findCustomPropertyIndex):
        (WebCore::MutableStyleProperties::findCSSPropertyWithID):
        (WebCore::MutableStyleProperties::findCustomCSSPropertyWithName):
        (WebCore::StyleProperties::propertyMatches):
        (WebCore::StyleProperties::PropertyReference::cssName):
        * css/StyleProperties.h:
        (WebCore::StyleProperties::findCustomPropertyIndex):
        Patched to support handling custom properties in the CSS OM. We have to create equivalent methods that operate
        on AtomicString propertyNames instead of on property IDs.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::customProperties):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::applyCascadedProperties):
        The resolver has to hold a HashMap from AtomicStrings to Properties. It matches identically to how built-in
        properties work except that an extensible table (HashMap) is used to hold the property data.

        * css/makeprop.pl:
        Patched to include the special CSSPropertyCustom value of 1 (just after the CSSPropertyInvalid id value but before the first
        built-in property value).

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::getText):
        (WebCore::lowercasePropertyName):
        (WebCore::InspectorStyle::populateAllProperties):
        Patch inspector to not lowercase CSS custom property names, since they are case-sensitive.

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleCustomPropertyData.h: Added.
        (WebCore::StyleCustomPropertyData::create):
        (WebCore::StyleCustomPropertyData::copy):
        (WebCore::StyleCustomPropertyData::operator==):
        (WebCore::StyleCustomPropertyData::operator!=):
        (WebCore::StyleCustomPropertyData::setCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::getCustomPropertyValue):
        (WebCore::StyleCustomPropertyData::hasCustomProperty):
        (WebCore::StyleCustomPropertyData::StyleCustomPropertyData):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        The front end storage in the RenderStyle for custom properties. For now, custom properties are always inherited, so the
        data is in StyleRareInheritedData.

2015-09-24  Chris Dumez  <cdumez@apple.com>

        Optimize Range's lengthOfContentsInNode() for DocumentType Nodes
        https://bugs.webkit.org/show_bug.cgi?id=149529

        Reviewed by Darin Adler.

        Optimize Range's lengthOfContentsInNode() for DocumentType Nodes:
        - https://dom.spec.whatwg.org/#concept-node-length

        We currently call Node::countChildNodes() unnecessarily on DocumentType
        Nodes instead of simply returning 0.

        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        (WebCore::Range::processContents):

2015-09-24  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed, fix typo errors in a comment ("passed" -> "Passed", "Overwise" -> "Otherwise")

        * css/mediaControlsGtk.css:

2015-09-24  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce almost uses of PassRefPtr in Webcore/testing
        https://bugs.webkit.org/show_bug.cgi?id=149449

        Reviewed by Darin Adler.

        This patch removes all uses of PassRefPtr except for Internals::serializeObject() and Internals::deserializeObject().
        It will be removed by upcoming patch.

        * Modules/encryptedmedia/CDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::generateKeyRequest):
        * Modules/encryptedmedia/CDMSessionClearKey.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItem):
        * platform/graphics/CDMSession.h:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest):
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::generateKeyRequest):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyRequest):
        * testing/InternalSettings.h:
        (WebCore::InternalSettings::create):
        * testing/Internals.cpp:
        (WebCore::Internals::create):
        (WebCore::Internals::computedStyleIncludingVisitedInfo):
        (WebCore::Internals::markerRangeForNode):
        (WebCore::Internals::rangeFromLocationAndLength):
        (WebCore::Internals::subrange):
        (WebCore::Internals::nodesFromRect):
        (WebCore::Internals::mallocStatistics):
        (WebCore::Internals::typeConversions):
        (WebCore::Internals::memoryInfo):
        (WebCore::Internals::serializeObject):
        (WebCore::Internals::deserializeBuffer):
        (WebCore::Internals::createTimeRanges):
        * testing/Internals.h:
        * testing/MallocStatistics.h:
        (WebCore::MallocStatistics::create):
        * testing/MemoryInfo.h:
        (WebCore::MemoryInfo::create):
        * testing/MockCDM.cpp:
        (WebCore::MockCDMSession::generateKeyRequest):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::create):

2015-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        Ran sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2015-09-24  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] playbutton in media controls is not changed when it is clicked.
        https://bugs.webkit.org/show_bug.cgi?id=149113

        Reviewed by Philippe Normand.

        When the play button in media controls is clicked, a 'paused' class is added or removed
        for the element to update its appearance. Although Document::recalcStyle is triggered
        by that class attribute change, the play button is not changed since there is
        no difference in styles whether having the 'paused' class or not. Gtk port
        does not define the -webkit-media-controls-play-button.paused. To fix this,
        -webkit-media-controls-play-button.paused is newly defined with a dummy style,
        "position: relative;", which should not change the play button appearance,
        but be clearly different in style.

        Test: media/media-controls-play-button-updates.html

        * css/mediaControlsGtk.css:
        (video::-webkit-media-controls-play-button.paused):

2015-09-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM API breaks after r190120.

        EntityReference has been removed from the DOM spec. Generate an
        empy GObject implementation to keep API and ABI
        compatibility. also add a deprecated impementation for the methods
        using WebKitEntityReference.

        * PlatformGTK.cmake: Do not generate bindings for EntityReference.idl.
        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_entity_reference_init):
        (webkit_dom_entity_reference_class_init):
        (webkit_dom_node_iterator_get_expand_entity_references):
        (webkit_dom_tree_walker_get_expand_entity_references):
        (webkit_dom_document_create_entity_reference):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Remove FIXME.
        * dom/Document.idl: Do not generate createEntityReference for GObject.
        * dom/EntityReference.idl: Do not generate empty files for GObject.

2015-09-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Add support for JS builtins constructor
        https://bugs.webkit.org/show_bug.cgi?id=149497

        Reviewed by Darin Adler.

        Covered by existing tests.

        Making CountQueuingStrategy fully JS built-in implemented.
        Adding support for calling a JS builtin initialization function just after creating the JSXX object.
        This JS function must be named initializeXX and be in XX.Js file.
        The JSBuiltinConstructor keyword is added to the binding generator.

        * CMakeLists.txt: Adding CountQueuingStrategy.js, removing JSCountQueuingStrategyCustom.cpp.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * Modules/streams/CountQueuingStrategy.h: Making CountQueuingStrategy a dummy class.
        (WebCore::CountQueuingStrategy::create):
        (WebCore::CountQueuingStrategy::~CountQueuingStrategy):
        (WebCore::CountQueuingStrategy::CountQueuingStrategy):
        * Modules/streams/CountQueuingStrategy.idl:
        * Modules/streams/CountQueuingStrategy.js: Added.
        (size):
        (initializeCountQueuingStrategy):
        * WebCore.vcxproj/WebCore.vcxproj: Removing JSCountQueuingStrategyCustom.cpp.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.
        * bindings/js/JSCountQueuingStrategyCustom.cpp: Removed.
        * bindings/js/JSDOMBinding.cpp: Adding support for DOMConstructorJSBuiltinObject.
        (WebCore::callInitializeFunction):
        (WebCore::DOMConstructorJSBuiltinObject::visitChildren):
        * bindings/js/JSDOMBinding.h: Diitto.
        (WebCore::createFromJSBuiltin):
        (WebCore::DOMConstructorJSBuiltinObject::DOMConstructorJSBuiltinObject):
        * bindings/js/WebCoreJSClientData.h: Adding support for CQS builtins functions.
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::countQueuingStrategyBuiltins):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetJSBuiltinFunctionName):
        (GetFunctionName):
        (InstanceNeedsVisitChildren): Generating visitChildren method in case of JSBuiltinConstructor.
        (GetParentConstructorClassName): Refactoring to make JSXXConstructor derive from DOMConstructorJSBuiltinObject in case of JSBuiltinConstructor.
        (GenerateConstructorDeclaration): Ditto.
        (GenerateConstructorDefinition): Generate specific constructor in case of JSBuiltinConstructor.
        (GenerateConstructorHelperMethods): Refactoring to use Base class.
        (IsConstructable): Ditto.
        (ConstructorHasProperties): Deleted.
        * bindings/scripts/IDLAttributes.txt: Adding JSBuiltinConstructor.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::JSTestCallbackConstructor):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::JSTestCustomConstructorWithNoInterfaceObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::JSTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::JSTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::JSTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::JSTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructorNamedConstructor::JSTestNamedConstructorNamedConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::JSTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::JSTestNondeterministicConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::JSTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::JSTestOverrideBuiltinsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::JSTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::JSattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::JSreadonlyConstructor):

2015-09-23  Chris Dumez  <cdumez@apple.com>

        Simplify / Optimize Range::selectNode()
        https://bugs.webkit.org/show_bug.cgi?id=149515

        Reviewed by Ryosuke Niwa.

        Simplify / Optimize Range::selectNode():
        1. Do a null-check on refNode->parentNode() instead of checking the
           nodeType(), which is virtual. Attr, DocumentFragment and Document
           Nodes do not have a parent and thus are covered by this check.
           Also, setStartBefore() / setEndAfter() were already doing a null
           check on the parent.
        2. Call lower-level setStart() / setEnd() directly, instead of using
           setStartBefore() / setEndAfter() as intermediary. As a result:
           2.a. We avoid doing a redundant null checks on refNode and its parent
                (inside those intermediate functions)
           2.b. We only call refNode->computeNodeIndex() once instead of twice
                (in each of those intermediate functions). computeNodeIndex()
                is not a trivial getter as its needs to traverse all the
                previous siblings.

        The implementation now matches exactly the text of the DOM specification
        as well:
        https://dom.spec.whatwg.org/#concept-range-select

        No new layout tests, no web-exposed behavior intended.

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

2015-09-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] [Font Features] Implement font-variant-*
        https://bugs.webkit.org/show_bug.cgi?id=148413

        Reviewed by Darin Adler.

        This patch is the first pass of implementing of the font-variant-* properties. Specifically,
        these properties are:
        font-variant-ligatures
        font-variant-position
        font-variant-caps
        font-variant-numeric
        font-variant-alternates
        font-variant-east-asian

        These new properties are held inside FontDescription as bit fields. At font creation time,
        we consult with the FontDescription to figure out which variants are specified. We then
        convert those variants to font features, and resolve these font features with the additional
        features specified by font-feature-settings (as the spec requires). This patch also makes
        our caches sensitive to these new properties of FontDescription so we don't look up cached,
        stale fonts.

        The implementation has some caveats, however. They are listed here:
        1. These new properties need to interact correctly with @font-face declarations. In
        particular, only certain properties of the FontDescription should be considered when
        detecting if a @font-face declaration applies to a particular element. This discrimination
        does not happen correctly. In addition, any feature-specific CSS properties inside the
        @font-face declaration need to be consulted at a particular point during the feature
        resolve. This does not currently occur.
        2. One of the properties, font-variant-alternates, has a few values which require custom
        CSS functions, which makes modeling the properties as bit fields tricky. These extra values
        need to be implemented. This patch implements all the values which do not require extra CSS
        features.
        3. These new properties have a shorthand, font-variant, which is designed to be backward-
        compatible with CSS 2.1's concept of font-variant. In particular, CSS 2.1 allows you to use
        "normal" and "small-caps" with font-variant. Both of these values are values of the new
        property font-variant-caps. However, our existing implementation of small-caps does not
        use font features when they exist; instead, it simply draws text at a smaller font size and
        uses (effectively) text-transform to force capital letters. This implementation needs to be
        unified with the new font-variant-caps property so that we can expand font-variant to be
        a shorthand for the new properties.
        4. font-variant-position and font-variant-caps should provide appropriate synthesis if no
        matching font-feature exists.
        5. FontCascade::typesettingFeatures() is now no-longer accurate. Fixing this would be large
        enough to warrant its own patch.
        6. These properties are not tested with TrueType fonts.

        Tests: css3/font-variant-all-webfont.html
               css3/font-variant-parsing.html

        * css/CSSComputedStyleDeclaration.cpp: Reconstruct StyleProperties from a RenderStyle.
        (WebCore::appendLigaturesValue):
        (WebCore::fontVariantLigaturesPropertyValue):
        (WebCore::fontVariantPositionPropertyValue):
        (WebCore::fontVariantCapsPropertyValue):
        (WebCore::fontVariantNumericPropertyValue):
        (WebCore::fontVariantAlternatesPropertyValue):
        (WebCore::fontVariantEastAsianPropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontFeatureValue.cpp: Update to FontFeatureTag instead of WTF::String.
        (WebCore::CSSFontFeatureValue::CSSFontFeatureValue):
        (WebCore::CSSFontFeatureValue::customCSSText):
        * css/CSSFontFeatureValue.h: Ditto.
        (WebCore::CSSFontFeatureValue::create):
        (WebCore::CSSFontFeatureValue::tag):
        * css/CSSParser.cpp: Parse the new properties according to the CSS3 fonts spec.
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFontFeatureTag):
        (WebCore::CSSParser::parseFontVariantLigatures):
        (WebCore::CSSParser::parseFontVariantNumeric):
        (WebCore::CSSParser::parseFontVariantEastAsian):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h: For the three properties which are simple keyword value
        properties, implement casting operators to automatically convert between RenderStyle
        objects and CSS property objects.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontVariantPosition):
        (WebCore::CSSPrimitiveValue::operator FontVariantCaps):
        (WebCore::CSSPrimitiveValue::operator FontVariantAlternates):
        * css/CSSPropertyNames.in: New properties.
        * css/CSSValueKeywords.in: New values.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontFeatureSettings): Update to not use
        RefPtrs.
        * css/StyleBuilderCustom.h: Properties which are not simple keyword value properties are
        decomposed into multiple members of FontDescription. These properties exist to convert
        between these aggregate members and the CSS properties.
        (WebCore::StyleBuilderCustom::applyInheritFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyValueFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyInheritFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyValueFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyInheritFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyValueFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyInitialWebkitFontVariantLigatures): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitFontVariantLigatures): Deleted.
        (WebCore::StyleBuilderCustom::applyValueWebkitFontVariantLigatures): Deleted.
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::computedAttributesForElement): Unprefix font-variant-ligatures.
        * platform/graphics/FontCache.h: Update cache to be sensitive to new state in
        FontDescription.
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::computeHash):
        (WebCore::FontDescriptionKey::makeFlagsKey):
        (WebCore::FontDescriptionKey::makeFlagKey): Deleted.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::codePath): These new variants should trigger the complex text
        codepath.
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::computeTypesettingFeatures): Update to use new state enum.
        * platform/graphics/FontDescription.cpp: Add state to hold new property values.
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontCascadeDescription::FontCascadeDescription): Deleted.
        * platform/graphics/FontDescription.h: Add state to hold new property values.
        (WebCore::FontDescription::featureSettings):
        (WebCore::FontDescription::variantCommonLigatures):
        (WebCore::FontDescription::variantDiscretionaryLigatures):
        (WebCore::FontDescription::variantHistoricalLigatures):
        (WebCore::FontDescription::variantContextualAlternates):
        (WebCore::FontDescription::variantPosition):
        (WebCore::FontDescription::variantCaps):
        (WebCore::FontDescription::variantNumericFigure):
        (WebCore::FontDescription::variantNumericSpacing):
        (WebCore::FontDescription::variantNumericFraction):
        (WebCore::FontDescription::variantNumericOrdinal):
        (WebCore::FontDescription::variantNumericSlashedZero):
        (WebCore::FontDescription::variantAlternates):
        (WebCore::FontDescription::variantEastAsianVariant):
        (WebCore::FontDescription::variantEastAsianWidth):
        (WebCore::FontDescription::variantEastAsianRuby):
        (WebCore::FontDescription::variantSettings):
        (WebCore::FontDescription::setFeatureSettings):
        (WebCore::FontDescription::setVariantCommonLigatures):
        (WebCore::FontDescription::setVariantDiscretionaryLigatures):
        (WebCore::FontDescription::setVariantHistoricalLigatures):
        (WebCore::FontDescription::setVariantContextualAlternates):
        (WebCore::FontDescription::setVariantPosition):
        (WebCore::FontDescription::setVariantCaps):
        (WebCore::FontDescription::setVariantNumericFigure):
        (WebCore::FontDescription::setVariantNumericSpacing):
        (WebCore::FontDescription::setVariantNumericFraction):
        (WebCore::FontDescription::setVariantNumericOrdinal):
        (WebCore::FontDescription::setVariantNumericSlashedZero):
        (WebCore::FontDescription::setVariantAlternates):
        (WebCore::FontDescription::setVariantEastAsianVariant):
        (WebCore::FontDescription::setVariantEastAsianWidth):
        (WebCore::FontDescription::setVariantEastAsianRuby):
        (WebCore::FontDescription::operator==):
        (WebCore::FontCascadeDescription::initialVariantPosition):
        (WebCore::FontCascadeDescription::initialVariantCaps):
        (WebCore::FontCascadeDescription::initialVariantAlternates):
        (WebCore::FontCascadeDescription::commonLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::discretionaryLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::historicalLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::setCommonLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::setDiscretionaryLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::setHistoricalLigaturesState): Deleted.
        (WebCore::FontCascadeDescription::operator==): Deleted.
        * platform/graphics/FontFeatureSettings.cpp: Update to use FontFeatureTag instead of
        WTF::String.
        (WebCore::FontFeature::FontFeature):
        (WebCore::FontFeature::operator==):
        (WebCore::FontFeature::operator<):
        (WebCore::FontFeatureSettings::hash):
        (WebCore::FontFeatureSettings::create): Deleted.
        * platform/graphics/FontFeatureSettings.h: Update to use FontFeatureTag instead of
        WTF::String.
        (WebCore::fontFeatureTag):
        (WebCore::FontFeatureTagHash::hash):
        (WebCore::FontFeatureTagHash::equal):
        (WebCore::FontFeatureTagHashTraits::constructDeletedValue):
        (WebCore::FontFeatureTagHashTraits::isDeletedValue):
        (WebCore::FontFeature::tag):
        (WebCore::FontFeatureSettings::operator==):
        (WebCore::FontFeatureSettings::begin):
        (WebCore::FontFeatureSettings::end):
        (WebCore::FontFeatureSettings::FontFeatureSettings): Deleted.
        * platform/graphics/cocoa/FontCacheCoreText.cpp: Ditto. Also, when computing font
        features, consult with the state inside FontDescription.
        (WebCore::tagEquals):
        (WebCore::appendTrueTypeFeature):
        (WebCore::appendOpenTypeFeature):
        (WebCore::computeFeatureSettingsFromVariants):
        (WebCore::preparePlatformFont):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Update to use references instead of
        pointers.
        (WebCore::HarfBuzzShaper::setFontFeatures):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamily): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Be sensitive to new state inside FontDescription.
        * platform/text/TextFlags.h:
        (WebCore::FontVariantSettings::isAllNormal): New state enums.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription): Be sensitive to new state inside
        FontDescription.
        * rendering/line/BreakingContext.h:

2015-09-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r190085 as it seems to cause crashes in JSC
        <rdar://problem/22825602>

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributesHashTable):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:

2015-09-23  Chris Dumez  <cdumez@apple.com>

        HTMLOutputElement.htmlFor should be settable
        https://bugs.webkit.org/show_bug.cgi?id=149418

        Reviewed by Ryosuke Niwa.

        HTMLOutputElement.htmlFor should be settable as per the latest HTML
        specification:
        - https://html.spec.whatwg.org/multipage/forms.html#the-output-element

        It is supposed to call DOMSettableTokenList.setValue() with the input
        String. This patch adds support for this by adding [PutForwards=value]
        IDL extended attribute.

        This aligns our behavior with the specification, Firefox and Chrome.

        No new tests, already covered by existing test.

        * html/AttributeDOMTokenList.cpp:
        (WebCore::AttributeDOMTokenList::AttributeDOMTokenList):
        (WebCore::AttributeDOMTokenList::attributeValueChanged):
        * html/AttributeDOMTokenList.h:
        - Have AttributeDOMTokenList subclass DOMSettableTokenList instead of
        DOMTokenList so that it can be used in places where the IDL expects
        us to return a DOMSettableTokenList (e.g. HTMLOutputElement.htmlFor).
        - Mark AttributeDOMTokenList as fast allocated.

        * html/DOMSettableTokenList.cpp:
        (WebCore::DOMSettableTokenList::setValue):
        * html/DOMSettableTokenList.h:
        - Move setValue() from DOMTokenList to DOMSettableTokenList
          as it is only needed by DOMSettableTokenList.
        - Get rid of the factory function as all call sites are using
          AttributeDOMTokenList now.
        - Stop inheriting RefCounted as AttributeDOMTokenList handles its
          own refcounting.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::setValueInternal):
        * html/DOMTokenList.h:
        Rename setValue() to setValueInternal() as this version does not
        update the associated attribute value, only the tokens.

        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        - Have HTMLLinkElement.sizes use an AttributeDOMTokenList instead of
          a DOMSettableTokenList as there is an associated attribute. The
          previous code had a bug has setting HTMLLinkElement.sizes would not
          update the associated 'sizes' attribute. Switching to using
          AttributeDOMTokenList fixes this and a new layout test has been added
          to cover this.
        - Create the AttributeDOMTokenList lazily to avoid updating it every
          time the sizes attribute changes until it is actually accessed.

        * html/HTMLOutputElement.cpp:
        * html/HTMLOutputElement.h:
        - Have HTMLLinkElement.htmlFor use an AttributeDOMTokenList instead of
          a DOMSettableTokenList as there is an associated attribute.
        - Create the AttributeDOMTokenList lazily to avoid updating it every
          time the sizes attribute changes until it is actually accessed.

        * html/HTMLOutputElement.idl:
        Add [PutForwards=value] on the htmlFor attribute, as per the
        HTML specification.

2015-09-23  Chris Dumez  <cdumez@apple.com>

        TreeWalker.previousSibling()  / nextSibling() does not behave according to the specification
        https://bugs.webkit.org/show_bug.cgi?id=149493

        Reviewed by Darin Adler.

        TreeWalker.previousSibling()  / nextSibling() does not behave according
        to the specification:
        - https://dom.spec.whatwg.org/#dom-treewalker-nextsibling
        - https://dom.spec.whatwg.org/#dom-treewalker-previoussibling
        - https://dom.spec.whatwg.org/#concept-traverse-siblings

        In particular, the previous code would fail to update 'node' variable
        in the case acceptNode() returned FILTER_REJECT. This patch fixes this
        and refactors the function to match more closely the text of the spec
        and avoid code duplication.

        No new tests, already covered by existing test.

        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::traverseSiblings):
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):
        (WebCore::TreeWalker::previousNode): Deleted.
        * dom/TreeWalker.h:

2015-09-23  Alex Christensen  <achristensen@webkit.org>

        Fix CMake build.

        * CMakeLists.txt:
        Use {} instead of () for CMake variables.

2015-09-23  Tim Horton  <timothy_horton@apple.com>

        Try to fix the CMake build.

        * CMakeLists.txt:

2015-09-23  Tim Horton  <timothy_horton@apple.com>

        Hopefully fix the production build.

        * DerivedSources.make:
        * WebCore.vcxproj/build-generated-files.pl:
        * WebCore.xcodeproj/project.pbxproj:
        * generate-js-builtins:
        * make-generated-sources.sh:

2015-09-23  Ryosuke Niwa  <rniwa@webkit.org>

        Mac production build fix attempt after r190155.

        * WebCore.xcodeproj/project.pbxproj:

2015-09-23  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessary ancestor traversal in Range::selectNodeContents()
        https://bugs.webkit.org/show_bug.cgi?id=149491

        Reviewed by Andreas Kling.

        Avoid unnecessary ancestor traversal in Range::selectNodeContents().
        A DocumentType Node cannot have children, therefore, there is no need
        to check if ancestors are docTypes. We now simply check if the current
        node is a DocumentType Node, as per the specification:
        - https://dom.spec.whatwg.org/#dom-range-selectnodecontents (step 1)

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

2015-09-23  Chris Dumez  <cdumez@apple.com>

        Range's setStartBefore() / setStartAfter() / setEndBefore() / setEndAfter() do not match the specification
        https://bugs.webkit.org/show_bug.cgi?id=149490

        Reviewed by Andreas Kling.

        Range's setStartBefore() / setStartAfter() / setEndBefore() / setEndAfter()
        behavior do not match the DOM specification:
        - https://dom.spec.whatwg.org/#dom-range-setstartbefore
        - https://dom.spec.whatwg.org/#dom-range-setstartafter
        - https://dom.spec.whatwg.org/#dom-range-setendbefore
        - https://dom.spec.whatwg.org/#dom-range-setendafter

        In particular, instead of step 2:
        "If parent is null, throw an InvalidNodeTypeError exception."

        Our implementation was doing more checks and throwing exceptions in cases
        that the specification does not say we should. We were calling
        checkNodeBA() which had restrictions on both the node type and its
        root type. This is now replaced by a simple null check on the parent,
        as per the specification.

        Firefox's behavior matches the specification.

        No new tests, already covered by existing tests.

        * dom/Range.cpp:
        (WebCore::Range::setStartAfter):
        (WebCore::Range::setEndBefore):
        (WebCore::Range::setEndAfter):
        (WebCore::Range::setStartBefore):
        (WebCore::Range::cloneRange): Deleted.
        (WebCore::Range::selectNode): Deleted.
        (WebCore::Range::selectNodeContents): Deleted.
        (WebCore::Range::absoluteTextRects): Deleted.
        * dom/Range.h:

2015-09-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190168.
        https://bugs.webkit.org/show_bug.cgi?id=149502

        it broke debug builds. (Requested by zalan on #webkit).

        Reverted changeset:

        "HTMLOutputElement.htmlFor should be settable"
        https://bugs.webkit.org/show_bug.cgi?id=149418
        http://trac.webkit.org/changeset/190168

2015-09-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190160.
        https://bugs.webkit.org/show_bug.cgi?id=149501

        media/media-controls-play-button-updates.html fails on
        Yosemite and EFL (Requested by zalan on #webkit).

        Reverted changeset:

        "[GTK] playbutton in media controls is not changed when it is
        clicked."
        https://bugs.webkit.org/show_bug.cgi?id=149113
        http://trac.webkit.org/changeset/190160

2015-09-23  Antti Koivisto  <antti@apple.com>

        Try to fix build.

        * css/DocumentRuleSets.h:
        * inspector/InspectorInstrumentation.h:

2015-09-23  Antti Koivisto  <antti@apple.com>

        Fix sorting

        * dom/DOMAllInOne.cpp:

2015-09-22  Antti Koivisto  <antti@apple.com>

        Split author style code out from DocumentStyleSheetCollection
        https://bugs.webkit.org/show_bug.cgi?id=149446

        Reviewed by Andreas Kling.

        Shadow trees may have their own author style. Factor the related code out so we can use
        it outside the document context.

        DocumentStyleSheetCollection is replaced by two classes:

        AuthorStyleSheets - author stylesheets and mutation optimization code
        ExtensionStyleSheets - user stylesheets, injected author stylesheets, content extension stylesheets

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::didMutateRules):
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::~DocumentRuleSets):
        (WebCore::DocumentRuleSets::initUserStyle):
        * css/DocumentRuleSets.h:
        (WebCore::DocumentRuleSets::sibling):
        (WebCore::DocumentRuleSets::uncommonAttribute):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection): Deleted.
        * css/InspectorCSSOMWrappers.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::detachFromDocument):
        (WebCore::StyleSheetList::length):
        * dom/AuthorStyleSheets.cpp: Added.
        (WebCore::AuthorStyleSheets::AuthorStyleSheets):
        (WebCore::AuthorStyleSheets::combineCSSFeatureFlags):
        (WebCore::AuthorStyleSheets::resetCSSFeatureFlags):
        (WebCore::AuthorStyleSheets::addAuthorSheet):
        (WebCore::AuthorStyleSheets::removePendingSheet):
        (WebCore::AuthorStyleSheets::addStyleSheetCandidateNode):
        (WebCore::AuthorStyleSheets::removeStyleSheetCandidateNode):
        (WebCore::AuthorStyleSheets::collectActiveStyleSheets):
        (WebCore::AuthorStyleSheets::analyzeStyleSheetChange):
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::AuthorStyleSheets::updateActiveStyleSheets):
        (WebCore::AuthorStyleSheets::activeStyleSheetsForInspector):
        (WebCore::AuthorStyleSheets::activeStyleSheetsContains):
        (WebCore::AuthorStyleSheets::detachFromDocument):
        * dom/AuthorStyleSheets.h: Added.
        (WebCore::AuthorStyleSheets::activeStyleSheets):
        (WebCore::AuthorStyleSheets::styleSheets):
        (WebCore::AuthorStyleSheets::styleSheetsForStyleSheetList):
        (WebCore::AuthorStyleSheets::pendingUpdateType):
        (WebCore::AuthorStyleSheets::setPendingUpdateType):
        (WebCore::AuthorStyleSheets::flushPendingUpdates):
        (WebCore::AuthorStyleSheets::preferredStylesheetSetName):
        (WebCore::AuthorStyleSheets::selectedStylesheetSetName):
        (WebCore::AuthorStyleSheets::setPreferredStylesheetSetName):
        (WebCore::AuthorStyleSheets::setSelectedStylesheetSetName):
        (WebCore::AuthorStyleSheets::addPendingSheet):
        (WebCore::AuthorStyleSheets::hasPendingSheets):
        (WebCore::AuthorStyleSheets::usesFirstLineRules):
        (WebCore::AuthorStyleSheets::usesFirstLetterRules):
        (WebCore::AuthorStyleSheets::usesRemUnits):
        (WebCore::AuthorStyleSheets::setUsesRemUnit):
        (WebCore::AuthorStyleSheets::usesStyleBasedEditability):
        (WebCore::AuthorStyleSheets::setUsesStyleBasedEditability):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createStyleResolver):
        (WebCore::Document::fontsNeedUpdate):
        (WebCore::Document::usesStyleBasedEditability):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::preferredStylesheetSet):
        (WebCore::Document::selectedStylesheetSet):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::scheduleOptimizedStyleSheetUpdate):
        (WebCore::Document::styleResolverChanged):
        (WebCore::Document::haveStylesheetsLoaded):
        (WebCore::Document::getCachedLocale):
        * dom/Document.h:
        (WebCore::Document::authorStyleSheets):
        (WebCore::Document::extensionStyleSheets):
        (WebCore::Document::gotoAnchorNeededAfterStylesheetsLoad):
        (WebCore::Document::setGotoAnchorNeededAfterStylesheetsLoad):
        (WebCore::Document::styleSheetCollection): Deleted.
        * dom/DocumentStyleSheetCollection.cpp: Removed.
        * dom/DocumentStyleSheetCollection.h: Removed.
        * dom/ExtensionStyleSheets.cpp: Copied from Source/WebCore/dom/DocumentStyleSheetCollection.cpp.
        (WebCore::ExtensionStyleSheets::ExtensionStyleSheets):
        (WebCore::ExtensionStyleSheets::pageUserSheet):
        (WebCore::ExtensionStyleSheets::clearPageUserSheet):
        (WebCore::ExtensionStyleSheets::updatePageUserSheet):
        (WebCore::ExtensionStyleSheets::injectedUserStyleSheets):
        (WebCore::ExtensionStyleSheets::injectedAuthorStyleSheets):
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache):
        (WebCore::ExtensionStyleSheets::invalidateInjectedStyleSheetCache):
        (WebCore::ExtensionStyleSheets::addUserSheet):
        (WebCore::ExtensionStyleSheets::addDisplayNoneSelector):
        (WebCore::ExtensionStyleSheets::maybeAddContentExtensionSheet):
        (WebCore::ExtensionStyleSheets::styleResolverChangedTimerFired):
        (WebCore::ExtensionStyleSheets::detachFromDocument):
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection): Deleted.
        (WebCore::DocumentStyleSheetCollection::combineCSSFeatureFlags): Deleted.
        (WebCore::DocumentStyleSheetCollection::resetCSSFeatureFlags): Deleted.
        (WebCore::DocumentStyleSheetCollection::pageUserSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::clearPageUserSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::updatePageUserSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache): Deleted.
        (WebCore::DocumentStyleSheetCollection::invalidateInjectedStyleSheetCache): Deleted.
        (WebCore::DocumentStyleSheetCollection::addAuthorSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::addUserSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::addDisplayNoneSelector): Deleted.
        (WebCore::DocumentStyleSheetCollection::maybeAddContentExtensionSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::styleResolverChangedTimerFired): Deleted.
        (WebCore::DocumentStyleSheetCollection::removePendingSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::addStyleSheetCandidateNode): Deleted.
        (WebCore::DocumentStyleSheetCollection::removeStyleSheetCandidateNode): Deleted.
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange): Deleted.
        (WebCore::filterEnabledNonemptyCSSStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::activeStyleSheetsForInspector): Deleted.
        (WebCore::DocumentStyleSheetCollection::activeStyleSheetsContains): Deleted.
        (WebCore::DocumentStyleSheetCollection::detachFromDocument): Deleted.
        * dom/ExtensionStyleSheets.h: Copied from Source/WebCore/dom/DocumentStyleSheetCollection.h.
        (WebCore::ExtensionStyleSheets::documentUserStyleSheets):
        (WebCore::DocumentStyleSheetCollection::styleSheetsForStyleSheetList): Deleted.
        (WebCore::DocumentStyleSheetCollection::activeAuthorStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::documentUserStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::documentAuthorStyleSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::pendingUpdateType): Deleted.
        (WebCore::DocumentStyleSheetCollection::setPendingUpdateType): Deleted.
        (WebCore::DocumentStyleSheetCollection::flushPendingUpdates): Deleted.
        (WebCore::DocumentStyleSheetCollection::preferredStylesheetSetName): Deleted.
        (WebCore::DocumentStyleSheetCollection::selectedStylesheetSetName): Deleted.
        (WebCore::DocumentStyleSheetCollection::setPreferredStylesheetSetName): Deleted.
        (WebCore::DocumentStyleSheetCollection::setSelectedStylesheetSetName): Deleted.
        (WebCore::DocumentStyleSheetCollection::addPendingSheet): Deleted.
        (WebCore::DocumentStyleSheetCollection::hasPendingSheets): Deleted.
        (WebCore::DocumentStyleSheetCollection::usesFirstLineRules): Deleted.
        (WebCore::DocumentStyleSheetCollection::usesFirstLetterRules): Deleted.
        (WebCore::DocumentStyleSheetCollection::usesRemUnits): Deleted.
        (WebCore::DocumentStyleSheetCollection::setUsesRemUnit): Deleted.
        (WebCore::DocumentStyleSheetCollection::usesStyleBasedEditability): Deleted.
        (WebCore::DocumentStyleSheetCollection::setUsesStyleBasedEditability): Deleted.
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::insertedIntoDocument):
        (WebCore::InlineStyleSheetOwner::removedFromDocument):
        (WebCore::InlineStyleSheetOwner::clearDocumentData):
        (WebCore::InlineStyleSheetOwner::childrenChanged):
        (WebCore::InlineStyleSheetOwner::createSheet):
        (WebCore::InlineStyleSheetOwner::sheetLoaded):
        (WebCore::InlineStyleSheetOwner::startLoadingDynamicSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::~ProcessingInstruction):
        (WebCore::ProcessingInstruction::nodeName):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::sheetLoaded):
        (WebCore::ProcessingInstruction::insertedInto):
        (WebCore::ProcessingInstruction::removedFrom):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::insertedInto):
        (WebCore::HTMLLinkElement::removedFrom):
        (WebCore::HTMLLinkElement::addPendingSheet):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLQuoteElement.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::collectAllDocumentStyleSheets):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        (WebCore::Page::setUserContentController):
        * page/PageGroup.cpp:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::invalidateInjectedStyleSheetCacheInAllFrames):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight):
        (WebCore::RenderBlock::getFirstLetter):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::uncachedFirstLineStyle):
        (WebCore::RenderElement::cachedFirstLineStyle):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::firstLineStyle):
        (WebCore::RenderElement::setAncestorLineBoxDirty):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        (WebCore::RenderInline::lineHeight):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::lineHeight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveLocal):

2015-09-23  Chris Dumez  <cdumez@apple.com>

        HTMLOutputElement.htmlFor should be settable
        https://bugs.webkit.org/show_bug.cgi?id=149418

        Reviewed by Ryosuke Niwa.

        HTMLOutputElement.htmlFor should be settable as per the latest HTML
        specification:
        - https://html.spec.whatwg.org/multipage/forms.html#the-output-element

        It is supposed to call DOMSettableTokenList.setValue() with the input
        String. This patch adds support for this by adding [PutForwards=value]
        IDL extended attribute.

        This aligns our behavior with the specification, Firefox and Chrome.

        No new tests, already covered by existing test.

        * html/AttributeDOMTokenList.cpp:
        (WebCore::AttributeDOMTokenList::AttributeDOMTokenList):
        (WebCore::AttributeDOMTokenList::attributeValueChanged):
        * html/AttributeDOMTokenList.h:
        - Have AttributeDOMTokenList subclass DOMSettableTokenList instead of
        DOMTokenList so that it can be used in places where the IDL expects
        us to return a DOMSettableTokenList (e.g. HTMLOutputElement.htmlFor).
        - Mark AttributeDOMTokenList as fast allocated.

        * html/DOMSettableTokenList.cpp:
        (WebCore::DOMSettableTokenList::setValue):
        * html/DOMSettableTokenList.h:
        - Move setValue() from DOMTokenList to DOMSettableTokenList
          as it is only needed by DOMSettableTokenList.
        - Get rid of the factory function as all call sites are using
          AttributeDOMTokenList now.
        - Stop inheriting RefCounted as AttributeDOMTokenList handles its
          own refcounting.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::setValueInternal):
        * html/DOMTokenList.h:
        Rename setValue() to setValueInternal() as this version does not
        update the associated attribute value, only the tokens.

        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        - Have HTMLLinkElement.sizes use an AttributeDOMTokenList instead of
          a DOMSettableTokenList as there is an associated attribute. The
          previous code had a bug has setting HTMLLinkElement.sizes would not
          update the associated 'sizes' attribute. Switching to using
          AttributeDOMTokenList fixes this and a new layout test has been added
          to cover this.
        - Create the AttributeDOMTokenList lazily to avoid updating it every
          time the sizes attribute changes until it is actually accessed.

        * html/HTMLOutputElement.cpp:
        * html/HTMLOutputElement.h:
        - Have HTMLLinkElement.htmlFor use an AttributeDOMTokenList instead of
          a DOMSettableTokenList as there is an associated attribute.
        - Create the AttributeDOMTokenList lazily to avoid updating it every
          time the sizes attribute changes until it is actually accessed.

        * html/HTMLOutputElement.idl:
        Add [PutForwards=value] on the htmlFor attribute, as per the
        HTML specification.

2015-09-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] playbutton in media controls is not changed when it is clicked.
        https://bugs.webkit.org/show_bug.cgi?id=149113

        Reviewed by Philippe Normand.

        When the play button in media controls is clicked, a 'paused' class is added or removed
        for the element to update its appearance. Although Document::recalcStyle is triggered
        by that class attribute change, the play button is not changed since there is
        no difference in styles whether having the 'paused' class or not. Gtk port
        does not define the -webkit-media-controls-play-button.paused. To fix this,
        -webkit-media-controls-play-button.paused is newly defined with a dummy style,
        "position: relative;", which should not change the play button appearance,
        but be clearly different in style.

        Test: media/media-controls-play-button-updates.html

        * css/mediaControlsGtk.css:
        (video::-webkit-media-controls-play-button.paused):

2015-09-23  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStream pipeThrough
        https://bugs.webkit.org/show_bug.cgi?id=147556

        Reviewed by Darin Adler.

        Adding initial support for JS builtins within WebCore.
        This patch allows implementing IDL interface methods in JS, by using the new JSBuiltin keyword.
        (No support yet for private identifiers, constructors or accessors).
        Integration of the built-in executables and names is implemented within WebCoreJSClientData.
        Two files are generated for each JS builtin file:
        - builtin h/cpp files similar to JSCBuiltins.cpp/.h, generated through WebCore/generate-js-builtins from JavaScriptCore/generate-js-builtins)
        - A builtin wrapper file mimicking BuiltinExecutables (generated from WebCore/generate-js-builtins)
        Contrary to JSC, each js file is generating its own cpp/h file.
        This allows including those files within the JSXX.cpp/.h files generated from the IDL where compilation guard may take effect.

        Disabled GObject binding for JSBuiltin methods.

        Test: streams/readable-stream-pipeThrough.html

        * CMakeLists.txt: Triggering generate-js-builtins for JS files.
        * DerivedSources.make: Ditto.
        * ForwardingHeaders/builtins/BuiltinUtils.h: Added.
        * ForwardingHeaders/bytecode/UnlinkedFunctionExecutable.h: Added.
        * ForwardingHeaders/runtime/ConstructAbility.h: Added.
        * Modules/streams/ReadableStream.idl: Marking pipeThrough as JS builtin
        * Modules/streams/ReadableStream.js: Added.
        (pipeThrough):
        * bindings/js/JSReadableStreamCustom.cpp:
        * bindings/js/WebCoreJSClientData.h: Adding ReadableStreamBuiltinsWrapper to store ReadableStream builtin executable
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::readableStreamBuiltins):
        (WebCore::initNormalWorldClientData):
        * bindings/scripts/CodeGeneratorGObject.pm: Disabled GObject binding for JSBuiltin methods.
        * bindings/scripts/CodeGeneratorJS.pm: Adding support for JSBuiltin keyword.
        (GetFunctionName):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateHashTableValueArray):
        (ComputeFunctionSpecial):
        (UseJSBuiltins):
        * bindings/scripts/IDLAttributes.txt: Adding JSBuiltin.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_js_builtin_method):
        (webkit_dom_test_obj_js_builtin_method_with_args):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj jsBuiltinMethod]):
        (-[DOMTestObj jsBuiltinMethodWithArgs:strArg:objArg:]):
        * bindings/scripts/test/TestObj.idl:
        * generate-js-builtins: Added.

2015-09-22  Ryosuke Niwa  <rniwa@webkit.org>

        Event fired on a detached node does not bubble up
        https://bugs.webkit.org/show_bug.cgi?id=149488

        Reviewed by Antti Koivisto.

        The bug was caused by an explicit check inside EventPath to match an old Firefox behavior (see r19897).
        Since Firefox's behavior has changed to match DOM4: https://dom.spec.whatwg.org/#concept-event-dispatch

        Fixed the bug by removing the check. The new behavior matches DO4 and behaviors of Firefox and Chrome.

        Test: fast/events/event-propagation-in-detached-tree.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventPath::EventPath):

2015-09-22  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Add a file of pointer-lock to cmake ports
        https://bugs.webkit.org/show_bug.cgi?id=149453

        Reviewed by Csaba Osztrogonác.

        Some cmake ports will be able to enable POINTER_LOCK. To support it,
        this patch adds PointerLockController.cpp, and fix a build break in WK2.

        * CMakeLists.txt:

2015-09-22  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary ancestor traversal in Range::selectNode()
        https://bugs.webkit.org/show_bug.cgi?id=149482

        Reviewed by Ryosuke Niwa.

        Drop unnecessary ancestor traversal in Range::selectNode(). It traversed
        the ancestors to throw a INVALID_NODE_TYPE_ERR if one of them was a
        DocumentType Node. However, it is impossible for a DocumentType Node to
        have children.

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

2015-09-22  Brian Weinstein  <bweinstein@apple.com>

        Error message in ContentExtensionError.cpp shouldn't have two spaces between sentences.
        https://bugs.webkit.org/show_bug.cgi?id=149479

        Reviewed by Andy Estes.

        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):

2015-09-22  Chris Dumez  <cdumez@apple.com>

        Range.surroundContents() should check for partially contained non-Text nodes first
        https://bugs.webkit.org/show_bug.cgi?id=149476

        Reviewed by Darin Adler.

        Range.surroundContents() should check for partially contained non-Text
        nodes first, before checking the type of the newParent parameter:
        - https://dom.spec.whatwg.org/#dom-range-surroundcontents (step 1 and 2)

        Firefox and Chrome follow the specification.

        No new tests, already covered by existing test.

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

2015-09-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r190134.
        https://bugs.webkit.org/show_bug.cgi?id=149481

        "Seems to cause crashes during garbage collection" (Requested
        by cdumez on #webkit).

        Reverted changeset:

        "HTMLOutputElement.htmlFor should be settable"
        https://bugs.webkit.org/show_bug.cgi?id=149418
        http://trac.webkit.org/changeset/190134

2015-09-22  Chris Dumez  <cdumez@apple.com>

        Range.intersectsNode() does not behave according to the specification when start / end are equal
        https://bugs.webkit.org/show_bug.cgi?id=148774
        <rdar://problem/22571418>

        Reviewed by Darin Adler.

        Range.intersectsNode() does not behave according to the specification
        when start / end are equal:
        https://dom.spec.whatwg.org/#dom-range-intersectsnode

        The specification says:
        "If (parent, offset) is before end and (parent, offset + 1) is after
        start, return true."

        However, the way we were detecting "is before end" and "is after start"
        was flawed in the case where start / end were equal. This is because when
        comparePoint() return 0, then it means that the node/offset is not only
        equal to start but also equal to end. As such, it is not "after start"
        / "before end".

        No new tests, already covered by existing.

        * dom/Range.cpp:
        (WebCore::Range::intersectsNode):
        (WebCore::highestAncestorUnderCommonRoot): Deleted.

2015-09-22  Chris Dumez  <cdumez@apple.com>

        HTMLOutputElement.htmlFor should be settable
        https://bugs.webkit.org/show_bug.cgi?id=149418

        Reviewed by Darin Adler.

        HTMLOutputElement.htmlFor should be settable as per the latest HTML
        specification:
        - https://html.spec.whatwg.org/multipage/forms.html#the-output-element

        It is supposed to call DOMSettableTokenList.setValue() with the input
        String. This patch adds support for this by adding [PutForwards=value]
        IDL extended attribute.

        This aligns our behavior with the specification, Firefox and Chrome.

        No new tests, already covered by existing test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::classList):
        * dom/Element.cpp:
        (WebCore::Element::classList):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setClassList):
        * html/AttributeDOMTokenList.h:
        * html/DOMSettableTokenList.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList):
        * html/HTMLAnchorElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::relList):
        * html/HTMLLinkElement.h:
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::HTMLOutputElement):
        (WebCore::HTMLOutputElement::parseAttribute):
        (WebCore::HTMLOutputElement::childrenChanged): Deleted.
        * html/HTMLOutputElement.h:
        * html/HTMLOutputElement.idl:

2015-09-22  Filip Pizlo  <fpizlo@apple.com>

        Get rid of ENABLE(GGC)
        https://bugs.webkit.org/show_bug.cgi?id=149472

        Reviewed by Mark Hahnenberg and Mark Lam.

        No new tests because no new behavior.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-09-22  Tim Horton  <timothy_horton@apple.com>

        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
        https://bugs.webkit.org/show_bug.cgi?id=149428

        Reviewed by Simon Fraser and Darin Adler.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        Make the RenderingMode parameter to ImageBuffer::create non-optional.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::renderingMode):
        * platform/graphics/GraphicsTypes.h:
        Add renderingMode() getter so that every caller doesn't need to do the conversion to RenderingMode.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        These five callers create unconditionally unaccelerated ImageBuffers which
        should probably instead respect the acceleration bit from the context
        that the ImageBuffer will eventually be painted into. Bugs have been filed.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        Adjust the argument order and remove defaults which are passed explicitly.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        Snapshots are (currently) meant to be taken without accelerated drawing.
        Make this explicit.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        Make use of createCompatibleBuffer. This caller was previously creating
        an unconditionally unaccelerated context!

        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::drawPattern):
        Remove a comment.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::getScratchBuffer):
        ShadowBlur is only used with unaccelerated contexts, so it's OK to hardcode Unaccelerated here.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asImageBuffer):
        (WebCore::FilterEffect::createImageBufferResult):
        Flip the order of the arguments.

        (WebCore::FilterEffect::openCLImageToImageBuffer):
        This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded):
        Adjust the argument order and remove defaults which are passed explicitly.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        Get rid of the unneeded renderingMode local, and factor out retrieval of Frame.

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        These two callers are unconditionally creating unaccelerated buffers,
        and changing this to match the destination context seems to actually
        break things. This needs further investigation.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        This caller was previously creating an unaccelerated buffer; instead, match the destination buffer.

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        Make use of renderingMode().

        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        Adjust the argument order.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2015-09-22  Chris Dumez  <cdumez@apple.com>

        XMLHttpRequest properties should be on the prototype
        https://bugs.webkit.org/show_bug.cgi?id=149465

        Reviewed by Darin Adler.

        Move most XMLHttpRequest properties to the prototype, as per the Web IDL
        specification. This should be web-compatible now that properties on the
        prototype are configurable after r190104.

        The 'response' / 'responseText' properties are still incorrectly on the
        instance because they are currently using a [CustomGetter] in our IDL
        and the bindings generator currently does not move such properties to
        the prototype.

        Test:
        fast/xmlhttprequest/xmlhttprequest-properties-prototype.html
        js/dom/xhr-prototype-define-property.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (InterfaceRequiresAttributesOnInstanceForCompatibility): Deleted.

2015-09-22  Chris Dumez  <cdumez@apple.com>

        Drop support for legacy EntityReference DOM Node type
        https://bugs.webkit.org/show_bug.cgi?id=149348

        Reviewed by Darin Adler.

        Drop support for legacy EntityReference DOM Node type.

        EntityReference has been dropped from the DOM specification:
        - https://dom.spec.whatwg.org/#dom-core-changes

        EntityReference is not supported in Firefox:
        - https://developer.mozilla.org/en-US/docs/Web/API/EntityReference
        - https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator.expandEntityReferences
        - https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker.expandEntityReferences

        Chrome dropped support for EntityReference a while back (May 2013):
        - EntityReference: https://code.google.com/p/chromium/issues/detail?id=226628
        - NodeFilter / TreeWalker.expandEntityReferences:
          - https://groups.google.com/a/chromium.org/d/msg/blink-dev/-ZO3eja4maA/86T13XJwQpUJ
          - https://src.chromium.org/viewvc/blink?view=rev&revision=185771

        IE also dropped support for EntityReference Nodes:
        https://msdn.microsoft.com/library/ff974819(v=vs.85).aspx (Remarks section)

        No new tests, already covered by existing test.

        * DerivedSources.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap): Deleted.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Deleted.
        * bindings/objc/DOM.mm:
        (kitClass): Deleted.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip webkit_dom_document_create_entity_reference until Carlos fixes it.
        * dom/Attr.cpp:
        (WebCore::Attr::childTypeAllowed):
        (WebCore::Attr::childrenChanged): Deleted.
        * dom/Attr.h:
        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChild): Deleted.
        (WebCore::checkAcceptChildGuaranteedNodeTypes): Deleted.
        (WebCore::ContainerNode::removeChild): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::createEntityReference):
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        (WebCore::Document::createEditingTextNode): Deleted.
        (WebCore::Document::importNode): Deleted.
        (WebCore::Document::adoptNode): Deleted.
        (WebCore::Document::scheduleForcedStyleRecalc): Deleted.
        (WebCore::Document::scheduleStyleRecalc): Deleted.
        (WebCore::Document::childTypeAllowed): Deleted.
        (WebCore::Document::canAcceptChild): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::childTypeAllowed): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::childTypeAllowed): Deleted.
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::EntityReference):
        * dom/EntityReference.h:
        * dom/EntityReference.idl:
        * dom/Node.cpp:
        (WebCore::Node::setNodeValue):
        (WebCore::Node::dumpStatistics): Deleted.
        (WebCore::Node::childNodes): Deleted.
        (WebCore::Node::lastDescendant): Deleted.
        (WebCore::Node::isDescendantOf): Deleted.
        (WebCore::Node::textContent): Deleted.
        (WebCore::Node::ancestorElement): Deleted.
        (WebCore::hashPointer): Deleted.
        * dom/Node.h:
        (WebCore::Node::isDocumentTypeNode): Deleted.
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::create):
        * dom/NodeIterator.idl:
        * dom/Range.cpp:
        (WebCore::Range::checkDeleteExtract):
        (WebCore::lengthOfContentsInNode): Deleted.
        (WebCore::Range::processContentsBetweenOffsets): Deleted.
        (WebCore::Range::insertNode): Deleted.
        (WebCore::Range::checkNodeWOffset): Deleted.
        (WebCore::Range::checkNodeBA): Deleted.
        (WebCore::Range::cloneRange): Deleted.
        (WebCore::Range::selectNode): Deleted.
        (WebCore::Range::selectNodeContents): Deleted.
        (WebCore::Range::surroundContents): Deleted.
        (WebCore::Range::shadowRoot): Deleted.
        (WebCore::Range::pastLastNode): Deleted.
        (WebCore::Range::absoluteBoundingBox): Deleted.
        (WebCore::Range::absoluteTextRects): Deleted.
        * dom/Range.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::childTypeAllowed): Deleted.
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::NodeIteratorBase):
        (WebCore::NodeIteratorBase::acceptNode): Deleted.
        * dom/Traversal.h:
        (WebCore::NodeIteratorBase::expandEntityReferences):
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::TreeWalker):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create):
        * dom/TreeWalker.idl:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup): Deleted.
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): Deleted.

2015-09-22  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed 32-bit Yosemite build fix.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):

2015-09-22  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream Mac] implement WebAudioSourceProvider
        https://bugs.webkit.org/show_bug.cgi?id=149419

        Reviewed by Darin Adler.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::audioSourceProvider): New.
        * Modules/mediastream/MediaStreamTrack.h:

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource): Rewrite.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): We know the Vector
          size, so reserve capacity.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::audioSourceProvider): Add.
        * Modules/webaudio/MediaStreamAudioSource.h:
        (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
        (WebCore::MediaStreamAudioSource::deviceId):
        (WebCore::MediaStreamAudioSource::setDeviceId):
        (WebCore::MediaStreamAudioSource::useIDForTrackID): Deleted.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create): Context and track can't be null so take references.
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode): Ditto.
        (WebCore::MediaStreamAudioSourceNode::~MediaStreamAudioSourceNode): Clear provider client.
        (WebCore::MediaStreamAudioSourceNode::setFormat): Create a resampler when necessary.
        (WebCore::MediaStreamAudioSourceNode::process): Process.
        (WebCore::MediaStreamAudioSourceNode::reset): Deleted.
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        (WebCore::MediaStreamAudioSourceNode::mediaStream):
        (WebCore::MediaStreamAudioSourceNode::audioSourceProvider): Deleted.

        * WebCore.xcodeproj/project.pbxproj: Add WebAudioSourceProviderAVFObjC.cpp/h.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::audioSourceProvider): New, passthrough to source.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::audioSourceProvider):

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::audioSourceProvider): New.
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::audioSourceProvider): Assert, this shouldn't be reachable.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h: Added.
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm: Added.
        (WebCore::WebAudioSourceProviderAVFObjC::create):
        (WebCore::WebAudioSourceProviderAVFObjC::WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::~WebAudioSourceProviderAVFObjC):
        (WebCore::WebAudioSourceProviderAVFObjC::startProducingData):
        (WebCore::WebAudioSourceProviderAVFObjC::stopProducingData):
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::setClient):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare):
        (WebCore::WebAudioSourceProviderAVFObjC::process):

2015-09-22  sangdeug.kim  <sangdeug.kim@samsung.com>

        CurrentTime on mediaController is set as 0 when playback is completed.
        https://bugs.webkit.org/show_bug.cgi?id=149154

        Reviewed by Eric Carlson.

        Test : media/media-controller-time-clamp.html

        * html/MediaController.cpp:
        (MediaController::setCurrentTime):
        (MediaController::updatePlaybackState):
        * html/MediaController.h:

2015-09-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189616.
        https://bugs.webkit.org/show_bug.cgi?id=149456

        suspected cause of multiple regressions (Requested by kling on
        #webkit).

        Reverted changeset:

        "[JSC] Weak should only accept cell pointees."
        https://bugs.webkit.org/show_bug.cgi?id=148955
        http://trac.webkit.org/changeset/189616

2015-09-22  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the all-in-one build with GCC
        https://bugs.webkit.org/show_bug.cgi?id=148428

        Reviewed by Darin Adler.

        Removed Source/WebCore/inspector/InspectorIndexedDBAgent.cpp from the all-in-one build.

        * WebCore.vcxproj/WebCore.vcxproj:
        * inspector/InspectorAllInOne.cpp:

2015-09-22  Csaba Osztrogonác  <ossy@webkit.org>

        Fix warnings in IDLParser.pm
        https://bugs.webkit.org/show_bug.cgi?id=149406

        Reviewed by Alex Christensen.

        * bindings/scripts/IDLParser.pm:
        (typeHasNullableSuffix):
        (typeRemoveNullableSuffix):

2015-09-22  Ryosuke Niwa  <rniwa@webkit.org>

        invalidateSlotAssignments should trigger style recalc
        https://bugs.webkit.org/show_bug.cgi?id=149447

        Reviewed by Antti Koivisto.

        Invalidate the render tree of a shadow host when a new child is inserted, an existing child is removed,
        or slot attribute of a child is modified.

        No new tests. Covered by existing tests added in r190101.

        * dom/Element.cpp:
        (WebCore::Element::childrenChanged): Call invalidateSlotAssignments or invalidateDefaultSlotAssignments
        depending on the types of children being inserted or removed since text nodes can only be assigned into
        a default slot.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::invalidateSlotAssignments):
        (WebCore::ShadowRoot::invalidateDefaultSlotAssignments): Added.
        * dom/ShadowRoot.h:
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::invalidate): Reconstruct the render tree for the whole host. We can optimize
        in the future by only invalidating active slot elements instead.
        (WebCore::SlotAssignment::invalidateDefaultSlot): Added.
        * dom/SlotAssignment.h:

2015-09-21  Chris Dumez  <cdumez@apple.com>

        time element should use HTMLTimeElement interface
        https://bugs.webkit.org/show_bug.cgi?id=148840
        <rdar://problem/22586690>

        Reviewed by Ryosuke Niwa.

        Time element should be an instance of HTMLTimeElement instead of generic
        HTMLElement:
        https://html.spec.whatwg.org/multipage/semantics.html#the-time-element

        Firefox exposes HTMLTimeElement. This patch aligns our behavior with
        the specification and Firefox.

        No new tests, already covered by existing test.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * html/HTMLTimeElement.cpp: Added.
        (WebCore::HTMLTimeElement::create):
        (WebCore::HTMLTimeElement::HTMLTimeElement):
        * html/HTMLTimeElement.h: Added.
        * html/HTMLTimeElement.idl: Added.

2015-09-21  Chris Dumez  <cdumez@apple.com>

        DOM attributes on prototypes should be configurable
        https://bugs.webkit.org/show_bug.cgi?id=134364

        Reviewed by Sam Weinig.

        DOM attributes on prototypes should be configurable as per the Web IDL
        specification:
        https://heycam.github.io/webidl/#es-attributes

        This patch aligns our behavior with the specification and Firefox.

        Test: fast/dom/attributes-configurable.html

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

2015-09-21  Filip Pizlo  <fpizlo@apple.com>

        Always use the compiler's CAS implementation and get rid of ENABLE(COMPARE_AND_SWAP)
        https://bugs.webkit.org/show_bug.cgi?id=149438

        Reviewed by Mark Lam.

        No new tests because no new behavior.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::compareAndSwapNonSharedCharacterBreakIterator):
        (WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator):

2015-09-21  Timothy Horton  <timothy_horton@apple.com>

        Allow DataDetectors to pre-filter telephone number menu items
        https://bugs.webkit.org/show_bug.cgi?id=149444
        <rdar://problem/19286320>

        Reviewed by Sam Weinig.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add some SPI.

2015-09-21  Chris Dumez  <cdumez@apple.com>

        Update HTMLTableRowElement.rowIndex to behave according to the specification
        https://bugs.webkit.org/show_bug.cgi?id=148842
        <rdar://problem/22586914>

        Reviewed by Darin Adler.

        Update HTMLTableRowElement.rowIndex to behave according to the
        specification:
        https://html.spec.whatwg.org/multipage/tables.html#dom-tr-rowindex

        In particular, rowIndex no longer returns -1 for <tr> elements that are
        direct children of the table Element. Also,<tr> Elements in all <thead> /
        <tfoot> children of the table Element now get a rowIndex, as per the
        specification:
        - https://html.spec.whatwg.org/multipage/tables.html#dom-table-rows

        Previously, only <tr> elements in the first <thead> and the first <tbody>
        children of the table would get a rowIndex.

        Also, we now abort early and return -1 if the row is a grand-child of a
        table element but its direct parent is not a <thead> / <tbody> / <tfoot>.
        This avoid unnecessary traversal and matches the specification.

        The code is refactored a bit to leverage HTMLTableElement.rows(), as
        per the specification:
        "return the index of the tr element in that table element's rows collection"

        Previously, we would duplicate the table traversal logic. This
        simplifies the code and fixes a bug as the traversal logic was slightly
        different here and in HTMLTableRowsCollection. Because of this, only
        <tr> elements in the first <thead> / <tfoot> would get a rowIndex.
        Performance should be similar.

        No new tests, already covered by existing test.

        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        (WebCore::HTMLTableRowElement::sectionRowIndex): Deleted.
        (WebCore::HTMLTableRowElement::insertCell): Deleted.

2015-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix release builds with security assertion after r190007.

        * dom/DocumentOrderedMap.cpp:
        * dom/DocumentOrderedMap.h:

2015-09-21  Gwang Yoon Hwang  <yoon@igalia.com>

        [Threaded Compositor] Modified to use reference of GraphicsContext instead of pointer
        https://bugs.webkit.org/show_bug.cgi?id=149399

        Reviewed by Darin Adler.

        This fixes build failure after r189144

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaint):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedSurface.h:
        * platform/graphics/texmap/coordinated/Tile.cpp:
        (WebCore::Tile::paintToSurfaceContext):
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:

2015-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        The binding for getDistributedNodes unnecessarily makes a vector of nodes
        https://bugs.webkit.org/show_bug.cgi?id=149434

        Reviewed by Darin Adler.

        Added a jsArray for const Vector<T*>* so that we can generate the binding code for getDistributedNodes()
        without having to create Vector<RefPtr<Node>> out of Vector<Node*>*.

        * bindings/js/JSDOMBinding.h:
        (WebCore::jsArray): Added.
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::assignedNodes):
        (WebCore::HTMLSlotElement::getDistributedNodes): Deleted.
        * html/HTMLSlotElement.h:
        * html/HTMLSlotElement.idl:

2015-09-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Show tiled drawing debug overlay on Windows
        https://bugs.webkit.org/show_bug.cgi?id=149426

        Reviewed by Dean Jackson.

        No new tests: No change in behavior.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator): Revise signature to accept
        a scale value and a font size.
        (WebCore::PlatformCALayer::drawTextAtPoint): Revise signature for new arguments.
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::drawTileMapContents): Removing scaling and text drawing code,
        and call common CALayer drawing routine.
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::create): Switch to nullptr.
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost): Switch to C++14 initializers.
        (WebCore::CACFLayerTreeHost::setPage): Added.
        (WebCore::CACFLayerTreeHost::rootLayer): Update debug info layer if requested by settings.
        (WebCore::CACFLayerTreeHost::layerTreeDidChange): Ditto.
        (WebCore::CACFLayerTreeHost::mainFrameTiledBacking): Added.
        (WebCore::CACFLayerTreeHost::updateDbugInfoLayer): Added.
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (WebCore::PlatformCALayerWin::drawTextAtPoint): Revised signature for new arguments. Use
        argument for font size (rather than hard-coded '18'). Adjust font size by passed scale value.
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2015-09-21  Chris Dumez  <cdumez@apple.com>

        [JS Bindings] prototype.constructor should be writable
        https://bugs.webkit.org/show_bug.cgi?id=149412
        <rdar://problem/22545096>

        Reviewed by Geoffrey Garen.

        prototype.constructor should have the following properties:
        { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }

        as per the Web IDL specification:
        https://heycam.github.io/webidl/#interface-prototype-object

        In WebKit, it is currently not writable. It is writable in Firefox.

        Test: fast/events/event-prototype-constructor-properties.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributesHashTable):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:

2015-09-21  Antti Koivisto  <antti@apple.com>

        HTMLSlotElement should render its assigned nodes
        https://bugs.webkit.org/show_bug.cgi?id=149242

        Reviewed by Ryosuke Niwa.

        Support rendering the assigned nodes under HTMLSlotElement.

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::assignSlots):

            Move the empty slot finding to the loop as the hash table may mutate.

        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::attributeChanged):
        (WebCore::HTMLSlotElement::assignedNodes):
        (WebCore::HTMLSlotElement::getDistributedNodes):
        * html/HTMLSlotElement.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachSlot):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachChildren):
        (WebCore::Style::detachShadowRoot):
        (WebCore::Style::detachSlot):
        (WebCore::Style::detachRenderTree):
        (WebCore::Style::resolveChildren):
        (WebCore::Style::resolveSlot):
        (WebCore::Style::resolveTree):

2015-09-21  Tim Horton  <timothy_horton@apple.com>

        svg/custom/hidpi-masking-clipping.svg fails with accelerated drawing on
        https://bugs.webkit.org/show_bug.cgi?id=149413
        <rdar://problem/22787058>

        Reviewed by Dean Jackson.

        No new tests, this is covered by existing tests.

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourcePattern.h:
        Make pattern images respect the accelerated bit of the parent GraphicsContext.

2015-09-21  Chris Dumez  <cdumez@apple.com>

        DOMTokenList.add() / remove() should run the update steps even if tokens were not modified
        https://bugs.webkit.org/show_bug.cgi?id=148780
        <rdar://problem/22571794>

        Reviewed by Ryosuke Niwa.

        DOMTokenList.add() / remove() should run the update steps even if tokens
        were not modified, as per the DOM specification:
        - https://dom.spec.whatwg.org/#dom-domtokenlist-add
        - https://dom.spec.whatwg.org/#dom-domtokenlist-remove

        The update steps are specified at:
        - https://dom.spec.whatwg.org/#concept-DTL-update

        This will have several side effects if the DOMTokenList has an associated
        attribute. It will overwrite the attribute value which will:
        1. Generate a Mutation event.
        2. Possibly change the attribute value as the new value is the "ordered
           set serializer for tokens". So it will get rid of extra spaces and
           duplicates in the attribute value.

        Firefox already behaves according to the specification.

        No new tests, already covered by existing tests.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::addInternal):
        (WebCore::DOMTokenList::removeInternal):
        (WebCore::DOMTokenList::remove): Deleted.

2015-09-21  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Clean up MediaStream private interfaces
        https://bugs.webkit.org/show_bug.cgi?id=149381

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::getAudioTracks):
        (WebCore::MediaStream::getVideoTracks):
        (WebCore::MediaStream::getTracks):
        (WebCore::MediaStream::activeStatusChanged):
        (WebCore::MediaStream::didAddTrack):
        (WebCore::MediaStream::didRemoveTrack):
        (WebCore::MediaStream::registry):
        (WebCore::MediaStream::trackVectorForType):
        (WebCore::MediaStream::didAddTrackToPrivate): Deleted.
        (WebCore::MediaStream::didRemoveTrackFromPrivate): Deleted.
        * Modules/mediastream/MediaStream.h:

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::lookup):
        (WebCore::MediaStreamRegistry::MediaStreamRegistry):
        * Modules/mediastream/MediaStreamRegistry.h:

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind):
        (WebCore::MediaStreamTrack::removeObserver):
        (WebCore::MediaStreamTrack::trackEnded):
        (WebCore::MediaStreamTrack::trackMutedChanged):
        (WebCore::MediaStreamTrack::trackStatesChanged):
        (WebCore::MediaStreamTrack::configureTrackRendering):
        * Modules/mediastream/MediaStreamTrack.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load):

        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm:
        (WebCore::MediaStreamPrivateAVFObjC::create):
        (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC):

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::~MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::tracks):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient):
        (WebCore::MediaStreamPrivate::id):
        (WebCore::MediaStreamPrivate::active):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate): Deleted.
        (WebCore::MediaStreamPrivate::~MediaStreamPrivate): Deleted.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::addObserver):
        (WebCore::MediaStreamTrackPrivate::removeObserver):
        (WebCore::MediaStreamTrackPrivate::label):
        (WebCore::MediaStreamTrackPrivate::endTrack):
        (WebCore::MediaStreamTrackPrivate::sourceStopped):
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged):
        (WebCore::MediaStreamTrackPrivate::sourceStatesChanged):
        (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::Observer::~Observer):
        (WebCore::MediaStreamTrackPrivate::ended):
        (WebCore::MediaStreamTrackPrivate::startProducingData):
        (WebCore::MediaStreamTrackPrivate::stopProducingData):
        (WebCore::MediaStreamTrackPrivate::setMuted):
        (WebCore::MediaStreamTrackPrivateClient::~MediaStreamTrackPrivateClient): Deleted.
        (WebCore::MediaStreamTrackPrivate::setClient): Deleted.
        (WebCore::MediaStreamTrackPrivate::client): Deleted.

        * platform/mediastream/MediaStreamTrackSourcesRequestClient.h:
        (WebCore::TrackSourceInfo::create):
        (WebCore::TrackSourceInfo::id):
        (WebCore::TrackSourceInfo::label):
        (WebCore::TrackSourceInfo::groupId):
        (WebCore::TrackSourceInfo::kind):
        (WebCore::TrackSourceInfo::TrackSourceInfo):
        (WebCore::TrackSourceInfo::deviceId): Deleted.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        (WebCore::RealtimeMediaSource::reset):
        (WebCore::RealtimeMediaSource::setMuted):
        (WebCore::RealtimeMediaSource::statesDidChanged):
        (WebCore::RealtimeMediaSource::readonly):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::id):
        (WebCore::RealtimeMediaSource::persistentId):
        (WebCore::RealtimeMediaSource::setPersistentId):
        (WebCore::RealtimeMediaSource::type):
        (WebCore::RealtimeMediaSource::stopped):
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::getSourcesInfo):

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac):
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr):
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::registerMockRealtimeMediaSourceCenter):
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2015-09-21  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(TEMPLATE_ELEMENT) build after r189945
        https://bugs.webkit.org/show_bug.cgi?id=149400

        Reviewed by Darin Adler.

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2015-09-21  Chris Dumez  <cdumez@apple.com>

        Range.cloneContents() / extractContents should throw a HierarchyRequestError when encountering a doctype
        https://bugs.webkit.org/show_bug.cgi?id=148770
        <rdar://problem/22570898>

        Reviewed by Ryosuke Niwa.

        Range.cloneContents() and Range.extractContents() should throw a
        HierarchyRequestError when encountering a doctype:
        - https://dom.spec.whatwg.org/#concept-range-clone (step 12)
        - https://dom.spec.whatwg.org/#concept-range-extract (step 12)

        However, Range.deleteContents() should not:
        - https://dom.spec.whatwg.org/#dom-range-deletecontents

        WebKit was not throwing in the Range.cloneContents() case. This
        aligns updates our behavior to match the specification and
        Firefox.

        Tests: fast/dom/Range/clone-contents-document-type.html
               fast/dom/Range/delete-contents-document-type.html
               fast/dom/Range/extract-contents-document-type.html

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

2015-09-21  Tim Horton  <timothy_horton@apple.com>

        UserMediaClientMock leaks every test run
        https://bugs.webkit.org/show_bug.cgi?id=149358

        Reviewed by Eric Carlson.

        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::provideUserMediaTo):
        Make provideUserMediaTo operate unconditionally, just like all of the
        other similar functions, reverting r165733.

        * Modules/mediastream/UserMediaController.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        Remove the existing UserMediaController supplement before installing a new one.
        This way, we're replacing it with the one Internals is trying to install,
        instead of leaking UserMediaClientMocks.

2015-09-21  Alex Christensen  <achristensen@webkit.org>

        Generate WebCoreHeaderDetection.h with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=135861

        Reviewed by Brent Fulgham.

        This fixes many of the failing media tests.

        * AVFoundationSupport.py:
        (lookFor):
        (fileContains):
        Use a command line parameter for the WebKitLibraries directory 
        to not require the WEBKIT_LIBRARIES environment variable with the CMake build.
        * DerivedSources.make:
        Pass WEBKIT_LIBRARIES as a command line parameter.
        * PlatformAppleWin.cmake:
        Added missing sources for video.
        * PlatformWin.cmake:
        Generate WebCoreHeaderDetection.h correctly and copy the media controls sources to WebKit.resources.

2015-09-21  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] media controls does not show up when playing video finishes.
        https://bugs.webkit.org/show_bug.cgi?id=149112

        Reviewed by Philippe Normand.

        GTK port does not show controls after playing video. This behavior is different
        from what Mac port does. They do show controls when playing video finishes.
        At least, we should update the timeline before showing it up not to show incorrect numbers
        when reappearing.

        Test: media/media-controls-timeline-updates-after-playing.html

        * Modules/mediacontrols/mediaControlsBase.js:
        (Controller.prototype.setPlaying):
        (Controller.prototype.showControls):

2015-09-21  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] timeline is not updated after few seconds when mouse hovers on controls
        https://bugs.webkit.org/show_bug.cgi?id=149111

        Reviewed by Philippe Normand.

        Timeline is not updated if controlsAreHidden is true. The problem here is that
        the function does not mean actually 'hidden' since it only checkes 'show' and 'hidden'
        class existences. The panel's visibility are not only controlled by the two classes,
        but also by video::-webkit-media-controls-panel:hover. The panel could be visible
        by setting the pseudo hover class. So we need to check if panel is hovered as well in controlsAreHidden().

        Test: media/media-controls-timeline-updates-when-hovered.html

        * Modules/mediacontrols/mediaControlsBase.js:
        (Controller.prototype.controlsAreHidden):

2015-09-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] REGRESSION(188031): ASSERTION FAILED: menu
        https://bugs.webkit.org/show_bug.cgi?id=149379

        Reviewed by Carlos Garcia Campos.

        Remove assert that no longer makes sense.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::setPlatformDescription): Deleted.

2015-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix GTK build after r190030.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_link_element_set_sizes):

2015-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed, another GTK build fix after r190017.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (IsPropertyWriteable):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_set_property): Deleted.

2015-09-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the GTK build after r190017.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):

2015-09-20  Chris Dumez  <cdumez@apple.com>

        Pass JSC::ExecState to the custom bindings by reference
        https://bugs.webkit.org/show_bug.cgi?id=149393

        Reviewed by Sam Weinig.

        Pass JSC::ExecState to the custom bindings by reference instead of by
        pointer as it is expected to be non-null.

2015-09-20  Chris Dumez  <cdumez@apple.com>

        Regression(r190023): fast/dom/navigation-with-sideeffects-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=149392

        Reviewed by Alexey Proskuryakov.

        In the generated code for [PutForwards=xxx], make sure the forwarded
        implementation object is ref'd before calling toString() as toString()
        can be overridden by JS and cause the object to get deref'd / destroyed.

        No new tests, already covered by existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjPutForwardsAttribute):
        (WebCore::setJSTestObjPutForwardsNullableAttribute):

2015-09-19  Chris Dumez  <cdumez@apple.com>

        Get rid of custom bindings for HTMLLinkElement.sizes setter
        https://bugs.webkit.org/show_bug.cgi?id=149382

        Reviewed by Sam Weinig.

        Get rid of custom bindings for HTMLLinkElement.sizes setter by leveraging
        the new [PutForwards=xxx] Web IDL extended attribute, as per the HTML
        specification:
        - https://html.spec.whatwg.org/#htmllinkelement

        Also add FIXME comments in our IDL for various attributes that should be
        using [PutForwards=xxx] according to the HTML specification but are not
        currently. Those were not updated in this patch because it will subtly
        change their web-exposed behavior.

        No new tests, no intended web-exposed behavior change. However, one side
        effect of the change is that the attribtue has moved to the prototype.
        Our bindings generator was keeping this attribute on the instance because
        it has a custom setter.
        Bindings tests coverage was extended.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLLinkElementCustom.cpp: Removed.
        Drop custom bindings for HTMLLinkElement.sizes setter.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        - Stop passing an extra isNull argument to getters of nullable attributes
          that have a wrapper type. These can return a null pointer so there is
          no need for an extra argument.
        - When [PutForwards=xxx] is used, only do the null-check on the attribute
          getter if the attribute is marked as nullable. If the attribute is not
          marked as nullable, the implementation is expected to return a C++
          reference, otherwise a raw pointer. This was needed because
          HTMLLinkElement::sizes() returns a reference as it can never return
          null.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        Add bindings tests coverage for using [PutForwards=xxx] on a
        nullable attribute.

        * dom/Document.idl:
        Mark Document.location as nullable as per the specification. The
        implementation returns a raw pointer and can return null. The
        bindings generator expects a raw pointer and will do a null check
        on it.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLTableCellElement.idl:
        Add FIXME comments for attributes that are supposed to use
        [PutForwards=xxx] as per the HTML specification but currently don't.

        * html/HTMLLinkElement.idl:
        Use [PutForwards=value] for the 'sizes' attribute, as per the
        specification and stop using a custom setter.

2015-09-20  Chris Dumez  <cdumez@apple.com>

        [CallWith=ScriptState] should pass ExecState to the implementation by reference
        https://bugs.webkit.org/show_bug.cgi?id=149378

        Reviewed by Sam Weinig.

        [CallWith=ScriptState] should pass ExecState to the implementation by
        reference instead of pointer, as it is expected to be non-null.

        Also rename the ExecState variables from 'exec' to 'state' in the
        bindings as this is the preferred naming convention.

        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/legacy/LegacyCursor.cpp:
        (WebCore::LegacyCursor::update):
        * Modules/indexeddb/legacy/LegacyCursor.h:
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp:
        (WebCore::LegacyObjectStore::add):
        (WebCore::LegacyObjectStore::put):
        * Modules/indexeddb/legacy/LegacyObjectStore.h:
        * Modules/mediastream/CapabilityRange.cpp:
        (WebCore::scriptValue):
        (WebCore::CapabilityRange::min):
        (WebCore::CapabilityRange::max):
        * Modules/mediastream/CapabilityRange.h:
        * Modules/streams/ReadableStreamController.h:
        (WebCore::ReadableStreamController::error):
        (WebCore::ReadableStreamController::enqueue):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEventListenerCall):
        (GenerateGetOwnPropertySlotBody):
        (GenerateHeader):
        (GenerateOverloadedFunction):
        (GetIndexedGetterExpression):
        (GenerateImplementation):
        (GenerateFunctionCastedThis):
        (GenerateCallWith):
        (GenerateArgumentsCountCheck):
        (GenerateParametersCheck):
        (GenerateReturnParameters):
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GenerateImplementationFunctionCall):
        (JSValueToNative):
        (NativeToJSValue):
        (GenerateOverloadedConstructorDefinition):
        (GenerateConstructorDefinition):

2015-09-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove XHR_TIMEOUT compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=149260

        Reviewed by Benjamin Poulain.

        Covered by existing tests.

        * Configurations/FeatureDefines.xcconfig:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didReachTimeout):
        (WebCore::XMLHttpRequest::setTimeout):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::didFailRedirectCheck):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::suspend):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2015-09-20  Tim Horton  <timothy_horton@apple.com>

        Add two missing files to the Xcode project

        * WebCore.xcodeproj/project.pbxproj:
        These are imported by files that are built for Mac, but missing from the project.

2015-09-19  Chris Dumez  <cdumez@apple.com>

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

        Reviewed by Darin Adler.

        [Web IDL] Add support for [PutForwards=XXX] IDL extended attribute:
        https://heycam.github.io/webidl/#PutForwards

        As an initial proof of concept, use it for Document.location as per the
        HTML specification, instead of using custom bindings:
        https://html.spec.whatwg.org/multipage/dom.html#the-document-object

        More attributes can be ported later.

        No new tests, no web-exposed behavior change intended. Bindings tests
        coverage was added.

        * bindings/js/JSDocumentCustom.cpp:
        Drop custom bindings for the location attribute setter.

        * bindings/scripts/CodeGenerator.pm:
        (GetAttributeFromInterface):
        Add convenience function that returned an attribute from another
        interface. This is used by [PutForwards] to retrieve the forwarded
        attribute.

        * bindings/scripts/CodeGeneratorJS.pm:
        (IsReadonly):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        Add support for [PutForwards=XXX] IDL extended attribute.

        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestNode.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNode.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        Add binding tests coverage for [PutForwards=XXX] IDL extended
        attribute.

        * dom/Document.idl:
        Use [PutForwards=href] for Document.location attribute, as per the HTML
        specification and stop using custom bindings for the setter. Also mark
        the attribute as readonly as all attributes using [PutForwards] must be
        marked as readonly as per the Web IDL specification.

2015-09-19  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Specify default parameter values where it is useful
        https://bugs.webkit.org/show_bug.cgi?id=149331
        <rdar://problem/22545600>

        Reviewed by Darin Adler.

        Specify default parameter values where it is useful in our IDL, that is
        to say where undefined would be converted to something else than the
        default value otherwise. This patch focuses on the HTML API.

        This patch also adds support for default values for optional parameters
        of string enumeration type as this was needed by the
        CanvasRenderingContext2D API.

        Test: fast/html/undefined-parameter-default-value.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        Add support default values for optional parameters of string enumeration
        type as this was needed by the CanvasRenderingContext2D API.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        Add bindings tests coverage for optional parameters of string enumeration
        type and that have a default value.

        * html/HTMLInputElement.idl:
        Specify default parameter value for stepUp() / stepDown(). Without this,
        stepUp(undefined) would be equivalent to calling stepUp(0) even though
        it is supposed to be equivalent to calling stepUp(1).

        * html/HTMLTableElement.idl:
        * html/HTMLTableSectionElement.idl:
        Specify default parameter value for insertRow(). Without this,
        insertRow(undefined) would be equivalent to insertRow(0) instead of
        insertRow(-1). This would prepend the row instead of appending it:
        - https://html.spec.whatwg.org/#htmltableelement
        - https://html.spec.whatwg.org/#htmltablesectionelement

        * html/HTMLTableRowElement.idl:
        Specify default parameter value for insertCell(). Without this,
        insertCell(undefined) would be equivalent to insertCell(0) instead of
        insertCell(-1). This would prepend the cell instead of appending it:
        - https://html.spec.whatwg.org/#htmltablerowelement

        * html/canvas/CanvasRenderingContext2D.idl:
        Specify default value for CanvasWindingRule parameters so that calling
        this with undefined will use the default enum value instead of using the
        "undefined" string and then throwing because it is not a valid enum value:
        - https://html.spec.whatwg.org/#canvasrenderingcontext2d

2015-09-19  Eric Carlson  <eric.carlson@apple.com>

        Cleanup code that finds and loads a media engine
        https://bugs.webkit.org/show_bug.cgi?id=149371

        Reviewed by Darin Adler.

        No new tests, no functional change.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::setRegistry): New, set the registry.
        (WebCore::MediaStream::lookup): New, lookup a url in the registry.
        * Modules/mediastream/MediaStream.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Restructure and simplify the code that tries the 
          different types of media engine so the code is easier to understand and modify.
        (WebCore::HTMLMediaElement::createMediaPlayer): Clear m_mediaStreamSrcObject.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector): Add some whitespace to make it easier to read.
        (WebCore::bestMediaEngineForSupportParameters): Also process mediastream and mediasource urls.
        (WebCore::MediaPlayer::load): ASSERT if called when the reload timer is active.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Also process mediastream and mediasource urls.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType): Don't test empty/null urls.

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::supportsType): Ditto.

2015-09-19  Chris Dumez  <cdumez@apple.com>

        Get rid of most custom bindings for Location.idl
        https://bugs.webkit.org/show_bug.cgi?id=149370

        Reviewed by Darin Adler.

        Get rid of most custom bindings for Location.idl by extending support
        for the [CallWith=XXX] IDL extended attribute to support 2 additional
        values: ActiveWindow and FirstWindow. Also introduce a
        [SetterCallWith=XXX] alternative that passes the extra arguments to
        the attribute setter only, as is needed by the Location attributes.

        No new tests, no intended web-exposed behavior change.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        Add bindings tests coverage for [SetterCallWith=XXX].

        * page/Location.idl:
        Also drop [DoNotCheckSecurityOnSetter] on href attribute. It has
        no effet as the interface does not have [CheckSecurity].

2015-09-19  Chris Dumez  <cdumez@apple.com>

        Get rid of custom bindings for Document.location getter
        https://bugs.webkit.org/show_bug.cgi?id=149369

        Reviewed by Andreas Kling.

        Get rid of custom bindings for Document.location getter by defining
        a location getter on Document that calls the one on the document's
        DOMWindow. The DOMWindow location getter already has an
        isCurrentlyDisplayedInFrame() check so the document does not need
        to do a null check on the frame.

        No new tests, no web-exposed behavior change intended.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::location):
        * dom/Document.h:
        * dom/Document.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::location):

2015-09-18  Dean Jackson  <dino@apple.com>

        Null dereference loading Blink layout test svg/filters/feImage-failed-load-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149316
        <rdar://problem/22749532>

        Reviewed by Tim Horton.

        If an feImage triggered loading a resource, and then was removed from the document,
        we'd still try to notify its parent when the resource arrived (or failed).

        Merge Blink commit:
        https://chromium.googlesource.com/chromium/blink/+/9cbcfd7866bbaff0c4b3c4c8508b7c97b46d6e6a

        Test: svg/filters/feImage-failed-load-crash.html

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished): Add a null check to the parent element
        before sending the notification.

2015-09-18  Dean Jackson  <dino@apple.com>

        Null dereference loading Blink layout test svg/custom/use-href-attr-removal-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149315
        <rdar://problem/22749358>

        Reviewed by Tim Horton.

        We were not checking if the corresponding element referenced from
        the SVG <use> actually existed before trying to set attributes on it.
        The original Blink change is a little more detailed:
        https://chromium.googlesource.com/chromium/blink/+/e2f1087f32bb088160ab7d59a715a1403ef267c7
        However, we've significantly diverged at this point.

        Tests: svg/custom/use-href-attr-removal-crash.html
               svg/custom/use-href-attr-removal-crash2.svg
               svg/custom/use-href-change-local-to-invalid-remote.html

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone):

2015-09-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189908.
        https://bugs.webkit.org/show_bug.cgi?id=149368

        Broke run-webkit-tests --pixel (Requested by ap on #webkit).

        Reverted changeset:

        "printing does not use minimum page zoom factor"
        https://bugs.webkit.org/show_bug.cgi?id=108507
        http://trac.webkit.org/changeset/189908

2015-09-18  Ryosuke Niwa  <rniwa@webkit.org>

        Inserting or removing slot elements can cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=149365

        Reviewed by Antti Koivisto.

        HTMLSlotElement::insertedInto and removedFrom were doing completely non-sensical.

        Since insertedInto and removedFrom are called on an element whenever it or its ancestor is inserted into
        or removed from a container node, we can't always call addSlotElementByName removeSlotElementByName when
        those functions are called. Instead, we need to check whether this slot has been inserted into or removed
        from a container node that resides inside a shadow root.

        Also reverted r189906 since the change was made upon a bogus assumption I had made.

        Test: fast/shadow-dom/slot-removal-crash.html

        * dom/Element.cpp:
        (WebCore::Element::insertedInto): Added comments.
        (WebCore::Element::removedFrom): Ditto.
        (WebCore::Element::addShadowRoot): Reverted r189906.
        (WebCore::Element::removeShadowRoot): Ditto.

        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::insertedInto): When the insertion point's tree scope is different from ours,
        the insertion happened to our shadow host or its ancestor. There is nothing to be done in that case since
        the shadow tree was not modified (in particular, our relationship with our shadow root never changed).
        We also don't do anything if we got inserted into a parent which is not inside a shadow tree.

        (WebCore::HTMLSlotElement::removedFrom): Since Container::removeBetween sets the tree scope before this
        function is getting called, we can't compare this element's treeScope with that of the "insertion" point.
        They're always different regardless of whether the insertion point was in the same shadow tree to which
        we belong or its shadow host's. However, since a node removed from a shadow tree is put into document's
        tree scope before this function is called and InShadowTree flag is unset in Node::removedFrom at the end
        of this function, this slot element is definitely being removed from its shadow root when isInShadowTree()
        is true and the newly set tree scope is of the document. So call removeSlotElementByName if and only if
        that condition holds.

        (WebCore::HTMLSlotElement::getDistributedNodes): Explicitly check that we're inside a shadow root.

2015-09-18  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r150187): updateIdForTreeScope may not be called inside shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=149364

        Reviewed by Antti Koivisto.

        Since the tree scope is set to that of Document's inside removeBetween when a node is removed from a shadow tree,
        oldScope != &treeScope() was already true inside Element::removedFrom. This can introduce an inconsistency in
        DocumentOrderedMap which could result in a crash. Fixed the bug by checking it against document(), which is the
        behavior we had prior to r150187.

        Also added a consistency check in DocumentOrderedMap to catch bugs like this.

        No new tests. New assertions fail in existing tests without this fix.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        * dom/DocumentOrderedMap.h:
        * dom/Element.cpp:
        (WebCore::Element::removedFrom):

2015-09-18  Antti Koivisto  <antti@apple.com>

        Don't create renderers for children of shadow host
        https://bugs.webkit.org/show_bug.cgi?id=149363

        Reviewed by Ryosuke Niwa.

        Test: fast/shadow-dom/css-scoping-shadow-root-hides-children.html

        * dom/ShadowRoot.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::resolveShadowTree):
        (WebCore::Style::resolveChildren):
        (WebCore::Style::resolveTree):

2015-09-08  Darin Adler  <darin@apple.com>

        Refine and simplify some color-related code
        https://bugs.webkit.org/show_bug.cgi?id=148961

        Reviewed by Anders Carlsson.

        Refactoring code that seems to be covered by existing tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor): Handle the empty string efficiently so that
        callers don't need to do that.

        * platform/graphics/Color.h: Started adding comments about deprecation.
        Added RGBA class for future use whenever we need an RGBA quadruplet rather than
        a color with a color space. Added FIXME about future evoluation of the classes here.
        Added OptionalColor so we can start removing the "invalid color" feature from Color.
        Added roundAndClampColorChannel function.

        * svg/ColorDistance.cpp: Removed.
        * svg/ColorDistance.h: Removed.

        * CMakeLists.txt: Removed ColorDistance.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.

        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::SVGAnimatedColorAnimator): Changed to take
        a reference instead of a pointer.
        (WebCore::SVGAnimatedColorAnimator::constructFromString): Simplified since the
        SVGColor::colorFromRGBColorString will handle the empty string.
        (WebCore::SVGAnimatedColorAnimator::addAnimatedTypes): Moved the code to add the
        RGB channels of two colors here from ColorDistance::addColors since this is the
        only place it was used.
        (WebCore::currentColor): Refactored adjustForCurrentColor function into this.
        Helper for the code below.
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue): Refactored to use
        the new currentColor function and replaced the use of the ColorDistance::clampColor
        function here with a bit of code here in the one place it was used.
        (WebCore::SVGAnimatedColorAnimator::calculateDistance): Moved the distance algorithm
        here from ColorDistance::distance.

        * svg/SVGAnimatedColor.h: Removed unneeded forward declaration, changed constructor
        to take references instead of pointers, and made all class member functions private.

        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::setValueAsString): Removed special case for empty string,
        since SVGColor::colorFromRGBColorString does the same thing.

        * svg/SVGAnimatorFactory.h:
        (WebCore::SVGAnimatorFactory::create): Pass references rather tha pointers to the
        SVGAnimatedColorAnimator constructor.

        * svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString): Added more FIXMEs about the future of
        this function.
        (WebCore::SVGColor::setRGBColor): Fixed confusing verb tense.
        (WebCore::SVGColor::customCSSText): Use ASCII literal for an ASCII literal.

2015-09-18  Eric Carlson  <eric.carlson@apple.com>

        UserMediaClientMock leaks every test run
        https://bugs.webkit.org/show_bug.cgi?id=149358

        Reviewed by Tim Horton.

        * platform/mock/UserMediaClientMock.h: Implement pageDestroyed.

2015-09-18  Alex Christensen  <achristensen@webkit.org>

        190,000!

2015-09-18  Nan Wang  <n_wang@apple.com>

        AX: Implement ARIA 1.1 @aria-current on iOS
        https://bugs.webkit.org/show_bug.cgi?id=149297

        Reviewed by Chris Fleizach.

        Added support for iOS to query for aria-current status.
        Also, enabled aria-current.html test on iOS.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityInvalidStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityARIACurrentStatus]):
        (-[WebAccessibilityObjectWrapper accessibilityMathRootIndexObject]):

2015-09-18  Alex Christensen  <achristensen@webkit.org>

        Fix Windows tests after switch to CMake.

        * testing/js/WebCoreTestSupportPrefix.h:
        Include cmakeconfig.h before wtf/Platform.h like we do in all the other precompiled headers
        to have consistent features defined.

2015-09-18  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r189526): Nightlies don't work on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=149215

        Reviewed by Daniel Bates.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase): Fixed the check to work when cross-compiling
        for 10.9 with 10.10 SDK.
        (WebCore::SQLiteDatabase::disableThreadingChecks): Removed an obsolete version check -
        WebCore has an #error elsewhere making sure that the version is higher than that.
        (WebCore::SQLiteDatabase::authorizerFunction): Ditto.

2015-09-18  Alex Christensen  <achristensen@webkit.org>

        CMake clean build fix after r189971.

        * CMakeLists.txt:
        Remove Entity.idl.

2015-09-18  Antti Koivisto  <antti@apple.com>

        Support style isolation in shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=149353

        Reviewed by Ryosuke Niwa.

        Allow ShadowRoots to have their own StyleResolvers.

        This patch just adds the mechanism, all shadow roots still use the document resolver.

        * css/StyleResolver.h:
        (WebCore::StyleResolverParentPusher::push):
        (WebCore::StyleResolverParentPusher::~StyleResolverParentPusher):
        * dom/Element.cpp:
        (WebCore::Element::absoluteLinkURL):
        (WebCore::Element::styleResolver):

            Helper function for getting the right StyleResolver for the element.

        (WebCore::Element::resolveStyle):

            Helper function for resolving element style.

        * dom/Element.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::styleResolver):
        (WebCore::ShadowRoot::cloneNode):
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::resetStyleInheritance):
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::computedTextWithDirection):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getUncachedPseudoStyle):
        (WebCore::RenderElement::containingBlockForFixedPosition):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::styleForElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::customStyleForRenderer):
        (WebCore::SVGElement::animatedSMILStyleProperties):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::overrideComputedStyle):

2015-09-18  Alex Christensen  <achristensen@webkit.org>

        [Win] Fix bindings tests after r189934.

        Reviewed by Brent Fulgham.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        Bindings tests use /usr/bin/gcc from cygwin, which requires different flags.
        If we're using gcc to preprocess, use it like we did before r189934.

2015-09-18  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Finish implementing MediaDevices.enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=149322
        <rdar://problem/22750866>

        Reviewed by Brent Fulgham.

        Test: fast/mediastream/MediaDevices-enumerateDevices.html

        * CMakeLists.txt: Add MediaDevicesRequest.cpp

        * Modules/mediastream/MediaDeviceInfo.h: Add MediaDeviceInfoVector typedef.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::enumerateDevices): Use MediaDevicesRequest.
        * Modules/mediastream/MediaDevices.h: EnumerateDevicePromise -> EnumerateDevicesPromise.
        * Modules/mediastream/MediaDevices.idl:

        * Modules/mediastream/MediaDevicesRequest.cpp: Added.
        (WebCore::MediaDevicesRequest::create):
        (WebCore::MediaDevicesRequest::MediaDevicesRequest):
        (WebCore::MediaDevicesRequest::~MediaDevicesRequest):
        (WebCore::MediaDevicesRequest::securityOrigin):
        (WebCore::MediaDevicesRequest::contextDestroyed):
        (WebCore::MediaDevicesRequest::start):
        (WebCore::MediaDevicesRequest::didCompleteRequest):
        (WebCore::MediaDevicesRequest::requestOrigin):
        * Modules/mediastream/MediaDevicesRequest.h: Added.

        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
        (WebCore::MediaStreamTrackSourcesRequest::MediaStreamTrackSourcesRequest):
        (WebCore::MediaStreamTrackSourcesRequest::didCompleteRequest):
        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::enumerateDevices): Deleted.
        * Modules/mediastream/UserMediaRequest.h:

        * WebCore.xcodeproj/project.pbxproj: Add MediaDevicesRequest.cpp

        * platform/mediastream/MediaDevicesPrivate.cpp: Removed.
        * platform/mediastream/MediaDevicesPrivate.h: Removed.

        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/MediaStreamTrackSourcesRequestClient.h:
        (WebCore::MediaStreamTrackSourcesRequestClient::~MediaStreamTrackSourcesRequestClient):

        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType): Optionally take an
          AVCaptureSession instead of always allocating one.
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints): Pass the AVCaptureSession
          to verifyConstraintsForMediaType.

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::getMediaStreamTrackSources):

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::getMediaStreamTrackSources):

2015-09-18  Chris Dumez  <cdumez@apple.com>

        WebContent crash in WebCore::MemoryPressureHandler::releaseCriticalMemory() with GuardMalloc when preparing to suspend
        https://bugs.webkit.org/show_bug.cgi?id=149350

        Reviewed by Antti Koivisto.

        in MemoryPressureHandler::releaseCriticalMemory(), iterate over a copy of
        Document::allDocuments() instead of iterating over allDocuments() directly.
        Also make sure the Documents are ref'd inside the copy.

        This is needed because clearing the StyleResolver of a Document may cause
        Documents to be unref'd and removed from the allDocument() HashSet.

        No new tests, already covered by existing tests.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-09-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        Non-cmake build does not include quotes in the file path, so a search
        operation always failed.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2015-09-18  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r182449, Mavericks ONLY): Pages re-open empty after swiping back and scrolling on them
        https://bugs.webkit.org/show_bug.cgi?id=149317
        <rdar://problem/22521514>

        Reviewed by Tim Horton.

        Disable on Mavericks a PageCache optimization from r182449 which lets
        into PageCache pages that only have certain types of pending loads
        (images and XHR). This is because it has been determined via bisection
        that this change is the one that introduced the bug on Mavericks.

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

2015-09-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use tiled drawing for main background layer
        https://bugs.webkit.org/show_bug.cgi?id=149347
        <rdar://problem/22759632>

        Reviewed by Alex Christensen.

        Turn on tiled drawing for the root layer when using
        accelerated compositing on Windows. 

        * page/Frame.h: Export the 'isMainFrame' method so that
        it can be used by WebKit.dll.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::getDebugBorderInfo): Use a full
        pixel width on Windows, since it doesn't support High DPI (yet).
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::create): Use nullptr.
        (toCACFFilterType): Ditto.
        (layerTreeHostForLayer): Ditto.
        (PlatformCALayer::platformCALayer): Ditto.
         (PlatformCALayerWin::PlatformCALayerWin): Use the correct contents scaling
        factor for new layers.
        (PlatformCALayerWin::animationForKey): Use nullptr.
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::displayCallback): Update assertion to
        recognize LayerTypePageTiledBackingLayer as a valid layer to be used
        in this display routine.

2015-09-18  Chris Dumez  <cdumez@apple.com>

        Drop support for Entity Node type
        https://bugs.webkit.org/show_bug.cgi?id=149239

        Reviewed by Darin Adler.

        Drop support for Entity DOM type. This legacy type has been dropped in
        DOM4:
        - https://dom.spec.whatwg.org/#dom-core-changes

        Chrome [1] and Firefox [2] already dropped it. There is currently no
        way to construct an Entity Node in WebKit.

        [1] https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/k3tZGP2EANc
        [2] https://developer.mozilla.org/en-US/docs/Web/API/Entity

        No new tests, already covered by existing W3C test.

        * DerivedSources.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap): Deleted.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Deleted.
        * bindings/objc/DOM.mm:
        (kitClass): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::importNode): Deleted.
        (WebCore::Document::adoptNode): Deleted.
        (WebCore::Document::childTypeAllowed): Deleted.
        (WebCore::Document::canAcceptChild): Deleted.
        * dom/Entity.h:
        * dom/Entity.idl:
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace): Deleted.
        (WebCore::Node::lookupPrefix): Deleted.
        (WebCore::Node::lookupNamespaceURI): Deleted.
        (WebCore::appendTextContent): Deleted.
        (WebCore::Node::setTextContent): Deleted.
        * dom/Node.h:
        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode): Deleted.
        (WebCore::Range::processContentsBetweenOffsets): Deleted.
        (WebCore::Range::insertNode): Deleted.
        (WebCore::Range::checkNodeWOffset): Deleted.
        (WebCore::Range::checkNodeBA): Deleted.
        (WebCore::Range::selectNode): Deleted.
        (WebCore::Range::selectNodeContents): Deleted.
        (WebCore::Range::surroundContents): Deleted.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup): Deleted.
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode): Deleted.

2015-09-17  Brian Burg  <bburg@apple.com>

        ASSERT(!m_frontendRouter->hasLocalFrontend()) when running Web Inspector tests
        https://bugs.webkit.org/show_bug.cgi?id=149006

        Reviewed by Joseph Pecoraro.

        The patch fixes two defects:

            (1) the stub inspector frontend is not closed reliably when a test times out
            (2) frontend clients and channels are sometimes connected to the wrong controllers

        When an inspector test times out, the test runner requests (via the inspected page's controller)
        that the inspector close. But, the stub frontend works independently of InspectorClient,
        so the inspected page's InspectorController cannot close the stub frontend. The assertion
        failed because the stub frontend's channel was still connected to the inspected page's controller.

        The fix is to route requests for the inspector window to close through the FrontendClient's
        closeWindow() method rather than InspectorClient, so that the stub frontend can react.
        The other code paths (i.e., through close() and closeLocalFrontend()) have been removed.

        Now that the stub frontend eagerly closes its channel before the Page gets GC'd, several
        methods invoked during test teardown must be reordered to avoid using dangling pointers.

        The stub frontend in Internals has been rewritten to properly disconnect itself
        from both the frontend and inspected page's inspector controllers.

        While fixing this bug, I noticed that we are inconsistent about which inspector controller
        (the inspected page's or the frontend page's) receives the FrontendClient and which takes
        FrontendChannels. It is now the case for all configurations that the FrontendClient is
        connected to the frontend page's inspector controller, and FrontendChannels are connected
        to the inspected page's inspector controller. In the WK2 case, the Inspector Process
        has an attached frontend client, and its inspected Web Process has frontend channels.

        No new tests, covered by existing tests.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):

            This method is called from Page::~Page, so we should disconnect all frontends now
            before subframes are detached from the page, making InspectorController inaccessible.

        (WebCore::InspectorController::disconnectFrontend):

            The teardown branch was never being run before, because we never disconnected the
            frontend's channel correctly. Some agents use the overlay during teardown, so notify
            agents before releasing the overlay page.

        (WebCore::InspectorController::disconnectAllFrontends):

            The actions from close() are inlined and rearranged here, similar to disconnectFrontend.
            We have to notify agents before removing InspectorClient as some agents make use of it.

        (WebCore::InspectorController::close): Deleted.
        (WebCore::InspectorController::show): This assertion is vacuously true now.
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::inspectedPage): Added. Used by stub frontend.
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::frontendPage): Added.
        * loader/EmptyClients.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):

            Notify inspector before detaching frames, otherwise it will not be possible to
            cleanly disconnect the stub frontend's channel.

        * testing/Internals.cpp:

            Rewrite the stub frontend to better encapsulate its setup and teardown logic.

        (WebCore::InspectorStubFrontend::frontendPage): Added.
        (WebCore::InspectorStubFrontend::InspectorStubFrontend): Added.
        (WebCore::InspectorStubFrontend::~InspectorStubFrontend): Added.
        (WebCore::InspectorStubFrontend::closeWindow): Added.
        (WebCore::InspectorStubFrontend::sendMessageToFrontend): Added.
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):
        (WebCore::InspectorFrontendClientDummy::~InspectorFrontendClientDummy): Deleted.
        (WebCore::InspectorFrontendClientDummy::InspectorFrontendClientDummy): Deleted.
        (WebCore::InspectorFrontendChannelDummy::~InspectorFrontendChannelDummy): Deleted.
        (WebCore::InspectorFrontendChannelDummy::InspectorFrontendChannelDummy): Deleted.
        (WebCore::InspectorFrontendChannelDummy::sendMessageToFrontend): Deleted.
        * testing/Internals.h:

2015-09-18  Chris Dumez  <cdumez@apple.com>

        classList.toggle(name, force) treats undefined `force` argument as false
        https://bugs.webkit.org/show_bug.cgi?id=148582
        <rdar://problem/22545600>

        Reviewed by Ryosuke Niwa.

        classList.toggle(name, force) treats undefined `force` argument as false.
        However, according to the Web IDL specification, we should treat undefined
        as if the value was missing for optional parameters that do not have a
        default value:
        https://heycam.github.io/webidl/#dfn-overload-resolution-algorithm (Step 14.4).

        For optional parameters that have a default value, undefined should be
        converted into the default value. This is supported as of r189957.

        In this patch, we use custom bindings to provide a spec-compliant version
        of DOMTokenList.toggle(). Unfortunately, adding such support in the
        bindings generator would be a non-trivial task (I guess, we would have to
        generalize using WTF::Optional<> type for all optional parameters in our
        implementation. Also we cannot use the default value support added in
        r189957 because the toggle() implementation needs to be able to
        distinguish all 3 states for the 'force' parameter: true, false or
        missing.

        The new behavior matches the behavior of Firefox and the specification.

        Test: fast/dom/Element/class-list-toggle.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMTokenListCustom.cpp: Added.
        (WebCore::JSDOMTokenList::toggle):
        * html/DOMTokenList.h:
        * html/DOMTokenList.idl:

2015-09-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused canClearBrowserCookies / canClearBrowserCache protocol methods
        https://bugs.webkit.org/show_bug.cgi?id=149307

        Reviewed by Brian Burg.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canClearBrowserCache): Deleted.
        (WebCore::InspectorClient::clearBrowserCache): Deleted.
        (WebCore::InspectorClient::canClearBrowserCookies): Deleted.
        (WebCore::InspectorClient::clearBrowserCookies): Deleted.
        These were unimplemented by any ports.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::canClearBrowserCache): Deleted.
        (WebCore::InspectorResourceAgent::clearBrowserCache): Deleted.
        (WebCore::InspectorResourceAgent::canClearBrowserCookies): Deleted.
        (WebCore::InspectorResourceAgent::clearBrowserCookies): Deleted.
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        Remove uses of InspectorClient where it is no longer needed.

2015-09-16  Ryosuke Niwa  <rniwa@webkit.org>

        Update features.json for Shadow DOM and Web Components
        https://bugs.webkit.org/show_bug.cgi?id=149249

        Reviewed by Antti Koivisto.

        Updated the status of Shadow DOM and made myself the point of contact for shadow DOM and web components.

        * features.json:

2015-09-17  Chris Dumez  <cdumez@apple.com>

        [WebIDL] Add support for default parameter values
        https://bugs.webkit.org/show_bug.cgi?id=149263
        <rdar://problem/22545600>

        Reviewed by Ryosuke Niwa.

        Add support for default parameter values to our Web IDL parser and JS
        bindings generator. This allows the bindings to convert undefined to
        the parameter's default value for optional parameters:
        https://heycam.github.io/webidl/#dfn-optional-argument-default-value

        Previously, our bindings generator would just convert undefined to
        0 / false / "undefined" for optional parameters, depending on the
        parameter type.

        This patch uses the new default parameter support to fix a bug in
        document.createNodeIterator() / document.createTreeWalker()'s handling
        of the whatToShow parameter:
        https://dom.spec.whatwg.org/#document

        WebKit currently was undefined to 0 in this case, even though it should
        use the parameter's default value: OxFFFFFFFF.

        I am planning to go through other optional parameters in a follow-up
        patch and add default values where needed.

        No new tests, already covered by existing layout tests and
        added bindings tests coverage.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/IDLParser.pm:
        (parseOptionalOrRequiredArgument):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_method_with_optional_arg_and_default_value):
        (webkit_dom_test_obj_method_with_optional_string_and_default_value):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValue):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj methodWithOptionalArgAndDefaultValue:]):
        (-[DOMTestObj methodWithOptionalStringAndDefaultValue:]):
        * bindings/scripts/test/TestObj.idl:
        * dom/Document.idl:

2015-09-17  Dean Jackson  <dino@apple.com>

        Multi-hop reference cycles not detected.
        https://bugs.webkit.org/show_bug.cgi?id=149181

        Reviewed by Jon Honeycutt.

        SVG's cycle detection was not picking up a
        case where an element was drawing a pattern, that
        referenced another pattern, that referenced another
        pattern, that referenced the original pattern.

        The issue was that we were forgetting to check the
        children of the renderer itself, rather than just
        the children of the referenced renderers.

        Found by running a test from Blink.

        I also took the opportunity to clean up the debugging
        code that logs cycle detection.

        Test: svg/custom/pattern-3-step-cycle.html

        * platform/Logging.h: Add a new SVG channel. I can't believe we
        didn't already have one!
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles): Check the referenced
        resources for cycles.
        (WebCore::SVGResourcesCycleSolver::resolveCycles): Logging update.

2015-09-17  Dean Jackson  <dino@apple.com>

        Cyclic resources were not detected if the reference had deep containers
        https://bugs.webkit.org/show_bug.cgi?id=149182

        Reviewed by Jon Honeycutt.

        During our examination of the SVG rendering tree looking for cycles,
        if a resource pointed to something that had a nested structure, and
        one of the parent nodes in that structure was a container object
        without resources itself, we were not looking into the children.

        Test: svg/custom/pattern-content-cycle-w-resourceless-container.html

        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles): We should still
        check all children resources, but not exit early if there are none. Instead
        we should recurse into any children.
        (WebCore::SVGResourcesCycleSolver::resolveCycles): Changes to some debug
        code that no longer compiled (it's still off by default, but at least
        it will work now).

2015-09-17  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r188871): 50% regression in page load time of Wikipedia home page
        https://bugs.webkit.org/show_bug.cgi?id=149320

        Reviewed by Daniel Bates.

        This is due to <rdar://problem/22144016> about how language-specific
        font fallback is an order of magnitude slower than regular non-language-
        specific font-fallback. This performance problem has been fixed, but not
        for iOS 9.

        No new tests because there is no correctness change.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformLookupFallbackFont):

2015-09-17  Ryosuke Niwa  <rniwa@webkit.org>

        Add HTMLSlotElement, Element.slot, and NonDocumentTypeChildNode.assignedSlot
        https://bugs.webkit.org/show_bug.cgi?id=149241

        Reviewed by Antti Koivisto.

        Implement the slotting algorithm and related features: slot element, slot attribute, and assignedSlot
        as specified by https://w3c.github.io/webcomponents/spec/shadow/#slotting-algorithm
        as of 8bf56e8ea5521a7a911efd1cabeb2be0d5c3ca74.

        The slotting algorithm is implemented by the newly introduced SlotAssignment class which is created on
        demand by ShadowRoot when a HTMLSlotElement is inserted into the shadow root. SlotAssignment contains
        a HashMap of a slot name to SlotInfo structure, which holds the number of slot elements of the said name,
        the first element if it's known, and an ordered list of the assigned nodes.

        When there is exactly one slot element of a given name, "element" returns the slot element in O(1).
        When another slot of the same name is inserted into the same shadow tree, we increment "elementCount" and
        set "element" to nullptr since we don't know which slot element comes first in the tree order without O(n)
        tree traversal, which is lazily done in resolveAllSlotElements.

        Observe that SlotInfo's "element" can be nullptr in two occasions: (1) when there is no slot element of
        the given name (SlotAssignment::assignSlots may insert such an entry), and (2) when there are more than
        one slot elements of the same name and we haven't run resolveAllSlotElements.

        Resolving assigned nodes, on the other hand, is always O(n) unless all assignments are up to date, and
        lazily computed by assignSlots. This is because inserting or removing a node doesn't tell us the relative
        ordering of the node with respect to other nodes assigned to the same slot. For example, let's say we have
        child nodes (A, B, C, D) and (A, D) are assigned to slot Alpha and (B, C) are assigned to slot Beta. If we
        insert a new node E between nodes B and C and this node is assigned to slot Alpha, then we must create an
        ordered list (A, E, D) for slot Alpha. Unfortunately, determining where to insert E in this list can cost
        O(n) child traversal in the worst case.

        Tests: fast/shadow-dom/HTMLSlotElement-interface.html
               fast/shadow-dom/NonDocumentTypeChildNode-interface-assignedSlot.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): Invalidate the slot assignments when slot attribute is changed.
        (WebCore::Element::childrenChanged): Ditto for when a child node is inserted or removed. We can avoid it
        when there is no default slot and only text nodes are removed or added in the future.
        * dom/Element.idl: Added slot attribute on Element.
        * dom/Node.cpp:
        (WebCore::Node::assignedSlot): Added. Returns the assigned slot if the slot is in an open shadow tree.
        * dom/Node.h:
        * dom/NonDocumentTypeChildNode.idl: Added assignedSlot. Only expose in JS for now to avoid generating
        the binding code for HTMLSlotElement in other languages.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::findAssignedSlot): Added. Forwards it to the implementation in SlotAssignment.
        (WebCore::ShadowRoot::addSlotElementByName): Ditto.
        (WebCore::ShadowRoot::removeSlotElementByName): Ditto.
        (WebCore::ShadowRoot::invalidateSlotAssignments): Ditto.
        (WebCore::ShadowRoot::assignedNodesForSlot): Ditto.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot): Added m_slotAssignments as a member.
        * dom/SlotAssignment.cpp: Added.
        (WebCore::treatNullAsEmpty): Added. See https://w3c.github.io/webcomponents/spec/shadow/#dfn-default-slot
        (WebCore::SlotAssignment::findAssignedSlot): Find the slot element to which a given node is assigned.
        Since there could be multiple slot elements of the same name (or lack thereof), call findFirstSlotElement
        to find the first slot element.
        (WebCore::SlotAssignment::addSlotElementByName): Added. Called when a new slot element is inserted into
        the associated shadow tree. When a slot element's name is changed, removeSlotElementByName is called on
        with the old name before addSlotElementByName is called with the new name.
        (WebCore::SlotAssignment::removeSlotElementByName): Ditto for removal.
        (WebCore::SlotAssignment::assignedNodesForSlot): Added. Finds the ordered list of assigned nodes for
        a given slot element. When there are multiple slot elements of the same name, we return the list only if
        SlotInfo::element matches the argument. 
        (WebCore::SlotAssignment::findFirstSlotElement): Added. Resolves SlotInfo::element if needed.
        (WebCore::SlotAssignment::resolveAllSlotElements): Finds SlotInfo::element for all slots. We resolve all
        slots simultaneously to avoid doing O(number of nodes) tree traversal for O(number of slots) to avoid
        the worst case O(n^2) behavior when all nodes in the shadow tree are slot elements of the same name. 
        (WebCore::SlotAssignment::assignSlots): Added. Computes the slot assignments by traversing each child
        of the shadow host and adding to the appropriate SlotInfo::assignedNodes, creating a new entry if needed.
        * dom/SlotAssignment.h: Added.
        (WebCore::SlotAssignment::SlotAssignment):
        (WebCore::SlotAssignment::invalidate):
        (WebCore::SlotAssignment::SlotInfo::SlotInfo):
        (WebCore::SlotAssignment::SlotInfo::hasSlotElements):
        (WebCore::SlotAssignment::SlotInfo::hasDuplicatedSlotElements):
        (WebCore::SlotAssignment::SlotInfo::shouldResolveSlotElement):
        * html/HTMLAttributeNames.in: Added slot attribute.
        * html/HTMLSlotElement.cpp: Added.
        (WebCore::HTMLSlotElement::create):
        (WebCore::HTMLSlotElement::HTMLSlotElement):
        (WebCore::HTMLSlotElement::insertedInto): Calls addSlotElementByName.
        (WebCore::HTMLSlotElement::removedFrom): Calls removeSlotElementByName. Because the element had already
        been removed from the shadow tree, we can't use containingShadowRoot() to find the ShadowRoot here.
        (WebCore::HTMLSlotElement::attributeChanged): Calls removeSlotElementByName and addSlotElementByName.
        (WebCore::HTMLSlotElement::getDistributedNodes): Returns an ordered list of the assigned nodes.
        * html/HTMLSlotElement.h: Added.
        * html/HTMLSlotElement.idl: Added.
        * html/HTMLTagNames.in: Added slot element.

2015-09-17  Chris Dumez  <cdumez@apple.com>

        Regression(r189881): release assertion hit in toJS(ExecState*, JSDOMGlobalObject*, DocumentFragment*)
        https://bugs.webkit.org/show_bug.cgi?id=149281

        Reviewed by Ryosuke Niwa.

        After r189881, we started generating a toJS() function for DocumentFragment
        as an optimization. DocumentFragment has a subclass (ShadowRoot) but the
        default toJS() implementation should have still been acceptable given that
        the subclass is not web-exposed and therefore does not have a JS wrapper.

        However, the ShadowRoot interface was introduced shortly after in r189841
        and to toJS() implementation for DocumentFragment is now invalid. This
        patch introduces a ShadowRoot-aware custom implementation of toJS() for
        DocumentFragment to address the problem.

        No new tests, already covered by:
        plugins/snapshotting/snapshot-plugin-not-quite-blocked-by-image.html

        * bindings/js/JSDocumentFragmentCustom.cpp:
        (WebCore::createNewDocumentFragmentWrapper):
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        Provide a ShadowRoot-aware custom implementation of toJS() /
        toJSNewlyCreated() for DocumentFragment.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        Fix bug in toJS() implementation for Node as it was not handling
        ShadowRoots properly either.

        * dom/DocumentFragment.idl:
        Use [CustomToJSObject] so we can provide our own custom implementation
        of toJS().

2015-09-17  Antti Koivisto  <antti@apple.com>

        De-template ContainerNodeAlgorithms
        https://bugs.webkit.org/show_bug.cgi?id=149286

        Reviewed by Andreas Kling.

        These are always used with ContainerNode/Node.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeDetachedChildren):
        (WebCore::destroyRenderTreeIfNeeded):
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::insertBeforeCommon):
        (WebCore::ContainerNode::appendChildCommon):

            Make append a member for consistency with insert.

        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::notifyChildRemoved):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAppendChild):

            Also make rest of these ownership-taking functions take Ref<>&&.

        * dom/ContainerNode.h:
        (WebCore::NoEventDispatchAssertion::NoEventDispatchAssertion):
        (WebCore::ContainerNode::setFirstChild):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyChildNodeRemoved):
        (WebCore::addChildNodesToDeletionQueue):
        (WebCore::removeDetachedChildrenInContainer):
        (WebCore::collectFrameOwners):
        (WebCore::assertConnectedSubrameCountIsConsistent):
        (WebCore::disconnectSubframes):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::removeDetachedChildrenInContainer): Deleted.
        (WebCore::appendChildToContainer): Deleted.
        (WebCore::Private::NodeRemovalDispatcher::dispatch): Deleted.
        (WebCore::Private::addChildNodesToDeletionQueue): Deleted.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert):
        (WebCore::executeInsertTask):
        (WebCore::executeReparentTask):
        (WebCore::executeInsertAlreadyParsedChildTask):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTTreeBuilder::constructTreeFromToken):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::appendErrorMessage):
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::enterText):
        (WebCore::toString):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):

2015-09-17  Tim Horton  <timothy_horton@apple.com>

        Block Objective-C exceptions in DictionaryLookup
        https://bugs.webkit.org/show_bug.cgi?id=149256

        Reviewed by Anders Carlsson.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection):
        (WebCore::DictionaryLookup::rangeAtHitTestResult):
        (WebCore::expandSelectionByCharacters):
        (WebCore::DictionaryLookup::stringForPDFSelection):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::hidePopup):
        It is possible for Lookup to throw an exception if one of its
        related services dies for some reason. This shouldn't take down
        our UI process, so block the exceptions.

2015-09-17  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Add more fine-grained APIs and additional hooks to control module loader from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=149129

        Reviewed by Saam Barati.

        No behavior change.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2015-09-17  Alex Christensen  <achristensen@webkit.org>

        Switch AppleWin build to use CMake
        https://bugs.webkit.org/show_bug.cgi?id=149163

        Reviewed by Brent Fulgham.

        * bindings/scripts/preprocess-idls.pl:
        (CygwinPathIfNeeded):
        (WriteFileIfChanged):
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        Fix new cygwin quirks.  Cygwin is now using some paths from CMake.

2015-09-17  Zalan Bujtas  <zalan@apple.com>

        Remove integral snapping functions from InlineBox class.
        https://bugs.webkit.org/show_bug.cgi?id=136419

        Reviewed by Simon Fraser.

        We should not integral snap inlines during layout time.

        Covered by existing tests.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::pixelSnappedLogicalLeft): Deleted.
        (WebCore::InlineBox::pixelSnappedLogicalRight): Deleted.
        (WebCore::InlineBox::pixelSnappedLogicalTop): Deleted.
        (WebCore::InlineBox::pixelSnappedLogicalBottom): Deleted.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):

2015-09-17  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Compile error, include file not found.
        https://bugs.webkit.org/show_bug.cgi?id=149282

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:
        Copy forwarding headers from new legacy directory, fixing CMake clean builds since r189746.

2015-09-17  Tim Horton  <timothy_horton@apple.com>

        Delete some dead code
        https://bugs.webkit.org/show_bug.cgi?id=149255

        Reviewed by Dan Bernstein.

        No new tests, just cleanup.

        * platform/RuntimeApplicationChecksIOS.h:
        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsEpicurious): Deleted.
        (WebCore::applicationIsMASH): Deleted.
        Nothing uses these application checks anymore.

        * platform/ios/SoundIOS.mm:
        (WebCore::systemBeep):
        What a beep should be on iOS, I don't know.
        What it should not be is a NSLog.

2015-09-17  Saam barati  <sbarati@apple.com>

        Interpreter::unwind() shouldn't be responsible for filtering out uncatchable exceptions
        https://bugs.webkit.org/show_bug.cgi?id=149228

        Reviewed by Mark Lam.

        No new tests, already covered by current tests. This is not an observable behavior change.

        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):

2015-09-17  Zalan Bujtas  <zalan@apple.com>

        column-rule-style: outset/inset doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=148815
        <rdar://problem/22582644>

        Reviewed by David Hyatt.

        https://drafts.csswg.org/css-multicol-1/#crs
        The <‘border-style’> values are interpreted as in the collapsing border model.

        Unskipped 4 multicolumn tests, 

        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderTableCell.cpp:
        (WebCore::collapsedBorderStyle): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::collapsedBorderStyle):

2015-09-17  Chris Dumez  <cdumez@apple.com>

        Range.deleteContents cannot delete DocType
        https://bugs.webkit.org/show_bug.cgi?id=148773
        <rdar://problem/22571280>

        Reviewed by Ryosuke Niwa.

        Range.deleteContents() was not able to delete a DocumentType Node, and
        was throwing a HIERARCHY_REQUEST_ERR. The DOM specification does not
        say we should throw in such case:
        https://dom.spec.whatwg.org/#dom-range-deletecontents

        However, Range.extractContents() should still throw an exception
        if any of the contained children in a DocumentType Node:
        https://dom.spec.whatwg.org/#concept-range-extract (Step 12)

        No new tests, already covered by existing test.

        * dom/Range.cpp:
        (WebCore::Range::deleteContents):
        (WebCore::Range::extractContents):
        (WebCore::Range::checkDeleteExtract):
        * dom/Range.h:

2015-09-17  Eric Carlson  <eric.carlson@apple.com>

        [Mac MediaStream] Cleanup capture source classes
        https://bugs.webkit.org/show_bug.cgi?id=149233

        Reviewed by Jer Noble.

        * platform/cf/CoreMediaSoftLink.cpp: Soft-link CMAudioFormatDescriptionGetStreamBasicDescription,
          CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer, and CMSampleBufferGetNumSamples.
        * platform/cf/CoreMediaSoftLink.h:

        * platform/mediastream/mac/AVAudioCaptureSource.h:
        (WebCore::AVAudioCaptureSource::Observer::~Observer):
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::AVAudioCaptureSource): Initialize m_inputDescription.
        (WebCore::AVAudioCaptureSource::capabilities): 0 -> nullptr.
        (WebCore::AVAudioCaptureSource::addObserver): New, add an observer and tell it to prepare.
        (WebCore::AVAudioCaptureSource::removeObserver): New.
        (WebCore::operator==): Compare AudioStreamBasicDescription.
        (WebCore::operator!=):
        (WebCore::AVAudioCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Call 
          observer->prepare when passed a new stream description, call observer->process.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::refreshCaptureDeviceList): Set m_groupID and m_localizedName.
        (WebCore::AVCaptureDeviceManager::sessionSupportsConstraint): Invalid constraint names should
          be ignored, so return true when passed one.
        (WebCore::AVCaptureDeviceManager::getSourcesInfo): This just didn't work, fix it.
        (WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType): Optional constraints are
          optional so they don't need to be validated.
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints): m_audioSource -> m_audioAVMediaCaptureSource,
          m_videoSource -> m_videoAVMediaCaptureSource.
        (WebCore::AVCaptureDeviceManager::sourceWithUID): Ditto.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaCaptureSource::session):
        (WebCore::AVMediaCaptureSource::device):
        (WebCore::AVMediaCaptureSource::currentStates):
        (WebCore::AVMediaCaptureSource::constraints):
        (WebCore::AVMediaCaptureSource::statesDidChanged):
        (WebCore::AVMediaCaptureSource::createWeakPtr):
        (WebCore::AVMediaCaptureSource::buffer): Deleted.
        (WebCore::AVMediaCaptureSource::setBuffer): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::AVMediaCaptureSource): Initilize m_weakPtrFactory.
        (WebCore::AVMediaCaptureSource::scheduleDeferredTask): New, call a function asynchronously on
          the main thread.
        (-[WebCoreAVMediaCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]): Don't
          dispatch calls to the main thread, let the derived classes do that if necessary.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        (WebCore::AVVideoCaptureSource::width):
        (WebCore::AVVideoCaptureSource::height):
        (WebCore::AVVideoCaptureSource::previewLayer):
        (WebCore::AVVideoCaptureSource::currentFrameSampleBuffer):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setFrameRateConstraint): Remove unwanted logging.
        (WebCore::AVVideoCaptureSource::setupCaptureSession): Configure the AVCaptureVideoDataOutput so
          it delivers 32-bit BGRA samples.
        (WebCore::AVVideoCaptureSource::calculateFramerate): Return bool to signal if the frame rate
          changed.
        (WebCore::AVVideoCaptureSource::processNewFrame): New. Process sample buffer, invalidate cached
          image, signal when characteristics change.
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection): Schedule
          call to processNewFrame on the main thread so we do all video processing on main thread.
        (WebCore::AVVideoCaptureSource::currentFrameImage): Create and return a CVImageBuffer of the
          current video frame.
        (WebCore::AVVideoCaptureSource::paintCurrentFrameInContext): Draw the current frame to a context.

2015-09-15  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout]  Using automatic (instead of min-content) minimums for 'auto' tracks
        https://bugs.webkit.org/show_bug.cgi?id=142329

        Reviewed by Darin Adler.

        Based on Blink's r198697 by <svillar@igalia.com> and r200478 by <jfernandez@igalia.com>

        More precisely (syntax-wise), this would allow 'auto' to be used within the
        minmax() function (it's currently forbidden) and have the 'auto' keyword map
        to minmax(auto, auto) instead of minmax(min-content, max-content).
        - As a minimum, 'auto' would mean "use the specified minimum size, or if
        that is auto, treat as 0 or min-content per Flexbox rules".
        - As a maximum, 'auto' would mean "use the max-content size".

        Regarding the implementation, a new phase is added to the track sizing
        algorithm called ResolveIntrinsicMinimums (the former ResolveIntrinsicMinimums
        is now called ResolveContentBasedMinimums which does not include 'auto'
        resolution) which will be run before any other. This phase uses the minimum
        size of grid items (as specified by min-width/height).

        Tests: fast/css-grid-layout/grid-automatic-minimum-for-auto-columns.html
               fast/css-grid-layout/grid-automatic-minimum-for-auto-rows.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridBreadth):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::minSizeForChild):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        (WebCore::RenderGrid::trackSizeForTrackSizeComputationPhase):
        (WebCore::RenderGrid::shouldProcessTrackForTrackSizeComputationPhase):
        (WebCore::RenderGrid::trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase):
        (WebCore::RenderGrid::markAsInfinitelyGrowableForTrackSizeComputationPhase):
        (WebCore::RenderGrid::updateTrackSizeForTrackSizeComputationPhase):
        (WebCore::RenderGrid::currentItemSizeForTrackSizeComputationPhase):
        * rendering/RenderGrid.h:
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes):
        (WebCore::GridTrackSize::hasIntrinsicMinTrackBreadth):
        (WebCore::GridTrackSize::hasAutoMinTrackBreadth):
        (WebCore::GridTrackSize::hasAutoMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentOrAutoMaxTrackBreadth):
        (WebCore::GridTrackSize::hasAutoOrMinContentMinTrackBreadthAndIntrinsicMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth): Deleted.

2015-09-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Relayout whenever Box Alignment properties change
        https://bugs.webkit.org/show_bug.cgi?id=148070

        Reviewed by Darin Adler.

        We were Reattaching the styles to the RenderTree whenever Content Alignment
        properties (align-items and justify-items) changed their values, since the
        Self Alignment properties depend on such values to resolve 'auto' values
        during layout.

        This patch removes such restriction, since we resolve the auto values
        whenever we access the alignment properties. The only thing we need to
        do is to mark a grid item for layout whenever the Default Alignment
        properties change from/to stretch, since it implies a resize of the grid
        items using 'auto' values for the Self Alignment properties.

        Tests: fast/css-grid-layout/relayout-align-items-changed.html
               fast/css-grid-layout/relayout-align-self-changed.html
               fast/css-grid-layout/relayout-justify-items-changed.html
               fast/css-grid-layout/relayout-justify-self-changed.html
               fast/repaint/align-items-change.html
               fast/repaint/align-items-overflow-change.html
               fast/repaint/align-self-change.html
               fast/repaint/align-self-overflow-change.html
               fast/repaint/justify-items-change.html
               fast/repaint/justify-items-legacy-change.html
               fast/repaint/justify-items-overflow-change.html
               fast/repaint/justify-self-change.html
               fast/repaint/justify-self-overflow-change.html

        * rendering/RenderGrid.cpp:
        (WebCore::defaultAlignmentIsStretch):
        (WebCore::RenderGrid::styleDidChange):
        * rendering/RenderGrid.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolveAlignmentOverflow):
        (WebCore::RenderStyle::changeRequiresLayout):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange): Deleted.

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::beginAndComputePageRectsWithPageSize):
        Helper function to share common code from numberOfPages() and
        spoolAllPagesWithBoundaries().
        (WebCore::PrintContext::numberOfPages): Use beginAndComputePageRectsWithPageSize().
        (WebCore::PrintContext::spoolAllPagesWithBoundaries): Use
        beginAndComputePageRectsWithPageSize() and don't flip the Y axis
        for non Cocoa platforms.
        * page/PrintContext.h:

2015-09-16  Ryosuke Niwa  <rniwa@webkit.org>

        removeShadow shouldn't call ChildNodeRemovalNotifier with the shadow host as the removal point
        https://bugs.webkit.org/show_bug.cgi?id=149244

        Reviewed by Antti Koivisto.

        Since a shadow host is in a different tree than nodes in its shadow tree, it's incorrect to call
        removedFrom with the shadow host as the removal point. This causes HTMLSlotElement::removedFrom
        which will be added in the bug 149241 to call methods on a wrong ShadowRoot.

        We still keep the ad-hoc behavior of using the shadow host as the insertion/removal point when
        calling insertedInto and removedFrom on the shadow root itself to update the InDocument node flag.
        We may want to re-visit this design in the future.

        No new tests since I couldn't quite create a reduction. However, tests I'm adding in the bug 149241
        will crash without this change.

        I separated this patch from the bug 149241 to isolate the high-risk code change here.

        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot): Call insertedInto on ShadowRoot, and then call it on all its
        children separately with the insertion point set to the shadow root since insertedInto relies on
        insertion point's inDocument flag to be true when the shadow host is in the document.
        (WebCore::Element::removeShadowRoot): Ditto in the reverse order.

2015-09-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=149156

        Reviewed by Darin Adler.

        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::InsertBeforeAction::InsertBeforeAction):
        (WebCore::DOMEditor::ReplaceChildNodeAction::ReplaceChildNodeAction):
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::replaceChild):
        * inspector/DOMEditor.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::removeChildAndMoveToNew):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::setDatabase):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::highlightNodeList):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sharedBufferContent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::startProfiling):
        (WebCore::stopProfiling):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerResource.h:
        (WebCore::InspectorWorkerResource::create):
        * inspector/InstrumentingAgents.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::createOtherResourceTextDecoder):
        (WebCore::NetworkResourcesData::addResourceSharedBuffer):
        * inspector/NetworkResourcesData.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::createQuad):
        * inspector/WebInjectedScriptHost.h:
        * inspector/WebInjectedScriptManager.cpp:
        (WebCore::WebInjectedScriptManager::WebInjectedScriptManager):
        * inspector/WebInjectedScriptManager.h:

2015-09-16  Brady Eidson  <beidson@apple.com>

        Have window.indexedDB.open return an IDBOpenDBRequest.
        https://bugs.webkit.org/show_bug.cgi?id=149234

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/opendatabase-request.html

        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::IDBFactory::open):
        (WebCore::IDBClient::IDBFactory::openInternal):
        * Modules/indexeddb/client/IDBFactoryImpl.h:

2015-09-16  Antti Koivisto  <antti@apple.com>

        Turn ChildNodeInsertion/RemovalNotifier classes into functions
        https://bugs.webkit.org/show_bug.cgi?id=149236

        Reviewed by Ryosuke Niwa.

        Less architecture, more readability.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::notifyChildRemoved):
        (WebCore::ContainerNode::removeChildren):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::notifyDescendantInsertedIntoDocument):
        (WebCore::notifyDescendantInsertedIntoTree):
        (WebCore::notifyNodeInsertedIntoDocument):
        (WebCore::notifyNodeInsertedIntoTree):
        (WebCore::notifyChildNodeInserted):
        (WebCore::notifyNodeRemovedFromDocument):
        (WebCore::notifyNodeRemovedFromTree):
        (WebCore::notifyChildNodeRemoved):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument): Deleted.
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree): Deleted.
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument): Deleted.
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree): Deleted.
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::ChildNodeInsertionNotifier): Deleted.
        (WebCore::ChildNodeRemovalNotifier::ChildNodeRemovalNotifier): Deleted.
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument): Deleted.
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree): Deleted.
        (WebCore::ChildNodeInsertionNotifier::notify): Deleted.
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument): Deleted.
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromTree): Deleted.
        (WebCore::ChildNodeRemovalNotifier::notify): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::removeShadowRoot):
        (WebCore::Element::createShadowRoot):

2015-09-16  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/bindings
        https://bugs.webkit.org/show_bug.cgi?id=149207

        Reviewed by Darin Adler.

        If RefPtr<>&& argument is passed to new variable or other function, we use copyRef() or WTF::move().
        copyRef() should be used when the argument continues to be used in following code. If it is final use
        inside function, we have to use WTF::move().

        * bridge/NP_jsobject.cpp:
        * bridge/NP_jsobject.h:
        * bridge/c/CRuntimeObject.cpp:
        (JSC::Bindings::CRuntimeObject::CRuntimeObject):
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::create):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::CInstance):
        * bridge/c/c_instance.h:
        (JSC::Bindings::CInstance::create):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Array::Array):
        (JSC::Bindings::Instance::Instance):
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::create):
        * bridge/objc/ObjCRuntimeObject.mm:
        (JSC::Bindings::ObjCRuntimeObject::ObjCRuntimeObject):
        * bridge/objc/WebScriptObjectProtocol.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::create):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcArray::ObjcArray):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::create):
        * bridge/runtime_root.h:

2015-09-16  Chris Dumez  <cdumez@apple.com>

        Element's attribute NS API should defined treat undefined namespace as null
        https://bugs.webkit.org/show_bug.cgi?id=149238
        <rdar://problem/22562204>

        Reviewed by Ryosuke Niwa.

        Element's attribute NS API should treat defined undefined namespace as null
        instead of converting it to the "undefined" String. This is because the
        namespace parameter is a nullable String as per the DOM spec:
        - https://dom.spec.whatwg.org/#element

        The attribute is nullable and WebIDL says undefined should be converted
        to null for nullable parameters:
        - https://heycam.github.io/webidl/#es-nullable-type (step 3)

        Firefox follows the specification.

        No new tests, already covered by existing test.

        * dom/Element.idl:

2015-09-16  Chris Dumez  <cdumez@apple.com>

        Possible small iOS PLT regression from r189537
        https://bugs.webkit.org/show_bug.cgi?id=149232

        Reviewed by Ryosuke Niwa.

        r189537 may have regressed PLT a bit on iOS. That change added a couple
        of extra branches to throw exceptions. This patch marks those branches
        as UNLIKELY() as we already do for other similar checks in the JS
        bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_get_strict_type_checking_attribute):
        (webkit_dom_test_obj_set_strict_type_checking_attribute):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjStrictTypeCheckingAttribute):
        (WebCore::setJSTestObjStrictTypeCheckingAttribute):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj strictTypeCheckingAttribute]):
        (-[DOMTestObj setStrictTypeCheckingAttribute:]):
        * bindings/scripts/test/TestObj.idl:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::setTHead):
        (WebCore::HTMLTableElement::setTFoot):

2015-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix common typo "supress" => "suppress"
        https://bugs.webkit.org/show_bug.cgi?id=149199

        Reviewed by Gyuyoung Kim.

        * html/shadow/ContentDistributor.h:
        (WebCore::ContentDistributor::needsDistribution):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        * platform/NotImplemented.h:
        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::hookCallback):
        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::deviceRemoved):
        * platform/win/makesafeseh.asm:

2015-09-16  Chris Dumez  <cdumez@apple.com>

        WebIDL: Rename [ReturnNewObject] to [NewObject] and use it more consistently in DOM
        https://bugs.webkit.org/show_bug.cgi?id=149192

        Reviewed by Darin Adler.

        Rename [ReturnNewObject] to [NewObject] and use it more consistently in
        DOM.

        This aligns our IDL extended attribute naming with standard Web IDL:
        https://heycam.github.io/webidl/#NewObject

        We already have [ReturnNewObject] in most places that the DOM
        specification uses [NewObject] but we are missing a few so I'll
        fix this as well:
        https://dom.spec.whatwg.org/#interface-document

        Using [NewObject] lets the bindings generator know that the API in
        question always returns new objects and that we can bypass the check
        for existing wrappers and directly create a new wrapper for the
        returned object.

        This patch also adds support for generating the toJSNewlyCreated()
        utility function for most types. Previously, to use [ReturnNewObject]
        for a new type, you needed to add the type to a hard-coded list in
        the bindings generator then provide your own implementation for
        toJSNewlyCreated() as custom bindings.

        No new-exposed behavior change.

        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        Add toJSNewlyCreated() custom implementation for Node, Event and
        Document, that shares code with the existing toJS() implementation for
        those types.

        * bindings/js/JSCDATASectionCustom.cpp: Removed.
        * bindings/js/JSTextCustom.cpp: Removed.
        * bindings/js/JSTouchCustom.cpp: Removed.
        * bindings/js/JSTouchListCustom.cpp: Removed.
        Drop several custom bindings files as the bindings generator is
        now able to generate the toJSNewlyCreated() utility function for
        most types.

        * bindings/scripts/CodeGeneratorJS.pm:
        - Rename [ReturnNewObject] to [NewObject].
        - Generate a toJSNewlyCreated() whenever we generate a toJS() already.
          Get rid of the hard-coded list of types that need a
          toJSNewlyCreated().

        * bindings/scripts/IDLAttributes.txt:
        Rename [ReturnNewObject] to [NewObject].

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:
        Rebaseline bindings tests.

        * dom/Attr.idl:
        * dom/CDATASection.idl:
        * dom/Comment.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/EntityReference.idl:
        * dom/ProcessingInstruction.idl:
        Add [JSGenerateToJSObject] so that the bindings generator generates
        a toJS() / toJSNewlyCreated() for this type. While it is not strictly
        needed, it avoids falling back to using the toJS() from Node which
        calls the virtual nodeType() function to determine the node type.
        This change was made for efficiency purposes.

        * dom/DOMImplementation.idl:
        Rename [ReturnNewObject] to [NewObject] and add it to createHTMLDocument()
        as well, as per the specification:
        https://dom.spec.whatwg.org/#interface-domimplementation

        * dom/Document.idl:
        Rename [ReturnNewObject] to [NewObject] and add it to more operations
        as per he DOM specification:
        https://dom.spec.whatwg.org/#document

        * dom/Node.idl:
        Add [NewObject] to cloneNode() as per the DOM specification:
        https://dom.spec.whatwg.org/#node

        * dom/ParentNode.idl:
        Add [NewObject] to querySelectorAll() as per the DOM specification:
        https://dom.spec.whatwg.org/#parentnode

        * dom/Range.idl:
        Add [NewObject] for several operations, as per the DOM specification:
        https://dom.spec.whatwg.org/#interface-range

2015-09-16  Brady Eidson  <beidson@apple.com>

        Have window.indexedDB.deleteDatabase return an IDBOpenDBRequest.
        https://bugs.webkit.org/show_bug.cgi?id=149229

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/deletedatabase-request.html
              storage/indexeddb/modern/deletedatabase-null-name-exception.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp: Added.
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        * Modules/indexeddb/IDBDatabaseIdentifier.h: Added.
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::IDBDatabaseIdentifier::isHashTableDeletedValue):
        (WebCore::IDBDatabaseIdentifier::hash):
        (WebCore::IDBDatabaseIdentifier::isValid):
        (WebCore::IDBDatabaseIdentifier::operator==):
        (WebCore::IDBDatabaseIdentifier::databaseName):
        (WebCore::IDBDatabaseIdentifierHash::hash):
        (WebCore::IDBDatabaseIdentifierHash::equal):
        (WebCore::IDBDatabaseIdentifierHashTraits::isEmptyValue):

        * Modules/indexeddb/client/IDBFactoryImpl.cpp:
        (WebCore::IDBClient::shouldThrowSecurityException):
        (WebCore::IDBClient::IDBFactory::getDatabaseNames):
        (WebCore::IDBClient::IDBFactory::open):
        (WebCore::IDBClient::IDBFactory::deleteDatabase):
        * Modules/indexeddb/client/IDBFactoryImpl.h:

        * Modules/indexeddb/client/IDBOpenDBRequestImpl.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp.
        (WebCore::IDBClient::IDBOpenDBRequest::IDBOpenDBRequest):
        * Modules/indexeddb/client/IDBOpenDBRequestImpl.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp.
        (WebCore::IDBClient::IDBOpenDBRequest::create):

        * Modules/indexeddb/client/IDBRequestImpl.cpp: Copied from Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp.
        (WebCore::IDBClient::IDBRequest::IDBRequest):
        (WebCore::IDBClient::IDBRequest::result):
        (WebCore::IDBClient::IDBRequest::errorCode):
        (WebCore::IDBClient::IDBRequest::error):
        (WebCore::IDBClient::IDBRequest::source):
        (WebCore::IDBClient::IDBRequest::transaction):
        (WebCore::IDBClient::IDBRequest::readyState):
        (WebCore::IDBClient::IDBRequest::eventTargetInterface):
        (WebCore::IDBClient::IDBRequest::activeDOMObjectName):
        (WebCore::IDBClient::IDBRequest::canSuspendForPageCache):
        * Modules/indexeddb/client/IDBRequestImpl.h: Copied from Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.h.

        * platform/Logging.h:

2015-09-16  Chris Dumez  <cdumez@apple.com>

        Add initial support for [Unforgeable] IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=149147

        Reviewed by Darin Adler.

        Add initial support for [Unforgeable] IDL extended attribute:
        https://heycam.github.io/webidl/#Unforgeable

        In particular, attributes marked as unforgeable are now:
        - on the instance rather than the prototype
        - non-configurable. WebKit does not match the Web IDL specification
          and most properties are currently non-configurable already. However,
          I added an extra check for [Unforgeable] so that unforgeable
          attributes stay unconfigurable if we later decide to match the spec
          and mark properties as configurable.

        Operation marked as unforgeable are now non-configurable. However, this
        patch does not move them from the prototype to the instance yet. This
        needs to be addressed in a follow-up patch as this is a larger change.

        This patch also drops support for the undocumented
        [OperationsNotDeletable] IDL extended attribute. It is no longer needed
        now that we support [Unforgeable] and still support [NotDeletable] for
        operations.

        Test: fast/dom/unforgeable-attributes.html

        * Modules/plugins/QuickTimePluginReplacement.idl:
        Drop [OperationsNotDeletable] on the interface and mark the only
        operation on this interface as [NotDeletable]. There is no behavior
        change but this allows us to drop support for a non-standard and
        undocumented IDL extended attribute.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AttributeShouldBeOnInstance):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        Add initial support for [Unforgeable] IDL extended attribute.

        * bindings/scripts/IDLAttributes.txt:
        Add [Unforgeable]. Drop [OperationsNotDeletable].

        * crypto/CryptoKeyPair.idl:
        Drop [OperationsNotDeletable] on the interface as this interface has
        no operations.

        * dom/Document.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        Mark attributes / interfaces as [Unforgeable] as per the latest HTML
        specification:
        https://html.spec.whatwg.org/multipage/dom.html#document
        https://html.spec.whatwg.org/multipage/browsers.html#window
        https://html.spec.whatwg.org/multipage/browsers.html#the-location-interface

2015-09-16  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Glitch selecting long text.
        https://bugs.webkit.org/show_bug.cgi?id=149204
        rdar://problem/22646472

        Reviewed by Antti Koivisto.

        When long text is split into multiple RenderText objects, we ignore renderer boundaries while
        collecting wrapping positions (so that we don't end up wrapping unbreakable fragments at the end of each renderer).
        This patch ensures that fragments with hypen character ignore renderer boundaries too.

        Test: fast/text/multiple-renderers-with-hypen-on-boundary.html

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):

2015-09-16  Brady Eidson  <beidson@apple.com>

        Remove stray logging string mistakenly left in r189746.

        * Modules/indexeddb/legacy/LegacyFactory.cpp:
        (WebCore::LegacyFactory::deleteDatabase):

2015-09-16  Chris Fleizach  <cfleizach@apple.com>

        AX: No VoiceOver typing feedback in some search fields
        https://bugs.webkit.org/show_bug.cgi?id=149177

        Reviewed by Mario Sanchez Prada.

        If SearchFieldRole is not marked as a TextControl, it does not end up returning the accessibilityValue,
        which is needed to output the right text to VoiceOver.

        Test: accessibility/ax-value-with-search.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isTextControl):

2015-09-16  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Grid container's height should include scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=149210

        Reviewed by Sergio Villar Senin.

        Add scrollbar's size in the grid container's height calculation at
        RenderGrid::layoutGridItems().

        Test: fast/css-grid-layout/grid-container-margin-border-padding-scrollbar.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems): Include scrollbarLogicalHeight()
        while computing the grid's logical height.

2015-09-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM bindings API break after r189676.

        webkit_dom_character_data_append_data() used to raise exceptions.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (FunctionUsedToRaiseException):

2015-09-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189847.
        https://bugs.webkit.org/show_bug.cgi?id=149208

        Asserts on all the tests (Requested by ap on #webkit).

        Reverted changeset:

        "Simple line layout: Glitch selecting long text."
        https://bugs.webkit.org/show_bug.cgi?id=149204
        http://trac.webkit.org/changeset/189847

2015-09-15  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Glitch selecting long text.
        https://bugs.webkit.org/show_bug.cgi?id=149204
        rdar://problem/22646472

        Reviewed by Antti Koivisto.

        When long text is split into multiple RenderText objects, we ignore renderer boundaries while
        collecting wrapping positions (so that we don't end up wrapping unbreakable fragments at the end of each renderer).
        This patch ensures that fragments with hypen character ignore renderer boundaries too.

        Test: fast/text/multiple-renderers-with-hypen-on-boundary.html

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ build fix attempt after r189841.

        * PlatformGTK.cmake:

2015-09-15  Chris Dumez  <cdumez@apple.com>

        Document.createElement(localName) does not handle correctly missing or null parameter
        https://bugs.webkit.org/show_bug.cgi?id=149184
        <rdar://problem/22565070>

        Reviewed by Ryosuke Niwa.

        Document.createElement(localName) does not handle correct missing or
        null parameter:
        - https://dom.spec.whatwg.org/#interface-document

        As per the specification, the parameter is a non-nullable DOMString and
        is mandatory. Therefore, as per Web IDL, we should have the following
        behavior:
        1. If the parameter is missing, we should throw an exception
        2. If the parameter is null, we should convert it to the "null" string
           and create a <null> element.

        Chrome and Firefox behave according to the specification. However,
        WebKit was doing:
        1. Create a <undefined> element
        2. Throw an InvalidCharacterError

        This patch aligns WebKit's behavior with the specification and other
        major browsers.

        No new tests, already covered by existing tests.

        * dom/Document.idl:

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add ShadowRoot interface and Element.prototype.attachShadow
        https://bugs.webkit.org/show_bug.cgi?id=149187

        Reviewed by Antti Koivisto.

        Add back ShadowRoot IDL interface and Element.prototype.attachShadow in accordance with
        http://w3c.github.io/webcomponents/spec/shadow/ at db27e6e36eab512d86edcdabb33ed27b5751acd7 excluding getSelection(),
        elementFromPoint(), elementsFromPoint(), caretPositionFromPoint(), and styleSheets attribute on ShadowRoot interface.

        The feature is enabled by default on Mac and iOS ports for testing and disabled by default elsewhere.

        Also added HTMLElement::canHaveUserAgentShadowRoot which returns false by default and overridden elsewhere to return true
        to distinguish elements for which attachShadow is supposed to throw NotSupported.
        See https://w3c.github.io/webcomponents/spec/shadow/#widl-Element-attachShadow-ShadowRoot-ShadowRootInit-shadowRootInitDict

        Tests: fast/shadow-dom/Element-interface-attachShadow.html
               fast/shadow-dom/Element-interface-shadowRoot-attribute.html
               fast/shadow-dom/ShadowRoot-interface.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * dom/Element.cpp:
        (WebCore::Element::bindingsOffsetParent):
        (WebCore::Element::offsetParent):
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::createShadowRoot):
        (WebCore::Element::attachShadow): Added.
        (WebCore::Element::bindingShadowRoot): Added. Returns null unless the attached shadow root is in the "open" mode.
        * dom/Element.h:
        * dom/Element.idl: Added attachShadow and shadowRoot. We only expose these to JS for now since Dictionary argument isn't
        supported by other binding code.
        * dom/ShadowRoot.cpp: Removed an unused enum.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::Type): Replaced old-style enum "ShadowRootType" by an enum class named "Type". Also added two new
        values Open and Closed for author shadow roots.
        (WebCore::ShadowRoot::type):
        * dom/ShadowRoot.idl: Added.
        * html/HTMLButtonElement.h:
        * html/HTMLDetailsElement.h:
        (HTMLButtonElement::canHaveUserAgentShadowRoot): Ditto.
        * html/HTMLElement.h:
        (WebCore::HTMLElement::canHaveUserAgentShadowRoot): Added. Returns false by default.
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTextAreaElement.h:
        * html/shadow/InsertionPoint.h:
        (ShadowRootWithInsertionPoints::ShadowRootWithInsertionPoints):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionPseudoStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::rendererForScrollbar):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingUseElement):
        * testing/Internals.cpp:
        (WebCore::Internals::shadowRootType):

2015-09-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed release fix after r189832

        * platform/graphics/ca/win/PlatformCALayerWin.h: The implementation
        should exist in Release builds as well.

2015-09-15  Benjamin Poulain  <bpoulain@apple.com>

        Style invalidation affecting siblings does not work with inline-style changes
        https://bugs.webkit.org/show_bug.cgi?id=149189

        Reviewed by Antti Koivisto.

        Style::resolveTree() made the assumption that inline style changes only affect
        descendants and should not participate in "StyleRecalcAffectsNextSiblingElementStyle".
        That was wrong. If the inline style change through CSSOM, it can cause the creation
        of a style attribute, which is observable through "StyleRecalcAffectsNextSiblingElementStyle".

        This patch removes the incorrect assumption. Style invalidation is always propagated now.

        Tests: fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html
               fast/css/style-attribute-invalidation-propagates-to-direct-siblings.html
               fast/css/style-attribute-invalidation-propagates-to-indirect-siblings.html

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::InlineCSSStyleDeclaration::didMutate): Deleted.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::inlineStyleChanged):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):
        Clean up inline-style invalidation a tiny bit.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):
        Fix the bug.

2015-09-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Paused Debugger prevents page reload
        https://bugs.webkit.org/show_bug.cgi?id=148174

        Reviewed by Brian Burg.

        When navigating the page while paused, suppress any pausing until the page
        has completed navigation. If not paused and navigating, you can still pause
        in pagehide and unload handlers or other late page events.

        Could not write a reliable test for this at the moment.
        InspectorTest.reloadPage has multiple issues with the output,
        so I'll investigate making reload tests more reliable later.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resume): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        We now use existing InspectorInstrumentation functions instead of a method
        on InspectorController during load. In dropping the method InspectorController
        can drop a member variable no longer used.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willStartProvisionalLoad):
        Add a new instrumentation hook.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willStartProvisionalLoadImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        When starting or completing main frame navigations, let the PageDebuggerAgent do some work.

        * inspector/PageDebuggerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::mainFrameStartedLoading):
        (WebCore::PageDebuggerAgent::mainFrameStoppedLoading):
        (WebCore::PageDebuggerAgent::mainFrameNavigated):
        Suppress pausing if navigating while paused. Otherwise behave as normal.

2015-09-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Provide a means for viewing the layer tree
        https://bugs.webkit.org/show_bug.cgi?id=149165

        Reviewed by Simon Fraser.

        Revise the old fprintf logic to generate a string
        containing the layer tree so that it can be output
        to the debugger (or elsewhere).

        * platform/graphics/ca/PlatformCALayer.h: Rename 'printTree'
        to 'printLayerTree', and make it available in release builds.
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::printLayerTree): Added. Calls into
        the PlatformCALayer implementation.
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printIndent): Revise to use two-space indent and use StringBuilder.
        (printTransform): Ditto.
        (printColor): Added helper function.
        (printLayer): Revised to output information on the layer contents.
        (PlatformCALayerWin::printLayerTree): Renamed from 'printTree'.
        (PlatformCALayerWin::printTree): Deleted.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters): Drive-by fix. Match the
        cocoa repaint counter logic by not painting counters for the layers that
        contain the tile grid.
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters):

2015-09-15  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r155554): Nested isolates can cause an infinite loop when laying out bidi runs
        https://bugs.webkit.org/show_bug.cgi?id=149153

        Reviewed by David Hyatt.

        When traversing bidi runs, we might encounter a run which is supposed to be isolated. In this
        situation, we will append a placeholder run in the run list, and remember a pointer to these
        isolated runs inside BidiResolver. Then, once we're done traversing the bidi runs, we return
        to the isolated runs and handle them separately (and replace the placeholder with the result).

        However, due to the fact that our BidiRuns start at leaf nodes, we have to keep track of which
        local root of the render tree we were inspecting (to ensure that we visit the same node
        multiple times if there are nested isolate spans). We were not correctly keeping track of this
        local root, which was leading us to consider the same root multiple times, thereby leading to
        an infinite loop.

        The solution is simply to keep root information alongside the isolated run information inside
        BidiResolver. However, BidiResolver is inside platform/, which means that this new type should
        be a template argument, just like how BidiRun itself is a template argument.

        This new type, BidiIsolatedRun, holds all the information that our isolate-revisiting logic
        needs inside constructBidiRunsForSegment(). It also holds a reference to the placeholder run
        which we will replace.

        Test: fast/text/international/unicode-bidi-isolate-nested-crash.html

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText): BidiIsolatedRun template argument is unused, so pass
        in Void.
        * platform/text/BidiResolver.h: Add template argument.
        (WebCore::BidiResolver::isolatedRuns):
        (WebCore::IsolatedRun>::~BidiResolver):
        (WebCore::IsolatedRun>::appendRun):
        (WebCore::IsolatedRun>::embed):
        (WebCore::IsolatedRun>::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::IsolatedRun>::lowerExplicitEmbeddingLevel):
        (WebCore::IsolatedRun>::raiseExplicitEmbeddingLevel):
        (WebCore::IsolatedRun>::commitExplicitEmbedding):
        (WebCore::IsolatedRun>::updateStatusLastFromCurrentDirection):
        (WebCore::IsolatedRun>::reorderRunsFromLevels):
        (WebCore::IsolatedRun>::createBidiRunsForLine):
        (WebCore::IsolatedRun>::setMidpointForIsolatedRun): Use references instead of pointers.
        (WebCore::IsolatedRun>::midpointForIsolatedRun): Ditto.
        (WebCore::Run>::~BidiResolver): Deleted.
        (WebCore::Run>::appendRun): Deleted.
        (WebCore::Run>::embed): Deleted.
        (WebCore::Run>::checkDirectionInLowerRaiseEmbeddingLevel): Deleted.
        (WebCore::Run>::lowerExplicitEmbeddingLevel): Deleted.
        (WebCore::Run>::raiseExplicitEmbeddingLevel): Deleted.
        (WebCore::Run>::commitExplicitEmbedding): Deleted.
        (WebCore::Run>::updateStatusLastFromCurrentDirection): Deleted.
        (WebCore::Run>::reorderRunsFromLevels): Deleted.
        (WebCore::Run>::createBidiRunsForLine): Deleted.
        (WebCore::Run>::setMidpointForIsolatedRun): Deleted.
        (WebCore::Run>::midpointForIsolatedRun): Deleted.
        * rendering/InlineIterator.h:
        (WebCore::BidiIsolatedRun::BidiIsolatedRun): New type.
        (WebCore::addPlaceholderRunForIsolatedInline): Create new type, and include local root
        information.
        (WebCore::IsolateTracker::addFakeRunIfNecessary): Include local root information.
        (WebCore::InlineBidiResolver::appendRun): Ditto.
        * rendering/RenderBlockLineLayout.cpp: Update for new BidiIsolatedRun type.
        (WebCore::setUpResolverToResumeInIsolate):
        (WebCore::constructBidiRunsForSegment):
        * rendering/line/TrailingObjects.h:

2015-09-15  Brady Eidson  <beidson@apple.com>

        Add empty IDBFactory implementation for Modern IDB.
        https://bugs.webkit.org/show_bug.cgi?id=149191

        Reviewed by Jer Noble.

        No new tests (No behavior change).

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        
        * Modules/indexeddb/client/IDBFactoryImpl.cpp: 
        (WebCore::IDBClient::IDBFactory::create):
        (WebCore::IDBClient::IDBFactory::IDBFactory):
        (WebCore::IDBClient::IDBFactory::getDatabaseNames):
        (WebCore::IDBClient::IDBFactory::open):
        (WebCore::IDBClient::IDBFactory::deleteDatabase):
        (WebCore::IDBClient::IDBFactory::cmp):
        * Modules/indexeddb/client/IDBFactoryImpl.h: 
        
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * loader/EmptyClients.cpp:
        * page/DatabaseProvider.h:

2015-09-15  Antti Koivisto  <antti@apple.com>

        Split FontDescription into lower and higher level types
        https://bugs.webkit.org/show_bug.cgi?id=149036

        Reviewed by Darin Adler.

        Currently FontDescription is used through the text subsystem. However much of the data it
        carries is only needed by FontCascade and text layout but not by the lower level Font/FontCache
        layer. This makes code confusing. For example families specified in FontDescription are ignored
        at lower levels.

        Split it into a low level FontDescription and a high level FontCascadeDescription type:

        FontDescription <-> Font
        FontCascadeDescription <-> FontCascade

        The former only carries information that is needed to instantiate a Font or fetch it from the FontCache.
        The latter has additional data for CSS font cascade semantics and other higher level features.

2015-09-15  Myles C. Maxfield  <mmaxfield@apple.com>

        GraphicsContext::drawBidiText()'s BidiResolver should not have isolated runs
        https://bugs.webkit.org/show_bug.cgi?id=149193

        Reviewed by Anders Carlsson.

        There are two users of BidiResolver, one which needs isolated runs (in RenderBlockLineLayout) and
        one which doesn't (in GraphicsContext::drawBidiText()). Because of [1], the isolated runs vector
        is migrating to a new type outside of platform/. Therefore, only the first user of BidiResolver
        should have this member variable.

        This is achieved by creating two subclasses of BidiResolver, and using the Curiously Repeating
        Template pattern to downcast into specializations.

        [1] https://bugs.webkit.org/show_bug.cgi?id=149153

        No new tests because there is no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolverBase::BidiResolverBase):
        (WebCore::BidiResolverBase::increment):
        (WebCore::BidiResolverBase::appendRun):
        (WebCore::BidiResolverBase::incrementInternal):
        (WebCore::IsolateRun>::~BidiResolverWithIsolate):
        (WebCore::Subclass>::appendRunInternal):
        (WebCore::Subclass>::embed):
        (WebCore::Subclass>::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::Subclass>::lowerExplicitEmbeddingLevel):
        (WebCore::Subclass>::raiseExplicitEmbeddingLevel):
        (WebCore::Subclass>::commitExplicitEmbedding):
        (WebCore::Subclass>::updateStatusLastFromCurrentDirection):
        (WebCore::Subclass>::reorderRunsFromLevels):
        (WebCore::Subclass>::createBidiRunsForLine):
        (WebCore::Subclass>::setMidpointForIsolatedRun):
        (WebCore::Subclass>::midpointForIsolatedRun):
        (WebCore::BidiResolver::BidiResolver): Deleted.
        (WebCore::BidiResolver::increment): Deleted.
        (WebCore::BidiResolver::isolatedRuns): Deleted.
        (WebCore::Run>::~BidiResolver): Deleted.
        (WebCore::Run>::appendRun): Deleted.
        (WebCore::Run>::embed): Deleted.
        (WebCore::Run>::checkDirectionInLowerRaiseEmbeddingLevel): Deleted.
        (WebCore::Run>::lowerExplicitEmbeddingLevel): Deleted.
        (WebCore::Run>::raiseExplicitEmbeddingLevel): Deleted.
        (WebCore::Run>::commitExplicitEmbedding): Deleted.
        (WebCore::Run>::updateStatusLastFromCurrentDirection): Deleted.
        (WebCore::Run>::reorderRunsFromLevels): Deleted.
        (WebCore::Run>::createBidiRunsForLine): Deleted.
        (WebCore::Run>::setMidpointForIsolatedRun): Deleted.
        (WebCore::Run>::midpointForIsolatedRun): Deleted.
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::incrementInternal):
        (WebCore::InlineBidiResolver::appendRunInternal):
        (WebCore::InlineBidiResolver::increment): Deleted.
        (WebCore::InlineBidiResolver::appendRun): Deleted.
        * rendering/line/TrailingObjects.h:

2015-09-15  Chris Dumez  <cdumez@apple.com>

        new Event() without parameter should throw
        https://bugs.webkit.org/show_bug.cgi?id=149146
        <rdar://problem/22565070>

        Reviewed by Ryosuke Niwa.

        new Event() without parameter should throw because the type parameter
        is mandatory as per the specification:
        https://dom.spec.whatwg.org/#interface-event

        Both Firefox and Chrome throw in this case. However, WebKit was
        creating an event whose type is the string "undefined". This patch
        aligns our behavior with the specification and other major browsers.

        No new tests, already covered by existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::constructJSTestEventConstructor):

2015-09-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build failure with ACCELERATED_2D_CANVAS when cairo-gl has built with OpenGLESv2 support only.
        https://bugs.webkit.org/show_bug.cgi?id=149172

        Reviewed by Martin Robinson.

        No new tests, no behavior change.

        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::cairoDevice):

2015-09-15  Chris Dumez  <cdumez@apple.com>

        Element.getAttributeNS() should return null if the attribute does not exist
        https://bugs.webkit.org/show_bug.cgi?id=149180
        <rdar://problem/22561011>

        Reviewed by Ryosuke Niwa.

        Element.getAttributeNS() should return null if the attribute does not
        exist, similarly to what Element.getAttribute() does:
        - https://dom.spec.whatwg.org/#element (both return a nullable DOMString).
        - https://dom.spec.whatwg.org/#dom-element-getattributens (step 2)

        Firefox and Chrome match the specification. However, WebKit was returning
        an empty string for getAttributeNS() and null for getAttribute(). This
        patch aligns WebKit's behavior with the specification and other browsers.

        No new tests, already covered by existing tests.

        * dom/Element.idl:

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        ContentDistribution should be only used for details elements
        https://bugs.webkit.org/show_bug.cgi?id=149148

        Reviewed by Antti Koivisto.

        Extracted ShadowRootWithInsertionPoints out of ShadowRoot for HTMLDetailsElement and HTMLSummaryElement.

        We don't add a separate .h and .cpp files since this is a temporary measure until we replace it with
        a slot-based shadow DOM implementation.

        No new tests. There should be no observable behavioral change.

        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot): Removed the call to didShadowBoundaryChange since this function is only
        called in ensureUserAgentShadowRoot. Also moved the call to didAddUserAgentShadowRoot for
        HTMLDetailsElement's shadow root which uses this function instead of ensureUserAgentShadowRoot.
        (WebCore::Element::removeShadowRoot): Removed the call to invalidateDistribution since it's only called by
        ~Element.
        (WebCore::Element::createShadowRoot):
        (WebCore::Element::ensureUserAgentShadowRoot): Moved the call didAddUserAgentShadowRoot into addShadowRoot
        since HTMLDetailsElement uses a subclass of ShadowRoot.
        (WebCore::Element::childrenChanged):
        (WebCore::Element::removeAllEventListeners):

        * dom/Element.h:
        (Element::addShadowRoot): Made this function a protected member as it's now used by HTMLDetailsElement.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::childrenChanged): Deleted.

        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::distributor): Made this a virtual function and return nullptr by default.
        (WebCore::ShadowRoot::isOrphan):

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::create): Uses ShadowRootWithInsertionPoints instead of ShadowRoot.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks): Removed the call to invalidateDistribution since it's
        only relevant for HTMLDetailsElement's shadow DOM.

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create): Uses ShadowRootWithInsertionPoints instead of ShadowRoot.

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::ensureDistribution):
        (WebCore::ContentDistributor::invalidateDistribution):

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::childrenChanged):
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        (WebCore::findInsertionPointOf):
        (WebCore::ShadowRootWithInsertionPoints::childrenChanged): Moved from ShadowRoot.

        * html/shadow/InsertionPoint.h:
        (WebCore::ShadowRootWithInsertionPoints::create): Added.
        (WebCore::ShadowRootWithInsertionPoints::ShadowRootWithInsertionPoints): Added.

2015-09-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Tiled drawing is rendering more times than it should
        https://bugs.webkit.org/show_bug.cgi?id=149144
        <rdar://problem/22313905>

        Reviewed by Simon Fraser.

        Provide a more faithful implemenation of the Objective C tiled drawing logic.
        (1) Create a new WebTiledBackingLayerWin class that represents a the
            container of tiles. This matches the Objective C design.
        (2) Move implementation of several methods (e.g., isOpaque) to the internal
            class implementation so that the Tile Drawing logic can perform special
            handling in these cases.
        (3) Remove the duplicated Tiled Drawing logic from PlatformCALayerWinInternal,
            since it was just duplicating code in TileController and TileGrid.
        (4) Clean up the display callback code to avoid performing incorrect flipping
            of the coordinate system.

        * PlatformAppleWin.cmake: Add new WebTiledBackingLayerWin file.            
        * WebCore.vcxproj/WebCore.vcxproj: Add the new WebTiledBackingLayerWin files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * platform/graphics/ca/PlatformCALayer.cpp:
        (PlatformCALayer::flipContext): Added convenience method.
        (PlatformCALayer::drawRepaintIndicator): Ditto.
        * platform/graphics/ca/TileGrid.cpp:
        (TileGrid::platformCALayerPaintContents): Flip the context before drawing the repaint
        indicator on Windows.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin): Create a WebTiledBackingLayerWin
        object if using tiled drawing.
        (PlatformCALayerWin::~PlatformCALayerWin):
        (PlatformCALayerWin::isOpaque): Move implementation to internal class.
        (PlatformCALayerWin::setOpaque): Ditto.
        (PlatformCALayerWin::setBorderWidth): Ditto.
        (PlatformCALayerWin::setBorderColor): Ditto.
        (PlatformCALayerWin::contentsScale): Ditto.
        (PlatformCALayerWin::setContentsScale): Ditto.
        (PlatformCALayerWin::cornerRadius): Ditto.
        (PlatformCALayerWin::tiledBacking): Ditto.
        (PlatformCALayerWin::drawTextAtPoint): New helper method to draw repaint counter
        text. Needed to work around bug in CG.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::PlatformCALayerWinInternal): Remove tiling-logic
        related member variables.
        (PlatformCALayerWinInternal::~PlatformCALayerWinInternal):
        (shouldInvertBeforeDrawingContent): Added convenience method.
        (shouldInvertBeforeDrawingRepaintCounters): Ditto.
        (PlatformCALayerWinInternal::displayCallback):
        (PlatformCALayerWinInternal::drawRepaintCounters): Helper method to
        share code between the two layer classes.
        (PlatformCALayerWinInternal::internalSetNeedsDisplay): use nullptr.
        (PlatformCALayerWinInternal::setNeedsDisplay): Ditto.
        (PlatformCALayerWinInternal::setNeedsDisplayInRect): Move tiled code
        to WebTiledBackingLayerWin and simplify the remaing code.
        (PlatformCALayerWinInternal::setSublayers): Remove tile code.
        (PlatformCALayerWinInternal::getSublayers): Ditto.
        (PlatformCALayerWinInternal::removeAllSublayers): Ditto.
        (PlatformCALayerWinInternal::insertSublayer): Ditto.
        (PlatformCALayerWinInternal::sublayerCount): Ditto.
        (PlatformCALayerWinInternal::indexOfSublayer): Ditto.
        (PlatformCALayerWinInternal::sublayerAtIndex): Ditto.
        (PlatformCALayerWinInternal::setBounds): Ditto.
        (PlatformCALayerWinInternal::setFrame): Ditto.
        (PlatformCALayerWinInternal::isOpaque): Ditto.
        (PlatformCALayerWinInternal::setOpaque): Ditto.
        (PlatformCALayerWinInternal::contentsScale): Ditto.
        (PlatformCALayerWinInternal::setContentsScale): Ditto.
        (PlatformCALayerWinInternal::setBorderWidth): Ditto.
        (PlatformCALayerWinInternal::setBorderColor): Ditto.
        (layerTypeIsTiled): Deleted.
        (PlatformCALayerWinInternal::constrainedSize): Deleted.
        (PlatformCALayerWinInternal::tileDisplayCallback): Deleted.
        (PlatformCALayerWinInternal::addTile): Deleted.
        (PlatformCALayerWinInternal::removeTile): Deleted.
        (PlatformCALayerWinInternal::tileAtIndex): Deleted.
        (PlatformCALayerWinInternal::tileCount): Deleted.
        (PlatformCALayerWinInternal::updateTiles): Deleted.
        (PlatformCALayerWinInternal::drawTile): Deleted.
        (PlatformCALayerWinInternal::createTileController): Deleted.
        (PlatformCALayerWinInternal::tiledBacking): Deleted.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:
        (WebCore::PlatformCALayerWinInternal::owner):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp: Added.
        (WebTiledBackingLayerWin::WebTiledBackingLayerWin):
        (WebTiledBackingLayerWin::~WebTiledBackingLayerWin):
        (DisplayOnMainThreadContext::DisplayOnMainThreadContext):
        (redispatchOnMainQueue):
        (WebTiledBackingLayerWin::displayCallback):
        (WebTiledBackingLayerWin::setNeedsDisplay):
        (WebTiledBackingLayerWin::setNeedsDisplayInRect):
        (WebTiledBackingLayerWin::setBounds):
        (WebTiledBackingLayerWin::isOpaque):
        (WebTiledBackingLayerWin::setOpaque):
        (WebTiledBackingLayerWin::contentsScale):
        (WebTiledBackingLayerWin::setContentsScale):
        (WebTiledBackingLayerWin::setBorderWidth):
        (WebTiledBackingLayerWin::setBorderColor):
        (WebTiledBackingLayerWin::createTileController):
        (WebTiledBackingLayerWin::tiledBacking):
        (WebTiledBackingLayerWin::invalidate):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.h: Added.

2015-09-14  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Implement margin collapsing across contiguous anonymous inline blocks.
        https://bugs.webkit.org/show_bug.cgi?id=149132

        Reviewed by Zalan Bujtas.

        Added new tests inside fast/block/inside-inlines/

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::anonymousInlineBlock):
        Change this accessor to be more robust and be willing to both recur (in case we ever do decide intermediate line boxes should exist)
        and to type check. This is not currently needed, but I'm just being paranoid and future proof.

        (WebCore::InlineFlowBox::addToLine):
        Again, for thoroughness, I am making sure to propagate the hasAnonymousInlineBlock() bit through to parents. This is only needed
        if we build intermediate line boxes for lines with anonymous inline blocks.

        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        Anonymous inline blocks receive a layout via layoutBlockChild, in order to make sure that margin collapsing runs. This means
        that unlike other line objects, the position of the child has been determined already. Therefore we simply set the position
        of the line box that wraps the anonymous inline block to the already-computed position for that block.

        Also patch the code that sets lineTop and lineBottom using the root box's dimensions. We don't really care about the root line
        box on anonymous inline block lines and just want to set lineTop and lineBottom to fit the anonymous inline block.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::collapseMarginsWithChildInfo):
        Refactor collapseMargins to call a helper function that can pass in a previous "sibling", and that can handle the child
        being null. We do this to perform a margin collapse when anonymous inline blocks run up against regular lines (which is like
        collapsing with a sibling block "child").

        * rendering/RenderBlockFlow.h:
        Tweak the MarginInfo constructor to take a const RenderBlockFlow. Tweak some line layout methods to pass in the LineLayoutState
        so that MarginInfo is available during line layout.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxes):
        When we create a new line box, if it is not an anonymous inline block line and our previous line was, simulate a margin
        collapse in order to possibly push the line box down or up. Re-use the pagination adjustment code to rewind line layout
        and perform it again if pushed below a float.

        (WebCore::constructBidiRunsForSegment):
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::matchedEndLine):
        (WebCore::RenderBlockFlow::updateRegionForLine):
        (WebCore::RenderBlockFlow::marginCollapseLinesFromStart):
        Patch line layout to run margin collapsing when anonymous inline blocks are encountered. This involves making sure
        margin info and float bottom positions are passed through so that layoutBlockChild can be properly called on
        anonymous inline blocks that we encounter.

        In addition line layout when it syncs dirty lines has to run margin collapsing on earlier lines in order to make
        sure margin info is properly set up at the first dirty line position.

        Note that there will be more improvements/changes in this area (dirty line syncing), as the current model is inefficient
        when many anonymous inline blocks are scattered throughout a large-scale line box tree.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        Make sure to rely on the block layout code for the placement of the boxes themselves. Set up the line box code to not have
        an effect on ascent/descent.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::handleReplaced):
        When we encounter an anonymous inline block, lay it out when it is seen. We have to delay the layout, since we have
        to be able to perform it mid-line-layout when the containing block's logical height is at the correct value and all previous
        lines are placed. Margin info also has to be current.

        * rendering/line/LineBreaker.cpp:
        * rendering/line/LineBreaker.h:
        Patched to pass LineLayoutState through so that the stuff we need to perform block layout is available (margin info and float vars).

        * rendering/line/LineLayoutState.h:
        Add the block layout margin and float bottom information to the line layout state so that we have it available when performing
        layouts and margin collapses on anonymous inline block children.

2015-09-15  Brady Eidson  <beidson@apple.com>

        Make the IDBAny::Type enum into an enum class.
        https://bugs.webkit.org/show_bug.cgi?id=149169.

        Reviewed by Oliver Hunt.

        No new tests (Cleanup, no behavior change).

        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/legacy/LegacyAny.cpp:
        (WebCore::LegacyAny::createInvalid):
        (WebCore::LegacyAny::createNull):
        (WebCore::LegacyAny::LegacyAny):
        (WebCore::LegacyAny::domStringList):
        (WebCore::LegacyAny::idbCursor):
        (WebCore::LegacyAny::idbCursorWithValue):
        (WebCore::LegacyAny::idbDatabase):
        (WebCore::LegacyAny::idbFactory):
        (WebCore::LegacyAny::idbIndex):
        (WebCore::LegacyAny::idbObjectStore):
        (WebCore::LegacyAny::idbTransaction):
        (WebCore::LegacyAny::scriptValue):
        (WebCore::LegacyAny::string):
        (WebCore::LegacyAny::integer):
        (WebCore::LegacyAny::legacyCursor):
        (WebCore::LegacyAny::legacyCursorWithValue):
        (WebCore::LegacyAny::legacyDatabase):
        (WebCore::LegacyAny::legacyFactory):
        (WebCore::LegacyAny::legacyIndex):
        (WebCore::LegacyAny::legacyObjectStore):
        (WebCore::LegacyAny::legacyTransaction):
        * Modules/indexeddb/legacy/LegacyCursor.cpp:
        (WebCore::LegacyCursor::LegacyCursor):
        (WebCore::LegacyCursor::effectiveObjectStore):
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp:
        * Modules/indexeddb/legacy/LegacyOpenDBRequest.cpp:
        (WebCore::LegacyOpenDBRequest::dispatchEvent):
        * Modules/indexeddb/legacy/LegacyRequest.cpp:
        (WebCore::LegacyRequest::getResultCursor):
        (WebCore::effectiveObjectStore):
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * inspector/InspectorIndexedDBAgent.cpp:
        * page/DatabaseProvider.h:

2015-09-15  Brady Eidson  <beidson@apple.com>

        Move most IDB object encoding/decoding from WebKit2 to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=149152

        Reviewed by Alex Christensen.

        No new tests (Cleanup, no behavior change).

        * Modules/indexeddb/IDBDatabaseMetadata.h:
        (WebCore::IDBDatabaseMetadata::encode):
        (WebCore::IDBDatabaseMetadata::decode):
        * Modules/indexeddb/IDBIndexMetadata.h:
        (WebCore::IDBIndexMetadata::encode):
        (WebCore::IDBIndexMetadata::decode):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyPath.h:
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IDBKeyRangeData.h:
        (WebCore::IDBKeyRangeData::encode):
        (WebCore::IDBKeyRangeData::decode):
        * Modules/indexeddb/IDBObjectStoreMetadata.h:
        (WebCore::IDBObjectStoreMetadata::encode):
        (WebCore::IDBObjectStoreMetadata::decode):

2015-09-14  Brady Eidson  <beidson@apple.com>

        Make the enum IDBKey::Type into a utility enum class.
        https://bugs.webkit.org/show_bug.cgi?id=149149

        Reviewed by Alex Christensen.

        No new tests (Cleanup, no behavior change).

        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::isValid):
        (WebCore::IDBKey::compare):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createDate):
        (WebCore::IDBKey::createMultiEntryArray):
        (WebCore::IDBKey::createArray):
        (WebCore::IDBKey::type):
        (WebCore::IDBKey::array):
        (WebCore::IDBKey::string):
        (WebCore::IDBKey::date):
        (WebCore::IDBKey::number):
        (WebCore::IDBKey::compareTypes):
        (WebCore::IDBKey::IDBKey):
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        (WebCore::IDBKeyData::setArrayValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::minimum):
        (WebCore::IDBKeyData::maximum):
        * Modules/indexeddb/IndexedDB.h:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToJSValue):
        (WebCore::createIDBKeyFromValue):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::generateIndexKeysForValue):
        * inspector/InspectorIndexedDBAgent.cpp:

2015-09-15  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Using {row, column}-axis terms in alignment related logic
        https://bugs.webkit.org/show_bug.cgi?id=148942

        Reviewed by Sergio Villar Senin.

        This patch changes the names of several functions and variables
        defined to implement the alignment logic. We want to use from now
        on the terms row-axis and column-axis when referring to the
        alignment direction the logic is applied to.

        No new tests, no new functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::columnAxisOffsetForChild):
        (WebCore::RenderGrid::rowAxisOffsetForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2015-09-14  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/xml
        https://bugs.webkit.org/show_bug.cgi?id=149114

        Reviewed by Darin Adler.

        * dom/DecodedDataDocumentParser.h:
        * dom/DocumentParser.h:
        * dom/RawDataDocumentParser.h:
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::append):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::append):
        * html/parser/TextDocumentParser.h:
        * xml/NativeXPathNSResolver.cpp:
        (WebCore::NativeXPathNSResolver::NativeXPathNSResolver):
        * xml/NativeXPathNSResolver.h:
        (WebCore::NativeXPathNSResolver::create):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XMLSerializer.h:
        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::createExpression):
        (WebCore::XPathEvaluator::createNSResolver):
        (WebCore::XPathEvaluator::evaluate):
        * xml/XPathEvaluator.h:
        * xml/XPathNodeSet.h: Fix style errors.
        (WebCore::XPath::NodeSet::NodeSet):
        (WebCore::XPath::NodeSet::append):
        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        * xml/XPathValue.h: ditto.
        (WebCore::XPath::Value::Value):
        (WebCore::XPath::Value::Data::create):
        (WebCore::XPath::Value::Data::Data):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::transformToDocument):
        (WebCore::XSLTProcessor::transformToFragment):
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::setXSLStyleSheet):
        (WebCore::XSLTProcessor::importStylesheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        * xml/parser/XMLDocumentParser.h:

2015-09-14  Dewei Zhu  <dewei_zhu@apple.com>

        Polish code for r189579.
        https://bugs.webkit.org/show_bug.cgi?id=149131

        Reviewed by Chris Dumez.

        Use more self-explaining function name "characterSetWithUTF8Fallback" instead of
        "characterSetForBindings". Optimize the way to get text encoding.

        * dom/Document.cpp:
        (WebCore::Document::characterSetWithUTF8Fallback):
        (WebCore::Document::encoding): Deleted.
        (WebCore::Document::characterSetForBindings): Deleted.
        * dom/Document.h:
        (WebCore::Document::encoding):
        (WebCore::Document::textEncoding):
        * dom/Document.idl:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDecoderIfNeeded):
        * loader/FormSubmission.cpp:
        (WebCore::encodingFromAcceptCharset):

2015-09-14  Chris Dumez  <cdumez@apple.com>

        Drop non-standard [IsIndex] WebKit IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=149122
        <rdar://problem/22547139>

        Reviewed by Darin Adler.

        Drop non-standard [IsIndex] WebKit IDL extended attribute. This attribute
        causes us to throw an IndexSizeError if the input value is negative. Web
        IDL supports no such thing. Instead Web IDL supports:
        1. Default behavior: the input value wraps around if it does not fit.
        2. [EnforceRange]: A TypeError is thrown if the input value does not fit [1].
        3. [Clamp]: The input value will be clamped if it does not fit [2].

        Our bindings generator supports all three. We don't need the non-standard
        [IsIndex].

        We previously used [IsIndex] in places where we're supposed to wrap around
        as per Web IDL. Therefore, we threw for negative values but other browsers
        don't. For e.g., CharacterData.substringData(offset, -1) is supposed to
        return the substring from offset to the end of the string. It does so in
        Firefox and Chrome. However, WebKit was throwing an Exception.

        This change impacts the CharacterData and the SVGTextContentElement
        API. The compatibility risk is low because we were throwing an exception
        for negative values and we now wrap the value around instead, as other
        browsers do.

        No new tests, already covered by existing tests.

        [1] https://heycam.github.io/webidl/#EnforceRange
        [2] https://heycam.github.io/webidl/#Clamp

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck): Deleted.
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        * bindings/scripts/test/TestEventTarget.idl:
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::deleteData):
        (WebCore::CharacterData::replaceData):
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::selectSubString):
        * svg/SVGTextContentElement.idl:

2015-09-14  Chris Dumez  <cdumez@apple.com>

        Document.createNodeIterator(null) / Document.createTreeWalker(null) should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=149126
        <rdar://problem/22564891>

        Reviewed by Ryosuke Niwa.

        Document.createNodeIterator(null) / Document.createTreeWalker(null)
        should throw a TypeError:
        https://dom.spec.whatwg.org/#interface-document

        This is because the parameter is not nullable and Web IDL says we
        should throw a TypeError in this case.

        Firefox and Chrome throw an exception in this case. This patch
        aligns our behavior with the specification and other major browsers.

        No new tests, already covered by existing W3C test.

        * dom/Document.cpp:
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::create):
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::NodeIteratorBase):
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::TreeWalker):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create):

2015-09-14  Alex Christensen  <achristensen@webkit.org>

        Fix Windows clean build after r189746

        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        Copy headers from new legacy directory.

2015-09-14  Chris Dumez  <cdumez@apple.com>

        window.HTMLDetailsElement should exist
        https://bugs.webkit.org/show_bug.cgi?id=149139

        Reviewed by Ryosuke Niwa.

        window.HTMLDetailsElement should exist:
        https://html.spec.whatwg.org/multipage/forms.html#the-details-element

        Drop the [NoInterfaceObject] IDL extended attribute in WebKit to
        address the problem.

        No new tests, already covered by existing tests.

        * html/HTMLDetailsElement.idl:

2015-09-14  Alex Christensen  <achristensen@webkit.org>

        Fix AppleWin CMake build
        https://bugs.webkit.org/show_bug.cgi?id=149137

        Reviewed by Brent Fulgham.

        * PlatformAppleWin.cmake:
        Spell Inband correctly.
        * css/makegrammar.pl:
        Add quotes so bison can be in a directory with spaces in it.        

2015-09-14  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r189746

        * WebCore.vcxproj/WebCoreIncludeCommon.props:
        Include new legacy directory.

2015-09-14  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=149123

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        Added some more files.
        * PlatformMac.cmake:
        Added more files and listed the strange ObjC bindings.
        * contentextensions/DFACombiner.cpp:
        * contentextensions/DFACombiner.h:
        Added preprocessor protection.
        * platform/FileSystem.h:
        Include utility.  It's needed to compile the different configurations.
        * platform/ScrollAnimator.cpp:
        ScrollAnimator is an abstract class on Mac.  Don't compile it.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        FontAntialiasingStateSaver.h is only used on iOS.
        * rendering/RenderThemeMac.mm:
        config.h needs to be outside the #if !PLATFORM(IOS) to compile correctly without precompiled headers.

2015-09-14  Brady Eidson  <beidson@apple.com>

        Rename current concrete IDB implementation to "Legacy".
        https://bugs.webkit.org/show_bug.cgi?id=149118

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        This patch makes IDL bindings abstract.
        It then renames the current concrete implementations of the bindings from "IDB" to "Legacy".
        Finally it moves those files and their support classes to a "legacy" subfolder.

        * CMakeLists.txt:
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        * Modules/indexeddb/IDBAny.cpp:
        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.cpp:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/indexeddb/legacy/IDBCallbacks.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCallbacks.h.
        * Modules/indexeddb/legacy/IDBCursorBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackend.cpp.
        * Modules/indexeddb/legacy/IDBCursorBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackend.h.
        * Modules/indexeddb/legacy/IDBCursorBackendOperations.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendOperations.cpp.
        * Modules/indexeddb/legacy/IDBCursorBackendOperations.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendOperations.h.
        * Modules/indexeddb/legacy/IDBDatabaseBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp.
        * Modules/indexeddb/legacy/IDBDatabaseBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.h.
        * Modules/indexeddb/legacy/IDBDatabaseCallbacks.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacks.h.
        * Modules/indexeddb/legacy/IDBDatabaseCallbacksImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp.
        * Modules/indexeddb/legacy/IDBDatabaseCallbacksImpl.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseCallbacksImpl.h.
        * Modules/indexeddb/legacy/IDBFactoryBackendInterface.h: Renamed from Source/WebCore/Modules/indexeddb/IDBFactoryBackendInterface.h.
        * Modules/indexeddb/legacy/IDBPendingDeleteCall.h: Renamed from Source/WebCore/Modules/indexeddb/IDBPendingDeleteCall.h.
        * Modules/indexeddb/legacy/IDBPendingOpenCall.h: Renamed from Source/WebCore/Modules/indexeddb/IDBPendingOpenCall.h.
        * Modules/indexeddb/legacy/IDBPendingTransactionMonitor.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.cpp.
        * Modules/indexeddb/legacy/IDBPendingTransactionMonitor.h: Renamed from Source/WebCore/Modules/indexeddb/IDBPendingTransactionMonitor.h.
        * Modules/indexeddb/legacy/IDBTransactionBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp.
        * Modules/indexeddb/legacy/IDBTransactionBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h.
        * Modules/indexeddb/legacy/IDBTransactionBackendOperations.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp.
        * Modules/indexeddb/legacy/IDBTransactionBackendOperations.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.h.
        * Modules/indexeddb/legacy/IDBTransactionCoordinator.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp.
        * Modules/indexeddb/legacy/IDBTransactionCoordinator.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.h.
        * Modules/indexeddb/legacy/LegacyAny.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBAny.cpp.
        * Modules/indexeddb/legacy/LegacyAny.h: Added.
        * Modules/indexeddb/legacy/LegacyCursor.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBCursor.cpp.
        * Modules/indexeddb/legacy/LegacyCursor.h: Copied from Source/WebCore/Modules/indexeddb/IDBCursor.h.
        * Modules/indexeddb/legacy/LegacyCursorWithValue.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBCursorWithValue.cpp.
        * Modules/indexeddb/legacy/LegacyCursorWithValue.h: Copied from Source/WebCore/Modules/indexeddb/IDBCursorWithValue.h.
        * Modules/indexeddb/legacy/LegacyDatabase.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBDatabase.cpp.
        * Modules/indexeddb/legacy/LegacyDatabase.h: Copied from Source/WebCore/Modules/indexeddb/IDBDatabase.h.
        * Modules/indexeddb/legacy/LegacyFactory.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBFactory.cpp.
        * Modules/indexeddb/legacy/LegacyFactory.h: Copied from Source/WebCore/Modules/indexeddb/IDBFactory.h.
        * Modules/indexeddb/legacy/LegacyIndex.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBIndex.cpp.
        * Modules/indexeddb/legacy/LegacyIndex.h: Added.
        * Modules/indexeddb/legacy/LegacyObjectStore.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp.
        * Modules/indexeddb/legacy/LegacyObjectStore.h: Copied from Source/WebCore/Modules/indexeddb/IDBObjectStore.h.
        * Modules/indexeddb/legacy/LegacyOpenDBRequest.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp.
        * Modules/indexeddb/legacy/LegacyOpenDBRequest.h: Copied from Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.h.
        * Modules/indexeddb/legacy/LegacyRequest.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBRequest.cpp.
        * Modules/indexeddb/legacy/LegacyRequest.h: Copied from Source/WebCore/Modules/indexeddb/IDBRequest.h.
        * Modules/indexeddb/legacy/LegacyTransaction.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBTransaction.cpp.
        * Modules/indexeddb/legacy/LegacyTransaction.h: Copied from Source/WebCore/Modules/indexeddb/IDBTransaction.h.
        * Modules/indexeddb/legacy/LegacyVersionChangeEvent.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.cpp.
        * Modules/indexeddb/legacy/LegacyVersionChangeEvent.h: Copied from Source/WebCore/Modules/indexeddb/IDBVersionChangeEvent.h.
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCore.vcxproj:

2015-09-14  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Remove create() factory function in EvasGLContext and EvasGLSurface
        https://bugs.webkit.org/show_bug.cgi?id=149110

        Reviewed by Csaba Osztrogonác.

        It is not good implementation we support both create() factory function and public constructor.
        In EvasGLContext and EvasGLSurface cases, those have supported both. However create() factory is only
        used by EwkView. Thus let's remove the create() function, then EwkView creates EvasGLContext using
        std::make_unique<> directly.

        * platform/graphics/efl/EvasGLContext.h:
        (WebCore::EvasGLContext::create): Deleted.
        * platform/graphics/efl/EvasGLSurface.h:
        (WebCore::EvasGLSurface::create): Deleted.

2015-09-09  Sergio Villar Senin  <svillar@igalia.com>

        min-width/height should default to auto for grid items
        https://bugs.webkit.org/show_bug.cgi?id=146021

        Reviewed by Darin Adler.

        Based on Blink's r194408, r194863 and r194887 by <rego@igalia.com>.

        From the spec (http://dev.w3.org/csswg/css-grid/#grid-items):
        "The auto value of min-width and min-height behaves on grid
        items in the relevant axis analogously to its behavior on flex
        items in the main axis."

        From now on the default value for min-width and min-height for
        grid items is auto, meaning that in general, grid items won't
        shrink bellow their content.

        The change is not exactly the same as the one in Blink because
        this one takes into account vertical writting modes, something
        that was not well handled in the original one.

        Tests: fast/css-grid-layout/min-width-height-auto-overflow.html
               fast/css-grid-layout/min-width-height-auto.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalHeight):

2015-09-14  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Percentage columns should remove scrollbar's width
        https://bugs.webkit.org/show_bug.cgi?id=149116

        Reviewed by Sergio Villar Senin.

        Currently the calculation of percentage columns was not subtracting the
        scrollbar's size.
        Fixed RenderGrid::computeUsedBreadthOfSpecifiedLength()
        to avoid this problem.

        Test: fast/css-grid-layout/grid-percent-track-scrollbar.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):

2015-09-13  Chris Dumez  <cdumez@apple.com>

        Improve Node pre-insertion validation when the parent is a Document
        https://bugs.webkit.org/show_bug.cgi?id=149109
        <rdar://problem/22560436>

        Reviewed by Ryosuke Niwa.

        Improve Node pre-insertion validation when the parent is a Document to
        match the specification:
        https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
        https://dom.spec.whatwg.org/#concept-node-replace

        This affects the following API: Node.insertBefore(), Node.appendChild(),
        Node.replaceChild().

        WebKit current fails to do the following checks whenever the parent is a
        Document from pre-insertion validation:
        1. If the inserted Node is a DocumentFragment, we should make sure it
          contains only one Element.
        -> This is because a Document can have only one child that is an
           Element [1].
        2.a. If an Element is inserted, we should make sure it is not inserted
             before a DocumentType.
        2.b. If a DocumentType is inserted, we should make sure it is not
             inserted after an Element.
        -> This is because the DocType must come before the optional Element
           child [1].

        Firefox and Chrome already match the specification here. This patch
        aligns WebKit's behavior with those browsers and the specification.

        [1] https://dom.spec.whatwg.org/#node-trees

        No new tests, already covered by existing W3C tests.

        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChild):
        (WebCore::checkAddChild):
        (WebCore::checkReplaceChild):
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::appendChild):
        (WebCore::containsConsideringHostElements): Deleted.
        (WebCore::checkAcceptChildGuaranteedNodeTypes): Deleted.
        * dom/Document.cpp:
        (WebCore::Document::canAcceptChild):
        (WebCore::Document::cloneNodeInternal): Deleted.
        * dom/Document.h:

2015-09-13  Chris Dumez  <cdumez@apple.com>

        Document.adoptNode() should be able to explicitly adopt a DocumentType node
        https://bugs.webkit.org/show_bug.cgi?id=149097
        <rdar://problem/22549345>

        Reviewed by Ryosuke Niwa.

        Document.adoptNode() should be able to explicitly adopt a DocumentType
        node as per the latest DOM specification:
        https://dom.spec.whatwg.org/#dom-document-adoptnode

        Chrome and Firefox match the specidicaiton but WebKit was throwing a
        NotSupportedError.

        No new tests, already covered by existing test.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): Deleted.

2015-09-13  Chris Dumez  <cdumez@apple.com>

        Document.title does not behave according to specification
        https://bugs.webkit.org/show_bug.cgi?id=149098

        Reviewed by Ryosuke Niwa.

        Update Document.title to behave according to the latest DOM specification:
        https://html.spec.whatwg.org/multipage/dom.html#document.title

        In particular, the following Web-Exposed changes were made:
        1. The title Element should be the first title element in the document
           (in tree order) [1]. Previously, WebKit would use the first title
           Element *added* to the Document. Document.title returns the text
           content of the title Element so this change is web-exposed.
        2. If the title Element is replaced after the title has been set by the
           JS (via the document.title setter), we should update the value
           returned by the document.title getter. Previously, WebKit would set
           a flag if the title was explicitly set by JS via document.title
           setter and later title element changes would not override the title
           set by the JS. This behavior isn't specified and does not match the
           behavior of other browsers.

        The new behavior is also consistent with the behavior of Firefox and
        Chrome.

        Some refactoring was made for the sake of clarity now that our
        implementation has changed. See details below.

        [1] https://html.spec.whatwg.org/multipage/dom.html#the-title-element-2

        No new tests, already covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::updateTitleFromTitleElement):
        New convenience method that calls updateTitle() with the text of the
        document's current title Element. If there is no title Element, it
        clears the title.

        (WebCore::Document::updateTitleElement):
        Method which updates the Document's title Element whenever a title
        Element is added or removed from the Document. Once the title Element
        is updated, it takes care of calling updateTitleFromTitleElement() to
        update the Document's title.

        (WebCore::Document::titleElementAdded):
        (WebCore::Document::titleElementRemoved):
        (WebCore::Document::titleElementTextChanged):
        New Document public API called by HTMLTitleElement / SVGTitleElement
        whenever a title Element is added / removed from the Document or
        whenever the title element's text has changed. These methods will
        take care of calling updateTitleElement() / updateTitleFromTitleElement()
        as necessary.
        Previously, we would only have 2 methods:
        - setTitleElement() which would be called whenever a title Element was
          added to the document or when its text had changed. The name was
          confusing because it would not necessarily set the document's title
          Element and it would be used both for title element update and a
          simple title update. This method has been split into 2:
          titleElementAdded() and titleElementTextChanged().
        - removeTitle() which would be called whenever a title Element was
          removed. The naming was confusing because it would not necessarily
          remove the Document's title Element. This is now called
          titleElementRemoved().

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedInto):
        Call the new titleElementAdded() instead of setTitleElement().

        (WebCore::HTMLTitleElement::removedFrom):
        Call the new titleElementRemoved() instead of removeTitle().

        (WebCore::HTMLTitleElement::childrenChanged):
        Call the new titleElementTextChanged() instead of
        setTitleElement() / removeTitle() as we don't really want
        to remove or add a title Element. We merely want to notify
        the document that the title element text has changed in
        case it is the current title Element of the Document.

        (WebCore::HTMLTitleElement::computedTextWithDirection):
        Rename textWithDirection() to computedTextWithDirection() to
        make it clear it is not a simple getter and make it private
        as it is only used to set the m_title member which caches the
        computed text.

        * html/HTMLTitleElement.h:
        Add new textWithDirection() getter which returns m_title. This
        is needed so that Document can query the title of the Element.
        Previously, HTMLTitleElement would pass directly m_title to
        the Document when calling Document::setTitleElement().

        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):
        Call the new titleElementAdded() instead of setTitleElement().

        (WebCore::SVGTitleElement::removedFrom):
        Call the new titleElementRemoved() instead of removeTitle().

        (WebCore::SVGTitleElement::childrenChanged):
        Call the new titleElementTextChanged() instead of
        setTitleElement().

2015-09-13  Chris Dumez  <cdumez@apple.com>

        document.lastModified should use the user's local time zone
        https://bugs.webkit.org/show_bug.cgi?id=149092
        <rdar://problem/22567705>

        Reviewed by Ryosuke Niwa.

        document.lastModified should use the user's local time zone:
        https://html.spec.whatwg.org/multipage/dom.html#dom-document-lastmodified

        Chrome and Firefox comply with the specification but WebKit was using
        UTC. This patch aligns WebKit's behavior with the specification and
        other browsers.

        No new tests, already covered by existing tests.

        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        (WebCore::Document::setCookieURL): Deleted.

2015-09-13  Chris Dumez  <cdumez@apple.com>

        Node.baseURI should not return null for detached nodes
        https://bugs.webkit.org/show_bug.cgi?id=149104
        <rdar://problem/22559535>

        Reviewed by Sam Weinig.

        Node.baseURI should not return null for detached nodes. It should return
        the node document's base URL. The node document is set when the node is
        created so it is valid even if the node is detached [1]:
        https://dom.spec.whatwg.org/#dom-node-baseuri

        WebKit was traversing the ancestors to find the base URL, which only
        works if the node is attached. Also, WebKit was taking into account
        the xml:base attribute when computing the baseURI.

        Both Chrome and Firefox already dropped support for xml:base:
        https://code.google.com/p/chromium/issues/detail?id=341854
        https://bugzilla.mozilla.org/show_bug.cgi?id=903372

        Firefox complies with the specification. Chrome's baseURI still only
        works for attached Nodes as their implementation still traverses the
        DOM tree, despite dropping support for xml:base.

        This patch drops support xml:base when computing Node.baseURI, as
        Firefox, Chrome and the latest DOM specification do. It also makes
        Node.baseURI work for detached Nodes by returning the base URL of the
        node Document. This means we no longer have to traverse the Node's
        ancestors in the DOM tree. This is consistent with the behavior of
        Firefox and the latest DOM specification.

        This patch does not drop the SVGElement.xmlbase attribute yet. However,
        we should probably consider making this change as well given that:
        - The SVG2 specification dropped it
        - Chrome dropped it.
        - It no longers impacts Node.baseURI

        [1] https://www.w3.org/Bugs/Public/show_bug.cgi?id=20976

        No new tests, already covered by existing test.

        * dom/Document.cpp:
        (WebCore::Document::setContent): Deleted.
        * dom/Document.h:
        (WebCore::Document::inputCursor): Deleted.
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::nodeName): Deleted.
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::imageSourceURL): Deleted.
        (WebCore::Element::rendererIsNeeded): Deleted.
        (WebCore::Element::createElementRenderer): Deleted.
        (WebCore::Element::insertedInto): Deleted.
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::baseURI):
        * dom/Node.h:
        * svg/SVGElement.idl:

2015-09-13  Chris Dumez  <cdumez@apple.com>

        CharacterData API parameters should not be optional
        https://bugs.webkit.org/show_bug.cgi?id=149101
        <rdar://problem/22546954>

        Reviewed by Sam Weinig.

        CharacterData API parameters should not be optional as per the DOM
        specification:
        https://dom.spec.whatwg.org/#characterdata

        The parameters are also mandatory in Firefox and Chrome. However,
        those parameters are optional in WebKit. When DOMString parameters
        were omitted, we would use the "undefined" string instead. When
        unsigned long parameters were omitted, we would use 0 instead.
        This patch aligns our behavior with the specification and other
        major browsers.

        No new tests, already covered by existing tests.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::appendData):
        * dom/CharacterData.h:
        * dom/CharacterData.idl:
        * dom/Element.cpp:
        (WebCore::Element::mergeWithNextTextNode):
        * dom/Node.cpp:
        (WebCore::Node::normalize):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):

2015-09-13  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in crypto, storage, and history
        https://bugs.webkit.org/show_bug.cgi?id=149091

        Reviewed by Andreas Kling.

        * crypto/CryptoKeyPair.cpp:
        (WebCore::CryptoKeyPair::CryptoKeyPair):
        * crypto/CryptoKeyPair.h:
        (WebCore::CryptoKeyPair::create):
        * crypto/SubtleCrypto.h:
        (WebCore::SubtleCrypto::create):
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp:
        (WebCore::CryptoKeyRSA::create):
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::generate):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create):
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardController.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setStateObject):
        (WebCore::HistoryItem::setFormData):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::stateObject):
        * loader/EmptyClients.cpp:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * storage/Storage.cpp:
        (WebCore::Storage::create):
        (WebCore::Storage::Storage):
        * storage/Storage.h:
        * storage/StorageArea.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::copy):
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::setItemIgnoringQuota):
        (WebCore::StorageMap::removeItem):
        * storage/StorageMap.h:
        * storage/StorageNamespace.h:

2015-09-12  Chris Dumez  <cdumez@apple.com>

        window.EventTarget should exist
        https://bugs.webkit.org/show_bug.cgi?id=149085
        <rdar://problem/22546774>

        Reviewed by Sam Weinig.

        Drop [NoInterfaceObject] for the EventTarget interface to match Chrome,
        Firefox and the specification:
        https://dom.spec.whatwg.org/#interface-eventtarget

        No new tests, already covered by existing tests.

        * dom/EventTarget.idl:

2015-09-12  Brian Burg  <bburg@apple.com>

        Web Inspector: disambiguate inspected/frontend controllers and pages in backend code
        https://bugs.webkit.org/show_bug.cgi?id=149071

        Reviewed by Joseph Pecoraro.

        Be consistent about prefixing pages, inspector controllers, and window controllers
        with either "frontend" or "inspected", as appropriate. This change makes obvious some bugs
        in the frontend connection code, which are tracked by https://webkit.org/b/149006.

        No new tests, no behavior change.

        * WebCore.order:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::~InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowWidth):
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame):
        (WebCore::InspectorFrontendClientLocal::isUnderTest):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::freePage):
        * loader/EmptyClients.h:

2015-09-12  Chris Dumez  <cdumez@apple.com>

        ChildNode.replaceWith() without argument should replace the node with an empty DocumentFragment
        https://bugs.webkit.org/show_bug.cgi?id=149073
        <rdar://problem/22547801>

        Reviewed by Ryosuke Niwa.

        ChildNode.replaceWith() without argument should replace the node with 
        an empty DocumentFragment, as per the specification:
        https://dom.spec.whatwg.org/#dom-childnode-replacewith
        https://dom.spec.whatwg.org/#converting-nodes-into-a-node

        Previously, WebKit did not do anything in this case. This patch fixes
        it.

        No new tests, already covered by existing test.

        * dom/Node.cpp:
        (WebCore::Node::replaceWith):

2015-09-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/plugins
        https://bugs.webkit.org/show_bug.cgi?id=149055

        Reviewed by Darin Adler.

        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        (WebCore::DOMMimeType::enabledPlugin):
        * plugins/DOMMimeType.h:
        (WebCore::DOMMimeType::create):
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::item):
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::item):
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::item):
        * plugins/DOMPluginArray.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::bindingInstance):

2015-09-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/accessibility and WebCore/fileapi
        https://bugs.webkit.org/show_bug.cgi?id=149059

        Reviewed by Darin Adler.

        * accessibility/AXObjectCache.cpp:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::rangeClosestToRange):
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection):
        (WebCore::AccessibilityObject::selectionRange):
        (WebCore::AccessibilityObject::selectText):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]):
        (-[WebAccessibilityObjectWrapper textMarkerForPosition:]):
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _textMarkerForIndex:]):
        * fileapi/FileList.h:
        (WebCore::FileList::append):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * fileapi/WebKitBlobBuilder.h:

2015-09-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGColor custom text format is different from the CSS color custom text format
        https://bugs.webkit.org/show_bug.cgi?id=148879

        Reviewed by Daniel Bates.

        Implement the serialization of a CSS color value as it is described in
        <https://drafts.csswg.org/cssom/#serializing-css-values>. Add the new
        function Color::cssText() which is refactored from the existing function
        Color::serialized(). Use the new function for serializing the SVGColor
        always and also for Color but only when the alpha component is not 1.

        Test: svg/css/computed-style-rgb-color.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText): Move the code
        for serializing the color from this function to Color::cssText().
        
        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized): Call Color::cssText() if the alpha component
        is not 1 and delete the repeated code. 
        
        (WebCore::Color::cssText):
        * platform/graphics/Color.h: Add the new function to the header file.
        
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::customCSSText): Call Color::cssText() always instead
        of calling Color::serialized() for serializing the SVGColor.

2015-09-11  Nan Wang  <n_wang@apple.com>

        AX: ARIA 1.1 @aria-current
        https://bugs.webkit.org/show_bug.cgi?id=146012

        Reviewed by Chris Fleizach.

        Tests: accessibility/aria-current.html
               inspector/dom/getAccessibilityPropertiesForNode_ariaCurrent.html

        Added support for ARIA 1.1 aria-current.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::invalidStatus):
        (WebCore::AccessibilityObject::ariaCurrentState):
        (WebCore::AccessibilityObject::hasTagName):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2015-09-11  Chris Dumez  <cdumez@apple.com>

        DOMTokenList update steps for classList don't follow the spec
        https://bugs.webkit.org/show_bug.cgi?id=148589
        <rdar://problem/22547443>

        Reviewed by Ryosuke Niwa and Darin Adler.

        Update our DOMTokenList implementation to behave according to
        the latest DOM specification:
        https://dom.spec.whatwg.org/#interface-domtokenlist

        In particular, the following changes were made:
        - The stringifier now returns the result of the ordered set serializer
          for tokens. This means that we drop duplicate spaces and extra spaces
          [1][2][3].
        - DOMSettableTokenList.value now returns the result of the ordered set
          serializer for tokens [4] as well.
        - When the DOMTokenList's tokens are updated and there is an associated
          Element attribute, we set the attribute value to be the the ordered
          set serializer for tokens. This is according to the DOMTokenList
          update steps in the specification [6]. Chrome does not match the
          specification either.

        Edge browser behaves according to the specification already. Firefox was
        implementing this via [7] but no recent progress. This makes the JS API
        nicer to use and interest was shown by jQuery Team.

        The following refactoring was done:
        - Merge ClassList / RelList into a single AttributeDOMTokenList class
          as their code is mostly duplicated and the only thing that changes
          is which attribute is associated (class vs rel). AttributeDOMTokenList
          now keeps the attribute name as a member so it could be used for any
          attribute. AttributeDOMTokenList overrides DOMTokenList's
          updateAfterTokenChange() to do update the attribute's value as per
          [6].
        - We no longer use a SpaceSplitString for the internal representation
          as we need to sanitize the tokens (drop duplicates and extra spaces).
          DOMTokenList now has an internal Vector<AtomicString> containing the
          tokens that is constructed from the algorithm in [2]. As a result,
          most of the logic is now in DOMTokenList instead of its subclasses
          which means that most methods are no longer virtual. We only have
          one virtual function named updateAfterTokenChange() to do the update
          steps as AttributeDOMTokenList needs to update the associated
          attribute.

        This change does not seem to impact Dromaeo.

        [1] https://dom.spec.whatwg.org/#concept-ordered-set-serializer
        [2] https://dom.spec.whatwg.org/#ordered%20sets
        [3] https://dom.spec.whatwg.org/#stringification-behavior
        [4] https://dom.spec.whatwg.org/#dom-domsettabletokenlist-value
        [5] https://dom.spec.whatwg.org/#dom-domtokenlist-contains (step 2)
        [6] https://dom.spec.whatwg.org/#concept-DTL-update
        [7] https://bugzilla.mozilla.org/show_bug.cgi?id=869788

        No new tests, already covered by existing tests.

        * dom/Element.cpp:
        (WebCore::Element::classAttributeChanged):
        When the class attribute changes, make sure to update the associated
        classList if there is one. We could do this lazily if it turns out
        to be a performance problem. However, chances are this is not as
        classList is rarely used and we only need to update the classList if
        it was ever accessed by JS for this Element.

        (WebCore::Element::insertedInto):
        Drop call to clearClassListValueForQuirksMode() as we no longer need
        to maintain a separate SpaceSplitString for classes when in quirks
        mode. This is because AttributeDOMTokenList now has its own Vector
        of classes in their original cases. It therefore no longer relies on
        Element::classNames() which has its case folded when in quirks mode.

        (WebCore::Element::classList):
        Return a AttributeDOMTokenList instead of a ClassList.

        * html/AttributeDOMTokenList.h: Added.
        * html/AttributeDOMTokenList.cpp: Added.
        (WebCore::AttributeDOMTokenList::AttributeDOMTokenList):
        Call DOMTokenList::setValue() using the attribute's value so that
        DOMTokenList can initialize its token Vector.

        (WebCore::AttributeDOMTokenList::attributeValueChanged):
        If the attribute value was changed by somebody else that the
        AttributeDOMTokenList, call DOMTokenList::setValue() so that it
        can update its token Vector.

        (WebCore::AttributeDOMTokenList::updateAfterTokenChange):
        This is called whenever the token Vector is changed via JS. In
        this case, we update the associated attribute's value.

        * html/ClassList.cpp: Removed.
        * html/ClassList.h: Removed.
        Now merged into AttributeDOMTokenList.

        * html/DOMSettableTokenList.cpp:
        * html/DOMSettableTokenList.h:
        Get rid of most of the code as most of the logic is now in
        DOMTokenList parent class.

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::validateToken):
        Use a String parameter instead of an AtomicString as this method does
        not need the input the be an AtomicString. This avoid atomizing
        String unnecessarily.

        (WebCore::DOMTokenList::validateTokens):
        Use a modern loop.

        (WebCore::DOMTokenList::contains):
        No longer use containsInternal() virtual function. We can now check
        the internal token Vector.

        (WebCore::DOMTokenList::add):
        Now update the internal Vector. Use a modern loop and try to minimize
        Vector capacity reallocation.

        (WebCore::DOMTokenList::remove):
        Now update the internal Vector.

        (WebCore::DOMTokenList::toggle):
        Now update the internal Vector and refactor the code so that it is
        structured exactly as the algorithm in the specification for
        clarity.

        (WebCore::DOMTokenList::value):
        Now return the result of the ordered set serializer for tokens. This
        method is used for:
        - The DOMSettableTokenList.value() getter
        - The DOMTokenList stringifier
        - As attribute value when updating the associated attribute in
          AttributeDOMTokenList.

        (WebCore::DOMTokenList::setValue):
        Update the internal Vector using the algorithm in [2].

        * html/DOMTokenList.h:
        (WebCore::DOMTokenList::length):
        No longer virtual, now returns the size of the internal token Vector.

        (WebCore::DOMTokenList::item):
        No longer virtual, now returns the token at the given index in the
        internal Vector.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList):
        Now return a AttributeDOMTokenList.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::relList):
        Now return a AttributeDOMTokenList.

        * html/RelList.cpp: Removed.
        * html/RelList.h: Removed.
        Now merged into AttributeDOMTokenList.

2015-09-11  Chris Dumez  <cdumez@apple.com>

        Element.tagName should be upper-case for HTML elements in HTML documents
        https://bugs.webkit.org/show_bug.cgi?id=148843
        <rdar://problem/22559081>

        Reviewed by Ryosuke Niwa.

        Element.tagName should be upper-case for HTML elements in HTML documents,
        as per the DOM specification:
        https://dom.spec.whatwg.org/#dom-element-tagname

        Previously, WebKit would fail to upper-case the tagname if the element's
        tag had a prefix. This patch corrects this. This aligns our behavior with
        Firefox, Chrome and IE.

        No new tests, already covered by existing tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName):

2015-09-11  Chris Dumez  <cdumez@apple.com>

        document.body = "text" should throw a TypeError, not a HierarchyRequestError
        https://bugs.webkit.org/show_bug.cgi?id=149057
        <rdar://problem/22567157>

        Reviewed by Ryosuke Niwa.

        document.body = "text" should throw a TypeError, not a
        HierarchyRequestError:
        https://html.spec.whatwg.org/multipage/dom.html#dom-document-body

        This is because "text" is a DOMString and it cannot be converted into an
        HTMLElement?. Therefore, the WebIDL specification says we should throw a
        TypeError in this case.

        Chrome and Firefox throw the right exception.

        No new tests, already covered by existing test.

        * dom/Document.idl:

2015-09-11  Andreas Kling  <akling@apple.com>

        [JSC] Weak should only accept cell pointees.
        <https://webkit.org/b/148955>

        Reviewed by Geoffrey Garen.

        Update WebCore bindings for the new Weak and Weak-related signatures.

        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackDataWeak::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots):
        * bindings/js/WebCoreTypedArrayController.cpp:
        (WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots):
        (WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::finalize):
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestActiveDOMObjectOwner::finalize):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::finalize):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomNamedGetterOwner::finalize):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestEventTargetOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestExceptionOwner::finalize):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestGenerateIsReachableOwner::finalize):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestNondeterministicOwner::finalize):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestObjOwner::finalize):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestOverloadedConstructorsOwner::finalize):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestOverrideBuiltinsOwner::finalize):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestTypedefsOwner::finalize):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSattributeOwner::finalize):
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyOwner::isReachableFromOpaqueRoots):
        (WebCore::JSreadonlyOwner::finalize):
        * bindings/scripts/test/JS/JSreadonly.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::finalize):
        * bridge/runtime_root.h:

2015-09-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Mavericks: Text cursor does not move along with VoiceOver cursor for text fields
        https://bugs.webkit.org/show_bug.cgi?id=148891

        Reviewed by Alexey Proskuryakov.

        Asychronous focus setting DOES work on Yosemite, just not Mavericks.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

2015-09-10  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Self-collapsing block check needs to account for anonymous inline blocks
        https://bugs.webkit.org/show_bug.cgi?id=149042

        Reviewed by Dean Jackson.

        Added new tests in fast/block/inside-inlines/

        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::anonymousInlineBlock):
        Add a new accessor to get the anonymousInlineBlock() for lines that wrap them.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::childrenPreventSelfCollapsing):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        isSelfCollapsingBlock() now calls a virtual method that checks lines/children called childrenPreventSelfCollapsing.
        This lets us farm out the lines check to the derived RenderBlockFlow class.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::childrenPreventSelfCollapsing):
        Added new virtual method for checking children.

        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::childrenPreventSelfCollapsing):
        Overridden to ensure that blocks can still be self-collapsing if they only contain anonymous inline-block lines that
        are also self-collapsing.

2015-09-10  Jinyoung Hur  <hur.ims@navercorp.com>

        [WebGL][GLES] bad shaders should not be linked not only for GL but also for GL ES
        https://bugs.webkit.org/show_bug.cgi?id=148794

        Reviewed by Dean Jackson.

        Checking bad shaders, precision matching and varyings packing are all valid for GL ES too.

        Test: webgl/1.0.2/conformance/programs/program-test.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::linkProgram):

2015-09-10  Jinyoung Hur  <hur.ims@navercorp.com>

        Static variables in GraphicsContext3DOpenGLCommon should be avoided because of the race condition
        https://bugs.webkit.org/show_bug.cgi?id=148957

        Reviewed by Dean Jackson.

        There is no guarantee that only one thread calls GraphicsContext3D::compileShader() at a time so it would be 
        better to use a thread local storage variable rather than use a static variable.

        No new tests. No behavioural changes.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::getCurrentNameHashMapForShader):
        (WebCore::setCurrentNameHashMapForShader):
        (WebCore::nameHashForShader):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::mappedSymbolName):

2015-09-10  Chris Dumez  <cdumez@apple.com>

        Node.appendChild(null) / replaceChild(null, null) / removeChild(null) / insertBefore(null, ref) should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=148971
        <rdar://problem/22560883>
        <rdar://problem/22559225>

        Reviewed by Ryosuke Niwa.

        Node.appendChild(null) / replaceChild(null, null) / removeChild(null)
        and insertBefore(null, ref) should throw a TypeError instead of a
        NotFoundError, as per the specification:
        https://dom.spec.whatwg.org/#node

        The parameters are not nullable so the Web IDL specification says
        we should throw a TypeError in this case.

        This patch moves the null-checking from ContainerNode to the methods
        on Node. The null-checking is supposed to be done by the bindings code
        but our generator currently does not support this so we do the null
        checking as close to the bindings as possible. The bindings code is
        calling the methods on Node. This also makes sure we throw a TypeError
        for null-argument when the Node is not a ContainerNode. For e.g.
        Text.appendChild(null) should throw a TypeError too.

        The methods on ContainerNode now take references insteaad of pointer
        parameters now that the null-checking is done at the call site in
        Node. This lead to a lot of code update as those methods are used
        a lot throughout the code base.

        No new tests, already covered by pre-existing layout tests.

2015-09-10  Daniel Bates  <dabates@apple.com>

        Write a test to ensure we don't regress processing of tasks when page defers loading
        https://bugs.webkit.org/show_bug.cgi?id=135882
        <rdar://problem/22550497>

        Reviewed by Darin Adler.

        Towards adding a test for <https://bugs.webkit.org/show_bug.cgi?id=135688>, add a window.internals
        function, setPageDefersLoading, to enable and disable whether the page defers loading.

        Test: storage/websql/success-callback-when-page-defers-loading.html

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset defers loading for the page to false.
        (WebCore::Internals::setPageDefersLoading): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Added IDL declaration setPageDefersLoading.

2015-09-10  Sergio Villar Senin  <svillar@igalia.com>

        min-width/height should default to auto for flexbox items
        https://bugs.webkit.org/show_bug.cgi?id=146020

        Reviewed by David Hyatt.

        Based on Blink's r193665, r194062, r194887 and r195930 by <cbiesinger@chromium.org>.

        As specified here
        http://dev.w3.org/csswg/css-flexbox/#min-size-auto the default
        value of min-{width|height} is auto for flex items.

        In case this patch breaks any website (as it's changing the
        default value of those properties) the fix is likely to add:

        min-width: 0;
        min-height: 0;

        to any relevant flexitems.

        Test: css3/flexbox/min-size-auto.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isFlexOrGrid): New helper method to identify grids and flexs.
        (WebCore::ComputedStyleExtractor::propertyValue): Return auto
        for flex items if min-width/height is auto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * html/shadow/SliderThumbElement.cpp:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisExtentIsDefinite):
        (WebCore::RenderFlexibleBox::mainAxisLengthIsIndefinite):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        (WebCore::RenderFlexibleBox::mainAxisOverflowForChild):
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::isFlexibleBoxImpl):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Do not longer set
        the min-width explicitly.
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderSlider.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle): Do not longer set
        the min-width explicitly.
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/style/RenderStyle.h:

2015-09-10  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK] Volume bar is broken
        https://bugs.webkit.org/show_bug.cgi?id=145639

        Reviewed by Philippe Normand.

        The ControlPart enum values' order has mismatched the one of values in CSSValueKeywords.in
        after r180965. The MediaVolumeSliderPart should be prior to the MediaVolumeSliderContainerpart.

        Tests: media/click-volume-bar-not-pausing.html
               media/volume-bar-empty-when-muted.html

        * platform/ThemeTypes.h:

2015-09-09  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove all uses of PassRefPtr in WebCore/svg
        https://bugs.webkit.org/show_bug.cgi?id=148472

        Reviewed by Darin Adler.

        Clean up all uses of PassRefPtr in WebCore/svg.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::addEventListener):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::addEventListener):
        * Modules/webaudio/ScriptProcessorNode.h:
        * dom/EventListenerMap.cpp:
        (WebCore::copyListenersNotCreatedFromMarkupToTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * dom/EventTarget.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::addEventListener):
        * dom/MessagePort.h:
        * dom/Node.cpp:
        (WebCore::tryAddEventListener):
        (WebCore::Node::addEventListener):
        * dom/Node.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addEventListener):
        * html/HTMLMediaElement.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::showClosedCaptionTrackList):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        * page/DOMWindow.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::addEventListener):
        * svg/SVGElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPathUtilities.cpp:
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        * svg/SVGPathUtilities.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::attach):
        (WebCore::SVGTRefElement::buildPendingResource):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::appendEffectToEffectReferences):
        * svg/graphics/filters/SVGFilterBuilder.h:

2015-09-09  Dewei Zhu  <dewei_zhu@apple.com>

        Document.characterSet should return "UTF-8" instead of null by default.
        https://bugs.webkit.org/show_bug.cgi?id=148810
        <rdar://problem/22548727>

        Reviewed by Ryosuke Niwa.

        Document encoding should default to "UTF-8" as is specified in
        https://dom.spec.whatwg.org/#concept-document-encoding. This behavior
        is consistent with Firefox and Chrome.

        * dom/Document.cpp:
        (WebCore::Document::encoding): Returns nullAtom according to declearation.
        (WebCore::Document::characterSetForBindings): Returns "UTF-8" by default instead of null String.
        * dom/Document.h:
        (WebCore::Document::charset):
        (WebCore::Document::inputEncoding): Deleted.
        (WebCore::Document::characterSet): Deleted.
        * dom/Document.idl:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::mainResourceContent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDecoderIfNeeded):
        * loader/FormSubmission.cpp:
        (WebCore::encodingFromAcceptCharset):

2015-09-09  Benjamin Poulain  <bpoulain@apple.com>

        CSS general sibling selectors does not work without CSS JIT
        https://bugs.webkit.org/show_bug.cgi?id=148987
        rdar://problem/22559860

        Reviewed by Andreas Kling.

        When traversing with the indirect adjacent combinator, SelectorChecker
        was not setting the style invalidation flag on the right element.

        Tests: fast/css/indirect-adjacent-style-invalidation-1.html
               fast/css/indirect-adjacent-style-invalidation-2.html
               fast/css/indirect-adjacent-style-invalidation-3.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):

2015-09-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused InspectorFrontendHost methods
        https://bugs.webkit.org/show_bug.cgi?id=149013

        Reviewed by Brian Burg.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canSaveAs): Deleted.
        (WebCore::InspectorFrontendHost::canInspectWorkers): Deleted.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2015-09-09  Myles C. Maxfield  <mmaxfield@apple.com>

        ASSERTION FAILED: typesettingFeatures & (Kerning | Ligatures) in WebCore::applyFontTransforms
        https://bugs.webkit.org/show_bug.cgi?id=146194

        Reviewed by Dean Jackson.

        We might trigger shaping even if the author hasn't specified kerning or ligatures.

        Test: fast/text/softbank-emoji-no-ligatures-nor-kerning.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::isSoftBankEmoji):
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::applyFontTransforms): Deleted.
        * platform/graphics/WidthIterator.h:

2015-09-09  Chris Dumez  <cdumez@apple.com>

        Setting document.title when there is no title and no head element should no nothing
        https://bugs.webkit.org/show_bug.cgi?id=149005
        <rdar://problem/22567524>

        Reviewed by Ryosuke Niwa.

        Setting document.title when there is no title element and no head
        element should no nothing:
        - https://html.spec.whatwg.org/multipage/dom.html#document.title

        Firefox and Chrome comply with the specification. However, WebKit
        was returning the updated title when querying document.title after
        setting it.

        No new tests, covered by existing tests.

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

2015-09-09  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Percentage columns shouldn't include border and padding
        https://bugs.webkit.org/show_bug.cgi?id=148978

        Reviewed by Sergio Villar Senin.

        Subtract border and padding when we're calculating the breadth of the
        columns in LayoutGrid::computeUsedBreadthOfSpecifiedLength().

        Added test to check the behavior for both columns and rows.

        Test: fast/css-grid-layout/grid-percent-track-margin-border-padding.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):

2015-09-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189536 and r189538.
        https://bugs.webkit.org/show_bug.cgi?id=149002

        broke tests on mac (Requested by alexchristensen on #webkit).

        Reverted changesets:

        "min-width/height should default to auto for flexbox items"
        https://bugs.webkit.org/show_bug.cgi?id=146020
        http://trac.webkit.org/changeset/189536

        "[css-grid] Percentage columns shouldn't include border and
        padding"
        https://bugs.webkit.org/show_bug.cgi?id=148978
        http://trac.webkit.org/changeset/189538

2015-09-08  David Hyatt  <hyatt@apple.com>

        REGRESSION: Inline-block baseline is wrong when zero-width replaced child is present
        https://bugs.webkit.org/show_bug.cgi?id=147452
        rdar://problem/21943074

        Reviewed by Myles Maxfield.

        Added new test in fast/inline-block

        Treat zero width replaced elements the same as replaced elements with width. Instead of
        clearing floats based off having no committed width, we instead track both committed
        width and committed replaced objects. We do this with two new booleans in LineWidth
        so that we know when we have uncomitted and committed replaced objects.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::commit):
        (WebCore::LineWidth::applyOverhang):
        * rendering/line/LineWidth.h:
        (WebCore::LineWidth::committedWidth):
        (WebCore::LineWidth::availableWidth):
        (WebCore::LineWidth::logicalLeftOffset):
        (WebCore::LineWidth::hasCommitted):
        (WebCore::LineWidth::addUncommittedWidth):
        (WebCore::LineWidth::addUncommittedReplacedWidth):

2015-09-09  Antti Koivisto  <antti@apple.com>

        Split mixed font GlyphPage functionality to separate class
        https://bugs.webkit.org/show_bug.cgi?id=148965

        Reviewed by Myles Maxfield.

        Currently GlyphPage class is used for both immutable single font case (in Font) and
        for caching mixed font mappings (in FontCascadeFonts). It is cleaner to use separate
        classed for these cases. This will also make future improvements easier.

        * platform/graphics/Font.cpp:
        (WebCore::Font::~Font):
        (WebCore::fillGlyphPage):
        (WebCore::createAndFillGlyphPage):
        (WebCore::Font::glyphPage):
        (WebCore::Font::glyphForCharacter):
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::MixedFontGlyphPage::MixedFontGlyphPage):
        (WebCore::MixedFontGlyphPage::glyphDataForCharacter):
        (WebCore::MixedFontGlyphPage::setGlyphDataForCharacter):
        (WebCore::MixedFontGlyphPage::setGlyphDataForIndex):

            Mixed font pages are now an implementation detail of FontCascadeFonts.

        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::glyphDataForCharacter):
        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::setGlyphDataForCharacter):
        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::setSingleFontPage):

            Cache entry is either shared single font GlyphPage or mutable MixedFontGlyphPage.

        (WebCore::FontCascadeFonts::FontCascadeFonts):
        (WebCore::FontCascadeFonts::glyphDataForCharacter):
        (WebCore::FontCascadeFonts::pruneSystemFallbacks):
        * platform/graphics/FontCascadeFonts.h:
        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::isNull):
        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::isMixedFont):
        * platform/graphics/GlyphPage.h:

            GlyphPage is now for single font mappings only.
            Use regular allocation instead of variable size tricks.
            It is always immutable after initialization (though currently a setter is still needed).

        (WebCore::GlyphPage::create):
        (WebCore::GlyphPage::~GlyphPage):
        (WebCore::GlyphPage::count):
        (WebCore::GlyphPage::indexForCharacter):
        (WebCore::GlyphPage::glyphDataForCharacter):
        (WebCore::GlyphPage::glyphForCharacter):
        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::glyphForIndex):
        (WebCore::GlyphPage::setGlyphForIndex):
        (WebCore::GlyphPage::font):
        (WebCore::GlyphPage::GlyphPage):
        (WebCore::GlyphPage::createForMixedFonts): Deleted.
        (WebCore::GlyphPage::createCopyForMixedFonts): Deleted.
        (WebCore::GlyphPage::createForSingleFont): Deleted.
        (WebCore::GlyphPage::isImmutable): Deleted.
        (WebCore::GlyphPage::setImmutable): Deleted.
        (WebCore::GlyphPage::glyphAt): Deleted.
        (WebCore::GlyphPage::fontForCharacter): Deleted.
        (WebCore::GlyphPage::setGlyphDataForCharacter): Deleted.
        (WebCore::GlyphPage::setGlyphDataForIndex): Deleted.
        (WebCore::GlyphPage::hasPerGlyphFontData): Deleted.
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        (WebCore::OpenTypeVerticalData::substituteWithVerticalGlyphs):
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        (WebCore::SVGFontData::fillSVGGlyphPage):
        (WebCore::SVGFontData::fillBMPGlyphs):
        (WebCore::SVGFontData::fillNonBMPGlyphs):
        * svg/SVGFontData.h:
        (WebCore::SVGFontData::verticalAdvanceY):

2015-09-09  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Percentage columns shouldn't include border and padding
        https://bugs.webkit.org/show_bug.cgi?id=148978

        Reviewed by Sergio Villar Senin.

        Subtract border and padding when we're calculating the breadth of the
        columns in LayoutGrid::computeUsedBreadthOfSpecifiedLength().

        Added test to check the behavior for both columns and rows.

        Test: fast/css-grid-layout/grid-percent-track-margin-border-padding.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):

2015-09-09  Chris Dumez  <cdumez@apple.com>

        HTMLTableElement.tHead / tFoot / caption should be nullable
        https://bugs.webkit.org/show_bug.cgi?id=148991

        Reviewed by Ryosuke Niwa.

        According to the specification, HTMLTableElement.tHead / tFoot / caption
        should be nullable:
        https://html.spec.whatwg.org/multipage/tables.html#htmltableelement

        Upon assigning null, we are supposed to remove the existing tHead / tFoot
        / caption element. However, we had a bug causing us to throw an exception
        after removing the element. This is because we would try to insert a null
        element and ContainerNode::insertBefore() throws when doing so.

        Also, as per the specification, setting tHead / tFoot to something else
        than a thead / tfoot element should throw a HierarchyRequestError:
        https://html.spec.whatwg.org/multipage/tables.html#dom-table-thead
        https://html.spec.whatwg.org/multipage/tables.html#dom-table-tfoot

        Previously, WebKit did not check the tag and was happy inserting the
        element as long as it was an HTMLTableSectionElement. This means that
        you could set a tfoot by assigning table.tHead.

        This patch corrects both bugs and adds test coverage for it.

        Test: fast/dom/HTMLTableElement/nullable-attributes.html

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::setCaption):
        Only call insertBefore() if newCaption is not null as insertBefore()
        will throw an exception otherwise.

        (WebCore::HTMLTableElement::setTHead):
        - Throw a HierarchyRequestError if the HTMLTableSectionElement is not
          null or a <thead> element, as per the specification.
        - Only call insertBefore() if newHead is not null as insertBefore()
          will throw an exception otherwise.

        (WebCore::HTMLTableElement::setTFoot):
        - Throw a HierarchyRequestError if the HTMLTableSectionElement is not
          null or a <tfoot> element, as per the specification.
        - Only call insertBefore() if newFoot is not null as insertBefore()
          will throw an exception otherwise.

        * html/HTMLTableElement.idl:
        Use [StrictTypeChecking] for these 3 attributes so that the bindings
        will throw a TypeError if the JS tries to assign a value with the
        wrong type. When the implementation is called with null, we now know
        this is because the JS assigned null (and not an invalid value).
        This is important as assigning null is valid since those attributes
        are nullable.

2015-06-26  Sergio Villar Senin  <svillar@igalia.com>

        min-width/height should default to auto for flexbox items
        https://bugs.webkit.org/show_bug.cgi?id=146020

        Reviewed by David Hyatt.

        Based on Blink's r193665, r194062, r194887 and r195930 by <cbiesinger@chromium.org>.

        As specified here
        http://dev.w3.org/csswg/css-flexbox/#min-size-auto the default
        value of min-{width|height} is auto for flex items.

        In case this patch breaks any website (as it's changing the
        default value of those properties) the fix is likely to add:

        min-width: 0;
        min-height: 0;

        to any relevant flexitems.

        Test: css3/flexbox/min-size-auto.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isFlexOrGrid): New helper method to identify grids and flexs.
        (WebCore::ComputedStyleExtractor::propertyValue): Return auto
        for flex items if min-width/height is auto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * html/shadow/SliderThumbElement.cpp:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::mainAxisExtentIsDefinite):
        (WebCore::RenderFlexibleBox::mainAxisLengthIsIndefinite):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        (WebCore::RenderFlexibleBox::mainAxisOverflowForChild):
        * rendering/RenderFlexibleBox.h:
        (WebCore::RenderFlexibleBox::isFlexibleBoxImpl):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Do not longer set
        the min-width explicitly.
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        * rendering/RenderSlider.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle): Do not longer set
        the min-width explicitly.
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/style/RenderStyle.h:

2015-09-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: No need for [Custom] Implementation of some InspectorFrontendHost methods
        https://bugs.webkit.org/show_bug.cgi?id=148990

        Reviewed by Timothy Hatcher.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::platform): Deleted.
        (WebCore::JSInspectorFrontendHost::port): Deleted.
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        (WebCore::InspectorFrontendHost::port):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Uncustomize a few basic functions.

2015-09-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Crash when WebCore::SQLiteFileSystem::openDatabase is called from multiple threads
        https://bugs.webkit.org/show_bug.cgi?id=143245

        Reviewed by Darin Adler.

        sqlite3_initialize is documented to be thread-safe, and to be called automatically by the
        library when needed, so applications should never need to call it directly. The problem is,
        it's not thread-safe: we have documented instances of GNOME Builder, Devhelp, Epiphany, and
        cinnamon-screensaver crashing when sqlite3_initialize is called simultaneously in separate
        threads (usually inside sqlite3_open). So call it manually, guarded using std::call_once, to
        make sure that the library is fully initialized before the first call to sqlite3_open. It's
        a good idea to do this regardless, because the documentation says it could be required in
        a future release of SQLite. (Though the use of std::call_once should not be needed, and is
        only used to attempt to work around the crashes.)

        This is a workaround for an SQLite bug that might have been fixed upstream, but the SQLite
        developers are not really confident in the thread-safety of this function, and have advised
        that we carry the workaround. Seems like a good idea.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):

2015-09-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unify symbolTablePut in JSLexicalEnvironment and JSSymbolTableObject
        https://bugs.webkit.org/show_bug.cgi?id=148783

        Reviewed by Geoffrey Garen.

        No behavior change.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument):

2015-09-08  Brian Burg  <bburg@apple.com>

        Several inspector-protocol tests are flaky with GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=136715

        Reviewed by Joseph Pecoraro.

        Sometimes, the async dispatch task can outlive its owning frontend client.
        To avoid problems, make it refcounted instead and add a protector reference.

        No new tests, covered by existing tests.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::create):
        (WebCore::InspectorBackendDispatchTask::dispatch):
        (WebCore::InspectorBackendDispatchTask::reset):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::~InspectorFrontendClientLocal):
        * inspector/InspectorFrontendClientLocal.h:

2015-09-08  Chris Dumez  <cdumez@apple.com>

        new Comment(undefined) / new Text(undefined) should use default's empty string
        https://bugs.webkit.org/show_bug.cgi?id=148973
        <rdar://problem/22548042>

        Reviewed by Ryosuke Niwa.

        new Comment(undefined) / new Text(undefined) should use default's empty string instead of converting
        undefined to the "undefined" string:
        - https://dom.spec.whatwg.org/#interface-comment (parameter is optional, default value is empty String)
        - https://dom.spec.whatwg.org/#text (ditto)

        undefined should be treated as if the parameter is missing, in the case the parameter is optional, as
        per the Web IDL specification. This patch aligns WebKit's behavior with the specification and the
        behavior of Firefox and Chrome.

        No new tests, already covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):

2015-09-08  Chris Dumez  <cdumez@apple.com>

        document.importNode(node, deep): deep's default value should be false
        https://bugs.webkit.org/show_bug.cgi?id=148959
        <rdar://problem/22558915>

        Reviewed by Alexey Proskuryakov.

        Switch deep parameter's default value for document.importNode() to
        false, as per the latest DOM specification:
        - https://dom.spec.whatwg.org/#interface-document
        - https://dom.spec.whatwg.org/#dom-document-importnode

        Firefox and Chrome follow the specification. However, WebKit was using
        "true" for deep's default value.

        No new tests, already covered by:
        imported/w3c/web-platform-tests/dom/nodes/Document-importNode.html

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

2015-09-08  Per Arne Vollan  <peavo@outlook.com>

        [Win][HighDPI] Video window placement is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=148954

        Reviewed by Alex Christensen.

        We need to scale window dimensions with device scale factor.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):

2015-09-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce uses of PassRefPtr in fileapi
        https://bugs.webkit.org/show_bug.cgi?id=148952

        Reviewed by Andreas Kling.

        Remove all uses of PassRefPtr in return type. Argument uses of PassRefPtr will be
        removed in near future.

        * fileapi/FileError.h:
        (WebCore::FileError::create):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::arrayBufferResult):
        * fileapi/FileReader.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::arrayBufferResult):
        * fileapi/FileReaderLoader.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::readAsArrayBuffer):
        * fileapi/FileReaderSync.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::getCachedOrigin):
        * fileapi/ThreadableBlobRegistry.h:

2015-09-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Mavericks: Text cursor does not move along with VoiceOver cursor for text fields
        https://bugs.webkit.org/show_bug.cgi?id=148891

        Reviewed by Mario Sanchez Prada.

        Undo the asynchronous dispatch of accessibility setting values on pre El Capitan machines
        because it causes focus to not sync correctly.

        Test: accessibility/mac/focus-moves-cursor.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

2015-09-07  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CoordinatedGraphics] Remove ScrollingStateScrollingNodeCoordinatedGraphics.cpp
        https://bugs.webkit.org/show_bug.cgi?id=148931

        Reviewed by Csaba Osztrogonác.

        ScrollingStateScrollingNodeCoordinatedGraphics.cpp implements nothing. Removed it.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * page/scrolling/coordinatedgraphics/ScrollingStateScrollingNodeCoordinatedGraphics.cpp: Removed.

2015-09-07  Daniel Bates  <dabates@apple.com>

        ASSERT_WITH_SECURITY_IMPLICATION in WebCore::DocumentOrderedMap::get(); update form
        association after subtree insertion
        https://bugs.webkit.org/show_bug.cgi?id=148919
        <rdar://problem/21868036>

        Reviewed by Andy Estes.

        Currently we update the form association of a form control upon insertion into
        the document. Instead we should update the form association of a form control
        after its containing subtree is inserted into the document to avoid an assertion
        failure when the containing subtree has an element whose id is identical to both
        the id of some other element in the document and the name of the form referenced
        by the inserted form control.

        Tests: fast/forms/update-form-owner-in-moved-subtree-assertion-failure-2.html
               fast/forms/update-form-owner-in-moved-subtree-assertion-failure-3.html
               fast/forms/update-form-owner-in-moved-subtree-assertion-failure-4.html
               fast/forms/update-form-owner-in-moved-subtree-assertion-failure.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedInto): Moved resetFormOwner() from here
        to {HTMLFormControlElement, HTMLObjectElement}::finishedInsertingSubtree().
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedInto): Return InsertionShouldCallFinishedInsertingSubtree
        so that HTMLFormControlElement::finishedInsertingSubtree() is called.
        (WebCore::HTMLFormControlElement::finishedInsertingSubtree): Added; turn around and
        call FormAssociatedElement::resetFormOwner().
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::insertedInto): Return InsertionShouldCallFinishedInsertingSubtree so
        that HTMLInputElement::finishedInsertingSubtree() is called and move logic to update radio button
        group from here...
        (WebCore::HTMLInputElement::finishedInsertingSubtree): to here.
        * html/HTMLInputElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedInto): Return InsertionShouldCallFinishedInsertingSubtree so
        that HTMLObjectElement::finishedInsertingSubtree() is called.
        (WebCore::HTMLObjectElement::finishedInsertingSubtree): Added; turn around and
        call FormAssociatedElement::resetFormOwner().
        * html/HTMLObjectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::insertedInto): Modified to return the result of
        HTMLFormControlElementWithState::insertedInto(), which may schedule a callback after subtree
        insertion.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedInto): Ditto.

2015-09-07  Antti Koivisto  <antti@apple.com>

        Remove GlyphPage::mayUseMixedFontsWhenFilling
        https://bugs.webkit.org/show_bug.cgi?id=148928

        Reviewed by Dan Bernstein.

        http://trac.webkit.org/188566 removed support for composite fonts. We never need to use mixed
        glyph pages for fonts anymore.

        * platform/graphics/Font.cpp:
        (WebCore::createAndFillGlyphPage):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::GlyphPage):
        (WebCore::GlyphPage::mayUseMixedFontsWhenFilling): Deleted.
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):
        (WebCore::GlyphPage::mayUseMixedFontsWhenFilling): Deleted.

2015-09-07  Antti Koivisto  <antti@apple.com>

        Remove unneeded offset and length arguments from glyph page filling functions
        https://bugs.webkit.org/show_bug.cgi?id=148929

        Reviewed by Andreas Kling.

        They are always passed 0/GlyphPage::size.

        * platform/graphics/Font.cpp:
        (WebCore::Font::~Font):
        (WebCore::fillGlyphPage):
        (WebCore::createAndFillGlyphPage):
        * platform/graphics/Font.h:
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::setGlyphDataForIndex):
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::mayUseMixedFontsWhenFilling):
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        (WebCore::SVGFontData::fillSVGGlyphPage):
        (WebCore::SVGFontData::fillBMPGlyphs):
        (WebCore::SVGFontData::fillNonBMPGlyphs):
        * svg/SVGFontData.h:
        (WebCore::SVGFontData::verticalAdvanceY):

2015-09-06  Chris Dumez  <cdumez@apple.com>

        dispatchEvent() should throw an InvalidStateError if the event's initialized flag is not set
        https://bugs.webkit.org/show_bug.cgi?id=148800
        <rdar://problem/22565782>
        <rdar://problem/22565485>

        Reviewed by Geoffrey Garen.

        dispatchEvent() should throw an InvalidStateError if the event's
        initialized flag is not set or its dispatch flag is set, and should
        allow dispatching events with an empty type as long as it is
        initialized:
        https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent (step 1)

        Previously, WebKit relied on the event type being empty to throw a
        UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0. However, this
        exception type is outdated and initializing Event.type to an empty
        string is legal.

        No new tests, already covered by existing tests that were rebaselined.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        (WebCore::Event::initEvent):
        * dom/Event.h:
        (WebCore::Event::isInitialized):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchEvent):

2015-09-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XHR2 timeout property should allow late updates
        https://bugs.webkit.org/show_bug.cgi?id=98156

        Reviewed by Darin Adler.

        Adding a timer within XMLHttpRequest to handle timeouts for asynchronous requests.
        This allows easy update of the timeout even after request is sent.
        Timeout is still handled by the network backend for synchronous requests (Web worker context).

        Covered by updated tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Adding timeout timer initialization.
        (WebCore::XMLHttpRequest::setTimeout): Updating timeout timer state if request is sent.
        (WebCore::XMLHttpRequest::createRequest): Starting timeout timer if needed.
        (WebCore::XMLHttpRequest::internalAbort): Stopping timeout timer if needed.
        (WebCore::XMLHttpRequest::didFail): Adding comment.
        (WebCore::XMLHttpRequest::didFinishLoading): Stopping timeout timer if needed.
        * xml/XMLHttpRequest.h:

2015-09-05  Jaehun Lim  <ljaehun.lim@samsung.com>

        Remove unused macros from StyleResolver.cpp
        https://bugs.webkit.org/show_bug.cgi?id=148163

        Reviewed by Andreas Kling.

        HANDLE_INHERIT and HANDLE_INHERIT_AND_INITIAL are not used after
        StyleBuilder refactoring.

        No new tests because there is no behavior change.

        * css/StyleResolver.cpp:
        Remove HANDLE_INHERIT and HANDLE_INHERIT_AND_INITIAL.

2015-09-05  Brian Burg  <bburg@apple.com>

        Web Inspector: tighten up lifetimes for Agent-owned objects, and initialize agents using contexts
        https://bugs.webkit.org/show_bug.cgi?id=148625

        Reviewed by Joseph Pecoraro.

        All agents own their domain-specific frontend and backend dispatchers. Change so that
        they are initialized in constructors rather than when a frontend connects or disconnects.
        This may cause additional memory use, but this can be counteracted by lazily creating
        some agents that are not required for other agents to function (i.e., runtime and page agents).

        To avoid adding frontend/backend dispatcher arguments to every single agent constructor,
        change agent construction to take a AgentContext or a subclass of it. This provides agents with
        references to objects in the owning InspectorEnvironment subclass that are guaranteed to
        outlive all agents. AgentContext and its subclasses follow the existing Agent class hierarchy.

        No new tests, no behavior changed.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::navigate):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::mainFrame):
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::getCompositingBordersVisible):
        (WebCore::InspectorPageAgent::setCompositingBordersVisible):
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        (WebCore::InspectorPageAgent::archive):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::InspectorReplayAgent):
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::page):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWebAgentBase.h:
        (WebCore::WebAgentContext::WebAgentContext):
        (WebCore::PageAgentContext::PageAgentContext):
        (WebCore::WorkerAgentContext::WorkerAgentContext):
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::sourceMapURLForScript):
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        * inspector/WebConsoleAgent.h:
        * inspector/WebDebuggerAgent.cpp:
        (WebCore::WebDebuggerAgent::WebDebuggerAgent):
        * inspector/WebDebuggerAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: agents should send messages through FrontendRouter instead of FrontendChannel
        https://bugs.webkit.org/show_bug.cgi?id=148492

        Reviewed by Joseph Pecoraro.

        Replace uses of FrontendChannel with FrontendRouter. Minor code cleanup along the way.

        No new tests, no behavior changed.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::~InspectorController): No need to call discardAgents().
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorForwarding.h: Removed.
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWebAgentBase.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * page/PageDebuggable.cpp:
        * testing/Internals.cpp:

2015-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Add a new ResourceLoaderOption to avoid page defers loading mechanisms for inspector
        https://bugs.webkit.org/show_bug.cgi?id=148727

        Reviewed by Antti Koivisto.

        This will be tested shortly by inspector tests.

        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions):
        (WebCore::ResourceLoaderOptions::defersLoadingPolicy):
        (WebCore::ResourceLoaderOptions::setDefersLoadingPolicy):
        Add a new policy for defers loading. The default is to allow defers loading.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::setDefersLoading):
        Respect the defers loading policy whenever we would set defers loading status.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::loadResource):
        Switch from incorrectly changing the defersLoading state of the loader
        to setting an option to disallow defers loading entirely for the loader.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::start):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        Add the new value to instance of the longhand ResourceLoaderOptions constructor.

2015-09-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename members of CanvasRenderingContext2D::State
        https://bugs.webkit.org/show_bug.cgi?id=148889

        Reviewed by Tim Horton.

        CanvasRenderingContext2D::State is a struct, so its members should not start with m_.

        No new tests because there is no behavior change.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::State::operator=):
        (WebCore::CanvasRenderingContext2D::restore):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::lineWidth):
        (WebCore::CanvasRenderingContext2D::setLineWidth):
        (WebCore::CanvasRenderingContext2D::lineCap):
        (WebCore::CanvasRenderingContext2D::setLineCap):
        (WebCore::CanvasRenderingContext2D::lineJoin):
        (WebCore::CanvasRenderingContext2D::setLineJoin):
        (WebCore::CanvasRenderingContext2D::miterLimit):
        (WebCore::CanvasRenderingContext2D::setMiterLimit):
        (WebCore::CanvasRenderingContext2D::shadowOffsetX):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetX):
        (WebCore::CanvasRenderingContext2D::shadowOffsetY):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetY):
        (WebCore::CanvasRenderingContext2D::shadowBlur):
        (WebCore::CanvasRenderingContext2D::setShadowBlur):
        (WebCore::CanvasRenderingContext2D::shadowColor):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::getLineDash):
        (WebCore::CanvasRenderingContext2D::setLineDash):
        (WebCore::CanvasRenderingContext2D::setWebkitLineDash):
        (WebCore::CanvasRenderingContext2D::lineDashOffset):
        (WebCore::CanvasRenderingContext2D::setLineDashOffset):
        (WebCore::CanvasRenderingContext2D::applyLineDash):
        (WebCore::CanvasRenderingContext2D::globalAlpha):
        (WebCore::CanvasRenderingContext2D::setGlobalAlpha):
        (WebCore::CanvasRenderingContext2D::globalCompositeOperation):
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        (WebCore::CanvasRenderingContext2D::fillInternal):
        (WebCore::CanvasRenderingContext2D::strokeInternal):
        (WebCore::CanvasRenderingContext2D::clipInternal):
        (WebCore::CanvasRenderingContext2D::isPointInPathInternal):
        (WebCore::CanvasRenderingContext2D::isPointInStrokeInternal):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::shouldDrawShadows):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::transformAreaToDevice):
        (WebCore::CanvasRenderingContext2D::rectContainsCanvas):
        (WebCore::CanvasRenderingContext2D::compositeBuffer):
        (WebCore::CanvasRenderingContext2D::didDraw):
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        (WebCore::CanvasRenderingContext2D::font):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::textAlign):
        (WebCore::CanvasRenderingContext2D::setTextAlign):
        (WebCore::CanvasRenderingContext2D::textBaseline):
        (WebCore::CanvasRenderingContext2D::setTextBaseline):
        (WebCore::CanvasRenderingContext2D::direction):
        (WebCore::CanvasRenderingContext2D::setDirection):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::inflateStrokeRect):
        (WebCore::CanvasRenderingContext2D::imageSmoothingEnabled):
        (WebCore::CanvasRenderingContext2D::setImageSmoothingEnabled):
        * html/canvas/CanvasRenderingContext2D.h:

2015-09-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash when font completes downloading after calling 2D canvas setText() multiple times
        https://bugs.webkit.org/show_bug.cgi?id=148789

        Reviewed by Darin Adler.

        The CSSFontSelector has a list of clients, and when fonts complete downloading, these
        clients get a call back. CanvasRenderingContext2D::State is one such of these clients. However,
        the CSSFontSelector may be destroyed and recreated at any time. We were getting into a case
        where multiple CSSFontSelectors were thinking that the same CanvasRenderingContext2D::State were
        their client. When the CanvasRenderingContext2D::State was destroyed, it only unregistered
        itself from one of the CSSFontSelectors, which means the CSSFontSelector left over has a dangling
        pointer to it.

        The solution is to implement a new helper class, FontProxy, to hold the
        CanvasRenderingContext2D::State's font, and maintain the invariant that this object is always
        registered to exactly one CSSFontSelector, and this CSSFontSelector is the one which is associated
        with the FontProxy's FontCascade object. This patch maintains this invariant, as well as protecting
        all access to the State's FontCascade object so no one can reach in and change it without going
        through functions which maintain the invariant.

        Test: fast/canvas/font-selector-crash.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::registerForInvalidationCallbacks):
        (WebCore::CSSFontSelector::unregisterForInvalidationCallbacks):
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * css/CSSFontSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::fontsNeedUpdate):
        (WebCore::Document::fontSelector):
        (WebCore::Document::clearStyleResolver):
        * dom/Document.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::State::operator=):
        (WebCore::CanvasRenderingContext2D::FontProxy::~FontProxy):
        (WebCore::CanvasRenderingContext2D::FontProxy::FontProxy):
        (WebCore::CanvasRenderingContext2D::FontProxy::update):
        (WebCore::CanvasRenderingContext2D::FontProxy::fontsNeedUpdate):
        (WebCore::CanvasRenderingContext2D::FontProxy::initialize):
        (WebCore::CanvasRenderingContext2D::FontProxy::fontMetrics):
        (WebCore::CanvasRenderingContext2D::FontProxy::fontDescription):
        (WebCore::CanvasRenderingContext2D::FontProxy::width):
        (WebCore::CanvasRenderingContext2D::FontProxy::drawBidiText):
        (WebCore::CanvasRenderingContext2D::font):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        (WebCore::CanvasRenderingContext2D::State::~State): Deleted.
        (WebCore::CanvasRenderingContext2D::State::fontsNeedUpdate): Deleted.
        (WebCore::CanvasRenderingContext2D::accessFont): Deleted.
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/FontSelector.h:

2015-09-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189386.
        https://bugs.webkit.org/show_bug.cgi?id=148883

        Made several event dispatch tests assert (Requested by ap on
        #webkit).

        Reverted changeset:

        "dispatchEvent() should throw an InvalidStateError if the
        event's initialized flag is not set"
        https://bugs.webkit.org/show_bug.cgi?id=148800
        http://trac.webkit.org/changeset/189386

2015-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add tests for DOM highlight commands
        https://bugs.webkit.org/show_bug.cgi?id=148786

        Reviewed by Timothy Hatcher.

        Tests: inspector/dom/hideHighlight.html
               inspector/dom/highlightFrame.html
               inspector/dom/highlightNode.html
               inspector/dom/highlightQuad.html
               inspector/dom/highlightRect.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        Include an error if a frame is not found.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::highlightQuad):
        Should have been checking the usePageCoordinates state of the incoming
        highlight configuration, not the one that will be replaced.

2015-09-04  Csaba Osztrogonác  <ossy@webkit.org>

        Remove unnecessary compiler guards from mm files
        https://bugs.webkit.org/show_bug.cgi?id=148797

        Reviewed by Dan Bernstein.

        * bindings/objc/DOMInternal.mm:
        * bridge/objc/objc_instance.mm:

2015-09-04  Eric Carlson  <eric.carlson@apple.com>

        [mediacontrols] Test AirPlay picker button
        https://bugs.webkit.org/show_bug.cgi?id=148836

        Reviewed by Dean Jackson.

        Test: media/controls/airplay-picker.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.getCurrentControlsStatus.elements.forEach.):
        (Controller.prototype.getCurrentControlsStatus):

2015-09-04  Chris Dumez  <cdumez@apple.com>

        dispatchEvent() should throw an InvalidStateError if the event's initialized flag is not set
        https://bugs.webkit.org/show_bug.cgi?id=148800
        <rdar://problem/22565782>
        <rdar://problem/22565485>

        Reviewed by Geoffrey Garen.

        dispatchEvent() should throw an InvalidStateError if the event's
        initialized flag is not set or its dispatch flag is set, and should
        allow dispatching events with an empty type as long as it is
        initialized:
        https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent (step 1)

        Previously, WebKit relied on the event type being empty to throw a
        UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0. However, this
        exception type is outdated and initializing Event.type to an empty
        string is legal.

        No new tests, already covered by existing tests that were rebaselined.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        (WebCore::Event::initEvent):
        * dom/Event.h:
        (WebCore::Event::isInitialized):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchEvent):

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/spi/mac/NSEventSPI.h:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        No new tests, no behavior change from this patch. Teardown scenarios are
        covered by existing protocol and inspector tests running under DRT and WKTR.

        * ForwardingHeaders/inspector/InspectorFrontendRouter.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * inspector/InspectorClient.h: Stop using forwarded types.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::hasLocalFrontend):
        (WebCore::InspectorController::hasRemoteFrontend):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends): Added. Disconnects all
        frontends and signals DisconnectReason::InspectedTargetDestroyed.

        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::dispatchMessageFromFrontend):
        * inspector/InspectorController.h: Add default value for isAutomaticInspection.
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/WorkerInspectorController.cpp: Use a router with a singleton channel
        that forwards messages over to the main page.

        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::dispatchMessageFromFrontend):
        * inspector/WorkerInspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::disconnect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp: Clear the frontend client before disconnecting frontend channel.
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):

2015-09-04  Jer Noble  <jer.noble@apple.com>

        [iOS] Enable media layout tests to run simultaneously by ignoring system-level interruptions
        https://bugs.webkit.org/show_bug.cgi?id=148807

        Reviewed by Eric Carlson.

        Add an internal property that, when set, will cause system-level interruption notifications
        (e.g., due to simultaneous media playback in separate processes) to be ignored by the
        PlatformMediaSessionManager, and cause the media playback sessions to continue normally, if
        inaudibly.

        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::willIgnoreSystemInterruptions):
        (WebCore::PlatformMediaSessionManager::setWillIgnoreSystemInterruptions):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper interruption:]):
        (-[WebMediaSessionHelper applicationWillEnterForeground:]):
        (-[WebMediaSessionHelper applicationDidBecomeActive:]):
        (-[WebMediaSessionHelper applicationWillResignActive:]):
        (-[WebMediaSessionHelper applicationDidEnterBackground:]):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2015-09-04  Beth Dakin  <bdakin@apple.com>

        Need to be able to test default behaviors on force click
        https://bugs.webkit.org/show_bug.cgi?id=148758

        Reviewed by Tim Horton.

        WKTR needs access to this.
        * platform/spi/mac/NSEventSPI.h:

2015-09-04  Dean Jackson  <dino@apple.com>

        [mediacontrols] Test the ordering of elements in the controls panel
        https://bugs.webkit.org/show_bug.cgi?id=148804
        <rdar://problem/22579232>

        Reviewed by Eric Carlson.

        Add information about various controls elements to the status object.

        Test: media/controls/elementOrder.html

        * Modules/mediacontrols/mediaControlsApple.js:

2015-09-03  Dean Jackson  <dino@apple.com>

        [mediacontrols] Expose bounding rectangles and computed style to testing
        https://bugs.webkit.org/show_bug.cgi?id=148755
        <rdar://problems/22567757>

        Reviewed by Eric Carlson.

        Expose more information on the internal objects to the testing
        framework, in particular the bounding client rectangle for an
        element as well as its computed style.

        These new features are tested by media/controls/statusDisplay*.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.getCurrentControlsStatus): Rearrage things so
        that it iterates over a list of objects, adding the common things
        as well as any extra property values.

2015-09-04  Chris Dumez  <cdumez@apple.com>

        Document.body should return the first body / frameset child of the html element
        https://bugs.webkit.org/show_bug.cgi?id=148787
        <rdar://problem/22566850>

        Reviewed by Ryosuke Niwa.

        Document.body should return the *first* body / frameset child of the html
        element as per the specification:
        https://html.spec.whatwg.org/multipage/dom.html#the-body-element-2

        Chrome and Firefox both behave correctly. However, WebKit was prioritizing
        frameset over body. This patch fixes this.

        No new tests, already covered by existing test.

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

2015-09-04  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r189023
        https://bugs.webkit.org/show_bug.cgi?id=148796

        Reviewed by Eric Carlson.

        * testing/Internals.idl:

2015-09-04  Ryosuke Niwa  <rniwa@webkit.org>

        Range.isPointInRange check root node before verifying offset
        https://bugs.webkit.org/show_bug.cgi?id=148776

        isPointInRange should never throw WrongDocumentError
        https://bugs.webkit.org/show_bug.cgi?id=148779

        Reviewed by Darin Adler.

        Fixed two bugs since they were inter-dependent on each other.

        We use the same trick we used for comparePoint in r189327 to avoid O(n) operation in common cases
        and return false when either calls to compareBoundaryPoints yields a WrongDocumentError.

        No new tests since this is covered by an existing W3C test.

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):

2015-09-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189338.
        https://bugs.webkit.org/show_bug.cgi?id=148785

        Caused tons of crashes (Requested by cdumez on #webkit).

        Reverted changeset:

        "Web Inspector: InspectorController should support multiple
        frontend channels"
        https://bugs.webkit.org/show_bug.cgi?id=148538
        http://trac.webkit.org/changeset/189338

2015-09-03  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        No new tests, no behavior change from this patch. Teardown scenarios are
        covered by existing protocol and inspector tests running under DRT and WKTR.

        * ForwardingHeaders/inspector/InspectorFrontendRouter.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * inspector/InspectorClient.h: Stop using forwarded types.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::hasLocalFrontend):
        (WebCore::InspectorController::hasRemoteFrontend):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends): Added. Disconnects all
        frontends and signals DisconnectReason::InspectedTargetDestroyed.

        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::dispatchMessageFromFrontend):
        * inspector/InspectorController.h: Add default value for isAutomaticInspection.
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/WorkerInspectorController.cpp: Use a router with a singleton channel
        that forwards messages over to the main page.

        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::dispatchMessageFromFrontend):
        * inspector/WorkerInspectorController.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::disconnect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp: Clear the frontend client before disconnecting frontend channel.
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):

2015-09-03  Jinyoung Hur  <hur.ims@navercorp.com>

        [Texmap] highp precision should be used conditionally for fragment shaders on OpenGL ES
        https://bugs.webkit.org/show_bug.cgi?id=143993

        Reviewed by Martin Robinson.

        There are some GPUs that do not support the GL_OES_fragment_precision_high extension. (e.g., Mali-T624)
        Therefore, highp precision should be used in shader fragments conditionally using a proper preprocessor,
        GL_FRAGMENT_PRECISION_HIGH.
        Without this patch, nothing will be displayed on the screen if the running platform doesn't support the
        GL_OES_fragment_precision_high extension.

        No new tests, covered by existing tests.

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:

2015-09-03  Ryosuke Niwa  <rniwa@webkit.org>

        Range.comparePoint shouldn't throw an exception if the range and the node are in the same detached tree
        https://bugs.webkit.org/show_bug.cgi?id=148733

        Reviewed by Chris Dumez.

        Don't throw WRONG_DOCUMENT_ERR when refNode is not in the document. The new behavior matches DOM4 as well
        as the behavior of Firefox. See https://dom.spec.whatwg.org/#dom-range-comparepoint

        WRONG_DOCUMENT_ERR is still thrown by compareBoundaryPoints later in the function when the root nodes of
        refNode and boundary points are different.

        There is one subtlety here that we need to throw WRONG_DOCUMENT_ERR instead of INDEX_SIZE_ERR when refNode
        and the boundary points don't share the same root node even if (refNode, offset) pair is invalid since
        DOM4 spec checks the former condition first. We implement this behavior by first validating the offset
        and then explicitly checking for the root node difference if the former check failed to avoid the latter
        O(n) check in common cases.

        Test: fast/dom/Range/range-comparePoint-detached-nodes.html

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

2015-09-03  Jer Noble  <jer.noble@apple.com>

        [iOS] Playback does not pause when deselecting route and locking screen.
        https://bugs.webkit.org/show_bug.cgi?id=148724

        Reviewed by Eric Carlson.

        When deselecting a route, the route change notification can be delayed for some amount
        of time. If the screen is locked before the notification is fired, the PlatformMediaSessionManager
        can refuse to pause the video when entering the background due to a wireless playback route
        still being active.

        When the media element transitions from having an active route to not having one (or vice versa),
        re-run the interruption check. In order to correctly determine, when that occurs, whether
        we are in an 'application background' state, cache that value to an ivar when handling
        application{Will,Did}Enter{Background,Foreground}.

        Because we only want to run this step during an actual transition between playing to a route ->
        playing locally, cache the value of isPlayingToWirelessPlayback to another ivar, and only
        inform the PlatformMediaSessionManager when that value actually changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::isPlayingToWirelessPlaybackTargetChanged): Set or clear m_isPlayingToWirelessPlaybackTarget.
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::isPlayingToWirelessPlaybackTarget): Simple getter.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationWillEnterBackground): Set m_isApplicationInBackground.
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground): Ditto.
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground): Clear m_isApplicationInBackground.
        (WebCore::PlatformMediaSessionManager::sessionIsPlayingToWirelessPlaybackTargetChanged): Run interruption
            if application is in background.

2015-09-03  Brady Eidson  <beidson@apple.com>

        Move SecurityOriginData from WK2 to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=148739

        Reviewed by Tim Horton.

        This will be needed for upcoming IndexedDB work.

        No new tests (No behavior change.)

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * page/SecurityOriginData.cpp: Renamed from Source/WebKit2/Shared/SecurityOriginData.cpp.
        (WebCore::SecurityOriginData::fromSecurityOrigin):
        (WebCore::SecurityOriginData::fromFrame):
        (WebCore::SecurityOriginData::securityOrigin):
        (WebCore::SecurityOriginData::isolatedCopy):
        (WebCore::operator==):
        * page/SecurityOriginData.h: Renamed from Source/WebKit2/Shared/SecurityOriginData.h.
        (WebCore::SecurityOriginData::encode):
        (WebCore::SecurityOriginData::decode):

2015-09-03  Zalan Bujtas  <zalan@apple.com>

        New clang warns about boolean checks for |this| pointer in RenderObject debug methods
        https://bugs.webkit.org/show_bug.cgi?id=136599

        Remove unnecessary null checking.

        Reviewed by David Kilzer.

        Not testable.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderObject): Deleted.
        (WebCore::RenderObject::showRenderSubTreeAndMark): Deleted.

2015-09-03  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Improve access specifier use in RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=148745

        Reviewed by Myles C. Maxfield.

        No new tests, no change in behavior.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::setPreviousSibling):
        (WebCore::RenderObject::setNextSibling):
        (WebCore::RenderObject::isSetNeedsLayoutForbidden):
        (WebCore::RenderObject::setNeedsLayoutIsForbidden):

2015-09-03  Alexey Proskuryakov  <ap@apple.com>

        Test Russian ".рф" domain support
        https://bugs.webkit.org/show_bug.cgi?id=148721

        Reviewed by Darin Adler.

        Test: fast/url/user-visible/rf.html

        * html/URLUtils.h: Made this header file work with Objective-C.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentMediaControlsStatusForElement):
        (WebCore::Internals::userVisibleString):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm: Added.
        (WebCore::Internals::userVisibleString):

2015-09-03  Chris Dumez  <cdumez@apple.com>

        document.createEvent("eventname") should do a case-insensitive match on the event name
        https://bugs.webkit.org/show_bug.cgi?id=148738
        <rdar://problem/22558709>

        Reviewed by Andreas Kling.

        document.createEvent("eventname") should do a case-insensitive match on the event name:
        https://dom.spec.whatwg.org/#dom-document-createevent

        WebKit was doing a case-sensitive match. Firefox and Chrome match the specification.

        No new tests, already covered by:
        http/tests/w3c/dom/nodes/Document-createEvent.html (rebaselined)

        * dom/make_event_factory.pl:
        (generateImplementation):

2015-09-02  Ryosuke Niwa  <rniwa@webkit.org>

        MutationObserver should accept attributeFilter, attributeOldValue, and characterDataOldValue on their own
        https://bugs.webkit.org/show_bug.cgi?id=148716

        Reviewed by Chris Dumez.

        According to DOM4 [1], MutationObserver accepts characterDataOldValue, attributeOldValue and attributeFilter options
        on their own when characterData and attributes options are omitted. It throws only when characterData and attributes
        options are explicitly set to false.

        Fixed our implementation accordingly. Existing tests as well as ones imported from W3C covers this.

        [1] http://www.w3.org/TR/2015/WD-dom-20150618/#interface-mutationobserver

        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::observe):

2015-09-02  Andreas Kling  <akling@apple.com>

        ScrollbarThemes should be returned by reference.
        <https://webkit.org/b/147551>

        Reviewed by Zalan Bujtas.

        There's always a ScrollbarTheme of some type, so have ScrollbarTheme getters
        return references all around.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesDoubleButtonPseudoClass):
        (WebCore::scrollbarMatchesSingleButtonPseudoClass):
        (WebCore::scrollbarMatchesNoButtonPseudoClass):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::startRepeatingTimer):
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::bounds):
        * page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm:
        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintScrollCorner):
        (WebCore::ScrollView::paintOverhangAreas):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollbarOverlayStyle):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::maxOverlapBetweenPages):
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::~Scrollbar):
        (WebCore::Scrollbar::offsetDidChange):
        (WebCore::Scrollbar::updateThumb):
        (WebCore::Scrollbar::paint):
        (WebCore::Scrollbar::autoscrollTimerFired):
        (WebCore::thumbUnderMouse):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::setHoveredPart):
        (WebCore::Scrollbar::setPressedPart):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):
        (WebCore::Scrollbar::setEnabled):
        (WebCore::Scrollbar::isOverlayScrollbar):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::theme):
        * platform/ScrollbarTheme.cpp:
        (WebCore::ScrollbarTheme::theme):
        * platform/ScrollbarTheme.h:
        * platform/efl/ScrollbarThemeEfl.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/ios/ScrollbarThemeIOS.mm:
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/mac/ScrollAnimatorMac.mm:
        (macScrollbarTheme):
        * platform/mac/ScrollbarThemeMac.mm:
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        (+[WebScrollbarPrefsObserver behaviorPrefsChanged:]):
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::AccessiblePopupMenu::accLocation):
        (WebCore::AccessiblePopupMenu::accHitTest):
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior):
        * rendering/RenderLayer.cpp:
        (WebCore::cornerRect):
        (WebCore::styleRequiresScrollbar):
        (WebCore::styleDefinesAutomaticScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::calcScrollbarThicknessUsing):
        (WebCore::RenderScrollbarPart::styleDidChange):
        (WebCore::RenderScrollbarPart::imageChanged):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintTickmarks):
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::scrollbarThickness):

2015-09-02  Ryosuke Niwa  <rniwa@webkit.org>

        Node.textContent = undefined should be equivalent to textContent = ""
        https://bugs.webkit.org/show_bug.cgi?id=148729

        Reviewed by Darin Adler.

        Assigning undefined to textContent should be equivalent to assigning an empty string to it like innerHTML.
        This is because textContent is defined as an DOMString? attribute in DOM4 [1] and WebIDL defines ECMAScript
        undefined to be treated as null for nullable types [2].

        The new behavior matches that of Firefox and Chrome.

        [1] https://dom.spec.whatwg.org/#node
        [2] https://heycam.github.io/webidl/#es-nullable-type
        
        * dom/Node.idl:

2015-09-02  Alex Christensen  <achristensen@webkit.org>

        Make bison grammar compatible with bison 2.1
        https://bugs.webkit.org/show_bug.cgi?id=148731

        Reviewed by Tim Horton.

        * css/CSSGrammar.y.in:
        * xml/XPathGrammar.y:
        Move all union fields to one union so bison 2.1 generates equivalent output.

2015-09-02  Dean Jackson  <dino@apple.com>

        Add some Houdini specs to the features list
        https://bugs.webkit.org/show_bug.cgi?id=148722
        <rdar://problem/22545319>

        Reviewed by Eric Carlson.

        Add the two CSS Houdini specs that have some actual
        content to the features list: custom painting and
        custom property registration.

        * features.json:

2015-09-02  Brady Eidson  <beidson@apple.com>

        Import W3C IndexedDB tests.
        https://bugs.webkit.org/show_bug.cgi?id=148713

        Reviewed by Tim Horton' rubber stamp.

        Tests: imported/w3c/indexeddb/*

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange): Remove invalid assert - version goes back to 0 when initial
          versionChange transaction is aborted.

2015-09-02  Dean Jackson  <dino@apple.com>

        Separate WebGL 1 and WebGL 2 in the features file.

        Unreviewed.

        * features.json:

2015-09-02  Dean Jackson  <dino@apple.com>

        Reset the status label when the media is playable
        https://bugs.webkit.org/show_bug.cgi?id=148704
        <rdar://problem/22541939>

        Reviewed by Eric Carlson.

        Flakiness on the bots uncovered a situation where we
        hide the status label but left it with incorrect content.

        Covered by the existing statusDisplay test.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateStatusDisplay): Only set to loading if we're not yet playable.

2015-09-02  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit does not expose max/min value of <progress> element
        https://bugs.webkit.org/show_bug.cgi?id=148707

        Reviewed by Mario Sanchez Prada.

        Allow native progress indicator elements to report min/max values by rewriting special
        case code for ARIA progress bars.

        Test: accessibility/mac/progress-element-min-max.html

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

2015-09-02  Hyemi Shin  <hyemi.sin@samsung.com>

        [GStreamer] Simplify linking pads in AudioDestination and correct old comment.
        https://bugs.webkit.org/show_bug.cgi?id=148702

        Reviewed by Philippe Normand.

        Simplify linking src pad of webkitAudioSrc and sink pad of audioConvert
        to one line because implementation changed not to use seperate function
        to complete building rest of pipelines.
        Correct old comment also there is no more wavparse element.

        No new tests, no behavior change.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):

2015-09-02  Chris Dumez  <cdumez@apple.com>

        document.createProcessingInstruction() does not behave according to specification
        https://bugs.webkit.org/show_bug.cgi?id=148710

        Reviewed by Ryosuke Niwa.

        document.createProcessingInstruction() does not behave according to
        specification:
        https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction

        The following changes were made in this patch to match the specification
        and the behavior of Firefox / Chrome:
        1. document.createProcessingInstruction() now works for HTML documents.
        2. Throw an InvalidCharacterError if the data contains "?>" (step 2 of spec)

        No new tests, already covered by existing tests that are rebaselined in
        this patch.

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

2015-09-02  Chris Dumez  <cdumez@apple.com>

        http/tests/w3c/dom/nodes/Element-matches.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=148615

        Reviewed by Ryosuke Niwa.

        Several newly-imported w3c tests were flaky due to the :target
        pseudo-class selectors sometimes giving different results. The
        issue seems to be that this type of selector relies on the
        Document::cssTarget() element to do the matching. We update
        this cssTarget Element in FrameView's scrollToFragment() /
        scrollToAnchor(). This is called from
        scrollToFragmentWithParentBoundary() which is called by
        FrameLoader's finishedParsing() and loadInSameDocument().

        In the first one, it is called *after* calling checkComplete()
        which fires the onload event. However, in the second method,
        it is called *before*. This patch updates finishedParsing()
        so that scrollToFragmentWithParentBoundary() is called *before*
        firing the onload event, consistently with loadInSameDocument().
        This makes sure that JavaScript executed in an onload event
        handler will get accurate results for :target pseudo-class
        selectors.

        No new tests, covered by:
        http/tests/w3c/dom/nodes/Element-matches.html
        http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):

2015-09-02  Zan Dobersek  <zdobersek@igalia.com>

        Construct default winding string arguments in CanvasRenderingContext2D from ASCIILiteral objects
        https://bugs.webkit.org/show_bug.cgi?id=148441

        Reviewed by Darin Adler.

        * html/canvas/CanvasRenderingContext2D.h: Use ASCIILiteral objects to construct
        the default values for the winding arguments. This will avoid copying the string
        data every time the methods are invoked with the default argument value.

2015-09-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM bindings API breaks after r189182.

        Several methods are no longer raising exceptions after
        r189182. Add them to the list, but also handle the case where the
        methods are called inside the class, to add the nullptr parameter
        for the GError.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateProperty):
        (FunctionUsedToRaiseException):

2015-09-01  Ryosuke Niwa  <rniwa@webkit.org>

        Rename ShadowRoot::hostElement to shadowRoot::host to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=148694

        Address the review comments by Chris.

        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):
        * dom/Node.cpp:
        (WebCore::Node::shadowHost):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:

2015-09-01  Zalan Bujtas  <zalan@apple.com>

        Recompute maximum outline size only when outline changes.
        https://bugs.webkit.org/show_bug.cgi?id=148576

        Reviewed by Andreas Kling.

        We should only recompute the cached maximum outline size when
        either the outline size (offset/width) or the style (from or to
        auto) changes.
        Setting 'outline-style: auto' can change the final outline width as 'auto' triggers
        the focus ring mode. In this mode, we ignore outline-width and use the platform default value instead.  

        Covered by existing test cases.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeMaxOutlineSize):
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::initializeStyle): Deleted.
        (WebCore::RenderElement::setStyle): Deleted.
        * rendering/RenderElement.h:

2015-09-01  Chris Dumez  <cdumez@apple.com>

        Range API should throw a TypeError for null Node parameters
        https://bugs.webkit.org/show_bug.cgi?id=148692

        Reviewed by Ryosuke Niwa.

        Range API should throw a TypeError for null Node parameters. We currently
        throw a NotFoundError.

        As per the DOM specification, the Node arguments are not optional nor
        nullable [1]:
        https://dom.spec.whatwg.org/#range

        Therefore, as per the Web IDL specification, we should throw a TypeError
        if the Node parameter is null or missing:
        https://heycam.github.io/webidl/#es-interface (step 1).

        [1] https://heycam.github.io/webidl/#es-nullable-type

        No new tests, covered by existing tests which have been
        rebaselined.

        * dom/Range.cpp:
        (WebCore::Range::setStart):
        (WebCore::Range::setEnd):
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        (WebCore::Range::compareBoundaryPoints):
        (WebCore::Range::intersectsNode):
        (WebCore::Range::insertNode):
        (WebCore::Range::setStartAfter):
        (WebCore::Range::setEndBefore):
        (WebCore::Range::setEndAfter):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        (WebCore::Range::setStartBefore):
        Set the Exception code to TypeError instead of NOT_FOUND_ERR if
        the Node parameter is null.

        * dom/Range.idl:
        Stop marking the Node parameters as optional. They are not optional in
        the specification and they are not really optional in our implementation.
        Previously, if the Node parameter was missing, we would call the
        implementation with a null pointer and the implementation would throw a
        NotFoundError. Now that they are mandatory, the bindings will directly
        throw a TypeError (as per the Web IDL spec) if the Node parameter is
        missing. However, if the JavaScript explicitely passes null or undefined,
        the implementation will still be called with a null pointer (because
        our bindings generator does not distinguish nullable / non-nullable
        parameters). For this reason, we still need to handle null pointers on
        the implementation side.

2015-09-01  Ryosuke Niwa  <rniwa@webkit.org>

        Rename ShadowRoot::hostElement to shadowRoot::host to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=148694

        Reviewed by Chris Dumez.

        Renamed ShadowRoot::hostElement to ShadowRoot::host to match the latest shadow DOM spec.
        This will help us implementing shadow DOM in near future.

        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::moveToParentOrShadowHost):
        (WebCore::EventRelatedNodeResolver::findHostOfTreeScopeInTargetTreeScope):
        (WebCore::shouldEventCrossShadowBoundary):
        (WebCore::EventPath::EventPath):
        * dom/Node.cpp:
        (WebCore::Node::shadowHost):
        (WebCore::Node::deprecatedShadowAncestorNode):
        (WebCore::Node::parentOrShadowHostElement):
        * dom/NodeRenderingTraversal.cpp:
        (WebCore::NodeRenderingTraversal::traverseParent):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setInnerHTML):
        (WebCore::ShadowRoot::setResetStyleInheritance):
        * dom/ShadowRoot.h:
        (WebCore::Node::parentOrShadowHostNode):
        * dom/Text.cpp:
        (WebCore::isSVGShadowText):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedElement):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureDistribution):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::owner):
        * rendering/RenderLayer.cpp:
        (WebCore::rendererForScrollbar):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::resolveShadowTree):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingUseElement):

2015-09-01  Chris Dumez  <cdumez@apple.com>

        NodeFilter should be a callback interface
        https://bugs.webkit.org/show_bug.cgi?id=148415

        Reviewed by Geoffrey Garen.

        NodeFilter is now a callback interface, instead of a regular interface,
        as per the DOM specification:
        https://dom.spec.whatwg.org/#interface-nodefilter

        One major difference is that TreeWalker.filter / NodeIterator is
        supposed to be a Function / Object (passed by JavaScript), but it was a
        JSNodeFilter wrapper in WebKit. Also, window.NodeFilter is not supposed
        to have a prototype property.

        This behavior is consistent with Firefox. However, Chrome still has its
        own NodeFilter wrapper.

        Tests:
        http/tests/w3c/dom/traversal/NodeIterator-expected.html (rebaselined)
        http/tests/w3c/dom/traversal/TreeWalker.html (rebaselined)

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add / Remove files to the project files.

        * dom/NodeFilterCondition.cpp:
        (WebCore::NodeFilterCondition::acceptNode):
        * dom/NodeFilterCondition.h:
        * bindings/gobject/GObjectNodeFilterCondition.cpp:
        (WebCore::GObjectNodeFilterCondition::acceptNode):
        * bindings/gobject/GObjectNodeFilterCondition.h:
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bindings/objc/ObjCNodeFilterCondition.mm:
        (WebCore::ObjCNodeFilterCondition::acceptNode):
        Drop ExecState parameter as it is not used.

        * bindings/gobject/WebKitDOMNodeFilter.cpp:
        (WebKit::core):
        Use NativeNodeFilter type instead of NodeFilter. NodeFilter is now
        a pure interface with 2 subclasses: NativeNodeFilter for the native
        bindings and JSNodeFilter for the JS bindings.

        * bindings/js/JSBindingsAllInOne.cpp:
        Drop JSNodeFilterCondition.cpp as it was removed.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        Throw a TypeError if the callback object being invoked is not callable
        and does not have a callable property with the expected name. There
        are several layout tests covering this (including w3c ones). Previously,
        NodeFilter was not using the generic JSCallbackData and the exception
        throwing was in JSNodeFilterCondition::acceptNode() instead.

        * bindings/js/JSNodeFilterCondition.cpp: Removed.
        * bindings/js/JSNodeFilterCondition.h: Removed.
        Drop this class. JSNodeFilter / JSNodeFilterCustom now basically take
        care of all this.

        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::acceptNode):
        Complete rewrite. This file is now only used to provide a custom
        implementation for JSNodeFilter::acceptNode(). The code is similar to
        what was previously done in JSNodeFilterCondition::acceptNode().
        There are several reasons we need custom bindings here:
        - The bindings generator does not handle yet callback functions
          returning anything else than a boolean.
        - The specification clearly states that we need to rethrow exceptions
          thrown by the callback function. However, the default behavior of
          our bindings is to simply report the exception.

        * bindings/scripts/CodeGeneratorGObject.pm:
        Only skip functions that have parameters that are callback *functions*,
        not callback *interfaces*. Callback interfaces are very similar to
        interfaces and the generator is able to handle them. This change was
        needed for the GTK bindings generator would no longer generate bindings
        for Document.createNodeIterator() / Document.createTreeWalker(), now
        that NodeFilter is a callback interface instead of a regular interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        Generate a toJS() function for callback interfaces as well. Previously,
        we would only generate those for regular interfaces. This is needed
        because NodeFilter is now a callback interface and it is exposed to
        JS via NodeIterator.filter / TreeWalker.filter. The implementation
        merely returns the callback object / function inside the JSCalbackData
        so the JS gets back the object / function it passed in.

        * bindings/scripts/CodeGeneratorObjC.pm:
        Tweak the ObjC bindings generator to use NativeNodeFilter class instead
        of NodeFilter as NodeFilter is now a pure interfaces. Native bindings
        are now expected to use the NativeNodeFilter subclass instead.

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunction.h:
        Rebaseline bindings tests now that we generate toJS() functions for
        callback functions / interfaces.

        * dom/DOMAllInOne.cpp:
        Drop NodeFilter.cpp as it was removed.

        * dom/NativeNodeFilter.cpp: Added.
        * dom/NativeNodeFilter.h: Added.
        Introduce new NativeNodeFilter class which subclasses the NodeFilter
        interface and is used by native bindings. Its accept() implementation
        uses NodeFilterCondition object internally to filter the nodes instead
        of a JS callback.

        * dom/NodeFilter.cpp: Removed.
        * dom/NodeFilter.h:
        Make NodeFilter a pure interface. Its previous code is now either in
        NativeNodeFilter of JSNodeFilter.

        * dom/NodeFilter.idl:
        Make NodeFilter a callback interface instead of a regular interface,
        as per the DOM specification. Also have its accept() operation return
        an unsigned short instead of a short to match the specification.
        The ObjC version still returns a short though for backward
        compatibility.

        * dom/NodeFilterCondition.cpp:
        (WebCore::NodeFilterCondition::acceptNode):
        * dom/NodeFilterCondition.h:

        * dom/NodeIterator.cpp:
        * dom/NodeIterator.h:
        * dom/NodeIterator.idl:
        * dom/Traversal.cpp:
        * dom/Traversal.h:
        * dom/TreeWalker.cpp:
        * dom/TreeWalker.h:
        * dom/TreeWalker.idl:
        Stop passing ExecState to TreeWalker / NodeIterator functions. It no
        longer seems to be needed as we now use the JSCallbackData abstraction
        for invoking JS.

2015-09-01  Chris Dumez  <cdumez@apple.com>

        Range.insersectsNode(node) is supposed to return true if node.parent is null
        https://bugs.webkit.org/show_bug.cgi?id=148687

        Reviewed by Ryosuke Niwa.

        Range.insersectsNode(node) is supposed to return true if node.parent is
        null:
        https://dom.spec.whatwg.org/#dom-range-intersectsnode (step 3)

        Previously, WebKit would throw a NotFoundError, apparently to match
        Firefox's behavior. However, these days, Firefox complies with the
        specification and returns true here.

        No new tests, already covered by:
        http/tests/w3c/dom/ranges/Range-intersectsNode.html (rebaselined)

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

2015-09-01  Brian Burg  <bburg@apple.com>

        Web Inspector: tighten up lifetimes for InspectorController-owned objects; add brace initializers to agents
        https://bugs.webkit.org/show_bug.cgi?id=148612

        Reviewed by Joseph Pecoraro.

        Both InjectedScriptManager and AgentRegistry (thus all agents) are
        owned by [Worker]InspectorController. So, use references.

        InstrumentingAgents is morally owned by InspectorController as well, but
        must be a Ref for now since instrumentation cookies take a strong reference.

        Add brace initalizers for scalar and pointer members in agent classes.

        No new tests, no behavior change.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::enable):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::nodeForObjectId):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorDOMDebuggerAgent::disable):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::scriptsEnabled):
        (WebCore::InspectorInstrumentation::didScroll):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialog):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::segmentUnloaded):
        (WebCore::InspectorInstrumentation::captureStarted):
        (WebCore::InspectorInstrumentation::captureStopped):
        (WebCore::InspectorInstrumentation::playbackStarted):
        (WebCore::InspectorInstrumentation::playbackPaused):
        (WebCore::InspectorInstrumentation::playbackFinished):
        (WebCore::InspectorInstrumentation::playbackHitPosition):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::idForNode):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::timestamp):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::snapshotNode):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::InspectorReplayAgent):
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::timestamp):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::timestamp):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWebAgentBase.h:
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        * inspector/InspectorWorkerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents): Deleted.
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::create):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::enable):
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        (WebCore::PageRuntimeAgent::notifyContextCreated):
        * inspector/PageRuntimeAgent.h:
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        (WebCore::WebConsoleAgent::frameWindowDiscarded):
        (WebCore::WebConsoleAgent::didFinishXHRLoading):
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        * inspector/WebConsoleAgent.h:
        * inspector/WebDebuggerAgent.cpp:
        (WebCore::WebDebuggerAgent::WebDebuggerAgent):
        (WebCore::WebDebuggerAgent::enable):
        (WebCore::WebDebuggerAgent::disable):
        * inspector/WebDebuggerAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        * inspector/WorkerRuntimeAgent.h:

2015-09-01  Jinyoung Hur  <hur.ims@navercorp.com>

        [Cairo][WebGL] Upload the accelerated canvas as a texture by copying via GPU directly
        https://bugs.webkit.org/show_bug.cgi?id=148631

        Reviewed by Dean Jackson.

        When an accelerated canvas needs to be uploaded as a gl texture, it would be better to copy it to 
        texture directly via GPU using glCopyTexImage2D. 
        Note that GPU copy can not always be enabled because, with premultiplyAlpha and flipY unpack option,
        it seems hard to be implemented in a way of direct GPU copy.

        No new tests because there is no behavior change.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2D):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::copyToPlatformTexture):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyToPlatformTexture):

2015-08-31  Dean Jackson  <dino@apple.com>

        [mediacontrols] Add tests for the status display label
        https://bugs.webkit.org/show_bug.cgi?id=148656
        <rdar://problem/22509779>

        Reviewed by Eric Carlson.

        Export the StatusDisplay element and its current content.

        Tests: media/controls/statusDisplay.html
               media/controls/statusDisplayBad.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.getCurrentControlsStatus):

2015-08-31  Dean Jackson  <dino@apple.com>

        [mediacontrols] Add a test for the show controls button
        https://bugs.webkit.org/show_bug.cgi?id=148655
        <rdar://problem/22509688>

        Reviewed by Eric Carlson.

        We'll add a list of control elements to the status object,
        so we can query the state of buttons, etc. Begin with the
        Show Controls button (used for accessibility).

        There are also some drive-by whitespace changes.

        Test: media/controls/showControlsButton.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.get idiom): Differentiate between iOS and
        OS X. This isn't necessary at the moment, but will come in
        handy later.
        (Controller.prototype.createControls): Whitespace.
        (Controller.prototype.getCurrentControlsStatus): Add the information
        on the Show Controls button.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.get idiom):

2015-09-01  Joseph Pecoraro  <pecoraro@apple.com>

        Possible CFArray leak in MediaPlayerPrivateAVFoundationCF.cpp
        https://bugs.webkit.org/show_bug.cgi?id=148668

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::mimeTypeCache): Deleted.
        (WebCore::avfMIMETypes):
        Fix the leak in avfMIMETypes. Consolidate on the single implementation.
        Note that avfMIMETypes lowercased the inputs and mimeTypeCache did not,
        but we now match MediaPlayerPrivateAVFoundationObjC which has one version
        that lowercased inputs as well.

        (WebCore::MediaPlayerPrivateAVFoundationCF::getSupportedTypes):
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsKeySystem):
        Convert to th enew verison.

2015-09-01  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Layout is wrong for flex factor sum between 0 and 1
        https://bugs.webkit.org/show_bug.cgi?id=148645

        Reviewed by Darin Adler.

        This patch ensures that we don't normalize the individual tracks
        to fill the space. More precisely, when we sum up the flexes, that
        tells us how many "units" of flex need to fit into the free
        space. We then figure out what size to assign to the flex unit
        based on that, and send that back to the individual items, sizing
        them appropriately to their flex value.

        This way we get flex fraction values applied correctly so they fill
        the available space in the indicated proportion. This approach has
        an additional advantage of dealing with division by 0 when reducing
        automatically the flex value.

        Test: fast/css-grid-layout/flex-factor-sum-less-than-1.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):

2015-08-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189198.
        https://bugs.webkit.org/show_bug.cgi?id=148670

        "Caused http/tests/navigation/anchor-frames-same-origin.html
        to fail on WebKit1" (Requested by cdumez on #webkit).

        Reverted changeset:

        "http/tests/w3c/dom/nodes/Element-matches.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=148615
        http://trac.webkit.org/changeset/189198

2015-08-31  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused #define
        https://bugs.webkit.org/show_bug.cgi?id=148667

        Reviewed by Benjamin Poulain.

        * platform/network/cf/ResourceResponseCFNet.cpp:

2015-08-31  Chris Dumez  <cdumez@apple.com>

        Range API is throwing wrong exception type
        https://bugs.webkit.org/show_bug.cgi?id=148648

        Reviewed by Ryosuke Niwa.

        The RangeException type does not exist in the latest DOM specification.
        Instead, the Range API is throwing regular DOMExceptions [1]:
        https://dom.spec.whatwg.org/#range

        The error codes also differ. RangeException.INVALID_NODE_TYPE_ERR (2)
        is replaced with DOMException.INVALID_NODE_TYPE_ERR (24).
        RangeException.BAD_BOUNDARYPOINTS_ERR (1) is replaced by
        DOMException.INVALID_STATE_ERR (11), as per:
        https://dom.spec.whatwg.org/#dom-range-surroundcontents (step 1).

        This patch aligns WebKit's behavior with the specification and with
        other browsers (tested Firefox and Chrome).

        [1] https://heycam.github.io/webidl/#dfn-DOMException

        No new tests, covered by existing tests (rebaselined):
        http/tests/w3c/dom/ranges/Range-comparePoint.html
        http/tests/w3c/dom/ranges/Range-isPointInRange.html
        http/tests/w3c/dom/ranges/Range-selectNode.html
        http/tests/w3c/dom/ranges/Range-set.html
        http/tests/w3c/dom/ranges/Range-surroundContents.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase): Deleted.
        * dom/DOMAllInOne.cpp:
        * dom/DOMExceptions.in:
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::checkNodeBA):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        * dom/RangeException.cpp: Removed.
        * dom/RangeException.h: Removed.
        * dom/RangeException.idl: Removed.

2015-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Introduce ModuleProgramExecutable families and compile Module code to bytecode
        https://bugs.webkit.org/show_bug.cgi?id=148581

        Reviewed by Saam Barati.

        Add the ModuleProgramExecutable case.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2015-08-31  Brent Fulgham  <bfulgham@apple.com>

        [Win] WebKit cannot load pages based on "file://" URLs
        https://bugs.webkit.org/show_bug.cgi?id=148596
        <rdar://problem/22432585>

        Reviewed by Dean Jackson.

        * platform/URL.cpp:
        (WebCore::URL::URL): Work around bug that causes this assertion to fire on
        the Apple Windows build.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::adjustMIMETypeIfNecessary): Added. If the URL is for a local file,
        determine the MIME type based on extension. Otherwise use the default MIME type.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse): If
        the CFURLResponse has no MIME type, call 'adjustMIMETypeIfNecessary'.

2015-08-31  Chris Dumez  <cdumez@apple.com>

        http/tests/w3c/dom/nodes/Element-matches.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=148615

        Reviewed by Ryosuke Niwa.

        Several newly-imported w3c tests were flaky due to the :target
        pseudo-class selectors sometimes giving different results. The
        issue seems to be that this type of selector relies on the
        Document::cssTarget() element to do the matching. We update
        this cssTarget Element in FrameView's scrollToFragment() /
        scrollToAnchor(). This is called from
        scrollToFragmentWithParentBoundary() which is called by
        FrameLoader's finishedParsing() and loadInSameDocument().

        In the first one, it is called *after* calling checkComplete()
        which fires the onload event. However, in the second method,
        it is called *before*. This patch updates finishedParsing()
        so that scrollToFragmentWithParentBoundary() is called *before*
        firing the onload event, consistently with loadInSameDocument().
        This makes sure that JavaScript executed in an onload event
        handler will get accurate results for :target pseudo-class
        selectors.

        No new tests, covered by:
        http/tests/w3c/dom/nodes/Element-matches.html
        http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):

2015-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        The error handler of ReadableJSStream should own stream object
        https://bugs.webkit.org/show_bug.cgi?id=148653

        Reviewed by Sam Weinig.

        ReadableJSStream's m_errorFunction does not own the readable stream.
        So when this error callback is executed asynchronously through Promises,
        the stream could be already destroyed.
        The fulfill callback which is jointly configured with this error callback
        owns the stream. However, when the promise is rejected, the following things
        occur.

        1. Promise clears the fulfill handlers immediately.
        2. queue the reject handlers to the microtask queue.
        3. When draining the microtasks, the rejected handler will be executed.

        At the time of 2 or 3, the references to the fulfill handlers are already discarded.
        So when GC occurs at the time of 2 or 3, it will collect the fulfill handlers and the
        stream object owned by the fulfill handlers even if the error callback will touch the
        stream object later.

        Before r189124, this fault does not occur. This is because the std::function in the
        fulfill handler is not destroyed before that patch. Since the std::function owns the
        stream object, the std::function and the stream object were leaked and never destroyed.
        After that patch, the std::function in the fulfill handler becomes destroyed. And it
        makes this fault happen.

        In this patch, we separate the error callback from the stream object. Previously, the
        error callback resides in the stream object as the member. To avoid the cyclic references,
        this error callback did not own the stream object. But this causes this fault.
        Instead of caching the error callback in the stream object, we always create the error
        callback, when it is needed. The created error callback owns the stream object as well as
        the fulfill callbacks owns the stream object.

        No behavior change.

        * bindings/js/ReadableJSStream.cpp:
        (WebCore::createGenericErrorRejectedFunction):
        (WebCore::ReadableJSStream::doStart):
        (WebCore::ReadableJSStream::doPull):
        (WebCore::ReadableJSStream::ReadableJSStream): Deleted.
        * bindings/js/ReadableJSStream.h:

2015-08-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Determine navigation and content policy before continuing to filter a load
        https://bugs.webkit.org/show_bug.cgi?id=148506

        Reviewed by Brady Eidson.

        Prior to this change, ContentFilter would hide from DocumentLoader all CachedRawResourceClient callbacks until
        a decision was made, then replay the missed callbacks. This approach interacted poorly with some features of
        the loader, notably appcache and downloads. In the case of appcache, DocumentLoader might not have a chance to
        check for substitute data until the original load has finished, wasting bandwidth, and might receive duplicate
        or out-of-order callbacks. In the case of downloads, it would often be too late to convert the existing
        connection to a download, leading to restarted downloads or outright failures.

        Bandaids were put in place for these issues in r188150, r188486, and r188851 to fix crashes or serious
        regressions in behavior, but these weren't complete fixes. They did not solve any of the duplicate data loading
        problems, and they did not make downloads work reliably in all cases.

        This patch rolls out the bandaids (but keeps their tests) and replaces them with a more robust fix. Instead of
        hiding callbacks from DocumentLoader, ContentFilter now delivers willSendRequest(), redirectReceived(), and
        responseReceived() to DocumentLoader immediately, and cancels filtering if DocumentLoader decides to ignore the
        load, download it, or load substitute data. ContentFilter continues to buffer incoming data to prevent partial
        rendering of blocked content.

        The existing tests for r188150 and r188851 were kept, the test for r188486 was rewritten to be specific to
        content filtering, and new tests were added to cover the case where ContentFilter is still undecided after a
        load finishes.

        Tests: contentfiltering/allow-never.html
               contentfiltering/block-never.html
               ContentFiltering.AllowDownloadAfterAddData
               ContentFiltering.AllowDownloadAfterFinishedAddingData
               ContentFiltering.AllowDownloadAfterRedirect
               ContentFiltering.AllowDownloadAfterResponse
               ContentFiltering.AllowDownloadAfterWillSendRequest
               ContentFiltering.AllowDownloadNever
               ContentFiltering.BlockDownloadAfterAddData
               ContentFiltering.BlockDownloadAfterFinishedAddingData
               ContentFiltering.BlockDownloadAfterRedirect
               ContentFiltering.BlockDownloadAfterResponse
               ContentFiltering.BlockDownloadAfterWillSendRequest
               ContentFiltering.BlockDownloadNever

        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::decisionPoint): Taught to handle DecisionPoint::Never, and rewrote to
        not need a set of const uint8_ts that mirror the DecisionPoint enum.
        (WebCore::JSMockContentFilterSettings::setDecisionPoint): Ditto.
        (WebCore::toJSValue): Rewrote to not need a set of const uint8_ts that mirror the Decision enum.
        (WebCore::toDecision): Ditto.
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::createIfEnabled): Renamed from createIfNeeded, and changed to take a DocumentLoader&
        instead of a DecisionFunction.
        (WebCore::ContentFilter::ContentFilter):
        (WebCore::ContentFilter::responseReceived): If m_state != Blocked after filtering, call DocumentLoader::responseReceived().
        (WebCore::ContentFilter::dataReceived): If m_state == Allowed after filtering, deliver buffered data to DocumentLoader.
        If no filtering was necessary, call DocumentLoader::dataReceived() directly.
        (WebCore::ContentFilter::redirectReceived): If m_state != Blocked after filtering, call DocumentLoader::redirectReceived().
        (WebCore::ContentFilter::notifyFinished): If an error occured, call DocumentLoader::notifyFinished() immediately and return.
        If m_state != Blocked after filtering, deliver buffered data to DocumentLoader and call DocumentLoader::notifyFinished().
        If no filtering was necessary and m_state != Blocked, call DocumentLoader::notifyFinished() directly.
        (WebCore::ContentFilter::didDecide): Called DocumentLoader::contentFilterDidDecide() instead of m_decisionFunction().
        (WebCore::ContentFilter::deliverResourceData): Added a helper function to deliver buffered data to DocumentLoader.
        (WebCore::ContentFilter::createIfNeeded): Renamed to createIfEnabled().
        * loader/ContentFilter.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::willSendRequest): Stopped asserting that redirectResponse is null and made it part of
        the if condition instead, since willSendRequest() will now be called on redirects when there is an active ContentFilter.
        (WebCore::DocumentLoader::startLoadingMainResource): Called becomeMainResourceClient() instead of becomeMainResourceClientIfFilterAllows().
        (WebCore::DocumentLoader::becomeMainResourceClient): Renamed from becomeMainResourceClientIfFilterAllows().
        Only called ContentFilter::startFilteringMainResource() if the filter state is Initialized, since ContentFilter
        might have already made a decision in willSendRequest().
        (WebCore::DocumentLoader::contentFilterDidDecide): Stopped deleting m_contentFilter, since it will continue to deliver callbacks
        even after making a decision. Fixed a bug where we were creating two copies of ContentFilter's replacement data.
        (WebCore::DocumentLoader::syntheticRedirectReceived): Deleted.
        (WebCore::DocumentLoader::becomeMainResourceClientIfFilterAllows): Renamed to becomeMainResourceClient().
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal): Removed part of r188851.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Removed part of r188486.
        * loader/SubresourceLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient): Removed part of r188150.
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::syntheticRedirectReceived): Removed part of r188150.
        * testing/MockContentFilterSettings.h: Defined DecisionPoint::Never.
        * testing/MockContentFilterSettings.idl: Defined DECISION_POINT_NEVER.

2015-08-31  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline bindings tests after r189184.

2015-08-31  Chris Dumez  <cdumez@apple.com>

        NodeFilter.SHOW_ALL has wrong value on 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=148602

        Reviewed by Geoffrey Garen.

        NodeFilter.SHOW_ALL has wrong value on 32-bit. This is because
        NodeFilter.SHOW_ALL is an unsigned long whose value is 0xFFFFFFFF but
        our bindings code is casting it to an intptr_t type which is not wide
        enough on 32-bit.

        No new tests, already covered by fast/dom/node-filter-interface.html
        which is now unskipped on Windows / 32bit.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTableValueArray):
        Generate extra curly brackets to initialize the new union member.
        Also cast to long long the constant instead of intptr_t.

        * dom/NodeFilter.h:
        Explicitly mark the enum underlying type to be an unsigned long
        to make sure it can hold the value for SHOW_ALL on all platforms.
        On Windows, it seems the default underlying type is an int for
        e.g.

2015-08-31  Chris Dumez  <cdumez@apple.com>

        Range.detach() / NodeIterator.detach() should be no-ops as per the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=148454

        Reviewed by Ryosuke Niwa.

        Range.detach() / NodeIterator.detach() should be no-ops as per the
        latest DOM specification:
        - https://dom.spec.whatwg.org/#dom-range-detach
        - https://dom.spec.whatwg.org/#dom-nodeiterator-detach

        These are already no-ops in Firefox:
        - https://bugzilla.mozilla.org/show_bug.cgi?id=702948
        - https://bugzilla.mozilla.org/show_bug.cgi?id=823549

        and Chrome:
        - https://src.chromium.org/viewvc/blink?revision=173010&view=revision
        - https://src.chromium.org/viewvc/blink?revision=172768&view=revision

        Tests: fast/dom/Range/range-detach-noop.html
               fast/dom/node-iterator-detach-noop.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectText):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (selectionBelongsToObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (FunctionUsedToRaiseException):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markersInRange):
        (DocumentMarkerController::setMarkersActive):
        (DocumentMarkerController::hasMarkers):
        (DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        (WebCore::NodeIterator::detach):
        (WebCore::NodeIterator::NodeIterator): Deleted.
        (WebCore::NodeIterator::nodeWillBeRemoved): Deleted.
        (WebCore::NodeIterator::updateForNodeRemoval): Deleted.
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::nextNode):
        (WebCore::NodeIterator::previousNode):
        * dom/NodeIterator.idl:
        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer):
        (WebCore::Range::setStart):
        (WebCore::Range::setEnd):
        (WebCore::Range::collapse):
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        (WebCore::Range::compareBoundaryPoints):
        (WebCore::Range::boundaryPointsValid):
        (WebCore::Range::deleteContents):
        (WebCore::Range::processContents):
        (WebCore::Range::processContentsBetweenOffsets):
        (WebCore::Range::processAncestorsAndTheirSiblings):
        (WebCore::Range::extractContents):
        (WebCore::Range::cloneContents):
        (WebCore::Range::insertNode):
        (WebCore::Range::toString):
        (WebCore::Range::text):
        (WebCore::Range::createContextualFragment):
        (WebCore::Range::detach):
        (WebCore::Range::cloneRange):
        (WebCore::Range::surroundContents):
        (WebCore::Range::checkDeleteExtract):
        (WebCore::Range::containedByReadOnly):
        (WebCore::Range::firstNode):
        (WebCore::Range::shadowRoot):
        (WebCore::Range::pastLastNode):
        (WebCore::Range::absoluteTextRects):
        (WebCore::Range::absoluteTextQuads):
        (WebCore::Range::collectSelectionRects):
        (WebCore::Range::formatForDebugger):
        (WebCore::Range::contains):
        (WebCore::rangesOverlap):
        (WebCore::Range::getBorderAndTextQuads):
        (WebCore::Range::boundingRectInternal):
        (showTree):
        (WebCore::checkForDifferentRootContainer): Deleted.
        (WebCore::lengthOfContentsInNode): Deleted.
        (WebCore::Range::processNodes): Deleted.
        (WebCore::Range::checkNodeWOffset): Deleted.
        (WebCore::Range::checkNodeBA): Deleted.
        (WebCore::Range::setStartAfter): Deleted.
        (WebCore::Range::setEndBefore): Deleted.
        (WebCore::Range::setEndAfter): Deleted.
        (WebCore::Range::selectNode): Deleted.
        (WebCore::intervalsSufficientlyOverlap): Deleted.
        (WebCore::coalesceSelectionRects): Deleted.
        (WebCore::areRangesEqual): Deleted.
        (WebCore::boundaryTextNodesSplit): Deleted.
        (WebCore::Range::textNodeSplit): Deleted.
        (WebCore::Range::expand): Deleted.
        * dom/Range.h:
        (WebCore::Range::startContainer):
        (WebCore::Range::endContainer):
        (WebCore::Range::collapsed):
        (WebCore::Range::commonAncestorContainer):
        * dom/Range.idl:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult):
        (WebCore::AlternativeTextController::markReversed):
        (WebCore::AlternativeTextController::markCorrection):
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::AlternativeTextController::applyDictationAlternative):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        (WebCore::Editor::shouldDeleteRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::firstRectForRange):
        (WebCore::Editor::rangeOfString):
        (WebCore::Editor::countMatchesForText):
        (WebCore::Editor::scanRangeForTelephoneNumbers):
        (WebCore::isFrameInRange): Deleted.
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::unionDOMRanges):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::wordOffsetInRange):
        (WebCore::FrameSelection::spaceFollowsWordInRange):
        (WebCore::FrameSelection::selectionAtDocumentStart): Deleted.
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendText):
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellChecker::isCheckable):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        * editing/TextCheckingHelper.cpp:
        (WebCore::expandToParagraphBoundary):
        (WebCore::TextCheckingParagraph::offsetTo):
        (WebCore::TextCheckingParagraph::offsetAsRange):
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::node):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::CharacterIterator::range):
        (WebCore::characterSubrange):
        (WebCore::BackwardsCharacterIterator::range):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::TextIterator::getLocationAndLengthFromRange):
        (WebCore::collapsedToBoundary):
        (WebCore::findPlainText):
        (WebCore::BackwardsCharacterIterator::BackwardsCharacterIterator): Deleted.
        (WebCore::BackwardsCharacterIterator::advance): Deleted.
        (WebCore::plainText): Deleted.
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processText):
        (HTMLConverter::_traverseNode):
        (HTMLConverter::_traverseFooterNode):
        (HTMLConverterCaches::cacheAncestorsOfStartToBeConverted):
        (WebCore::editingAttributedStringFromRange):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::adjustedSelectionRange):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText):
        (WebCore::StyledMarkupAccumulator::stringValueForRange):
        (WebCore::highestAncestorToWrapMarkup):
        (WebCore::createMarkupInternal):
        (WebCore::createFullMarkup):
        (WebCore::urlToMarkup): Deleted.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::indexCountOfWordPrecedingSelection):
        (WebCore::Frame::wordsInCurrentParagraph):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeRangeToDataObject):
        (WebCore::Pasteboard::writeSelection):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRectForRange):

2015-08-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify showGlyphsWithAdvances
        https://bugs.webkit.org/show_bug.cgi?id=148565

        Reviewed by Dean Jackson.

        None of the fonts created for WebKit have the renderingMode of
        NSFontAntialiasedIntegerAdvancementsRenderingMode and are already printer fonts.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::setCGFontRenderingMode):
        (WebCore::FontCascade::drawGlyphs):

2015-08-31  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 find-in-page doesn't support multi-line results, is often blank
        https://bugs.webkit.org/show_bug.cgi?id=148599
        <rdar://problem/17914031>

        Reviewed by Beth Dakin.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        (WebCore::FrameSelection::getTextRectangles):
        * editing/FrameSelection.h:
        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:
        Make it possible to create a TextIndicator that isn't clipped to the visible rect,
        because iOS find-in-page TextIndicators persist while scrolling the page,
        and are already constrained to the document rect anyway.

2015-08-31  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Freetype] FontCache::strengthOfFirstAlias leaks an FcPattern
        https://bugs.webkit.org/show_bug.cgi?id=148624

        Reviewed by Martin Robinson.

        Using the normal RefPtr constructor causes the FcPattern to be reffed one extra time. Even
        though the FcPattern is intentionally leaked to FcFontSetAdd down below, the FcPattern has
        its own refcount and now it's screwed up. Just completely stop using RefPtr for these
        FcPatterns, since the potential for confusion regarding leakRef combined with Fontconfig
        refcounting far outweighs the benefit of using a smart pointer.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::strengthOfFirstAlias):

2015-08-31  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] auto-margins alignment does not work for heights
        https://bugs.webkit.org/show_bug.cgi?id=148071

        Reviewed by Sergio Villar Senin.

        We still had pending to align grid items horizontally via auto-margins
        alignment. We already landed a patch in r188582 to implement the
        column-axis alignment and this patch implements the expected behavior in
        the row-axis.

        This patch also removes the logic in RenderBox, so we reduce grid related
        code dependencies in the general layout logic. We can do that because this
        patch manages that in the layoutGridItems function by resetting grid item's
        margin and logicalTop (if it does not need to perform a layout, which it
        would do the job anyway).

        No new tests, we just need to adapt some cases of the ones we already have.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): Deleted.
        (WebCore::RenderBox::willBeRemovedFromTree): Deleted.
        (WebCore::RenderBox::updateFromStyle): Deleted.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::resetAutoMarginsAndLogicalTopInColumnAxis):
        (WebCore::RenderGrid::updateAutoMarginsInRowAxisIfNeeded):
        (WebCore::RenderGrid::updateAutoMarginsInColumnAxisIfNeeded):
        (WebCore::RenderGrid::hasAutoMarginsInRowAxis): Deleted.
        * rendering/RenderGrid.h:

2015-08-31  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * page/EventHandler.h:
        (WebCore::EventHandler::immediateActionStage): Don't export an inline function,
        to avoid "weak external symbol" errors.

2015-08-31  Enrica Casucci  <enrica@apple.com>

        Incorrect cursor movement for U+26F9, U+1F3CB with variations.
        https://bugs.webkit.org/show_bug.cgi?id=148629
        rdar://problem/22492366

        Reviewed by Ryosuke Niwa.

        Updating text break iterator rules to correctly handle those two emoji with variations.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):

2015-07-31  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Grid containers reporting wrong preferred widths
        https://bugs.webkit.org/show_bug.cgi?id=147486

        Reviewed by Darin Adler.

        RenderGrid used to have its own overwritten version of
        computePreferredLogicalWidths() because we didn't have an
        implementation of computeIntrinsicLogicalWidths(). That
        implementation was not as complete as RenderBlock's because it
        was not taking into account min/max-width restrictions.

        Provided that computeIntrinsicLogicalWidths() has been there
        for some time we can safelly kill our overwrite and use
        RenderBlock's version which addresses all the FIXMEs we had in
        our code.

        * rendering/RenderGrid.cpp:
        * rendering/RenderGrid.h:

2015-08-31  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix the WinCairo build after landing of webkit.org/b/148561.
        https://bugs.webkit.org/show_bug.cgi?id=148627

        Reviewed by Myles C. Maxfield.

        No new tests, no behavior change.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::paint):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-08-31  Antti Koivisto  <antti@apple.com>

        REGRESSION (r188820): fast/dom/HTMLObjectElement/object-as-frame.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=148533

        Reviewed by Chris Dumez.

        <object> element may cause document load event fire too early. By making data URL
        loading faster r188820 made this condition more likely to trigger in this test.

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

            Post-parsing style recalc may trigger loads for <object> elements. If all other loads have already
            completed this may cause load event to fire synchronously from the initial empty document construction.

            Fix by preventing load events during subframe initialization. They will be fired if needed by the
            subsequent explicit call to FrameLoader::checkCompleted.

2015-08-30  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Remove unnecessary two virtual methods from TiledBackingStoreClient
        https://bugs.webkit.org/show_bug.cgi?id=147137

        Reviewed by Gyuyoung Kim.

        tiledBackingStoreContentsRect() and tiledBackingStoreVisibleRect() are not
        necessary because CoordinatedGraphicsLayer can pass them directly if needed.
        This patch removes them in order to simplify code flow between TiledBackingStore
        and CoordinatedGraphicsLayer.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::imageBackingVisible):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
        (WebCore::clampToContentsRectIfRectIsInfinite):
        (WebCore::CoordinatedGraphicsLayer::transformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreContentsRect): Deleted.
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTilesIfNeeded):
        (WebCore::TiledBackingStore::coverageRatio):
        (WebCore::TiledBackingStore::visibleAreaIsCovered):
        Used TiledBackingStore's m_visibleRect and m_rect, cached and scaled values for
        visibleRect, contentsRect.
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::removeAllNonVisibleTiles):
        (WebCore::TiledBackingStore::coverWithTilesIfNeeded): Renamed to createTilesIfNeeded.
        (WebCore::TiledBackingStore::visibleRect): Deleted. nobody used.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:
        (WebCore::TiledBackingStoreClient::tiledBackingStoreHasPendingTileCreation):
        Removed default implementation.

2015-08-29  Jessie Berlin  <berlin@apple.com>

        El Capitan build fix.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):

2015-08-29  Chris Fleizach  <cfleizach@apple.com>

        AX: When navigating the elements of a scrollable element with VoiceOver, the scrollTop() position of the element does not permanently change
        https://bugs.webkit.org/show_bug.cgi?id=125720

        Reviewed by Daniel Bates.

        The scrollToVisible code did not account for scrollable elements that are larger than their viewports.
        First, we need to pass the sub-focus up the scroll chain (otherwise we'll scroll some parent to y=0).
        Second, we should try to center the focus within the viewport, rather than positioning at the bottom for a 
        better experience.

        This change was adapted from Blink r183926:
        https://src.chromium.org/viewvc/blink?view=rev&revision=183926

        Tests: accessibility/scroll-to-global-point-iframe-nested.html
               accessibility/scroll-to-global-point-iframe.html
               accessibility/scroll-to-global-point-main-window.html
               accessibility/scroll-to-global-point-nested.html
               accessibility/scroll-to-make-visible-div-overflow.html
               accessibility/scroll-to-make-visible-iframe.html
               accessibility/scroll-to-make-visible-nested-2.html
               accessibility/scroll-to-make-visible-nested.html
               accessibility/scroll-to-make-visible-with-subfocus.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::computeBestScrollOffset):
        (WebCore::AccessibilityObject::isOnscreen):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        (WebCore::AccessibilityObject::scrollToGlobalPoint):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityScrollToVisible]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollToMakeVisibleWithSubFocus:]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollToGlobalPoint:]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):

2015-08-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate GraphicsContexts from pointers to references
        https://bugs.webkit.org/show_bug.cgi?id=148561

        Reviewed by Tim Horton.

        We were using GraphicsContext*s throughout our rendering code. However,
        these contexts can't be nullptr. This patch migrates users to
        GraphicsContext&s.

        This is a purely mechanical change.

        No new tests because there is no behavior change.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::paintCaret):
        (WebCore::CaretBase::paintCaret):
        (WebCore::DragCaretController::paintDragCaret):
        * editing/FrameSelection.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::drawingContext):
        * html/HTMLCanvasElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext):
        * html/HTMLVideoElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::drawImageIntoBuffer):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        (WebCore::FrameView::paintScrollbar):
        (WebCore::FrameView::paintControlTints):
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::paintContentsForSnapshot):
        (WebCore::FrameView::paintOverhangAreas):
        (WebCore::FrameView::adjustPageHeightDeprecated):
        * page/FrameView.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolPage):
        (WebCore::PrintContext::spoolRect):
        * page/win/FrameCGWin.cpp:
        (WebCore::drawRectIntoContext):
        (WebCore::imageFromRect):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintScrollCorner):
        (WebCore::ScrollView::paintScrollbar):
        (WebCore::ScrollView::paintScrollbars):
        (WebCore::ScrollView::paintPanScrollIcon):
        (WebCore::ScrollView::paint):
        (WebCore::ScrollView::paintOverhangAreas):
        (WebCore::ScrollView::calculateAndPaintOverhangAreas):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner):
        (WebCore::ScrollbarTheme::defaultPaintScrollCorner):
        (WebCore::ScrollbarTheme::paintOverhangAreas):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner):
        (WebCore::ScrollbarThemeComposite::paintOverhangAreas):
        * platform/ScrollbarThemeComposite.h:
        * platform/Theme.cpp:
        (WebCore::Theme::drawNamedImage):
        * platform/Theme.h:
        (WebCore::Theme::paint):
        * platform/Widget.h:
        * platform/cocoa/ThemeCocoa.cpp:
        (WebCore::fitContextToBox):
        (WebCore::ThemeCocoa::drawNamedImage):
        * platform/cocoa/ThemeCocoa.h:
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::paint):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::drawCrossfade):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText):
        (WebCore::FontCascade::drawEmphasisMarks):
        (WebCore::FontCascade::drawSimpleText):
        (WebCore::FontCascade::drawEmphasisMarksForSimpleText):
        (WebCore::FontCascade::drawGlyphBuffer):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawGlyphs):
        (WebCore::GraphicsContext::drawEmphasisMarks):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::createCompatibleBuffer):
        (WebCore::GraphicsContext::isCompatibleWithBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        (WebCore::Image::drawFrameMatchingSourceSize):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::paint):
        (WebCore::MediaPlayer::paintCurrentFrameInContext):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::paintCurrentFrameInContext):
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::adjustBlurRadius):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
        (WebCore::ShadowBlur::beginShadowLayer):
        (WebCore::ShadowBlur::endShadowLayer):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/TextRun.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationCF::paint):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsToContext):
        (WebCore::drawGlyphsShadow):
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::drawComplexText):
        (WebCore::FontCascade::drawEmphasisMarksForComplexText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        (WebCore::fillCurrentCairoPath):
        (WebCore::shadowAndFillCurrentCairoPath):
        (WebCore::shadowAndStrokeCurrentCairoPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::flushContext):
        (WebCore::ImageBuffer::copyNativeImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::cacheParametersMatch):
        (WebCore::transformContextForPainting):
        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
        (WebCore::PDFDocumentImage::draw):
        (WebCore::applyRotationForPainting):
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        (WebCore::showGlyphsWithAdvances):
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::FontCascade::drawComplexText):
        (WebCore::FontCascade::drawEmphasisMarksForComplexText):
        * platform/graphics/efl/ImageBufferEfl.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::createImageBufferResult): Deleted.
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::platformApplySoftware):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::platformApplySoftware):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::paint):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateQTKit::paint):
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::FontCascade::drawComplexText):
        (WebCore::FontCascade::drawEmphasisMarksForComplexText):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/LocalWindowsContext.h:
        (WebCore::LocalWindowsContext::LocalWindowsContext):
        (WebCore::LocalWindowsContext::~LocalWindowsContext):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::paint):
        * platform/ios/WidgetIOS.mm:
        (WebCore::Widget::paint):
        * platform/mac/DragImageMac.mm:
        (WebCore::drawAtPoint):
        * platform/mac/LocalCurrentGraphicsContext.h:
        (WebCore::ContextContainer::ContextContainer):
        * platform/mac/LocalCurrentGraphicsContext.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::cgContext):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        (WebCore::ThemeMac::paint):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::paint):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::ScrollbarThemeWin::paintThumb):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::paint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::inputContext):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/FilterEffectRenderer.h:
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/ImageQualityController.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::context):
        (WebCore::PaintInfo::setContext):
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintCaret):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::paintColumnRules):
        (WebCore::RenderBlockFlow::clipOutFloatingObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintClippingMask):
        (WebCore::RenderBox::paintMaskImages):
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::shouldPaintAtLowQuality):
        (WebCore::RenderBoxModelObject::clipRoundedInnerRect):
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::clipBorderSideForComplexInnerPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        (WebCore::RenderBoxModelObject::shouldAntialiasLines):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        (WebCore::drawReplacementArrow):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::drawPlatformResizerImage):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::hasFilterThatIsPainting):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::applyFilters):
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintLayerByApplyingTransform):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintScrollbar):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addPDFURLRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::paintToggle):
        (WebCore::renderButton):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::paintGdkPixbuf):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintCapsLockIndicator):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::paintSpinArrowButton):
        (WebCore::RenderThemeGtk::paintMediaButton):
        (WebCore::RenderThemeGtk::paintMediaFullscreenButton):
        (WebCore::RenderThemeGtk::paintMediaMuteButton):
        (WebCore::RenderThemeGtk::paintMediaPlayButton):
        (WebCore::RenderThemeGtk::paintMediaSeekBackButton):
        (WebCore::RenderThemeGtk::paintMediaSeekForwardButton):
        (WebCore::RenderThemeGtk::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::addRoundedBorderClip):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintTextFieldDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintSliderThumbDecorations):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::RenderThemeIOS::paintPushButtonDecorations):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        (WebCore::RenderThemeMac::paintAttachment):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::paintButton):
        (WebCore::RenderThemeSafari::paintTextField):
        (WebCore::RenderThemeSafari::paintCapsLockIndicator):
        (WebCore::RenderThemeSafari::paintTextArea):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButtonDecorations):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        (WebCore::RenderThemeSafari::paintSearchField):
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):
        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintInnerSpinButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButtonDecorations):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        (WebCore::RenderThemeWin::paintMeter):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineSelectionGap):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paintGlyph):
        (WebCore::RenderMathMLOperator::fillWithVerticalExtensionGlyph):
        (WebCore::RenderMathMLOperator::fillWithHorizontalExtensionGlyph):
        (WebCore::RenderMathMLOperator::paint):
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::paint):
        * rendering/style/NinePieceImage.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::fillShape):
        (WebCore::RenderSVGEllipse::strokeShape):
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::useStrokeStyleToFill):
        (WebCore::RenderSVGPath::strokeShape):
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::fillShape):
        (WebCore::RenderSVGRect::strokeShape):
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::applyViewportClip):
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillShape):
        (WebCore::RenderSVGShape::strokeShape):
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        (WebCore::RenderSVGShape::paint):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paintSelectionBackground):
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::prepareGraphicsContextForTextPainting):
        (WebCore::SVGInlineTextBox::paintDecoration):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        (WebCore::SVGInlineTextBox::paintTextWithShadows):
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer): Deleted.
        * rendering/svg/SVGRenderingContext.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::drawPatternForContainer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2015-08-28  Alexey Proskuryakov  <ap@apple.com>

        Update bindings test results after
        https://bugs.webkit.org/show_bug.cgi?id=148591

        JSCallbackData::invokeCallback() should return the Exception to the caller

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithNoParam):
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackWithStringList):
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp:
        (WebCore::JSTestCallbackFunction::callbackWithNoParam):
        (WebCore::JSTestCallbackFunction::callbackWithArrayParam):
        (WebCore::JSTestCallbackFunction::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallbackFunction::callbackWithStringList):
        (WebCore::JSTestCallbackFunction::callbackWithBoolean):
        (WebCore::JSTestCallbackFunction::callbackRequiresThisToPass):

2015-08-28  Chris Dumez  <cdumez@apple.com>

        JSCallbackData::invokeCallback() should return the Exception to the caller
        https://bugs.webkit.org/show_bug.cgi?id=148591

        Reviewed by Mark Lam.

        JSCallbackData::invokeCallback() calls a callback function. If this
        function throws an exception, it will report it and clear it on the VM.
        However, in the case of NodeFilter, the DOM specification clearly states
        that we are supposed to rethrow the exception [1].

        Once way to support this is to have JSCallbackData::invokeCallback()
        return the Exception to the caller and let the caller decide what to do
        with it (i.e. report it or rethrow it).

        There is no actual behavior change in this patch. This slight
        refactoring is in preparation for Bug 148415.

        [1] https://dom.spec.whatwg.org/#traversal

        Some more context at:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=17713#c16

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementation):

2015-08-28  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Remove unused CSSBasicShape::m_referenceBox
        https://bugs.webkit.org/show_bug.cgi?id=148588

        Reviewed by Zoltan Horvath.

        At some point, the code was refactored to no longer store the
        referenceBox in CSSBasicShape; however, it looks like this code
        wasn't cleaned up. This patch rectifies this.

        This is based on a Blink patch by Timothy Loh.

        No new tests, removing unused code.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildPolygonString):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::buildInsetString):
        (WebCore::CSSBasicShapeInset::cssText):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::referenceBox): Deleted.
        (WebCore::CSSBasicShape::setReferenceBox): Deleted.

2015-08-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Restructure WebMediaSessionManager for testing
        https://bugs.webkit.org/show_bug.cgi?id=148593

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::mediaProducerStateString): Add some missing states.
        (WebCore::webMediaSessionManagerOverride): New.
        (WebCore::WebMediaSessionManager::singleton): New.
        (WebCore::WebMediaSessionManager::setWebMediaSessionManagerOverride): New, will allow runtime
          registration of a mock manager.
        * Modules/mediasession/WebMediaSessionManager.h:

        * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:
        (WebCore::WebMediaSessionManager::platformManager): Renamed from singleton.
        (WebCore::WebMediaSessionManagerMac::singleton): Deleted.
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.h:

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Add WebKit/WebKit2 settings to control automatic data loading
        https://bugs.webkit.org/show_bug.cgi?id=148579

        Reviewed by Anders Carlsson.

        Move the automatic and metadata restrictions from PlatformMediaSessionManager (where access
        to Settings is unavailable) to MediaElementSession (where it is available). Add properties
        to Settings so that clients can control this behavior at runtime. Move these restrictions
        between the two Internals functions which can set them for testing purposes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::effectivePreloadForElement):
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementRestrictions):
        (WebCore::Internals::setMediaSessionRestrictions): Deleted.

2015-08-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Move std::function from JSFunction into NativeStdFunctionCell to correctly destroy the heap allocated std::function
        https://bugs.webkit.org/show_bug.cgi?id=148262

        Reviewed by Filip Pizlo.

        No behavior change.

        Change JSFunction::create to JSNativeStdFunction::create to explicitly create the JSNativeStdFunction with the C++ lambda.

        * ForwardingHeaders/runtime/JSNativeStdFunction.h: Added.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::createStartResultFulfilledFunction):
        (WebCore::createPullResultFulfilledFunction):
        (WebCore::createCancelResultFulfilledFunction):
        (WebCore::createCancelResultRejectedFunction):
        (WebCore::ReadableJSStream::ReadableJSStream):

2015-08-28  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Create WebAssembly functions
        https://bugs.webkit.org/show_bug.cgi?id=148373

        Reviewed by Filip Pizlo.

        No new tests, because it is a function rename.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Make the AllowsInlineMediaPlayback preference work in WebKit / WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=147512

        Reviewed by Anders Carlsson.

        Updated existing tests to use the Setting rather than the Behavior Restriction.

        Get rid of the sessionRestrictsInlineVideoPlayback() method and the InlineVideoPlaybackRestricted
        restriction. Instead, just use the allowsInlineMediaPlayback() setting, and require
        WebKit and WebKitLegacy clients to initialize the setting appropriately.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback): Deleted.
        * page/Settings.cpp: Add a new inlineMediaPlaybackRequiresPlaysInlineAttribute setting.
        * page/Settings.in: Ditto.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionRestrictsInlineVideoPlayback): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Deleted.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Backup the allowsInlineMediaPlayback() setting value.
        (WebCore::InternalSettings::Backup::restoreTo): Restore same.
        (WebCore::InternalSettings::setAllowsInlineMediaPlayback): Set allowsInlineMediaPlayback().
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Deleted.

2015-08-28  Eric Carlson  <eric.carlson@apple.com>

        Media Session: MediaSession.releaseSession() renamed to deactivate()
        https://bugs.webkit.org/show_bug.cgi?id=148578

        Reviewed by Jer Noble.

        No new tests, media/session/releasing-sessions.html was updated for the change.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::deactivate): Renamed from releaseSession.
        (WebCore::MediaSession::releaseSession): Deleted.
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSession.idl:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSession): releaseSession -> deactivate.

2015-08-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Separate creating a style sheet from adding a new rule in the protocol
        https://bugs.webkit.org/show_bug.cgi?id=148502

        Reviewed by Timothy Hatcher.

        Tests: inspector/css/createStyleSheet.html
               inspector/css/manager-preferredInspectorStyleSheetForFrame.html

        * inspector/InspectorCSSAgent.h:
        Allow for multiple inspector style sheets per document.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::createStyleSheet):
        (WebCore::InspectorCSSAgent::createInspectorStyleSheetForDocument): Added.
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet): Deleted.
        Extract and generalize creating a via-inspector stylesheet here.

        (WebCore::InspectorCSSAgent::addRule):
        Lookup stylesheet to add a rule to via the provided stylesheet id.

        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        Update to account for a list of stylesheets per document instead of one.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        [Mac] Right-clicking on GIFs spins the UI process for a while
        https://bugs.webkit.org/show_bug.cgi?id=148566
        <rdar://problem/22460854>

        Reviewed by Brady Eidson.

        * platform/ContextMenuItem.h:
        Properly mark this as Mac-only. It's only implemented in ContextMenuItemMac.

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::shareMenuItem):
        Take a NSImage directly, so we don't have to round-trip through BitmapImage,
        which can be lossy and expensive.

2015-08-28  Brady Eidson  <beidson@apple.com>

        Use new CFNetwork cookie jar SPI only on El Capitan.
        https://bugs.webkit.org/show_bug.cgi?id=148574 and rdar://problem/22460752

        Reviewed by David Kilzer.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM): Use OS X version to decide which API/SPI to use.
        * platform/spi/cf/CFNetworkSPI.h: Forward declare the SPI

2015-08-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Draw fonts at their native sizes instead of scaling a 1pt font
        https://bugs.webkit.org/show_bug.cgi?id=146045

        Reviewed by Darin Adler.

        In his WWDC talk[1], Antonio Cavedoni describes how painting a font at a particular point size
        may yield different visual results than painting a font at a 1pt size into a scaled context.
        However, this is something that we currently do in WebKit. This patch migrates from this
        behavior to instead drawing text at the appropriate point size.

        [1] https://developer.apple.com/videos/wwdc/2015/?id=804

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):

2015-08-27  Zalan Bujtas  <zalan@apple.com>

        Tiny cleanup in RenderLayer::enclosingCompositingLayerForRepaint()
        https://bugs.webkit.org/show_bug.cgi?id=148541

        Reviewed by Tim Horton.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::compositingContainer):
        (WebCore::compositedWithOwnBackingStore):
        (WebCore::RenderLayer::enclosingCompositingLayer):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint):
        (WebCore::RenderLayer::enclosingFilterRepaintLayer):
        (WebCore::RenderLayer::clippingRootForPainting):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::descendantLayerPaintsIntoAncestor):

2015-08-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r189079.
        https://bugs.webkit.org/show_bug.cgi?id=148555

        broke the build (Requested by jessieberlin on #webkit).

        Reverted changeset:

        "Create WebAssembly functions"
        https://bugs.webkit.org/show_bug.cgi?id=148373
        http://trac.webkit.org/changeset/189079

2015-08-27  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Create WebAssembly functions
        https://bugs.webkit.org/show_bug.cgi?id=148373

        Reviewed by Geoffrey Garen.

        No new tests because it's a function rename.

        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2015-08-27  Chris Dumez  <cdumez@apple.com>

        A WebIDL callback interface is allowed to have constants
        https://bugs.webkit.org/show_bug.cgi?id=148449

        Reviewed by Geoffrey Garen.

        Our JS bindings generator is now able to:
        1. Handle IDL constants [1] on a callback interfaces [2] and generate
           a DOMConstructorObject subclass with static properties for
           these constants [3].
        2. Generate a property on the global object for callback interfaces
           that have constants and do not have the [NoInterfaceObject] IDL
           extended attribute [4].

        This is a pre-requirement for Bug 148415 as NodeFilter [5] has constants
        and should be a callback interface. Once NodeFilter is ported to be
        a callback interface, the JS still needs to be able to access
        window.NodeFilter.SHOW_ALL for e.g.

        [1] https://heycam.github.io/webidl/#dfn-constant
        [2] https://heycam.github.io/webidl/#dfn-callback-interface
        [3] https://heycam.github.io/webidl/#NoInterfaceObject
        [4] https://heycam.github.io/webidl/#es-interfaces
        [5] https://dom.spec.whatwg.org/#interface-nodefilter

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeader):
        (GenerateCallbackImplementation):
        (GenerateConstructorHelperMethods):
        (ConstructorHasProperties): Deleted.
        * bindings/scripts/preprocess-idls.pl:
        (getInterfaceExtendedAttributesFromIDL):
        (interfaceHasConstantAttribute):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallbackConstructor::create):
        (WebCore::JSTestCallbackConstructor::createStructure):
        (WebCore::JSTestCallbackConstructor::JSTestCallbackConstructor):
        (WebCore::JSTestCallbackConstructor::finishCreation):
        (WebCore::JSTestCallback::getConstructor):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/TestCallback.idl:

2015-08-27  Chris Dumez  <cdumez@apple.com>

        Range.compareBoundaryPoints() should throw a NotSupportedError for invalid compareHow values
        https://bugs.webkit.org/show_bug.cgi?id=148483

        Reviewed by Geoffrey Garen.

        Range.compareBoundaryPoints() should throw a NotSupportedError for
        invalid compareHow values:
        https://dom.spec.whatwg.org/#dom-range-compareboundarypoints (step 1)

        Firefox and Chrome conform to the specification already.

        Previously, WebKit would not throw and simply cast the value to our
        internal CompareHow enum type. This patch aligns WebKit's behavior with
        the DOM specificaiton and other browsers.

        W3C test suite:
        http://w3c-test.org/dom/ranges/Range-compareBoundaryPoints.html

        Test: fast/dom/Range/compareBoundaryPoints-compareHow-exception.html

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        Drop CompareHow special casing from bindings generator as we now use
        unsigned short instead in the IDL.

        * dom/Range.cpp:
        (WebCore::Range::compareBoundaryPointsForBindings):
        * dom/Range.h:
        * dom/Range.idl:
        Use "unsigned short" type instead of WebCore's CompareHow for the
        parameter, as per the specification. On implementation side, we
        now validate the compareHow value before casting it to a CompareHow
        enum type. If the value is not value, we throw and abort early.

2015-08-27  Joseph Pecoraro  <pecoraro@apple.com>

        Page does not update when <link> media attribute changes to no longer apply to page
        https://bugs.webkit.org/show_bug.cgi?id=148392

        Reviewed by Antti Koivisto.

        Test: fast/css/link-media-attr.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        When the media attribute changes, recalculate styles if the link is not disabled.

2015-08-27  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Text jumps sometimes on naughty strings page
        https://bugs.webkit.org/show_bug.cgi?id=148399
        rdar://problem/22212568

        Reviewed by Antti Koivisto.

        The x position we set for tab characters during painting should
        be the same as if it was set by the inline box tree painting.

        Inline box tree computes the distance from the rootbox for each line
        and sets this value as the xPos for the TextRun.
        Currently simple line layout does not support cases where a line
        would have an offset, so this value is always 0.

        Test: fast/text/whitespace/simple-line-layout-tab-position.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2015-08-27  Alex Christensen  <achristensen@webkit.org>

        Isolate Source directories in CMake build
        https://bugs.webkit.org/show_bug.cgi?id=148389

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Use the forwarding header copy of the inspector scripts to avoid requiring JavaScriptCore directory to exist.
        * PlatformAppleWin.cmake:
        Add AVFoundation sources to build.
        * PlatformEFL.cmake:
        Moved WebKitVersion.h generating from CMakeLists.txt because it is now only used in WebCore by EFL.
        * PlatformWin.cmake:
        Include ../include/private to find forwarding headers in internal build.

2015-08-27  Alex Christensen  <achristensen@webkit.org>

        [Win CMake] Fix incremental build after r188673
        https://bugs.webkit.org/show_bug.cgi?id=148539

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * PlatformWin.cmake:
        Use xcopy as a build step instead of file(COPY ...) to copy updated headers.

2015-08-27  Timothy Horton  <timothy_horton@apple.com>

        Factor out Lookup invocation
        https://bugs.webkit.org/show_bug.cgi?id=148509

        Reviewed by Anders Carlsson.

        There's a ton of duplicated code in legacy and modern WebKit to talk to
        Lookup. And, it's pretty messy. As a first step to making it less messy,
        make it so we only have it in one place instead of four (or two).

        * editing/DictionaryPopupInfo.h:
        Move DictionaryPopupInfo into WebCore. This was duplicated
        in both legacy and modern WebKit.

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection):
        (WebCore::DictionaryLookup::rangeAtHitTestResult):
        (WebCore::DictionaryLookup::stringForPDFSelection):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::showPopup):
        (WebCore::DictionaryLookup::hidePopup):
        (WebCore::DictionaryLookup::animationControllerForPopup):
        (WebCore::rangeForDictionaryLookupForSelection): Deleted.
        (WebCore::rangeForDictionaryLookupAtHitTestResult): Deleted.
        (WebCore::dictionaryLookupForPDFSelection): Deleted.
        Move DictionaryLookup stuff into a class for better names.

        Move showPopup, hidePopup, and animationControllerForPopup here.
        showPopup and animationControllerForPopup both bottleneck through
        a single function, where previously we duplicated all of the code
        for both of them, and in both legacy and modern WebKit.

        showPopup and animationControllerForPopup take a block that they *may*
        call if we have support for overriding Lookup's indicator with TextIndicator,
        because the installation process is different per WebKit.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
        * testing/Internals.cpp:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation):
        Adjust to the new naming.

2015-08-27  Jon Davis  <jond@apple.com>

        Add IndexedDB to the feature status page.
        https://bugs.webkit.org/show_bug.cgi?id=148094

        Reviewed by Timothy Hatcher.

        * features.json:

2015-08-27  Anders Carlsson  <andersca@apple.com>

        REGRESSION (r188987): imported/mozilla/svg/filters/feConvolveMatrix-1.svg fails
        https://bugs.webkit.org/show_bug.cgi?id=148497
        <rdar://problem/22459541>

        Reviewed by Andy Estes.

        Don't return early if iterations is 0.

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

2015-08-27  Antti Koivisto  <antti@apple.com>

        Decode redirected data URLs in web process
        https://bugs.webkit.org/show_bug.cgi?id=148386

        Reviewed by Zalan Bujtas.

        Redirected data URLs still end up to networking layer for decoding. Handle them locally as well.

        Covered by existing tests.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::~ResourceLoader):
        (WebCore::ResourceLoader::finishNetworkLoad):

            Factor to a function.

        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequestInternal):

            When receiving redirect to a data URL end the network load and decode it locally.

        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:

2015-08-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Generic font families do not consult with the user's preferred language
        https://bugs.webkit.org/show_bug.cgi?id=148499
        <rdar://problem/22407296>

        Reviewed by Antti Koivisto.

        When WebKit encounters markup like lang="zh" style="font-family: sans-serif;"
        we currently always use Simplified Chinese fonts. However, the user may
        have specifically selected Traditional Chinese in their user preferences.
        In this absence of other signals, we should consult with the user
        preferences when determining which font to pick.

        Tests: fast/text/international/generic-font-family-language-simplified.html
               fast/text/international/generic-font-family-language-traditional.html

        * platform/Language.cpp:
        (WebCore::observerMap):
        (WebCore::overrideUserPreferredLanguages):
        * platform/graphics/FontGenericFamilies.cpp:
        (WebCore::computeUserPrefersSimplified):
        (WebCore::cachedUserPrefersSimplified):
        (WebCore::languageChanged):
        (WebCore::genericFontFamilyForScript):
        (WebCore::FontGenericFamilies::FontGenericFamilies):
        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::scriptNameToCode):

2015-08-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Update Grid Layout to use fewer magic -1s
        https://bugs.webkit.org/show_bug.cgi?id=148505

        Reviewed by Javier Fernandez.

        After r188873, there were still some -1s left in Grid Layout code. This patch cleans them
        up after consulting with Javier Fernandez.

        No new tests because there is no behavior change.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):

2015-08-27  Brian Burg  <bburg@apple.com>

        Web Inspector: FrontendChannel should know its own connection type
        https://bugs.webkit.org/show_bug.cgi?id=148482

        Reviewed by Joseph Pecoraro.

        To prepare for multiple attached frontends, the frontend connection should
        be able to report its type rather than explicitly setting connection type
        via a getter.

        No behavior change, no new tests.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::hasLocalFrontend): Ask the channel what it is.
        (WebCore::InspectorController::hasRemoteFrontend): Ask the channel what it is.
        (WebCore::InspectorController::connectFrontend): Use hasRemoteFrotend().
        (WebCore::InspectorController::disconnectFrontend): Use hasRemoteFrontend().
        (WebCore::InspectorController::InspectorController): Deleted.
        * inspector/InspectorController.h: Initialize a few members here.
        (WebCore::InspectorController::hasFrontend): Deleted, it was unused.
        (WebCore::InspectorController::setHasRemoteFrontend): Deleted.
        * inspector/WorkerInspectorController.cpp:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        * testing/Internals.cpp: Add connectionType().

2015-08-27  Eric Carlson  <eric.carlson@apple.com>

        Media Session: MediaSession constructor 'kind' argument optional
        https://bugs.webkit.org/show_bug.cgi?id=148527

        Reviewed by Jer Noble.

        No new tests, updated media/session/session-creation.html.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::parseKind): Treat null kind "content".
        (WebCore::MediaSession::MediaSession): Delete Document* version.
        * Modules/mediasession/MediaSession.h: Make constructor private.
        * Modules/mediasession/MediaSession.idl:

        * WebCore.xcodeproj/project.pbxproj: Add JSMediaSessionCustom.cpp.

        * bindings/js/JSMediaSessionCustom.cpp: Added.
        (WebCore::constructJSMediaSession):

        * dom/Document.cpp:
        (WebCore::Document::defaultMediaSession): Call MediaSession::create.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::session): Compare session with document.defaultMediaSession, not
          its kind.
        (WebCore::HTMLMediaElement::setSession): Update comments.

2015-08-27  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use float types wherever possible to match line tree.
        https://bugs.webkit.org/show_bug.cgi?id=148444

        Reviewed by Antti Koivisto.

        To match inline tree output, we should try to match the data types as far as precision goes.

        This patch also fixes the confusing mismatch between Run::baseline().x() and Run::rect().x(). 
        They are both supposed to return the left edge of the run. However Run::rect().x() returns a rounded
        LayoutUnit of the logical left, while Run::baseline().x() returns the correct logical left.          
        With this patch 
          1. baseline position does not include logical left anymore.
          2. Run::rect().x() does not round the logical left coordinate anymore.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeSimpleLine):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::collectAbsoluteRects):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::linePosition):
        (WebCore::SimpleLineLayout::lineSize):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::baselinePosition): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline): Deleted.
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::baselinePosition):
        (WebCore::SimpleLineLayout::RunResolver::Run::computeBaselinePosition):

2015-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel positioned iframe's repaint area calculation problem.
        https://bugs.webkit.org/show_bug.cgi?id=148422

        When the repaint rect position is floored for iframes, we need
        to expand the size so that it still covers the content.

        Reviewed by Simon Fraser.

        Test: fast/repaint/content-inside-subpixel-positioned-iframe.html

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

2015-08-27  Enrica Casucci  <enrica@apple.com>

        Add some new emoji with modifiers and new sequence.
        https://bugs.webkit.org/show_bug.cgi?id=148202
        rdar://problem/21849857

        Reviewed by Sam Weinig.

        Adding support for some new emoji with modifiers and
        one new emoji sequence.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):
        * platform/text/CharacterProperties.h:
        (WebCore::isEmojiGroupCandidate):
        (WebCore::isEmojiModifier):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):

2015-08-27  Dean Jackson  <dino@apple.com>

        Initial infrastructure of media controls testing
        https://bugs.webkit.org/show_bug.cgi?id=148426
        <rdar://problem/22417286>

        Reviewed by Eric Carlson.

        Expose a JS API from Internals that allows a layout test
        to ask the controls instance what it thinks it is
        doing.

        Test: media/controls/basic.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.getCurrentControlsStatus): New method. Currently
        returns a simple JSON string.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus): Call into
        the controls instance.
        * html/HTMLMediaElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentMediaControlsStatusForElement): Link
        between the Internals API and the HTMLMediaElement.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-08-27  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL] Move RenderThemeEfl.cpp|h from WebCore/platform/efl to WebCore/rendering
        https://bugs.webkit.org/show_bug.cgi?id=148511

        Reviewed by Csaba Osztrogonác.

        To be aligned with other ports, move RenderThemeEfl.cpp|h to WebCore/rendering.

        Additionally this patch fixes style errors in RenderThemeEfl.cpp

        * PlatformEfl.cmake:
        * rendering/RenderThemeEfl.cpp: Renamed from Source/WebCore/platform/efl/RenderThemeEfl.cpp.
        (WebCore::toEdjeGroup):
        (WebCore::setSourceGroupForEdjeObject):
        (WebCore::RenderThemeEfl::adjustSizeConstraints):
        (WebCore::isFormElementTooLargeToDisplay):
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::reuse):
        (WebCore::RenderThemeEfl::getThemePartFromCache):
        (WebCore::RenderThemeEfl::clearThemePartCache):
        (WebCore::RenderThemeEfl::applyEdjeStateFromForm):
        (WebCore::RenderThemeEfl::applyEdjeRTLState):
        (WebCore::RenderThemeEfl::isControlStyled):
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::RenderThemeEfl::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::applyColorCallback):
        (WebCore::fillColorsFromEdjeClass):
        (WebCore::RenderThemeEfl::setColorFromThemeClass):
        (WebCore::RenderThemeEfl::setThemePath):
        (WebCore::RenderThemeEfl::themePath):
        (WebCore::RenderThemeEfl::loadTheme):
        (WebCore::RenderThemeEfl::applyPartDescriptionFallback):
        (WebCore::RenderThemeEfl::applyPartDescription):
        (WebCore::RenderThemeEfl::applyPartDescriptionsFrom):
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::~RenderThemeEfl):
        (WebCore::supportsFocus):
        (WebCore::RenderThemeEfl::supportsFocusRing):
        (WebCore::RenderThemeEfl::controlSupportsTints):
        (WebCore::RenderThemeEfl::baselinePosition):
        (WebCore::RenderThemeEfl::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeEfl::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeEfl::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeEfl::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeEfl::platformFocusRingColor):
        (WebCore::RenderThemeEfl::supportsSelectionForegroundColors):
        (WebCore::RenderThemeEfl::paintSliderTrack):
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbSize):
        (WebCore::RenderThemeEfl::sliderTickSize):
        (WebCore::RenderThemeEfl::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeEfl::sliderTickSnappingThreshold):
        (WebCore::RenderThemeEfl::supportsDataListUI):
        (WebCore::RenderThemeEfl::paintSliderThumb):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::paintCheckbox):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::paintRadio):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::paintButton):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::paintMenuList):
        (WebCore::RenderThemeEfl::adjustMenuListButtonStyle):
        (WebCore::RenderThemeEfl::paintMenuListButtonDecorations):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::paintTextField):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::paintTextArea):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationPartStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldCancelButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::paintSearchField):
        (WebCore::RenderThemeEfl::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeEfl::paintInnerSpinButton):
        (WebCore::RenderThemeEfl::setDefaultFontSize):
        (WebCore::RenderThemeEfl::updateCachedSystemFontDescription):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        (WebCore::RenderThemeEfl::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeEfl::animationDurationForProgressBar):
        (WebCore::RenderThemeEfl::paintProgressBar):
        (WebCore::RenderThemeEfl::mediaControlsStyleSheet):
        (WebCore::RenderThemeEfl::mediaControlsScript):
        * rendering/RenderThemeEfl.h: Renamed from Source/WebCore/platform/efl/RenderThemeEfl.h.

2015-08-26  Mark Lam  <mark.lam@apple.com>

        watchdog m_didFire state erroneously retained.
        https://bugs.webkit.org/show_bug.cgi?id=131082

        Reviewed by Geoffrey Garen.

        No new tests.  The new code is covered by the JSC API tests and an existing test:
        fast/workers/worker-terminate-forever.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        - Always create a watchdog for the Web Worker's VM.  We need this in order to support
          Worker.terminate().
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isTerminatingExecution):
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::isExecutionTerminating): Deleted.
        * bindings/js/WorkerScriptController.h:

2015-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] PerformanceTest Layout/RegionsShapes.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=148464

        Reviewed by Andy Estes.

        The test is failing because Core Text emits a warning message when you use CTFontCreateWithName()
        and it cannot find the name you provide. However, this is exactly the situation we are creating
        (by attempting to auto-activate a font if we could not otherwise find it). The fix is to simply
        not use that API function in favor of using CTFontCreateWithFontDescriptor(), which does not emit
        a warning message..

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::autoActivateFont):
        (WebCore::FontCache::createFontPlatformData):

2015-08-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Implement tracking of active stylesheets in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=105828

        Reviewed by Timothy Hatcher.

        Tests: inspector/css/stylesheet-events-basic.html
               inspector/css/stylesheet-events-imports.html
               inspector/css/stylesheet-events-inspector-stylesheet.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::documentDetachedImpl):
        (WebCore::InspectorInstrumentation::activeStyleSheetsUpdatedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::documentDetached):
        (WebCore::InspectorInstrumentation::activeStyleSheetsUpdated):
        New hooks for when a document is detached or a document's style sheets are updated.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        Inform the inspector so the CSSAgent can remove document related data.

        * dom/DocumentStyleSheetCollection.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        Inform the inspector so the CSSAgent can push stylesheet related events.

        (WebCore::DocumentStyleSheetCollection::activeStyleSheetsForInspector): Added.
        CSSStyleSheets for the inspector include non-disabled author stylesheets
        even if they are empty.

        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::reset):
        (WebCore::InspectorCSSAgent::documentDetached):
        Handling for the new list of known document to CSSStyleSheets map.

        (WebCore::InspectorCSSAgent::enable):
        When the CSS domain is enabled, tell the frontend about known stylesheets.

        (WebCore::InspectorCSSAgent::activeStyleSheetsUpdated):
        (WebCore::InspectorCSSAgent::setActiveStyleSheetsForDocument):
        Diff the old list of known stylesheets to the new list of stylesheets
        for an individual document. Then send appropriate added/removed events.

        (WebCore::InspectorCSSAgent::collectAllStyleSheets):
        (WebCore::InspectorCSSAgent::collectAllDocumentStyleSheets):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        Collect stylesheets recursively. A stylesheet may link to other stylesheets
        through @import statements.

        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        Use the new methods, this command should go away as it will no longer be useful.

        (WebCore::InspectorCSSAgent::unbindStyleSheet):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        Create an InspectorStyleSheet from a CSSStyleSheet and add to the appropriate lists.
        Likewise, unbinding will remove from the appropriate lists.

        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        When creating the inspector stylesheet, which is a <style> element,
        it will push a StyleSheetAdded event. In the process of binding this
        new stylesheet use the m_creatingViaInspectorStyleSheet to add it to
        out list of Inspector Stylesheets.

2015-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Add comment to LocaleToScriptMappingDefault.cpp
        <rdar://problem/22407296>

        Unreviewed.

        We currently map lang="zh" to USCRIPT_SIMPLIFIED_HAN, which is incorrect.
        Instead, we should consult with an external source, such as the user's
        language preferences.

        * platform/text/LocaleToScriptMappingDefault.cpp:

2015-08-26  Chris Dumez  <cdumez@apple.com>

        Distinguish Web IDL callback interfaces from Web IDL callback functions
        https://bugs.webkit.org/show_bug.cgi?id=148434

        Reviewed by Geoffrey Garen.

        Distinguish Web IDL callback interfaces [1] from Web IDL callback
        functions [2].

        One Web-exposed difference is that when using a callback interface,
        the user can pass either a function / callable object or a non-callable
        object that has a method with the same name as the callback interface
        operation:
        https://heycam.github.io/webidl/#es-user-objects

        When using a callback function, the user needs to pass a function /
        callable object:
        https://heycam.github.io/webidl/#es-callback-function

        This patch adds a new [Callback=FunctionOnly] IDL extended attribute to
        indicate that a callback interface should be function-only (i.e. a callback
        function in the latest Web IDL specification). Without this IDL extended
        attribute, the callback interface will be treated as a regular callback
        interface. This will be needed for Bug 148415, as NodeFilter should be
        an actual callback interface.

        Note that longer term, we should really drop the old-style
        [Callback=FunctionOnly] extendd attribute and use actual IDL callback
        functions as per the latest Web IDL specification. However, I did not
        do this in this patch to minimize patch size.

        This patch adds Callback=FunctionOnly] IDL extended attribute to all
        our pre-existing callback interfaces so that there is no behavior
        change.

       [1] https://heycam.github.io/webidl/#dfn-callback-interface
       [2] https://heycam.github.io/webidl/#idl-callback-functions

        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/mediastream/MediaStreamTrackSourcesCallback.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/RTCPeerConnectionErrorCallback.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:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/scripts/CodeGenerator.pm:
        (trim):
        (IsFunctionOnlyCallbackInterface):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        (GenerateCallbackImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackFunction.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCallbackFunction):
        (webkit_dom_test_callback_function_finalize):
        (webkit_dom_test_callback_function_constructor):
        (webkit_dom_test_callback_function_class_init):
        (webkit_dom_test_callback_function_init):
        (webkit_dom_test_callback_function_callback_with_no_param):
        (webkit_dom_test_callback_function_callback_with_array_param):
        (webkit_dom_test_callback_function_callback_with_serialized_script_value_param):
        (webkit_dom_test_callback_function_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_function_callback_with_string_list):
        (webkit_dom_test_callback_function_callback_with_boolean):
        (webkit_dom_test_callback_function_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackFunction.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackFunctionPrivate.h: Copied from Source/WebCore/css/MediaQueryListListener.idl.
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithNoParam):
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackWithStringList):
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallbackFunction.cpp: Copied from Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp.
        (WebCore::JSTestCallbackFunction::JSTestCallbackFunction):
        (WebCore::JSTestCallbackFunction::~JSTestCallbackFunction):
        (WebCore::JSTestCallbackFunction::callbackWithNoParam):
        (WebCore::JSTestCallbackFunction::callbackWithArrayParam):
        (WebCore::JSTestCallbackFunction::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallbackFunction::callbackWithStringList):
        (WebCore::JSTestCallbackFunction::callbackWithBoolean):
        (WebCore::JSTestCallbackFunction::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallbackFunction.h: Added.
        (WebCore::JSTestCallbackFunction::create):
        (WebCore::JSTestCallbackFunction::scriptExecutionContext):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore::JSTestObjConstructor::finishCreation):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2): Deleted.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10): Deleted.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        * bindings/scripts/test/ObjC/DOMTestCallbackFunction.h: Copied from Source/WebCore/html/VoidCallback.idl.
        * bindings/scripts/test/ObjC/DOMTestCallbackFunction.mm: Added.
        (-[DOMTestCallbackFunction dealloc]):
        (-[DOMTestCallbackFunction finalize]):
        (-[DOMTestCallbackFunction callbackWithNoParam]):
        (-[DOMTestCallbackFunction callbackWithArrayParam:]):
        (-[DOMTestCallbackFunction callbackWithSerializedScriptValueParam:strArg:]):
        (-[DOMTestCallbackFunction callbackWithNonBoolReturnType:]):
        (-[DOMTestCallbackFunction customCallback:class6Param:]):
        (-[DOMTestCallbackFunction callbackWithStringList:]):
        (-[DOMTestCallbackFunction callbackWithBoolean:]):
        (-[DOMTestCallbackFunction callbackRequiresThisToPass:testNodeParam:]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestCallbackFunctionInternal.h: Copied from Source/WebCore/html/VoidCallback.idl.
        * bindings/scripts/test/TestCallbackFunction.idl: Copied from Source/WebCore/Modules/webdatabase/DatabaseCallback.idl.
        * bindings/scripts/test/TestObj.idl:
        * css/MediaQueryListListener.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/StringCallback.idl:
        * html/VoidCallback.idl:

2015-08-26  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Safari navigates after a cancelled force click
        https://bugs.webkit.org/show_bug.cgi?id=148491
        -and corresponding-
        rdar://problem/22394323

        Reviewed by Tim Horton.

        This regression was introduced on El Capitan because AppKit sends ‘cancel’ to 
        gesture recognizer BEFORE it sends the mouseUp. So the ImmediateActionStage needs 
        to track whether a cancel happened after updates or without any updates since they 
        signify different things. 

        Don’t perform default behaviors when the stage is ActionCancelledAfterUpdate.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

        New possible stages, and new getter for the current stage.
        * page/EventHandler.h:
        (WebCore::EventHandler::immediateActionStage):

2015-08-26  Anders Carlsson  <andersca@apple.com>

        Fix failing tests.

        Add fallback code for the case when iterations is 0.

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

2015-08-26  Anders Carlsson  <andersca@apple.com>

        Use WorkQueue::concurrentApply in FEConvolveMatrix
        https://bugs.webkit.org/show_bug.cgi?id=148490

        Reviewed by Tim Horton.

        Using WorkQueue::concurrentApply lets us simplify the code a lot, and measurements show
        no difference in performance. The striding has been slightly tweaked to make more sense
        (we no longer divide up the remainder across some of the iterations, instead we just process 
        it separately last).

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware):
        (WebCore::FEConvolveMatrix::setInteriorPixelsWorker): Deleted.
        * platform/graphics/filters/FEConvolveMatrix.h:

2015-08-26  Eric Carlson  <eric.carlson@apple.com>

        Media Session: make MediaSessionMetadata a class
        https://bugs.webkit.org/show_bug.cgi?id=148486

        Reviewed by Jer Noble.

        No new tests, no observable changes.

        * Modules/mediasession/MediaSessionMetadata.h: Make it a class.
        * page/ChromeClient.h: struct MediaSessionMetadata -> class MediaSessionMetadata.

2015-08-26  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Deadlock when downloading.
        https://bugs.webkit.org/show_bug.cgi?id=148438

        Reviewed by Alex Christensen.

        A thread should not try locking when it already has got the lock,
        this will create a deadlock.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::startThreadIfNeeded):
        (WebCore::CurlDownloadManager::stopThread):
        (WebCore::CurlDownloadManager::stopThreadIfIdle):
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::moveFileToDestination):
        (WebCore::CurlDownload::didFail):
        * platform/network/curl/CurlDownload.h:
        (WebCore::CurlDownloadManager::getMultiHandle):
        (WebCore::CurlDownloadManager::runThread):
        (WebCore::CurlDownloadManager::setRunThread):

2015-08-26  Jinyoung Hur  <hur.ims@navercorp.com>

        [Cairo] Accelerated canvas should fall back to non-accelerated canvas on creation failure
        https://bugs.webkit.org/show_bug.cgi?id=148476

        Reviewed by Brent Fulgham.

        Cairo-gl backed surface might fail to be created with large dimensions, e.g., 50x32000, depending on 
        the gl implementations. In case of Mac port, ImageBufferCG falls back to a software surface when it fails to create
        IOSurface, an accelerated surface. Though the unaccelerated surface could be slower, it would be better
        to create a working surface than nothing.

        Because the max dimensions of gl texture might vary among the OpenGL implementations, below test can't guarantee
        the verification of behavior difference depending on the running platform.

        Test: fast/canvas/canvas-large-dimensions.html

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

2015-08-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188960.
        https://bugs.webkit.org/show_bug.cgi?id=148479

        Broke all the tests (Requested by ap on #webkit).

        Reverted changeset:

        "Add some new emoji with modifiers and new sequence."
        https://bugs.webkit.org/show_bug.cgi?id=148202
        http://trac.webkit.org/changeset/188960

2015-08-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] "method" property for the webkitwebsrc element
        https://bugs.webkit.org/show_bug.cgi?id=148433

        Reviewed by Carlos Garcia Campos.

        This new property is sometimes used by the GStreamer uridownloader
        when time synchronization is required for DASH. The same property
        was added to the souphttpsrc element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStart):

2015-08-26  Enrica Casucci  <enrica@apple.com>

        Add some new emoji with modifiers and new sequence.
        https://bugs.webkit.org/show_bug.cgi?id=148202
        rdar://problem/21849857

        Reviewed by Sam Weinig.

        Adding support for some new emoji with modifiers and
        one new emoji sequence.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):
        * platform/text/CharacterProperties.h:
        (WebCore::isEmojiGroupCandidate):
        (WebCore::isEmojiModifier):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):

2015-08-25  Nan Wang  <n_wang@apple.com>

        AX: Enable accessibility/aria-controls.html test for mac
        https://bugs.webkit.org/show_bug.cgi?id=148458

        Reviewed by Chris Fleizach.

        Re-enabled accessibility/aria-controls.html test for mac.

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

2015-08-25  Zalan Bujtas  <zalan@apple.com>

        Using the filter functional notation for background images results in wrong background-size rendering
        https://bugs.webkit.org/show_bug.cgi?id=148221
        rdar://problem/22379518

        Reviewed by Daniel Bates.

        Do not ignore the size argument, when the filter image is being drawn onto the context.
        When the size is ignored, we end up painting the image with its native size while the filter
        is applied on the size of the generated image.

        Test: fast/filter-image/background-filter-image.html

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):

2015-08-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        IconDatabase: syncThreadMainLoop() is unlocking m_syncLock twice when thread termination is requested
        https://bugs.webkit.org/show_bug.cgi?id=148429

        Reviewed by Filip Pizlo.

        The lock is released an locked on every loop iteration, and then
        unlocked again after the loop. There's an early break in the loop
        when thread termination is requested that happens after the lock
        is released but before is locked again, so that the unlock after
        the loop is trying to unlock the lock again. This was not a
        problem before, but the new Lock has an assertion to ensure that a
        lock is not released twice.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncThreadMainLoop): Clean up the thread
        and return instead of breaking the loop when thread termination is
        requested.

2015-08-25  Nan Wang  <n_wang@apple.com>

        [Mac] accessibility/document-attributes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116636

        Reviewed by Chris Fleizach.

        Re-enabled accessibility/document-attributes.html test.

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

2015-08-25  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r188693
        https://bugs.webkit.org/show_bug.cgi?id=148424

        Reviewed by Tim Horton.

        * page/ChromeClient.h:

2015-08-25  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Don't clear AVPlayerItem when pausing if AirPlay is active
        https://bugs.webkit.org/show_bug.cgi?id=148319

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible): Do nothing if the session
          is allowed to load data when in the background and we are not under memory pressure.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionCanLoadMedia): Call base class.

2015-08-25  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_REGIONS) build after r188663
        https://bugs.webkit.org/show_bug.cgi?id=148425

        Reviewed by Chris Dumez.

        * bindings/js/JSDOMNamedFlowCollectionCustom.cpp:

2015-08-24  Brent Fulgham  <bfulgham@apple.com>

        Wheel events stop propagating when target element is removed from DOM
        https://bugs.webkit.org/show_bug.cgi?id=148384
        <rdar://problem/19732211>

        Reviewed by David Hyatt.

        Tested by tiled-drawing/scrolling/latched-to-deleted-node.html

        We need to reset our latching state if the targeted node is removed from the DOM.
        Add a check in 'platformPrepareForWheelEvents' that checks if the expected latching
        target node was already removed from the DOM. If it was, we should not send events
        to it, and should reset latching state so we can attach to the next relevant node.

        * dom/Element.cpp:
        (WebCore::Element::removedFrom): Remove any latched wheel event state objects that
        match the current element.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::removeLatchingStateForTarget): Remove any latched wheel event
        state structures that match the passed wheel event target.
        * page/MainFrame.h:

2015-08-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix crash due to search field disappearing when showing results menu
        https://bugs.webkit.org/show_bug.cgi?id=148410
        <rdar://problem/22399850>

        Reviewed by Brent Fulgham.

        When clicking on the results button of a search field that hides upon being focused, WebKit will crash because we
        attempt to toggle the results menu using the search field's renderer which is null. This is addressed by adding a null
        check to make sure the search field has not been hidden before toggling the menu.

        Test: fast/forms/search/search-results-hidden-crash.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Add a null check for the search field's renderer.

2015-08-25  Chris Dumez  <cdumez@apple.com>

        compareDocumentPosition() should report PRECEDING or FOLLOWING information even if nodes are disconnected
        https://bugs.webkit.org/show_bug.cgi?id=119316

        Reviewed by Darin Adler.

        As the latest DOM specification, compareDocumentPosition() should report
        PRECEDING or FOLLOWING information even if nodes are disconnected:
        - http://dom.spec.whatwg.org/#dom-node-comparedocumentposition

        This behavior is consistent with both IE10, Firefox and Chrome.

        The implementation relies on the comparison of cryptographic hashes
        (SHA1) of the Node pointers so that the results returned by the function
        are consistent. We don't compare Node pointers directly as it was done
        previously in r153660 to avoid leaking information about our memory
        model to the Web.

        Test: fast/dom/compare-document-position-disconnected-nodes.html
        W3C Test suite: http://w3c-test.org/dom/nodes/Node-compareDocumentPosition.html

        * dom/Node.cpp:
        (WebCore::hashPointer):
        (WebCore::compareDetachedElementsPosition):
        (WebCore::Node::compareDocumentPosition):

2015-08-25  Chris Dumez  <cdumez@apple.com>

        Add support for callback interfaces using other callback names than "handleEvent"
        https://bugs.webkit.org/show_bug.cgi?id=148418

        Reviewed by Ryosuke Niwa.

        Add support for callback interfaces using other callback names than
        "handleEvent" [1].

        This is a pre-requirement for Bug 148415, as NodeFilter's callback
        function name is "acceptNode":
        - https://dom.spec.whatwg.org/#interface-nodefilter

        [1] https://heycam.github.io/webidl/#es-user-objects

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementation):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithNoParam):
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackWithStringList):
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):

2015-08-25  Chris Dumez  <cdumez@apple.com>

        Get rid of custom bindings for RequestAnimationFrameCallback.handleEvent()
        https://bugs.webkit.org/show_bug.cgi?id=148417

        Reviewed by Sam Weinig.

        Get rid of custom bindings for RequestAnimationFrameCallback.handleEvent()
        by improving the bindings generator. In this case, the problem was that the
        bindings generator did not know how to convert a double parameter into a
        JSValue. The new code leverages the pre-existing NativeToJSValue subroutine
        to do the conversion instead of duplicating complex support here.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRequestAnimationFrameCallbackCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackImplementation):
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackWithStringList):
        (WebCore::JSTestCallback::callbackWithBoolean):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * dom/RequestAnimationFrameCallback.idl:

2015-08-24  Jinyoung Hur  <hur.ims@navercorp.com>

        Clear cairo-gl surface for initialization
        https://bugs.webkit.org/show_bug.cgi?id=148307

        Reviewed by Martin Robinson.

        A cairo-gl surface that is created from an uninitialized texture, should be cleared before use.
        A texture memory created by calling glTexImage2D with null data parameter, is uninitialized.
        And cairo_gl_surface_create_for_texture doesn't clear the provided texture for initialization.
        So it seems safe to clear the surface explicitly.

        It is hard to verify this behavior change because the texture memory status is undefined. Undefined means
        it can be either initialized or not, though mostly initialized in my experiences.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::clearSurface):
        (WebCore::createCairoGLSurface):

2015-08-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build fixes in r188875 and r188874

        Unreviewed.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toNSFontTraits):

2015-08-24  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::createFontPlatformData):

2015-08-24  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toNSFontWeight):
        (WebCore::toNSFontTraits):
        (WebCore::platformFontWithFamilySpecialCase):

2015-08-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Use Optionals in RenderBox height computations
        https://bugs.webkit.org/show_bug.cgi?id=147253

        Reviewed by David Hyatt.

        No new tests because there is no behavior change.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeIntrinsicLogicalContentHeightUsing):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::logicalWidthIsResolvable):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        (WebCore::RenderBox::hasDefiniteLogicalHeight):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):

2015-08-24  Anders Carlsson  <andersca@apple.com>

        Fix failing tests.
        
        It's OK to call runStateMachine with an idle state. Just bail early when that happens.

        * Modules/webdatabase/SQLTransactionStateMachine.h:
        (WebCore::SQLTransactionStateMachine<T>::runStateMachine):

2015-08-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify FontCache
        https://bugs.webkit.org/show_bug.cgi?id=148358

        Reviewed by Antti Koivisto.

        Move all the duplicate code to FontCacheCoreText.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontWeightFromCoreText):
        (WebCore::toTraitsMask):
        (WebCore::isFontWeightBold):
        (WebCore::toCoreTextFontWeight):
        (WebCore::invalidateFontCache):
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::systemFontFamilies):
        (WebCore::computeTraits):
        (WebCore::computeNecessarySynthesis):
        (WebCore::fontWhitelist):
        (WebCore::FontCache::setFontWhitelist):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWithFamily):
        (WebCore::shouldAutoActivateFontIfNeeded):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::fallbackDedupSet):
        (WebCore::FontCache::platformPurgeInactiveFontData):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformInvalidateFontCache):
        (WebCore::getSystemFontFallbackForCharacters):
        (WebCore::platformLookupFallbackFont):
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::FontCache::weightOfCTFont):
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::FontCache::platformInit): Deleted.
        (WebCore::isFontWeightBold): Deleted.
        (WebCore::FontCache::getSystemFontFallbackForCharacters): Deleted.
        (WebCore::FontCache::systemFallbackForCharacters): Deleted.
        (WebCore::FontCache::systemFontFamilies): Deleted.
        (WebCore::createCTFontWithTextStyle): Deleted.
        (WebCore::createCTFontWithFamilyNameAndWeight): Deleted.
        (WebCore::toCTFontWeight): Deleted.
        (WebCore::FontCache::createFontPlatformData): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::appkitWeightToFontWeight):
        (WebCore::toNSFontTraits):
        (WebCore::platformFontWithFamilySpecialCase):
        (WebCore::platformFontWithFamily):
        (WebCore::platformInvalidateFontCache):
        (WebCore::platformLookupFallbackFont):
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::toCoreTextFontWeight): Deleted.
        (WebCore::fontWhitelist): Deleted.
        (WebCore::FontCache::setFontWhitelist): Deleted.
        (WebCore::fontWithFamilySpecialCase): Deleted.
        (WebCore::fontWithFamily): Deleted.
        (WebCore::invalidateFontCache): Deleted.
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback): Deleted.
        (WebCore::FontCache::platformInit): Deleted.
        (WebCore::isAppKitFontWeightBold): Deleted.
        (WebCore::shouldAutoActivateFontIfNeeded): Deleted.
        (WebCore::fallbackDedupSet): Deleted.
        (WebCore::FontCache::platformPurgeInactiveFontData): Deleted.
        (WebCore::lookupCTFont): Deleted.
        (WebCore::FontCache::systemFallbackForCharacters): Deleted.
        (WebCore::FontCache::systemFontFamilies): Deleted.
        (WebCore::FontCache::createFontPlatformData): Deleted.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        (WebCore::fromCTFontWeight): Deleted.

2015-08-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, attempt to fix iOS build after r188860

        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::isFilteringDeltas): Moved implementation out of header.
        (WebCore::WheelEventDeltaFilter::filteredDelta): Moved implementation out of header.
        * page/WheelEventDeltaFilter.h:
        (WebCore::WheelEventDeltaFilter::isFilteringDeltas): Deleted.
        (WebCore::WheelEventDeltaFilter::filteredDelta): Deleted.

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Remove unused return values from SQLTransaction state functions
        https://bugs.webkit.org/show_bug.cgi?id=148344

        Reviewed by Tim Horton.

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::deliverSuccessCallback):
        (WebCore::SQLTransaction::unreachableState):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::acquireLock):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::runStatements):
        (WebCore::SQLTransactionBackend::cleanupAndTerminate):
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        (WebCore::SQLTransactionBackend::unreachableState):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionStateMachine.h:
        (WebCore::SQLTransactionStateMachine<T>::runStateMachine):

2015-08-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix build after r188860

        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta): Convert argument explicitly to an NSPoint.

2015-08-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use _NSScrollingPredominantAxisFilter for wheel event filtering on Mac
        https://bugs.webkit.org/show_bug.cgi?id=147320

        Reviewed by Simon Fraser.

        Refactored to use a predominant axis filter instead of a predominant axis tracker. This allows us to
        employ AppKit's _NSScrollingPredominantAxisFilter when possible, and use the wheel event delta tracker
        as a fallback. Here, we refactor EventHandler to use the new filters for overflow scrolling and replace
        the MainFrame's WheelEventDeltaTracker with an appropriate type of WheelEventDeltaFilter.

        In the case where an _NSScrollingPredominantAxisFilter is unavailable, the platform-invariant wheel
        event delta filter simply uses the existing wheel event delta tracker to compute the current predominant
        axis. It uses the predominant axis to determine which axis (if any) should have its delta zeroed out.

        This patch also introduces NSScrollingInputFilterSPI.h, which either imports the internal input filter
        header from AppKit or declares relevant interfaces and functions.

        No new tests, since this change does not add new functionality.

        * CMakeLists.txt: Add page/WheelEventDeltaFilter.cpp.
        * WebCore.vcxproj/WebCore.vcxproj: Add WheelEventDeltaFilter.cpp and WheelEventDeltaFilter.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Add WheelEventDeltaFilter.cpp and WheelEventDeltaFilter.h.
        * WebCore.xcodeproj/project.pbxproj: Add WheelEventDeltaFilter.cpp, WheelEventDeltaFilter.h, and their Mac counterparts.
        * page/EventHandler.cpp:
        (WebCore::didScrollInScrollableArea): Refactored to no longer handle axes separately.
        (WebCore::handleWheelEventInAppropriateEnclosingBox): Ditto.
        (WebCore::EventHandler::platformRecordWheelEvent): Refactored to update the wheel delta filter.
        (WebCore::EventHandler::clearLatchedState): Ditto.
        (WebCore::EventHandler::defaultWheelEventHandler): Refactored to use wheel delta filters. No longer splits wheel events
                and handles them on separate axes.
        (WebCore::didScrollInScrollableAreaForSingleAxis): Deleted.
        (WebCore::handleWheelEventInAppropriateEnclosingBoxForSingleAxis): Deleted.
        * page/EventHandler.h:
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame): Initializes the appropriate type of WheelEventDeltaFilter.
        * page/MainFrame.h:
        * page/WheelEventDeltaFilter.cpp: Added.
        (WebCore::WheelEventDeltaFilter::WheelEventDeltaFilter):
        (WebCore::WheelEventDeltaFilter::~WheelEventDeltaFilter):
        (WebCore::WheelEventDeltaFilter::create):
        (WebCore::BasicWheelEventDeltaFilter::BasicWheelEventDeltaFilter):
        (WebCore::BasicWheelEventDeltaFilter::updateFromDelta):
        (WebCore::BasicWheelEventDeltaFilter::beginFilteringDeltas):
        (WebCore::BasicWheelEventDeltaFilter::endFilteringDeltas):
        (WebCore::deltaIsPredominantlyVertical):
        (WebCore::BasicWheelEventDeltaFilter::dominantScrollGestureDirection):
        * page/WheelEventDeltaFilter.h: Refactored WheelEventDeltaTracker logic to work as a filter instead.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Refactored to use wheel delta filters.
        (WebCore::EventHandler::platformRecordWheelEvent): Ditto.
        * page/mac/WheelEventDeltaFilterMac.h: Wraps the new _NSScrollingPredominantAxisFilter.
        * page/mac/WheelEventDeltaFilterMac.mm: Added.
        (WebCore::WheelEventDeltaFilterMac::WheelEventDeltaFilterMac):
        (WebCore::WheelEventDeltaFilterMac::beginFilteringDeltas):
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta):
        (WebCore::WheelEventDeltaFilterMac::endFilteringDeltas):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyWithDeltas): Used to create a copy of the platform wheel event with filtered deltas.
        (WebCore::PlatformWheelEvent::copyIgnoringHorizontalDelta): Deleted. No longer necessary, since we won't be handling wheel
                events on separate axes.
        (WebCore::PlatformWheelEvent::copyIgnoringVerticalDelta): Ditto.
        * platform/spi/mac/NSScrollingInputFilterSPI.h: Added.

2015-08-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix typo in a comment ("unsused" -> "unused")

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):

2015-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix cairo performance regression introduced in r188379.

        A missing break in a switch was making us to use High image
        interpolation quality by default.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext): Add the
        missing break.

2015-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM bindings API break test after r188809.

        element.getElementsByTagName and element.getElementsByClassName
        were also changed in r188809 to return an HTMLCollection. The
        build didn't fail because we don't use those in our tests, but the
        API breaks need to be fixed too.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_element_get_elements_by_tag_name):
        (webkit_dom_element_get_elements_by_tag_name_ns):
        (webkit_dom_element_get_elements_by_class_name):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetEffectiveFunctionName):

2015-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GObject DOM bindings API break test after r188735.

        document.getElementsByClassName returns an HTMLCollection since
        r188735. So, rename it as
        webkit_dom_document_get_elements_by_class_name_as_html_collection,
        and deprecate the old method returning a NodeList.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_document_get_elements_by_class_name): Use the
        implementation returning a NodeList.
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols: Add new symbols.
        * bindings/gobject/webkitdom.symbols: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetEffectiveFunctionName): Also check getElementsByClassName.

2015-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r188711.

        Since r188711 document.createNodeIterator and
        document.createTreeWalker, don't raise exceptions anymore. Keep
        the GError parameter even if it's ignored to not break the API
        compatibility.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (FunctionUsedToRaiseException):
        (GenerateFunction):

2015-08-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r188809.

        document.getElementsByTagName returns an HTMLCollection since
        r188809. So, rename it as
        webkit_dom_document_get_elements_by_tag_name_as_html_collection,
        and deprecate the old methods returning a NodeList.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_document_get_elements_by_tag_name): Use the
        implementation returning a NodeList.
        (webkit_dom_document_get_elements_by_tag_name_ns): Ditto.
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols: Add new symbols.
        * bindings/gobject/webkitdom.symbols: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetEffectiveFunctionName): Bring back this method, now that we
        have deprecated API again and add the checks for
        getElementsByTagName methods.
        (GenerateFunction): Use GetEffectiveFunctionName().

2015-08-24  Myles C. Maxfield  <mmaxfield@apple.com>

        @font-face related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=148355

        Reviewed by Darin Adler.

        This patch cleans up much of our code related to web fonts. In general, it
        migrates to using C++ for-each style loops, uses Ref instead of RefPtr when
        things can't be nullptr, migrates to C++ Rvalue-references instead of
        PassRefPtr, and refactors CSSFontSelector::addFontFaceRule() to use helper
        functions.

        No new tests because there is no behavior change.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoaded): Use a C++ for-each loop.
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::create): Use C++ Rvalue-references instead of
        PassRefPtr.
        (WebCore::CSSFontFace::CSSFontFace): Ditto.
        * css/CSSFontSelector.cpp:
        (WebCore::computeTraitsMask): Migrated a chunk of
        CSSFontSelector::addFontFaceRule() into this helper function.
        (WebCore::createFontFace): Ditto.
        (WebCore::familyNameFromPrimitive): Ditto.
        (WebCore::CSSFontSelector::addFontFaceRule): Call the newly-created helper
        functions. In addition, migrate to Refs instead of RefPtrs.
        (WebCore::compareFontFaces): Migrate to references instead of pointers.
        (WebCore::CSSFontSelector::getFontFace): Migrate to Refs instead of
        RefPtrs. Also use C++ for-each loops.
        * css/CSSFontSelector.h:
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::~CSSSegmentedFontFace): Use C++ for-each
        loops.
        (WebCore::CSSSegmentedFontFace::isValid): Ditto.
        (WebCore::CSSSegmentedFontFace::appendFontFace): Migrate to Rvalue-
        references instead of PassRefPtr.
        * css/CSSSegmentedFontFace.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::getTraitsInFamily): Return the result instead of being
        passed an out parameter.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::getTraitsInFamily): Ditto.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::traitsInFamilyEnumProc): Ditto.
        (WebCore::FontCache::getTraitsInFamily): Ditto.

2015-08-23  Andy Estes  <aestes@apple.com>

        [Content Filtering] REGRESSION (r182356): Provisional URL is incorrect in didReceiveServerRedirectForProvisionalLoadForFrame when Content Filtering is enabled
        https://bugs.webkit.org/show_bug.cgi?id=147872
        rdar://problem/22044000

        Reviewed by Dan Bernstein.

        Passed the ResourceLoader request URL to dispatchDidReceiveServerRedirectForProvisionalLoad().

        New API test: ContentFiltering.ServerRedirect

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h: Added a URL argument to dispatchDidReceiveServerRedirectForProvisionalLoad().
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequestInternal): Passed the request URL to dispatchDidReceiveServerRedirectForProvisionalLoad().
        * testing/Internals.cpp:
        (WebCore::Internals::Internals): Stopped calling MockContentFilter::ensureInstalled().
        * testing/MockContentFilterSettings.cpp:
        (WebCore::MockContentFilterSettings::setEnabled): Called MockContentFilter::ensureInstalled() to ensure the
        mock is installed whenever the filter is enabled.
        * testing/MockContentFilterSettings.h: Exported member functions used by TestWebKitAPI.

2015-08-23  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling back in r188803.

        "Debugger's VM should never be null"
        https://bugs.webkit.org/show_bug.cgi?id=148341
        http://trac.webkit.org/changeset/188803

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):

2015-08-23  Antti Koivisto  <antti@apple.com>

        Remove SVGFrameLoaderClient and dataProtocolFrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=148370

        Reviewed by Darin Adler.

        With data protocol handled internally in WebKit these are no longer needed.

        This mostly reverts code changes from http://trac.webkit.org/179626 keeping the tests.

        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::setDataBufferingPolicy):
        (WebCore::ResourceLoader::dataProtocolFrameLoader): Deleted.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::documentLoader):
        (WebCore::ResourceLoader::originalRequest):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::finishLoading):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageClients.h:

2015-08-22  Chris Dumez  <cdumez@apple.com>

        NodeList should not have a named getter
        https://bugs.webkit.org/show_bug.cgi?id=148117

        Reviewed by Darin Adler.

        Drop the named property getter on NodeList to match the specification:
        https://dom.spec.whatwg.org/#interface-nodelist

        This change could be a bit risky but:
        1. Firefox and IE never had this named property getter on NodeList.
        2. Chrome successfuly dropped this named property getter in early 2014:
           https://src.chromium.org/viewvc/blink?revision=166356&view=revision
        3. Our named property getter on NodeList is only partly functional:
           It only matches by 'id' attribute, not by 'name' attribute.
        4. Our APIs that were wrongly returning a NodeList instead of an
           HTMLCollection (getElementsByTagName() / getElementsByClassName())
           have been fixed in r188735 and r188809. HTMLCollection does have
           a named property getter.
        5. This named getter adds code complexity.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::createWrapper): Deleted.
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::invalidateCache): Deleted.
        * dom/ChildNodeList.h:
        * dom/LiveNodeList.cpp:
        * dom/LiveNodeList.h:
        * dom/NodeList.h:
        * dom/NodeList.idl:
        * dom/StaticNodeList.cpp:
        (WebCore::StaticElementList::length): Deleted.
        (WebCore::StaticElementList::item): Deleted.
        * dom/StaticNodeList.h:
        * html/HTMLCollection.h:

2015-08-22  Andreas Kling  <akling@apple.com>

        [JSC] Static hash tables should be 100% compile-time constant.
        <https://webkit.org/b/148359>

        Reviewed by Michael Saboff.

        Adjust WebCore bindings generator for new JSC::HashTable layout
        and rebaseline the bindings tests for that change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTable):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2015-08-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix build without ENABLE_CSS_GRID_LAYOUT after r188582

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

2015-08-22  Zalan Bujtas  <zalan@apple.com>

        Page::renderTreeSize() does not include anonymous renderers.
        https://bugs.webkit.org/show_bug.cgi?id=148352

        Reviewed by Andreas Kling.

        Anonymous renderes take the document as their node. Instead
        of checking whether the node is the document, we could just check
        if the RenderView is available.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::~RenderObject):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView): Deleted.
        * rendering/RenderView.h: Include the RenderView in render tree size as well.

2015-08-22  Antti Koivisto  <antti@apple.com>

        Decode data URLs in web process
        https://bugs.webkit.org/show_bug.cgi?id=148128

        Reviewed by Darin Adler.

        We currenly send data URLs to networking layer for decoding. This involves a long and slow roundtrip through IPC and API layers.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::maybeLoadQuickLookResource): Deleted.

            Remove this awkward interface for WebKit2.

        * loader/ResourceLoadScheduler.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::loadDataURL):

            Load using DataURLDecoder.

        * loader/ResourceLoader.h:

            Make start() public and export it so it can be called directly from WebKit2.

        * platform/network/DataURLDecoder.cpp: Added.
        (WebCore::DataURLDecoder::decodeQueue):
        (WebCore::DataURLDecoder::DecodeTask::DecodeTask):
        (WebCore::DataURLDecoder::createDecodeTask):

            Parse data URL metadata and initialize the decode task.

        (WebCore::DataURLDecoder::decodeBase64):
        (WebCore::DataURLDecoder::decodeEscaped):
        (WebCore::DataURLDecoder::decode):

            Asynchronously decode in a concurrent distpatch queue.

        * platform/network/DataURLDecoder.h: Added.
        * platform/network/ios/QuickLook.h:
        * platform/text/DecodeEscapeSequences.h:
        (WebCore::URLEscapeSequence::findEndOfRun):
        (WebCore::URLEscapeSequence::decodeRun):

            Factor buffer generation to a function.

        (WebCore::decodeEscapeSequences):
        (WebCore::decodeURLEscapeSequencesAsData):

            Add decode function that produces bytes instead of a String.

2015-08-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188792 and r188803.
        https://bugs.webkit.org/show_bug.cgi?id=148347

        broke lots of tests, ggaren is going to investigate and reland
        (Requested by thorton on #webkit).

        Reverted changesets:

        "Unify code paths for manually deleting all code"
        https://bugs.webkit.org/show_bug.cgi?id=148280
        http://trac.webkit.org/changeset/188792

        "Debugger's VM should never be null"
        https://bugs.webkit.org/show_bug.cgi?id=148341
        http://trac.webkit.org/changeset/188803

2015-08-21  Chris Dumez  <cdumez@apple.com>

        document.getElementsByTagName should return an HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=110611

        Reviewed by Darin Adler.

        Update getElementsByTagName*() to return an HTMLCollection as per
        the specification:
        - https://dom.spec.whatwg.org/#interface-document
        - https://dom.spec.whatwg.org/#interface-element

        Firefox, Chrome and IE all match the specification but WebKit was
        returning a NodeList.

        Performance:
        DOM/get-elements-by-tag-name-traversal-uncached.html is ~4.5% faster.

        Test: fast/dom/getElementsByTagName-return-type.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Rename TagNodeList.* to TagCollection.*

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        Update the function to use descendantsOfType<>() instead of
        getElementsByTagName(). The code is both shorter and more efficient.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameForObjC):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        (WebCore::ContainerNode::getElementsByTagNameNSForObjC):
        * dom/ContainerNode.h:
        - Have getElementsByTagName*() return an HTMLCollection.
        - Introduce versions used by the ObjC bindings that return a NodeList
          for API compatibility reasons.
        - Move the localName null check to the *ForObjC versions and use a
          simple assertion for the non ObjC versions. This gets rid of a
          branch for our JS bindings as this function is hot. It is currently
          impossible to get a null AtomicString from our JS bindings code because
          getElementsByTagName() and getElementsByTagName(undefined) in JS end up
          calling ContainerNode::getElementsByTagName("undefined").
          Also getElementsByTagName(null) in JS ends up calling
          ContainerNode::getElementsByTagName("null"). I have also gotten rid of
          most of the getElementsByTagName() calls from our native code. The
          remaining ones either call with a non-null AtomicString and they now
          have a null-check.

        * dom/Document.idl:
        * dom/Element.idl:
        Have getElementsByTagName*() return an HTMLCollection except for ObjC
        bindings in order to maintain legacy API compatibility.

        * dom/Node.cpp:
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::NodeListsNodeData::invalidateCaches):
        HTMLCollection::invalidateCache(attr) is now renamed to
        invalidateCacheForAttribute(attr) to avoid ambiguity with
        HTMLCollection::invalidateCache(doc) and for consistency
        with LiveNodeList.

        * dom/NodeRareData.h:
        Make necessary updates now that TagNodeList is renamed to TagCollection
        and is an HTMLCollection.

        * dom/TagCollection.cpp: Renamed from Source/WebCore/dom/TagNodeList.cpp.
        * dom/TagCollection.h: Renamed from Source/WebCore/dom/TagNodeList.h.
        Rename TagNodeList / HTMLTagNodeList to TagCollection / HTMLTagCollection
        and inherit CachedHTMLCollection instead of CachedLiveNodeList.

        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToBodyElement):
        Update code using getElementsByTagName() to reflect the fact that it
        now returns an HTMLCollection and item() returns an Element*. This
        function is matching any Element with "body" tag, not just HTMLBodyElement
        so I did not refactor it to use an descendantsOfType<HTMLBodyElement>().
        It is not clear to me what the intention of this code is.

        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        * editing/markup.h:
        - Return a Ref<> instead of a PassRefPtr<> as it can never return null.
        - Use descendantsOfType<HTMLAttachmentElement>(fragment) instead of
          getElementsByTagName() as it results in both shorter and more efficient
          code.

        * html/CollectionType.h:
        Add new ByTag / ByHTMLTag collection types for TagCollection /
        HTMLTabCollection.

        * html/GenericCachedHTMLCollection.cpp:
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches):
        Handle new ByTag / ByHTMLTag collection types in the switch statement.

        * html/HTMLCollection.cpp:
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::~HTMLCollection):
        Handle new ByTag / ByHTMLTag collection types in switch statements.

        (WebCore::HTMLCollection::tags):
        Add a null-check on localName() before calling getElementsByTagName().
        This function is currently for ObjC bindings only.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns):
        Simplify / optimize the code by using descendantsOfType<HTMLPlugInImageElement>()
        instead of getElementsByTagName().

        * html/MediaDocument.cpp:
        (WebCore::descendantVideoElement):
        Use descendantsOfType<HTMLVideoElement> instead of getElementsByTagNameNS().

2015-08-21  Geoffrey Garen  <ggaren@apple.com>

        Debugger's VM should never be null
        https://bugs.webkit.org/show_bug.cgi?id=148341

        Reviewed by Joseph Pecoraro.

        It doesn't make sense for a Debugger's VM to be null, and code related
        to maintaining that illusion just caused the Web Inspector to crash on
        launch (https://bugs.webkit.org/show_bug.cgi?id=148312). So, let's stop
        doing that.

        Now, Debugger requires its subclass to provide a never-null VM&.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didPause):

2015-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Remove dead code from FontCache::systemFallbackForCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=148218

        Reviewed by Daniel Bates.

        lookupCTFont() in FontCacheMac.mm will always return the best font (because
        CTFontCreateForCharactersWithLanguage() does so). Also, all fonts that will
        be created on WebKit's behalf are already printer fonts.

        No new tests because there is no behavior change.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters): Deleted.

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::addrChangeCallback):
        (WebCore::NetworkStateNotifier::callAddressChanged): Deleted.

2015-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Clean up Font class
        https://bugs.webkit.org/show_bug.cgi?id=148216

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::Font::platformGlyphInit): Deleted.
        * platform/graphics/Font.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):

2015-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify two more FontCache functions
        https://bugs.webkit.org/show_bug.cgi?id=148217

        Reviewed by Dean Jackson.

        Move duplicated code from FontCacheMac and FontCacheIOS into
        FontCacheCoreText.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::toTraitsMask):
        (WebCore::isFontWeightBold):
        (WebCore::FontCache::similarFont):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::similarFont): Deleted.
        (WebCore::toTraitsMask): Deleted.
        (WebCore::FontCache::getTraitsInFamily): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toTraitsMask): Deleted.
        (WebCore::FontCache::similarFont): Deleted.
        (WebCore::FontCache::getTraitsInFamily): Deleted.

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Stop using the old callOnMainThread variant on Windows
        https://bugs.webkit.org/show_bug.cgi?id=148332

        Reviewed by Tim Horton.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::notifyCookiesChanged):
        (WebCore::notifyCookiesChangedOnMainThread): Deleted.
        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::addrChangeCallback):

2015-08-20  Matt Rajca  <mrajca@apple.com>

        Media Session: let UI clients change the volume of the focused media element
        https://bugs.webkit.org/show_bug.cgi?id=148289

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::setVolumeOfMediaElement):
        * page/Page.h:

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Get rid of uses of the old callOnMainThread function that takes a function ptr + context
        https://bugs.webkit.org/show_bug.cgi?id=148324

        Reviewed by Tim Horton.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::DecodingTask::decode):
        (WebCore::AsyncAudioDecoder::DecodingTask::notifyCompleteDispatch): Deleted.
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        (WebCore::OfflineAudioDestinationNode::notifyCompleteDispatch): Deleted.
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::process):
        (WebCore::ScriptProcessorNode::fireProcessEventDispatch): Deleted.
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleForNotification):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * Modules/webdatabase/DatabaseTracker.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::patternReleaseCallback):
        (WebCore::patternReleaseOnMainThreadCallback): Deleted.
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::patternReleaseCallback):
        (WebCore::patternReleaseOnMainThreadCallback): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::invalidateFontCache):
        (WebCore::fontCacheRegisteredFontsChangedNotificationCallback):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::doNotifyFinish):
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formFinalize):
        (WebCore::formFinishFinalizationOnMainThread): Deleted.

2015-08-21  Doug Russell  <d_russell@apple.com>

        AX: Table with CSS that makes a row anonymous can return NULL from cellForColumnAndRow
        https://bugs.webkit.org/show_bug.cgi?id=148293

        Reviewed by Chris Fleizach.

        When RenderTableRows are anonymous, they may not be added to the accessible data 
        table's internal row list. However, when calculating the row range for a cell, 
        we were still accounting for those anonymous sections.
        Change how the row range is calculated to directly ask the accessible parent row 
        for its index. This will ensure it’s more inline with what’s being represented to 
        the accessibility API.

        Test: accessibility/aria-table-content.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentRow):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        * accessibility/AccessibilityTableCell.h:

2015-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(173684): Edit as HTML not working
        https://bugs.webkit.org/show_bug.cgi?id=148268

        Reviewed by Chris Dumez.

        Tests: inspector/dom/getOuterHTML.html
               inspector/dom/setOuterHTML.html

        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchChildren):
        Revert the optimization change made in r173684. The optimization changes
        had a few issues. It changed the logic to potentially drop out of the
        loop before all new items were processed and using a node reference
        to track an index did not account for the modifications insertBefore
        may have made to that node's index in the list.

2015-08-21  Beth Dakin  <bdakin@apple.com>

        HistoryItems will null CachedPages should never be left in the list of items; 
        causes crash
        https://bugs.webkit.org/show_bug.cgi?id=148237
        -and corresponding-
        rdar://problem/22356782

        Reviewed by Brady Eidson.

        Setting the CachedPage to nullptr will destroy the CachedPage, destroy the 
        FrameView, re-enter layout, and potentially try to modify items in the PageCache 
        based on that layout. So, we should not modify CachedPage in this way while the 
        item is still in the list of HistoryItems.
        * history/PageCache.cpp:
        (WebCore::PageCache::take):
        (WebCore::PageCache::remove):
        (WebCore::PageCache::prune):

2015-08-21  David Kilzer  <ddkilzer@apple.com>

        dispatch_group_t objects may not be retained properly when not backed by Objective-C objects under garbage collection
        <http://webkit.org/b/148229>

        Reviewed by Eric Carlson.

        When compiled with garbage collection enabled, libdispatch
        objects are not backed by Objective-C objects, so they don't get
        the benefit of automatic reference counting when captured by a
        block or a lambda.  To address this, we use OSObjectPtr<> which
        always increments the reference count of the contained object.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        Switch to use OSObjectPtr<>.

2015-08-21  Nan Wang  <n_wang@apple.com>

        [Mac] accessibility/selection-states.html fails
        https://bugs.webkit.org/show_bug.cgi?id=116637

        Reviewed by Chris Fleizach.

        Added accessibilityAttributeValue callback for isMultiSelectable attribute.

        Updated expectation for accessibility/selection-states.html on mac.

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

2015-08-21  Jonathan Davis  <jond@apple.com>

        Fixed status features JSON formatting.

        * features.json:

2015-08-21  Chris Dumez  <cdumez@apple.com>

        Have more getElementsBy*() methods return a Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=148287

        Reviewed by Sam Weinig.

        Have more getElementsBy*() methods return a Ref<> instaed of a RefPtr<>
        as they cannot return null.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::getElementsByClassNameForObjC):
        (WebCore::ContainerNode::radioNodeList):
        * dom/ContainerNode.h:

2015-08-21  Chris Dumez  <cdumez@apple.com>

        Drop NodeListBase class
        https://bugs.webkit.org/show_bug.cgi?id=148290

        Reviewed by Ryosuke Niwa.

        Drop NodeListBase class and have HTMLCollection subclass NodeList
        directly. There is no reason we need another base class.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetImplClassName): Deleted.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByClassNameForObjC):
        * dom/ContainerNode.h:
        * dom/NodeList.h:
        * dom/NodeListBase.h: Removed.
        * html/HTMLCollection.h:

2015-08-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] prototyping module loader in JSC shell
        https://bugs.webkit.org/show_bug.cgi?id=147876

        Reviewed by Saam Barati.

        Just fill Loader hooks with nullptr.

        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

2015-08-20  Chris Dumez  <cdumez@apple.com>

        Fix passing null / undefined as NodeFilter parameter for createNodeIterator() / createTreeWalker()
        https://bugs.webkit.org/show_bug.cgi?id=148257

        Reviewed by Darin Adler.

        Fix passing null / undefined as NodeFilter parameter for createNodeIterator() / createTreeWalker().
        It is supposed to be translated into a *null* NodeFilter. However, WebKit was constructing a
        NodeFilter in this case.

        Chrome and Firefox do not create a NodeFilter in this case.

        No new tests, already covered by:
        fast/dom/createNodeIterator-parameters.html
        fast/dom/createTreeWalker-parameters.html

        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::toWrapped):

2015-08-20  Zalan Bujtas  <zalan@apple.com>

        Make outline: auto repaint rect inflate more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=148263

        Reviewed by Simon Fraser.

        Use RenderObject::adjustRectWithMaximumOutline() when inflating is conditional and call
        RenderView::maximalOutlineSize() when it is not.
        After this changeset, we can clearly tell calls when inflating is unconditional (adjusting the size of the compositing layer) apart from
        calls when we just simply inflate the repaint rect during outline painting phase.

        No change in behaviour.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeMaxOutlineSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::isOutlinePhase):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectWithMaximumOutline):
        (WebCore::RenderObject::maximalOutlineSize): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setMaximalOutlineSize):
        (WebCore::RenderView::RenderView): Deleted.
        * rendering/RenderView.h:

2015-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Cleaup after r188591
        https://bugs.webkit.org/show_bug.cgi?id=148219

        Unreviewed.

        Forgot to update a call site of FontPlatformData().

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        Build fix after r188716.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        Add some scope so we can declare a variable (weakPtr) inside a switch statement.

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        Build fix after r188716.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        Replace m_weakFactory with m_weakPtrFactory which actually exists.

2015-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Adopt OS X's emoji behavior.
        https://bugs.webkit.org/show_bug.cgi?id=148265

        Reviewed by Simon Fraser.

        Remove our hardcoded hacks which limit the sizes of emoji. This is how
        OS X behaves with emoji.

        Test: fast/text/emoji.html

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isEmoji): Deleted.
        (WebCore::FontPlatformData::setIsEmoji): Deleted.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::isOnOrAfterIOS6): Deleted.
        (WebCore::pointAdjustedForEmoji): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::canUseFastGlyphAdvanceGetter):
        (WebCore::Font::platformInit): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont):
        (WebCore::FontPlatformData::platformDataInit): Deleted.
        (WebCore::FontPlatformData::platformDataAssign): Deleted.
        (WebCore::FontPlatformData::platformIsEqual): Deleted.
        (WebCore::FontPlatformData::ctFontSize): Deleted.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters): Deleted.
        (WebCore::FontCache::createFontPlatformData): Deleted.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Deleted.

2015-08-20  Chris Dumez  <cdumez@apple.com>

        getElementsByClassName() should return an HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=147980

        Reviewed by Darin Adler.

        Update Document.getElementsByClassName() and Element.getElementsByClassName()
        to return an HTMLCollection instead of a NodeList, as per the specification:
        - https://dom.spec.whatwg.org/#interface-document
        - https://dom.spec.whatwg.org/#interface-element

        This behavior is also consistent with other major browsers. Due to this and
        the fact that NodeList / HTMLCollection pretty much the same API, the
        compatibility risk should be fairly low.

        I also verified that the performance is the same according to the following
        performance test:
        PerformanceTests/DOM/get-elements-by-class-name-traversal-uncached.html

        Tests: fast/dom/getElementsByClassName/dumpHTMLCollection.html
               fast/dom/getElementsByClassName/return-type.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        Rename ClassNodeList.cpp file.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetImplClassName):
        Indicate that NodeList is implemented as NodeListBase. This is
        needed so that DOMNodeList can have either an HTMLCollection or
        a NodeList as internal representation. NodeListBase is a new
        common base class for HTMLCollection and NodeList.

        * dom/ClassCollection.cpp: Renamed from Source/WebCore/dom/ClassNodeList.cpp.
        (WebCore::ClassCollection::create):
        (WebCore::ClassCollection::~ClassCollection):
        * dom/ClassCollection.h: Renamed from Source/WebCore/dom/ClassNodeList.h.
        (WebCore::ClassCollection::ClassCollection):
        (WebCore::ClassCollection::elementMatches):
        Rename ClassNodeList to ClassCollection and have it subclass
        CachedHTMLCollection instead of ClassNodeList.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByClassName):
        Have getElementsByClassName return an HTMLCollection instead of a
        NodeList.

        (WebCore::ContainerNode::getElementsByClassNameForObjC):
        New method returns a NodeListBase for ObjC bindings, so they can
        convert the return value into a DOMNodeList. We need this to not
        break ObjC API compatibility.

        * dom/Document.idl:
        * dom/Element.idl:
        Have getElementsByClassName return an HTMLCollection instead of a
        NodeList, except for ObjC bindings.

        * dom/NodeList.h:
        Have NodeList subclass NodeListBase.

        * dom/NodeListBase.h: Added.
        New common base interface for HTMLCollection and NodeList. This is
        so that the internal representation for ObjC's DOMNodeList can be
        a NodeListBase instead of a NodeList. This way, the ObjC API can
        keep returning a DOMNodeList, even though our implementation now
        returns an HTMLCollection instead of a NodeList.

        * dom/NodeRareData.h:
        (WebCore::NodeListTypeIdentifier<NameNodeList>::value):
        (WebCore::NodeListTypeIdentifier<TagNodeList>::value):
        (WebCore::NodeListTypeIdentifier<HTMLTagNodeList>::value):
        (WebCore::NodeListTypeIdentifier<RadioNodeList>::value):
        (WebCore::NodeListTypeIdentifier<LabelsNodeList>::value):
        Drop ClassNodeList from the NodeListTypeIndentifiers.

        * html/CollectionType.h:
        Add new ByClass CollectionType for ClassCollection.

        * html/GenericCachedHTMLCollection.cpp:
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches):
        Handle new ByClass CollectionType in the switch statement.

        * html/HTMLCollection.cpp:
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::~HTMLCollection):
        Add support for new ByClass Collection type.

        * html/HTMLCollection.h:
        Have HTMLCollection subclass the NodeListBase interface.

2015-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the iOS build after r188726
        https://bugs.webkit.org/show_bug.cgi?id=148278

        Unreviewed.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Cleanup after r188726
        https://bugs.webkit.org/show_bug.cgi?id=148278

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-08-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Delete dead code
        https://bugs.webkit.org/show_bug.cgi?id=148278

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::copyFontCharacterSet): Deleted.
        (WebCore::appleColorEmojiCharacterSet): Deleted.
        (WebCore::phoneFallbackCharacterSet): Deleted.
        (WebCore::languageSpecificFallbackFont): Deleted.
        (WebCore::FontCache::systemFallbackForCharacters): Deleted.

2015-08-20  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, rolling out r188712.
        https://bugs.webkit.org/show_bug.cgi?id=148274

        broke allllll the tests (Requested by thorton on #webkit).

        Reverted changeset:

        "WK1 can re-enter layout during FrameView destruction and
        crash"
        https://bugs.webkit.org/show_bug.cgi?id=148237
        http://trac.webkit.org/changeset/188712

2015-08-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188717 and r188719.
        https://bugs.webkit.org/show_bug.cgi?id=148272

        Broke the Mavericks build (Requested by andersca on #webkit).

        Reverted changesets:

        "Merge Lock and LockBase"
        https://bugs.webkit.org/show_bug.cgi?id=148266
        http://trac.webkit.org/changeset/188717

        "Merge ConditionBase and Condition"
        https://bugs.webkit.org/show_bug.cgi?id=148270
        http://trac.webkit.org/changeset/188719

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Merge ConditionBase and Condition
        https://bugs.webkit.org/show_bug.cgi?id=148270

        Reviewed by Filip Pizlo.

        Change StaticCondition to Condition.

        * platform/network/cf/LoaderRunLoopCF.cpp:

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Stop using cancelCallOnMainThread in MediaPlayerPrivateMediaFoundation
        https://bugs.webkit.org/show_bug.cgi?id=148252

        Reviewed by Tim Horton.

        Replace cancelCallOnMainThread with WeakPtrs.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySetCallback):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-08-20  Beth Dakin  <bdakin@apple.com>

        WK1 can re-enter layout during FrameView destruction and crash
        https://bugs.webkit.org/show_bug.cgi?id=148237
        -and corresponding-
        rdar://problem/22356782

        Reviewed by Zalan Bujtas.

        This is a safe fix for the time being. We won't resetScrollbars() for a FrameView 
        that is in the PageCache because resetting scrollbars can re-enter layout for the 
        Frame's new FrameView, which leads to updating pages in the page cache, which 
        leads to a crash because we're in the process of destroying something
        in the page cache. We should not be able to get into this mess at all.
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):

2015-08-20  Chris Dumez  <cdumez@apple.com>

        Default value for createNodeIterator() / createTreeWalker()'s whatToShow parameter should be 0xFFFFFFFF
        https://bugs.webkit.org/show_bug.cgi?id=148238

        Reviewed by Ryosuke Niwa.

        Default value for createNodeIterator() / createTreeWalker()'s whatToShow
        parameter should be 0xFFFFFFFF as per the specification:
        - http://w3c-test.org/dom/traversal/NodeIterator.html
        - http://w3c-test.org/dom/traversal/TreeWalker.html

        Firefox and Chrome conform to the specification. However, WebKit was
        using 0 as default value.

        We still don't behave as expected in some cases, as visible from
        the checks that are still failing in the new layout tests. Those
        will be addressed separately.

        Tests: fast/dom/createNodeIterator-parameters.html
               fast/dom/createTreeWalker-parameters.html

        * dom/Document.cpp:
        (WebCore::Document::createNodeIterator):
        (WebCore::Document::createTreeWalker):
        (WebCore::Document::scheduleForcedStyleRecalc): Deleted.
        (WebCore::Document::scheduleStyleRecalc): Deleted.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::create):
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::NodeIteratorBase):
        * dom/Traversal.h:
        (WebCore::NodeIteratorBase::whatToShow):
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::TreeWalker):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create):

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Stop using cancelCallOnMainThread in MediaPlayerPrivateAVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=148248

        Reviewed by Tim Horton.

        Replace cancelCallOnMainThread with WeakPtrs, just like in MediaPlayerPrivateAVFoundationObjC.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::mainThreadCallback):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2015-08-20  Anders Carlsson  <andersca@apple.com>

        Stop using cancelCallOnMainThread in DisplayRefreshMonitorMac
        https://bugs.webkit.org/show_bug.cgi?id=148241

        Reviewed by Tim Horton.

        Create a WeakPtrFactory in DisplayRefreshMonitorMac and bind a WeakPtr in the function passed
        to callOnMainThread so we can check if the DisplayRefreshMonitorMac has gone away.

        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        (WebCore::DisplayRefreshMonitorMac::~DisplayRefreshMonitorMac):
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        AppleWin CMake build fix after r188696.

        * PlatformWin.cmake:
        No ${} fixes the problem and keeps the desired behavior.

2015-08-20  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Link errors when building with VS2015.
        https://bugs.webkit.org/show_bug.cgi?id=148233

        Reviewed by Alex Christensen.

        Include some inline function definitions.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * html/canvas/WebGLRenderingContext.cpp:

2015-08-20  Alex Christensen  <achristensen@webkit.org>

        Clean up CMake build after r188673
        https://bugs.webkit.org/show_bug.cgi?id=148234

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        Make including ANGLE headers platform specific because EFL and GTK don't want to copy headers,
        but we need to in order to get the Windows build working with each Source subdirectory isolated.

2015-08-20  Beth Dakin  <bdakin@apple.com>

        Standalone image documents should send their size to the UIClient just like 
        standalone media documents
        https://bugs.webkit.org/show_bug.cgi?id=148195
        -and corresponding-
        rdar://problem/21951253

        Reviewed by Tim Horton.

        This patch re-names mediaDocumentNaturalSizeChanged() to 
        imageOrMediaDocumentSizeChanged(), and, as the new name implies, uses the 
        function for both media documents and images.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageUpdated):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::mediaElementNaturalSizeChanged):
        * page/ChromeClient.h:

2015-08-20  Simon Fraser  <simon.fraser@apple.com>

        Add myself as the will-change contact.

        * features.json:

2015-08-20  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Treat Epoch as invalid value for "Last-Modified" header
        https://bugs.webkit.org/show_bug.cgi?id=148162
        rdar://problem/22330837

        Reviewed by Antti Koivisto.

        Ignore "Last-Modified" header when computing heuristic freshness if it
        is Epoch. CFNetwork currently converts a malformed date for Last-Modified
        into Epoch so there is no way for us to distinguish Epoch from invalid
        input. Without this, we would end up with cached resources that have a
        giant lifetime (> 4 years) due to a malformed HTTP header.

        Some Websites (e.g. www.popehat.com) also wrongly return Epoch as
        Last-Modified value and we would end up caching it overly aggressively.
        Now that we consider Epoch as an invalid value for Last-Modified, it will
        also work around this content bug.

        Test: http/tests/cache/disk-cache/disk-cache-last-modified.html

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::lastModified):

2015-08-19  Brian Burg  <bburg@apple.com>

        Web Inspector: add TestHarness option to tee all commands to system console
        https://bugs.webkit.org/show_bug.cgi?id=148181

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::unbufferedLog): Remove log prefix so output
        to stderr can be diffed against expected results without processing.

2015-08-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r188663.

        The new bindings file was added to the Visual Studio project, but was marked to not
        be built. It should have also been added to the "JSBindingsAllInOne.cpp" file so
        that the new code gets compiled.

        * bindings/js/JSBindingsAllInOne.cpp:

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        CMake Windows build should not include files directly from other Source directories
        https://bugs.webkit.org/show_bug.cgi?id=148198

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:

2015-08-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        Select validation does not correctly work when handling change event
        https://bugs.webkit.org/show_bug.cgi?id=145869

        Reviewed by Dean Jackson.

        When selecting an option in a <select> with validation that also has an onchange listener, calling
        checkValidity() for the select within the onchange handler would produce incorrect results and (on
        a debug build) crash at an assertion. This is because the change events were being dispatched before
        form validity was updated. Making the validation step come before the change event dispatch fixes
        this issue.

        Test: fast/forms/onchange-select-check-validity.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectOption): Update validity before dispatching change events.

2015-08-19  Jinyoung Hur  <hur.ims@navercorp.com>

        GraphicsContext3D::activeTexture should not be called with zero-based index
        https://bugs.webkit.org/show_bug.cgi?id=148020

        Reviewed by Alex Christensen.

        GraphicsContext3D::activeTexture should be called with an argument that is greater than or equal to 
        GraphicsContext3D::TEXTURE0.

        Test: fast/canvas/webgl/texture-complete.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::checkTextureCompleteness):

2015-08-19  Chris Dumez  <cdumez@apple.com>

        Avoid double hash lookup in our JS bindings named property getter code
        https://bugs.webkit.org/show_bug.cgi?id=148193

        Reviewed by Geoffrey Garen.

        Avoid double hash lookup in our JS bindings named property getter code
        for performance reasons.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new file.

        * bindings/js/JSDOMNamedFlowCollectionCustom.cpp: Added.
        (WebCore::JSDOMNamedFlowCollection::nameGetter):
        Moved custom named getter code for DOMNamedFlowCollection from the
        bindings generator to an actual custom bindings file.

        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        Rebaseline bindings tests.

2015-08-19  Simon Fraser  <simon.fraser@apple.com>

        Add CSS will-change to the feature list
        https://bugs.webkit.org/show_bug.cgi?id=148199

        Reviewed by Dean Jackson.

        * features.json:

2015-08-19  Eric Carlson  <eric.carlson@apple.com>

        Remove ENABLE_WEBVTT_REGIONS
        https://bugs.webkit.org/show_bug.cgi?id=148184

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_WEBVTT_REGIONS.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackRemoveCue):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::newCuesParsed):
        (WebCore::InbandGenericTextTrack::newRegionsParsed):
        (WebCore::InbandGenericTextTrack::fileFailedToParse):
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        (WebCore::InbandWebVTTTextTrack::newRegionsParsed):
        (WebCore::InbandWebVTTTextTrack::fileFailedToParse):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::cueLoadingCompleted):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        (WebCore::LoadableTextTrack::id):
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::~TextTrack):
        (WebCore::TextTrack::removeCue):
        (WebCore::TextTrack::ensureVTTRegionList):
        (WebCore::TextTrack::removeRegion):
        (WebCore::TextTrack::cueWillChange):
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.cpp:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        (WebCore::VTTCue::createCueRenderingTree):
        (WebCore::VTTCue::setRegionId):
        (WebCore::VTTCue::notifyRegionWhenRemovingDisplayTree):
        (WebCore::VTTCue::setIsActive):
        (WebCore::VTTCue::removeDisplayTree):
        (WebCore::VTTCue::settingName):
        (WebCore::VTTCue::setCueSettings):
        (WebCore::VTTCue::getCSSAlignment):
        * html/track/VTTCue.h:
        (WebCore::VTTCue::regionId):
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.cpp:
        * html/track/VTTRegion.h:
        * html/track/VTTRegion.idl:
        * html/track/VTTRegionList.cpp:
        * html/track/VTTRegionList.h:
        * html/track/VTTRegionList.idl:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseFloatPercentageValue):
        (WebCore::WebVTTParser::parseFloatPercentageValuePair):
        (WebCore::WebVTTParser::WebVTTParser):
        (WebCore::WebVTTParser::getNewCues):
        (WebCore::WebVTTParser::getNewRegions):
        (WebCore::WebVTTParser::parseFileHeader):
        (WebCore::WebVTTParser::parse):
        (WebCore::WebVTTParser::collectMetadataHeader):
        (WebCore::WebVTTParser::collectCueId):
        (WebCore::WebVTTParser::resetCueValues):
        (WebCore::WebVTTParser::createNewRegion):
        (WebCore::WebVTTParser::collectTimeStamp):
        * html/track/WebVTTParser.h:
        (WebCore::WebVTTParserClient::~WebVTTParserClient):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::newCuesParsed):
        (WebCore::TextTrackLoader::newRegionsParsed):
        (WebCore::TextTrackLoader::fileFailedToParse):
        (WebCore::TextTrackLoader::getNewCues):
        (WebCore::TextTrackLoader::getNewRegions):
        * loader/TextTrackLoader.h:
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::layout):

2015-08-19  Brent Fulgham  <bfulgham@apple.com>

        Scrollable area container is not properly cleared when page is going into the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=148182
        <rdar://problem/21969170>

        Reviewed by Dean Jackson.

        Must be tested manually going back and forth in history several times.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Clear the cached ScrollableAreas from the FrameView.
        * page/FrameView.cpp:
        (WebCore::FrameView::clearScrollableAreas): Added.
        * page/FrameView.h:

2015-08-19  Zalan Bujtas  <zalan@apple.com>

        outline-style: auto leaves bits behind on strava's flyby view.
        https://bugs.webkit.org/show_bug.cgi?id=148178

        Reviewed by Simon Fraser.

        RenderView::m_maximalOutlineSize should include outline-offset.

        Test: fast/repaint/outline-auto-with-width-less-than-focus-ring-width-and-offset-repaint.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeMaxOutlineSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):

2015-08-19  Anders Carlsson  <andersca@apple.com>

        Fix errors on bots.

        Ask the backend to cleanup and terminate

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::computeNextStateAndCleanupIfNeeded):

2015-08-19  Dean Jackson  <dino@apple.com>

        Clean up our CSS files (e.g. remove prefixes)
        https://bugs.webkit.org/show_bug.cgi?id=148194
        <rdar://problem/22351034>

        Reviewed by Brent Fulgham.

        A lot of our internal CSS was still using prefixed forms of properties.
        As I started cleaning those up, I noticed lots of small things
        like missing semicolons and whitespace.

        No change in behaviour for testing.

        * css/fullscreen.css:
        * css/html.css:
        * css/mathml.css:
        * css/mediaControls.css:
        * css/mediaControlsGtk.css:
        * css/plugIns.css:

2015-08-19  Zalan Bujtas  <zalan@apple.com>

        Cleanup outline-style: auto painting.
        https://bugs.webkit.org/show_bug.cgi?id=148159

        Reviewed by Simon Fraser.

        Old platform style required the focus ring to be painted with an offset. (https://trac.webkit.org/r5358)
        (and it has the side effect of growing outline-width adds further, unwanted offset)
        Default css for :focus is adjusted to remove this offset by setting the outline-width to 5px
        and the outline-offset to -2px. (https://trac.webkit.org/r13639)
        This patch removes both the old logic and the workaround for getting rid of the unwanted offset.

        Test: fast/repaint/outline-auto-with-default-width-and-offset-repaint.html

        * css/html.css:
        (:focus):
        (input:focus, textarea:focus, isindex:focus, keygen:focus, select:focus): Deleted.
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::computeMaxOutlineSize):
        (WebCore::RenderElement::paintFocusRing):
        (WebCore::RenderElement::paintOutline): Short circuit painting outline when painting is disabled. It
        only change behaviour for non-auto outlines -which are anyway not supposed to be painted when painting is disabled.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingWidth):
        (WebCore::RenderTheme::platformFocusRingMaxWidth): Deleted.

2015-08-18  Dean Jackson  <dino@apple.com>

        Support CSS filters without webkit prefix
        https://bugs.webkit.org/show_bug.cgi?id=148138
        <rdar://problem/22331434>

        Reviewed by Sam Weinig.

        Add support for the un-prefixed form of the CSS filter property.
        This was straightforward for the general case on HTML content.
        It was a bit more tricky on SVG content, where there already
        was an existing "filter" property/attribute. The parsing
        code is now shared between SVG and HTML, as is the
        computed style output.

        Covered by updating the existing tests, and
        adding one new test: css3/filters/unprefixed.html

        * css/CSSComputedStyleDeclaration.cpp: Rename CSSPropertyWebkitFilter to CSSPropertyFilter.
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::customCSSText): Use "filter(" as the prefix.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Rename CSSPropertyWebkitFilter to CSSPropertyFilter.
        (WebCore::CSSParser::isGeneratedImageValue): Add support for "filter()".
        (WebCore::CSSParser::parseGeneratedImage): Ditto.
        (WebCore::CSSParser::parseBuiltinFilterArguments):

        * css/CSSPropertyNames.in: Add filter. Make -webkit-filter an alias.

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::svgPropertyValue): Deleted.

        * page/animation/CSSPropertyAnimation.cpp: Rename CSSPropertyWebkitFilter to CSSPropertyFilter.
        (WebCore::PropertyWrapperAcceleratedFilter::PropertyWrapperAcceleratedFilter):
        * page/animation/KeyframeAnimation.cpp: Ditto.
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists):

        * platform/graphics/GraphicsLayer.cpp: Rename AnimatedPropertyWebkitFilter to AnimatedPropertyFilter.
        (WebCore::GraphicsLayer::validateFilterOperations):
        * platform/graphics/GraphicsLayerClient.h: Ditto.
        * platform/graphics/ca/GraphicsLayerCA.cpp: Ditto.
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateOrRemoveFilterClients): SVG manages its own filter resources,
        so we shouldn't add a layer that has an SVG root to the filter clients.

        * rendering/RenderLayerBacking.cpp: Renaming.
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerCompositor.cpp: Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

        * rendering/style/SVGRenderStyle.h: Remove the SVG filter style.
        (WebCore::SVGRenderStyle::isolatesBlending): No need to check for hasFilter().
        (WebCore::SVGRenderStyle::initialFilterResource): Deleted.
        (WebCore::SVGRenderStyle::setFilterResource): Deleted.
        (WebCore::SVGRenderStyle::filterResource): Deleted.
        (WebCore::SVGRenderStyle::hasFilter): Deleted.

        * rendering/style/SVGRenderStyleDefs.cpp: Remove the filter resource.
        (WebCore::StyleResourceData::StyleResourceData): Deleted.
        (WebCore::StyleResourceData::operator==): Deleted.
        * rendering/style/SVGRenderStyleDefs.h:

        * rendering/style/WillChangeData.cpp: Renaming.
        (WebCore::propertyCreatesStackingContext):
        (WebCore::propertyTriggersCompositing):

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isolatesBlending): Since SVGRenderStyle no longer checks
        hasFilter() in its isolatesBlending(), we need to do it here.

        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources): Dump from the CSS style value.
        * rendering/svg/SVGResources.cpp: Ditto.
        (WebCore::SVGResources::buildCachedResources):
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderer):

        * platform/graphics/texmap/TextureMapperLayer.cpp: Renaming.
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:

2015-08-18  Anders Carlsson  <andersca@apple.com>

        More work on simplifying the WebSQL code
        https://bugs.webkit.org/show_bug.cgi?id=148145

        Reviewed by Tim Horton.

        Eliminate SQLTransaction::sendToBackendState.

        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::stateFunctionFor):
        Change sendToBackendState to unreachableState,

        (WebCore::SQLTransaction::deliverTransactionCallback):
        Call deliverTransactionErrorCallback directly and schedule RunStatements on the backend.

        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        Schedule CleanupAfterTransactionErrorCallback on the backend.

        (WebCore::SQLTransaction::deliverStatementCallback):
        Fold nextStateForTransactionError into here. Schedule backend states explicitly.

        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        Schedule RunStatements on the backend.

        (WebCore::SQLTransaction::deliverSuccessCallback):
        Schedule CleanupAndTerminate on the backend.

        (WebCore::SQLTransaction::computeNextStateAndCleanupIfNeeded):
        The return value of this function isn't used to make it return void.

        (WebCore::SQLTransaction::nextStateForTransactionError): Deleted.
        Remove this, it's been folded into deliverStatementCallback.

        (WebCore::SQLTransaction::sendToBackendState): Deleted.
        Get rid of this.

        * Modules/webdatabase/SQLTransaction.h:
        Update member functions.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        Just call runStatements() directly.

        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        Just call cleanupAndTerminate() directly.

        (WebCore::SQLTransactionBackend::shouldPerformWhilePaused): Deleted.
        Get rid of an iOS member function that's no longer used.

        * Modules/webdatabase/SQLTransactionBackend.h:
        Remove member function.

2015-08-18  Filip Pizlo  <fpizlo@apple.com>

        Replace all uses of std::mutex/std::condition_variable with WTF::Lock/WTF::Condition
        https://bugs.webkit.org/show_bug.cgi?id=148140

        Reviewed by Geoffrey Garen.

        No new tests because no new behavior.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        (WebCore::ConvolverNode::reset):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurve):
        (WebCore::WaveShaperProcessor::setOversample):
        (WebCore::WaveShaperProcessor::process):
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::guidToVersionMap):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::closeDatabase):
        (WebCore::Database::getCachedVersion):
        (WebCore::Database::setCachedVersion):
        (WebCore::guidMutex): Deleted.
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        * bindings/objc/DOMInternal.mm:
        (getDOMWrapper):
        (addDOMWrapper):
        (removeDOMWrapper):
        (wrapperCacheLock): Deleted.
        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::singleton):
        (WebCore::CryptoAlgorithmRegistry::CryptoAlgorithmRegistry):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        (WebCore::registryMutex): Deleted.
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
        (WebCore::WheelEventTestTrigger::setTestCallbackAndStartNotificationTimer):
        (WebCore::WheelEventTestTrigger::deferTestsForReason):
        (WebCore::WheelEventTestTrigger::removeTestDeferralForReason):
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired):
        * page/WheelEventTestTrigger.h:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::initializeRunLoop):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::~ReverbConvolver):
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        (WebCore::ReverbConvolver::process):
        (WebCore::ReverbConvolver::reset):
        * platform/audio/ReverbConvolver.h:
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/mac/Language.mm:
        (WebCore::preferredLanguages):
        (+[WebLanguageChangeObserver languagePreferencesDidChange:]):
        (WebCore::platformUserPreferredLanguages):
        (WebCore::preferredLanguagesMutex): Deleted.
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::emptyPerform):
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):
        (WebCore::loaderRunLoopMutex): Deleted.
        (WebCore::loaderRunLoopConditionVariable): Deleted.
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::callOnMainThreadAndWait):
        * platform/network/curl/SocketStreamHandle.h:
        * platform/network/curl/SocketStreamHandleCurl.cpp:
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::sendData):
        * platform/sql/SQLiteDatabaseTracker.cpp:
        (WebCore::SQLiteDatabaseTracker::setClient):
        (WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::transactionInProgressMutex): Deleted.
        * platform/text/TextBreakIterator.cpp:
        (WebCore::compareAndSwapNonSharedCharacterBreakIterator):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::newTextCodec):
        (WebCore::atomicCanonicalTextEncodingName):
        (WebCore::dumpTextEncodingNameMap):
        (WebCore::encodingRegistryMutex): Deleted.
        * workers/WorkerThread.cpp:
        (WebCore::workerThreads):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):
        (WebCore::threadSetMutex): Deleted.

2015-08-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll snapping should trigger when receiving a momentum end wheel event
        https://bugs.webkit.org/show_bug.cgi?id=148155

        Reviewed by Alexey Proskuryakov.

        No new tests, since the purpose of this patch is to get existing tests to pass when
        allowing similar wheel events to coalesce. To accomplish this, we relax our assumption
        that the user must have generated at least 3 momentum wheel events in order for the
        gliding animation to trigger. Upon receiving a wheel event indicating the end of the
        momentum phase, we now kick off the gliding animation as long as any momentum event
        was tracked earlier in the gesture with a nonzero wheel delta.

        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Added logic to
            begin a glide animation if we have received a momentum end event but have not
            yet triggered a gliding animation.
        * platform/cocoa/ScrollSnapAnimatorState.h:
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::ScrollSnapAnimatorState::wheelDeltaTrackingIsInProgress): Minor refactoring
            to make the wheel event processing code more readable.
        (WebCore::ScrollSnapAnimatorState::hasFinishedTrackingWheelDeltas): Ditto.

2015-08-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Punctuation near Hindi text is garbled when styled with the system font
        https://bugs.webkit.org/show_bug.cgi?id=148164

        Reviewed by Brian Burg.

        Fonts cache whether or not they are the system font. This caching took place at the end of Font::platformInit().
        However, in the middle of Font::platformInit(), we look up a glyph, which calls GlyphPage::fill() which consults
        with this cache. However, at this point, the cache has not been constructed yet. The solution is just to
        construct the cache earlier (at the beginning of the function).

        Consulting with the cache before it is populated causes it to erroneously say that no fonts are system fonts.
        Then, we use Core Graphics to ask for glyphs instead of Core Text. Core Graphics, however, is incapable of
        handling the system font, and returns us garbled results. In particular, when the system language is set to
        Japanese, the system font does not support punctuation, and Core Text tells us so. However, Core Graphics
        erroneously tells us that the system font does support punctuation.

        Then, if text is near the punctuation which causes us to take the complex text codepath (such as Hindi text),
        we tell Core Text to explicitly lay out the punctuation using the system font (which does not support
        punctuation). Core Text then replies that the provided font doesn't support the punctuation, and that we should
        use LastResort with some other glyphs instead. WebKit then disregards the font CoreText told us to use (because
        we are oh-so-sure that the font in question supports punctuation) and uses the LastResort glyph IDs with our
        font, which causes arbitrary glyphs to be shown.

        Test: fast/text/hindi-system-font-punctuation.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):

2015-08-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Links for rules in <style> are incorrect, do not account for <style> offset in the document
        https://bugs.webkit.org/show_bug.cgi?id=148141

        Reviewed by Brian Burg.

        Test: inspector/css/getAllStyleSheets.html

        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::createInline):
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        Include the starting position when created by the Parser.
        Default to the minimum position, which should never be
        possible for an inline <style> because the "<style>" characters
        themselves require at least some offset.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        Provide the start position offset for this stylesheet if it was inline.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        Include new protocol values for the style sheet.

2015-08-18  Dean Jackson  <dino@apple.com>

        Add null check in ImageBufferData::getData
        https://bugs.webkit.org/show_bug.cgi?id=148156
        <rdar://problem/22337157>

        Reviewed by Simon Fraser.

        We're getting a number of crash reports that suggest the allocation
        of the result buffer has failed, but have been unable to reproduce.
        This patch adds a null check to the allocation, and logs a message
        to the system console. This might avoid the crashes, and hopefully
        we'll see the message.

        No new tests, since we're unable to reproduce this crash.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Add a null-check and early
        return.

2015-08-18  Chris Dumez  <cdumez@apple.com>

        Use CSSValuePool::singleton() instead of cssValuePool()
        https://bugs.webkit.org/show_bug.cgi?id=148132

        Reviewed by Simon Fraser.

        Use CSSValuePool::singleton() instead of cssValuePool() to access the
        global CSSValuePool instance, as per coding style.

2015-08-17  Matt Rajca  <mrajca@apple.com>

        Media Session: don't begin listening for interruptions when an interruption provider is created
        https://bugs.webkit.org/show_bug.cgi?id=148109

        Reviewed by Eric Carlson.

        If we call `beginListeningForInterruption` in MediaSessionInterruptionProvider's constructor, the current
        class's implementation will get called, not implementations provided by subclasses (this makes sense since base
        classes are initialized before derived classes). To fix this, we let clients of
        MediaSessionInterruptionProvider start listening for interruptions instead. As a corollary of this, we can
        make MediaSessionInterruptionProvider's methods pure virtual.

        * Modules/mediasession/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        * platform/mediasession/MediaSessionInterruptionProvider.h:
        * platform/mediasession/MediaSessionInterruptionProvider.cpp:
        (WebCore::MediaSessionInterruptionProvider::MediaSessionInterruptionProvider):

2015-08-18  Eric Carlson  <eric.carlson@apple.com>

        Remove "platform text track menu"
        https://bugs.webkit.org/show_bug.cgi?id=148139

        Reviewed by Jer Noble.

        No new tests, this patch removes unused code.

        * WebCore.xcodeproj/project.pbxproj: Remove PlatformTextTrackMenu.h.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Remove PLATFORM_TEXT_TRACK_MENU.
        (WebCore::HTMLMediaElement::pendingActionTimerFired):
        (WebCore::HTMLMediaElement::textTrackModeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerDidRemoveVideoTrack):
        (WebCore::HTMLMediaElement::closeCaptionTracksChanged):
        (WebCore::HTMLMediaElement::addAudioTrack):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::setSelectedTextTrack): Deleted.
        (WebCore::HTMLMediaElement::platformTextTracks): Deleted.
        (WebCore::HTMLMediaElement::notifyMediaPlayerOfTextTrackChanges): Deleted.
        (WebCore::HTMLMediaElement::platformTextTrackMenu): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::player):
        * html/track/InbandTextTrack.h:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::hasCue):
        (WebCore::TextTrack::isMainProgramContent):
        (WebCore::TextTrack::platformTextTrack): Deleted.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::resetMediaEngines):
        (WebCore::MediaPlayer::implementsTextTrackControls): Deleted.
        (WebCore::MediaPlayer::textTrackMenu): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::tracksChanged):
        (WebCore::MediaPlayerPrivateInterface::simulateAudioInterruption):
        (WebCore::MediaPlayerPrivateInterface::implementsTextTrackControls): Deleted.
        (WebCore::MediaPlayerPrivateInterface::textTrackMenu): Deleted.
        * platform/graphics/PlatformTextTrack.h:
        * platform/graphics/PlatformTextTrackMenu.h: Removed.

2015-08-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Search input results and clear icons are misaligned when padding is added
        https://bugs.webkit.org/show_bug.cgi?id=148146
        <rdar://problem/22310951>

        Reviewed by Zalan Bujtas.

        Use content box rect to determine where to draw the results and cancel buttons
        of a search field that has -webkit-appearance: textfield. Previously, we used
        the bounding box, which caused the buttons to render in the input's padding
        region.

        Test: platform/mac/fast/forms/search/search-padding-cancel-results-buttons.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton): Use content box to
            compute where to render cancel button.
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton): Use content box to
            compute where to render results button.

2015-08-18  Dean Jackson  <dino@apple.com>

        CAOpenGLLayer doesn't need an SPI declaration
        https://bugs.webkit.org/show_bug.cgi?id=148151

        Reviewed by Tim Horton.

        Follow-up to https://trac.webkit.org/r188608.
        The property is in the public SDK, so we don't need
        to declare it.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-08-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [El Capitan] Fix the open source build
        https://bugs.webkit.org/show_bug.cgi?id=148134

        Reviewed by Anders Carlsson.

        No new tests because there is no behavior change.

        Need to declare CGFontRenderingStyle.

        * platform/spi/cocoa/CoreTextSPI.h:

2015-08-18  Dean Jackson  <dino@apple.com>

        CAOpenGLLayer needs a named class extension for non-internal installs
        https://bugs.webkit.org/show_bug.cgi?id=148151
        <rdar://problem/22335111>

        Reviewed by Tim Horton.

        In order to build using the public SDK on El Capitan, we can't
        use a class extension to declare this SPI.

        No change in behaviour, so no new tests.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-08-18  Simon Fraser  <simon.fraser@apple.com>

        will-change: backface-visibility should not cause stacking context
        https://bugs.webkit.org/show_bug.cgi?id=148091

        Reviewed by Zalan Bujtas.
        
        Take CSSPropertyWebkitBackfaceVisibility out of the list of properties that causes
        will-change to create stacking context, since no value of the property creates
        stacking.

        Move willChangeCreatesStackingContext() and shouldWillChangeCreateStackingContext()
        into RenderInline since it's only called from there.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::shouldWillChangeCreateStackingContext): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::willChangeCreatesStackingContext): Deleted.
        * rendering/RenderInline.h:
        (WebCore::RenderInline::willChangeCreatesStackingContext):
        * rendering/style/WillChangeData.cpp:
        (WebCore::propertyCreatesStackingContext): Deleted.

2015-08-18  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, fix the cairo build after r188594.

        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        Include Lock.h

2015-08-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, fix the cairo build.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-08-17  Filip Pizlo  <fpizlo@apple.com>

        Replace all remaining uses of WTF::Mutex with WTF::Lock
        https://bugs.webkit.org/show_bug.cgi?id=148089

        Reviewed by Geoffrey Garen.

        No new tests because no new behavior.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::addAudioConsumer):
        (WebCore::MediaStreamAudioSource::removeAudioConsumer):
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::close):
        (WebCore::Database::runTransaction):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTaskSynchronizer::taskCompleted):
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::closeAllDatabases):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::setClient):
        (WebCore::notificationMutex):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        (WebCore::SQLCallbackWrapper::hasCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::getNextStatement):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):
        * bindings/js/WorkerScriptController.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::MessagePortChannel::locallyEntangledPort):
        (WebCore::PlatformMessagePortChannel::setRemotePort):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        (WebCore::PlatformMessagePortChannel::closeInternal):
        * dom/default/PlatformMessagePortChannel.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::synchronousNativeIconForPageURL):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::performRetainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::performReleaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
        (WebCore::IconDatabase::pageURLMappingCount):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::iconRecordCount):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::wakeSyncThread):
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer):
        (WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::IconDatabase::performOpenInitialization):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::writeToDatabase):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        (WebCore::IconDatabase::cleanupSyncThread):
        * loader/icon/IconDatabase.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFramePinState):
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
        (WebCore::ScrollingTree::isRubberBandInProgress):
        (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
        (WebCore::ScrollingTree::isScrollSnapInProgress):
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
        (WebCore::ScrollingTree::setCanRubberBandState):
        (WebCore::ScrollingTree::rubberBandsAtLeft):
        (WebCore::ScrollingTree::rubberBandsAtRight):
        (WebCore::ScrollingTree::rubberBandsAtBottom):
        (WebCore::ScrollingTree::rubberBandsAtTop):
        (WebCore::ScrollingTree::setScrollPinningBehavior):
        (WebCore::ScrollingTree::scrollPinningBehavior):
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        (WebCore::ScrollingTree::latchedNode):
        (WebCore::ScrollingTree::setLatchedNode):
        (WebCore::ScrollingTree::clearLatchedNode):
        * page/scrolling/ScrollingTree.h:
        * platform/MemoryPressureHandler.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::clearMemoryPressure):
        (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::setMonotonicAnimationStartTime):
        (WebCore::DisplayRefreshMonitor::mutex):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks):
        (WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::callbackContext):
        (WebCore::AVFWrapper::~AVFWrapper):
        (WebCore::AVFWrapper::mapLock):
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setTilesOpaque):
        (WebCore::LegacyTileCache::doLayoutTiles):
        (WebCore::LegacyTileCache::setCurrentScale):
        (WebCore::LegacyTileCache::commitScaleChange):
        (WebCore::LegacyTileCache::layoutTilesNow):
        (WebCore::LegacyTileCache::layoutTilesNowForRect):
        (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
        (WebCore::LegacyTileCache::removeAllTiles):
        (WebCore::LegacyTileCache::removeForegroundTiles):
        (WebCore::LegacyTileCache::setContentReplacementImage):
        (WebCore::LegacyTileCache::contentReplacementImage):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        (WebCore::LegacyTileCache::setNeedsDisplayInRect):
        (WebCore::LegacyTileCache::updateTilingMode):
        (WebCore::LegacyTileCache::setTilingMode):
        (WebCore::LegacyTileCache::doPendingRepaints):
        (WebCore::LegacyTileCache::flushSavedDisplayRects):
        (WebCore::LegacyTileCache::prepareToDraw):
        * platform/ios/LegacyTileLayerPool.h:
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::takeLayerWithSize):
        (WebCore::LegacyTileLayerPool::setCapacity):
        (WebCore::LegacyTileLayerPool::prune):
        (WebCore::LegacyTileLayerPool::drain):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::add):
        (WebCore::CurlDownloadManager::remove):
        (WebCore::CurlDownloadManager::getActiveDownloadCount):
        (WebCore::CurlDownloadManager::getPendingDownloadCount):
        (WebCore::CurlDownloadManager::stopThreadIfIdle):
        (WebCore::CurlDownloadManager::updateHandleList):
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::getTempPath):
        (WebCore::CurlDownload::getUrl):
        (WebCore::CurlDownload::getResponse):
        (WebCore::CurlDownload::closeFile):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):
        (WebCore::CurlDownload::didFail):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::cookieJarPath):
        (WebCore::sharedResourceMutex):
        (WebCore::curl_lock_callback):
        (WebCore::curl_unlock_callback):
        * platform/network/ios/QuickLook.mm:
        (WebCore::QLDirectoryAttributes):
        (qlPreviewConverterDictionaryMutex):
        (WebCore::addQLPreviewConverterWithFileForURL):
        (WebCore::qlPreviewConverterUTIForURL):
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::safeQLURLForDocumentURLAndResourceURL):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::setAuthorizer):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::databaseMutex):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:

2015-08-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Honor the 'trak' table by opting in via text-rendering: optimizeLegibility
        https://bugs.webkit.org/show_bug.cgi?id=148119
        <rdar://problem/22291561>

        Reviewed by Tim Horton.

        When the author has opted in by specifying "text-rendering: optimizeLegibility;", we should
        honor the font's 'trak' table. We do this by specifying kCTFontOpticalSizeAttribute at font
        creation time, and by using CTFontGetAdvancesForGlyphs() instead of
        CGFontGetGlyphAdvancesForStyle().

        Test: fast/text/trak-optimizeLegibility.html

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagKey): Make our caches sensitive to TextRenderingMode.
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Add a TextRenderingMode member variable.
        (WebCore::FontPlatformData::operator=): Update to consult with the new member.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::textRenderingMode): Getter.
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont): Specify kCTFontOpticalSizeAttribute.
        (WebCore::applyFontFeatureSettings): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::canUseFastGlyphAdvanceGetter): Use CTFontGetAdvancesForGlyphs() if we are
        optimizeLegibility.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData): Pass the TextRenderingMode around.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters): Update to call renamed function.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamily): Ditto.
        (WebCore::FontCache::systemFallbackForCharacters): Ditto.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Ditto.
        * platform/spi/cocoa/CoreTextSPI.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription): Ditto.

2015-08-18  Chris Dumez  <cdumez@apple.com>

        Make our bindings' GetOwnPropertySlot() behave according to specification
        https://bugs.webkit.org/show_bug.cgi?id=148092

        Reviewed by Geoffrey Garen.

        Make our bindings' GetOwnPropertySlot() behave according to
        specification. In particular, our bindings use to do:
        1. Indexed getter
        2. Check static properties
        3. Prototype check
        4. Named getter
        5. Check own properties

        According to the specification [1][2], we should do:
        - If the interface has [OverrideBuiltins]:
            1. Indexed getter
            2. Named getter
            3. Static / own properties
        - Otherwise:
            1. Indexed getter
            2. Static / own properties
            3. Prototype check
            4. Named getter

        This patch adds support for the [OverrideBuiltins] IDL extended
        attribute [3] and aligns our bindings implementation with the Web IDL
        specification weither that IDL extended attribute is present or
        not.
        
        [1] https://heycam.github.io/webidl/#getownproperty-guts
        [2] https://heycam.github.io/webidl/#dfn-named-property-visibility
        [3] https://heycam.github.io/webidl/#OverrideBuiltins

        Performance:
        - PerformanceTests/Bindings/childNodes-traversal.html: ~Same
        - PerformanceTests/Bindings/children-traversal.html: +104% :)

        No new tests, covered by:
        fast/dom/htmlcollection-getownproperty.html
        fast/dom/collection-length-should-not-be-overridden.html
        fast/forms/input-named-action-overrides-action-attribute.html

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        Add assertions to make sure we don't use HTMLCollection's namedGetter()
        for HTMLFormControlsCollection / HTMLOptionsCollection subclasses.
        We should use the subclasses' namedGetter() instead.

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::canGetItemsForName):
        (WebCore::JSHTMLOptionsCollection::nameGetter):
        Add code for handling named getter requests on
        HTMLOptionsCollection.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::canGetItemsForName):
        (WebCore::JSNodeList::nameGetter):
        Refactor custom code for the NodeList named getter, now that the
        IDL interface is using [CustomNamedGetter] instead of
        [JSCustomGetOwnPropertySlotAndDescriptor].

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateHeaderContentHeader): Deleted.
        - Add support for the [OverrideBuiltins] IDL extended attribute and
        update the generated getOwnPropertySlot() methods to match the
        Web IDL specification.
        - Also drop the JSC::HasImpureGetOwnPropertySlot flag for interfaces
        that have a named getter but NOT the [OverrideBuiltins] IDL extended
        attribute. Without [OverrideBuiltins], named properties can no longer
        shadow own properties so we no longer need to mark GetOwnPropertySlot
        as impure. This allows caching of properties.

        * bindings/scripts/IDLAttributes.txt:
        Add [OverrideBuiltins] IDL extended attribute [3].

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::getOwnPropertySlot):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::getOwnPropertySlot):
        Rebaseline the bindings tests as their getOwnPropertySlot() method
        is now different.

        * bindings/scripts/test/GObject/WebKitDOMTestOverrideBuiltins.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestOverrideBuiltins.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestOverrideBuiltinsPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp: Added.
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h: Added.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/ObjC/DOMTestOverrideBuiltins.h: Added.
        * bindings/scripts/test/ObjC/DOMTestOverrideBuiltins.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestOverrideBuiltinsInternal.h: Added.
        * bindings/scripts/test/TestOverrideBuiltins.idl: Added.
        Add bindings test coverage for the new [OverrideBuiltins] IDL extended
        attribute [3].

        * dom/DOMStringMap.idl:
        Add [OverrideBuiltins] IDL extended attribute to match the specification:
        https://html.spec.whatwg.org/multipage/infrastructure.html#domstringmap

        * dom/NodeList.idl:
        Use CustomNamedGetter IDL extended attribute instead of
        JSCustomGetOwnPropertySlotAndDescriptor as NodeList merely implements
        a custom named getter. This makes sure that the order in which the
        named getter is called is correct as per the Web IDL specification.

        * html/HTMLDocument.idl:
        Add [OverrideBuiltins] IDL extended attribute to match the specification:
        https://html.spec.whatwg.org/multipage/dom.html#the-document-object

        * html/HTMLFormElement.idl:
        Add [OverrideBuiltins] IDL extended attribute to match the specification:
        https://html.spec.whatwg.org/multipage/forms.html#the-form-element

        * html/HTMLOptionsCollection.idl:
        Add missing 'getter' in front of the named getter, as the per the HTML
        specification. Without this, HTMLOptionsCollection would not be
        recognized as a named properties object, which means that we would not
        check the HTMLOptionsCollection prototype before querying the named
        getter on HTMLCollection. This used to work because the bindings
        generator was hard-coding the prototype check for every HTML*Collection
        IDL interface. In this patch, we generalized the check to every
        interface that has a named getter.

2015-08-18  Per Arne Vollan  <peavo@outlook.com>

        [Win] Popup menu displayed at incorrect position when page is scrolled and device scale factor != 1.
        https://bugs.webkit.org/show_bug.cgi?id=148130

        Reviewed by Alex Christensen.

        Scale WebView coordinates with device scale factor.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):

2015-08-18  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Do not stretch always grid items with auto width
        https://bugs.webkit.org/show_bug.cgi?id=148069

        Reviewed by Darin Adler.

        We assumed that any grid item with 'auto' width will be stretched
        to fill all the available space in its grid area. We assumed this
        because grid area acts as item's container.

        However, Grid Layout specification states on its Alignment section
        that items will be stretched by default, unless either
        justify-self or align-self compute to a value other than stretch
        or margins are auto. In those cases, grid items will auto-size to
        fit their contents.

        Tests:
        fast/css-grid-layout/grid-align-justify-stretch.html
        fast/css-grid-layout/grid-item-auto-margins-and-stretch.html
        fast/css-grid-layout/grid-items-should-not-be-stretched-when-height-or-width-or-margin-change.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::RenderGrid::needToStretchChildLogicalHeight): Deleted.
        * rendering/RenderGrid.h:

2015-08-18  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Update implementation with the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=147978

        Reviewed by Darin Adler.

        Changed the way the read and closed promises are resolved and the stream is released when an even closes or
        errors the stream.

        Current tests suffice after changing the order of the promise resolution according to the new spec.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::releaseReader): Changed how the promises are resolved.
        (WebCore::ReadableStream::changeStateToErrored): Changed how the promises are resolved and manually releasing
        the stream instead of calling releaseReader according to the spec.

2015-08-17  Zalan Bujtas  <zalan@apple.com>

        Outline with auto style leaves bits behind when the the box is moved.
        https://bugs.webkit.org/show_bug.cgi?id=148100

        Reviewed by Simon Fraser.

        We paint the focus ring when 'outline-style: auto' is present, however
        we don't take the focus ring width into account when the repaint rect
        is computed.

        Tests: fast/repaint/outline-with1px-auto-repaint-rect.html
               fast/repaint/outline-with2px-auto-repaint-rect.html
               fast/repaint/outline-with3px-auto-repaint-rect.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingMaxWidth): Deleted. : 0 as focus ring width is incorrect.
        The reason why r169699 fixed the failing cases was because they all had outline width < 3 (but no auto outline style).
        The correct fix is to check if the style requires focus ring painting and use the RenderTheme::platformFocusRingMaxWidth
        accordingly.

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Address post-commit review
        https://bugs.webkit.org/show_bug.cgi?id=147864

        Reviewed by Darin Adler.

        Create helper functions to cast between NSFont*s and CTFontRefs.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::toCTFont):
        (WebCore::toNSFont):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCreateScaledFont):
        (WebCore::Font::compositeFontReferenceFont):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::platformPurgeInactiveFontData):
        (WebCore::lookupCTFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/DragImageMac.mm:
        (WebCore::fontFromNSFont):
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * platform/spi/mac/NSFontSPI.h:

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        WinCairo build fix after r188566

        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        Remove reference to removed m_isCompositeFontReference.

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Add const to content extension parser
        https://bugs.webkit.org/show_bug.cgi?id=148044

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::containsOnlyASCIIWithNoUppercase):
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::getTypeFlags):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        Add const.  No change in behavior.

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Remove support for composite fonts
        https://bugs.webkit.org/show_bug.cgi?id=147920

        Reviewed by Dan Bernstein.

        Composite fonts were first introduced in [1]. These composite fonts are extremely rare
        because:
        1. None of the preinstalled fonts on either OS X nor iOS are composite fonts,
        2. WebKit does not support loading web fonts from composite font files, and
        3. WebKit's support only ever existed on OS X (none of the other ports).

        In fact, no one I've consulted with has ever seen any of these fonts used in the wild.
        The fonts also require a fundamentally broken code path, and add complexity to WebKit.

        [1] https://bugs.webkit.org/attachment.cgi?id=134923&action=review

        No new tests.

        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Deleted.
        (WebCore::FontPlatformData::operator=): Deleted.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isCompositeFontReference): Deleted.
        (WebCore::FontPlatformData::operator==): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::compositeFontReferenceFont): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData): Deleted.
        (WebCore::FontPlatformData::setFont): Deleted.
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):

2015-08-17  Tim Horton  <timothy_horton@apple.com>

        Some functions on DictionaryLookup.h should just be generic functions elsewhere
        https://bugs.webkit.org/show_bug.cgi?id=138567

        Reviewed by Dean Jackson.

        No new tests, just refactoring.

        * dom/Range.cpp:
        (WebCore::Range::contains):
        * dom/Range.h:
        Add a Range::contains(VisiblePosition).
        It's simpler than the old thing from DictionaryLookup.mm, but does the same thing.
        It's so simple that it doesn't necessarily need to exist, but it seems useful.

        * editing/VisiblePosition.cpp:
        (WebCore::makeRange):
        nullptrs

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::selectionContainsPosition):
        (WebCore::rangeForDictionaryLookupAtHitTestResult):
        (WebCore::isPositionInRange): Deleted.
        (WebCore::shouldUseSelection): Deleted.
        Move isPositionInRange to Range.
        Rename shouldUseSelection to what it really means.
        I didn't move selectionContainsPosition to VisibleSelection because it
        only handles Range selections, not any of the ohers, and thus isn't
        generic enough to put there.

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        [Win CMake] Allow WebKitLibraries directory to be set from the command line
        https://bugs.webkit.org/show_bug.cgi?id=148112

        Reviewed by Brent Fulgham.

        * PlatformAppleWin.cmake:
        * PlatformWinCairo.cmake:
        Don't use an environment variable for WEBKIT_LIBRARIES_DIR.  

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Migrate off of CTFontSetRenderingParameters()
        https://bugs.webkit.org/show_bug.cgi?id=148113

        Reviewed by Lucas Forschler.

        Instead, use CTFontSetRenderingStyle().

        No new tests because there is no behavior change.

        * platform/spi/cocoa/CoreTextSPI.h:

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Build Debug Suffix on Windows with CMake
        https://bugs.webkit.org/show_bug.cgi?id=148083

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        * PlatformAppleWin.cmake:
        * PlatformWin.cmake:
        Add DEBUG_SUFFIX

2015-08-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement IntegerHasher
        https://bugs.webkit.org/show_bug.cgi?id=147866

        Reviewed by Darin Adler and Anders Carlsson.

        Rename StringHasher.h to Hasher.

        No new tests because there is no behavior difference.

        * contentextensions/DFAMinimizer.cpp: Use new #include.
        * contentextensions/HashableActionList.h: Ditto.
        * platform/graphics/FontFeatureSettings.cpp:
        (WebCore::FontFeatureSettings::hash): Use new IntegerHasher class.
        (WebCore::FontFeature::hash): Deleted.
        * platform/graphics/FontFeatureSettings.h: Remove unnecessary function.
        * platform/graphics/Gradient.cpp: Use new #include.
        * platform/graphics/WidthCache.h: Ditto.

2015-08-17  Chris Dumez  <cdumez@apple.com>

        Log actual PageCache retrieval success rate using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=147937

        Reviewed by Antti Koivisto.

        Log actual PageCache retrieval success rate using diagnostic logging.
        Previously, we would only log how successful we are at saving entries
        into the cache, which is not the most interesting metric.

        * history/PageCache.cpp:
        (WebCore::canCachePage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::canCacheKey):
        * page/DiagnosticLoggingKeys.h:

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Move some commands from ./CMakeLists.txt to Source/cmake
        https://bugs.webkit.org/show_bug.cgi?id=148003

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Added commands needed to build WebCore by itself.

2015-08-17  Alex Christensen  <achristensen@webkit.org>

        Remove unused multisampling check
        https://bugs.webkit.org/show_bug.cgi?id=148030

        Reviewed by Dean Jackson.

        No change in behavior.
        Extensions3DOpenGLCommon.m_maySupportMultisampling is always true.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        (WebCore::Extensions3DOpenGLCommon::isImagination):
        (WebCore::Extensions3DOpenGLCommon::vendor):
        (WebCore::Extensions3DOpenGLCommon::requiresBuiltInFunctionEmulation):
        (WebCore::Extensions3DOpenGLCommon::requiresRestrictedMaximumTextureSize):
        (WebCore::Extensions3DOpenGLCommon::maySupportMultisampling): Deleted.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::validateDepthStencil):

2015-08-17  Andy Estes  <aestes@apple.com>

        REGRESSION (r188486): Crash in SubresourceLoader::didReceiveResponse() when TemporaryChange goes out of scope
        https://bugs.webkit.org/show_bug.cgi?id=148082

        Reviewed by Alexey Proskuryakov.

        Covered by existing tests run under ASan or Guard Malloc.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Ensure that callingDidReceiveResponse is destroyed while the
        SubresourceLoader is still alive by declaring it after protect.

2015-08-17  Simon Fraser  <simon.fraser@apple.com>

        will-change should sometimes trigger compositing
        https://bugs.webkit.org/show_bug.cgi?id=148072

        Reviewed by Tim Horton.
        
        Implement the compositing side-effects of will-change, if any of the
        following properties are specified:
            opacity
            filter (as -webkit-filter)
            backdrop-filter (as -webkit-backdrop-filter)
            transform (on transformable elements only)

        Tests: compositing/layer-creation/will-change-change.html
               compositing/layer-creation/will-change-layer-creation.html

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer): Tell the inspector
        about will-change.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference): Need to trigger a recomposite if
        will-change includes a compositing trigger property. This gets called before and
        after setting the style, so this checks both states.
        (WebCore::RenderElement::shouldWillChangeCreateStackingContext):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::willChangeCreatesStackingContext): Helper function that
        RenderInline uses to determine if it needs to create a RenderLayer, since RenderInline
        doesn't get automatic layer RenderLayers as a side effect of having non-auto z-index
        in the style.
        * rendering/RenderInline.h: Need to trigger a RenderLayer if will-change includes
        a property that applies to inlines.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Call requiresCompositingForWillChange().
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Call requiresCompositingForWillChange().
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Include requiresCompositingForWillChange().
        (WebCore::RenderLayerCompositor::requiresCompositingForWillChange): If will-change contains a
        property that would trigger compositing on this element, return true.
        * rendering/RenderLayerCompositor.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Set ContextSensitivePropertyWillChange in
        changedContextSensitiveProperties if will-change changes.
        * rendering/style/RenderStyle.h: Rename for clarity.
        * rendering/style/RenderStyleConstants.h: Add ContextSensitivePropertyWillChange.
        * rendering/style/WillChangeData.cpp:
        (WebCore::propertyCreatesStackingContext): Subset of properties that create stacking
        context on any element.
        (WebCore::propertyCreatesStackingContextOnBoxesOnly): Additional properties that
        create stacking context on boxes.
        (WebCore::propertyTriggersCompositing): Properties that trigger compositing on
        any element.
        (WebCore::propertyTriggersCompositingOnBoxesOnly): Additional properties that
        trigger compositing on boxes.
        (WebCore::WillChangeData::addFeature): As features are added, manage a set of
        flags to know if they trigger stacking context or compositing, on inlines and boxes.
        (WebCore::WillChangeData::createsStackingContext): Deleted.
        * rendering/style/WillChangeData.h:
        (WebCore::WillChangeData::canCreateStackingContext):
        (WebCore::WillChangeData::canCreateStackingContextOnInline):
        (WebCore::WillChangeData::canTriggerCompositing):
        (WebCore::WillChangeData::canTriggerCompositingOnInline):

2015-08-17  Timothy Horton  <timothy_horton@apple.com>

        Holes for find matches that span multiple lines are completely wrong
        https://bugs.webkit.org/show_bug.cgi?id=148065
        <rdar://problem/5305002>

        Reviewed by Simon Fraser.

        Test: fast/text/mark-matches-broken-line-rendering.html

        Two big problems with find holes:
            - RenderedDocumentMarker only has one rect, but a marker can be painted
              by multiple text runs, each with their own rendered rect
            - paintTextMatchMarker does std::max((unsigned)a, (unsigned)0), which is
              obviously an overflow problem/not going to work if a is negative

        The combination of these issues causes the holes for find matches to be
        very broken: text that isn't part of the match is highlighted, and some
        text that is part of the match isn't highlighted.

        To fix, make RenderedDocumentMarker support multiple rects, and use signed
        math (like paintDocumentMarker already did) when computing positions in paintTextMatchMarker.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        * dom/RenderedDocumentMarker.h:
        (WebCore::RenderedDocumentMarker::RenderedDocumentMarker):
        (WebCore::RenderedDocumentMarker::isRendered):
        (WebCore::RenderedDocumentMarker::contains):
        (WebCore::RenderedDocumentMarker::addRenderedRect):
        (WebCore::RenderedDocumentMarker::renderedRects):
        (WebCore::RenderedDocumentMarker::invalidate):
        (WebCore::RenderedDocumentMarker::setRenderedRect): Deleted.
        (WebCore::RenderedDocumentMarker::renderedRect): Deleted.
        (WebCore::RenderedDocumentMarker::invalidMarkerRect): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):

2015-08-17  Timothy Horton  <timothy_horton@apple.com>

        Adopt shrink-wrapping for TextIndicators on Mac
        https://bugs.webkit.org/show_bug.cgi?id=148064

        Reviewed by Beth Dakin.

        Instead of indicating the bounding rect when there are multiple text rects,
        use shrink-wrapping for TextIndicatorWindow (on Mac), like we do on iOS.

        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        Make getPreviewSnapshotImage use the same options that iOS WebKit2 uses.
        This fixes a regression from r188420 where iOS WebKit1 TextIndicators lost
        all of the relevant (previously hardcoded inside TextIndicator) options.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::initializeIndicator):
        Don't keep indicatesCurrentSelection in TextIndicatorData. Instead,
        just pass it through to initializeIndicator. Add a flag which stops us
        from zeroing out the margin if indicatesCurrentSelection is true.
        Move default margins into TextIndicator so they can be applied to the stored rects
        just like on iOS, instead of trying to apply them later like we used to on Mac.

        * page/TextIndicator.h:
        (WebCore::TextIndicator::indicatesCurrentSelection): Deleted.
        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (outsetIndicatorRectIncludingShadow): Deleted.
        (textIndicatorsForTextRectsOverlap): Deleted.
        Make use of pathsWithShrinkWrappedRects for TextIndicatorWindow, instead
        of just smushing all intersecting rects together. Use the computed path
        for the shadows and to mask the yellow highlight and snapshot layer.

        * platform/graphics/PathUtilities.cpp:
        (WebCore::PathUtilities::pathsWithShrinkWrappedRects):
        (WebCore::PathUtilities::pathWithShrinkWrappedRects):
        * platform/graphics/PathUtilities.h:
        Make it possible to retrieve each non-intersecting path individually, instead
        of just a single giant Path, so that TextIndicatorWindow can make separate
        layers for each one (so they can bounce separately).

2015-08-17  Simon Fraser  <simon.fraser@apple.com>

        Remove some includes from Node.cpp
        https://bugs.webkit.org/show_bug.cgi?id=148000

        Reviewed by Anders Carlsson.

        No need for these includes.

        * dom/Node.cpp:

2015-08-17  Chris Dumez  <cdumez@apple.com>

        Accessing HTMLCollection.length is slow
        https://bugs.webkit.org/show_bug.cgi?id=148039

        Reviewed by Ryosuke Niwa.

        Accessing was HTMLCollection.length is slow, much slower than accessing
        NodeList.length. The reason is that HTMLCollection's bindings code is
        slightly different. In particular, HTMLCollection's GetOwnPropertySlot()
        has an extra check to see if the PropertyName is available on the
        prototype before doing:
        1. Check static properties (getStaticValueSlotEntryWithoutCaching())
        2. Indexed getter
        3. Named getter
        4. Check own properties (getStaticValueSlot())

        This means that everytime the JavaScript was accessing HTMLCollection.length
        or HTMLCollection[index], we would check if length / index was present on the
        prototype before calling HTMLCollection::length() / HTMLCollection::item(i).
        The prototype check is fairly expensive and was making traversing an
        HTMLCollection much slower than traversing a NodeList.

        In this patch, I refactored GetOwnPropertySlot() to do:
        1. Indexed getter
        2. Check static properties
        3. Prototype check
        4. Named getter
        5. Check own properties

        This way, the prototype check is no longer slowing down HTMLCollection
        traversal. What matters is that we do the prototype check *before* calling
        the named getter as we don't want named properties to mask properties on
        the prototype.

        Note that this patch takes the minimal approach to get the performance win
        while limiting the risk of breakage. Indeed, the current behavior still
        does not match the WebIDL specification, which seems to indicate the order
        should be:
        1. Indexed getter
        2. Check static / own properties
        3. Prototype check
        4. Named getter

        Once we match the specification, I believe we will be able to drop the
        JSC::HasImpureGetOwnPropertySlot flag on HTMLCollection, which currently
        makes HTMLCollection.length not cacheable. Right now, I believe we still
        need this flag because named properties can still mask own properties.

        Performance:
        /Bindings/childNodes-traversal: 5597.54 +/- 0.7% -> 5572.10 +/- 0.4%
        /Bindings/children-traversal: 3852.61 +/- 0.3% -> 4731.03 +/- 0.3% (~23% better)

        Test: fast/dom/htmlcollection-getownproperty.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):

2015-08-17  Jinyoung Hur  <hur.ims@navercorp.com>

        Fix possible EGL and GLX makeCurrent problem of GLPlatformContext and GLPlatformSurface
        https://bugs.webkit.org/show_bug.cgi?id=147695

        Reviewed by Gyuyoung Kim.

        GLPLatformContext::makeCurrent is implemented to do no-op when it thinks, comparing with a static
        variable declared in GLPlatformContext.cpp, there is no changes. This can lead to not-working 
        makeCurrent when other part of codes, e.g., Cairo-gl, change EGL or GLX current context by calling
        something like eglMakeCurrent. So modify GLPLatformContext::makeCurrent to use the return value of
        eglGetCurrentContext or glXGetCurrentContext as a comparing target rather than a static variable.
        In addition, GLPlatformSurface::isCurrentDrawable is also modified to use eglGetCurrentSurface or
        glXGetCurrentDrawable rather than a static variable.

        There are no tests because already existing GL tests will verify this change.

        * platform/graphics/opengl/GLPlatformContext.cpp:
        (WebCore::GLPlatformContext::makeCurrent):
        (WebCore::GLPlatformContext::releaseCurrent):
        (WebCore::GLCurrentContextWrapper::GLCurrentContextWrapper): Deleted.
        (WebCore::GLPlatformContext::~GLPlatformContext): Deleted.
        (WebCore::GLPlatformContext::isCurrentContext): Deleted.
        (WebCore::GLPlatformContext::getCurrent): Deleted.
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::~GLPlatformSurface): Deleted.
        (WebCore::GLPlatformSurface::isCurrentDrawable): Deleted.
        (WebCore::GLPlatformSurface::onMakeCurrent): Deleted.
        (WebCore::GLPlatformSurface::destroy): Deleted.
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLTransportSurface::isCurrentDrawable):
        (WebCore::EGLOffScreenSurface::isCurrentDrawable):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::isCurrentContext):
        (WebCore::GLXOffScreenSurface::isCurrentContext):
        * platform/graphics/surfaces/glx/GLXSurface.h:

2015-08-15  Chris Dumez  <cdumez@apple.com>

        Refactor HTMLCollection to be as fast as CachedLiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=147979

        Reviewed by Ryosuke Niwa and Antti Koivisto.

        Refactor HTMLCollection to be as fast as CachedLiveNodeList. This is in
        preparation of having getElementsByTagName*() / getElementsByClassName()
        return an HTMLCollection instead of a NodeList, as per the
        specification. Chrome and Firefox already match the specification in
        this case.

        Traversing an HTMLCollection was slow because of all the extra
        branching it had compared to CachedLiveNodeList. To address the issue,
        this patch introduces a new templated CachedHTMLCollection subclass,
        which behaves in a similar way as CachedLiveNodeList. The 2 template
        parameters are:
        1. The type of the subclass of CachedHTMLCollection, so we can call
           elementMatches() directly on the subclass, without needed any
           virtual function call or switch statement. This is the same approach
           as in CachedLiveNodeList.
        2. The type of tree traversal used (Descendants, ChildrenOnly,
           CustomForwardOnly). Unlike LiveNodeList, HTMLCollection needs to
           support these 3 types of tree traversal. These were causing extra
           branching for every item() call. We are now able to choose the right
           type of traversal for the CachedHTMLCollection at compile time.

        * WebCore.xcodeproj/project.pbxproj:
        Add new files to the Project.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::children):
        (WebCore::ContainerNode::cachedHTMLCollection): Deleted.
        * dom/ContainerNode.h:
        Drop ContainerNode::ensureCachedHTMLCollection() and use
        NodeListsNodeData::addCachedCollection() directly at call sites
        instead. We need access to the CollectionType at build-time so
        we can resolve the CollectionTraversalType parameter for the
        GenericCachedHTMLCollection using CollectionTypeTraits.

        * dom/Document.cpp:
        * dom/Document.h:
        Update ensureCachedCollection() so the CollectionType is now a template
        parameter instead of a method argument. We need to know the
        CollectionType at build time to construct the GenericCachedHTMLCollection.

        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIterator<ElementType>::operator):
        (WebCore::ElementChildConstIterator<ElementType>::operator):
        Add support for decrementing an ElementChildIterator, for consistency
        with ElementDescendantIterator. We need this to support backward
        traversal in CachedHTMLCollections that use the 'ChildrenOnly' type
        of traversal.

        * dom/LiveNodeList.h:
        (WebCore::CachedLiveNodeList<NodeListType>::collectionBegin):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        Move traversal implementation to CollectionTraversal.h, so it can be
        shared with achedHTMLCollection.h.

        * html/CachedHTMLCollection.h: Added.
        (WebCore::traversalType>::CachedHTMLCollection):
        (WebCore::traversalType>::~CachedHTMLCollection):
        (WebCore::traversalType>::CachedHTMLCollection::memoryCost):
        (WebCore::traversalType>::collectionCanTraverseBackward):
        (WebCore::traversalType>::collectionTraverseForward):
        (WebCore::traversalType>::collectionTraverseBackward):
        (WebCore::traversalType>::willValidateIndexCache):
        (WebCore::traversalType>::length):
        (WebCore::traversalType>::item):
        (WebCore::traversalType>::invalidateCache):
        (WebCore::traversalType>::elementMatches):
        (WebCore::nameShouldBeVisibleInDocumentAll):
        (WebCore::traversalType>::namedItem):

        * html/CollectionTraversal.h: Added.
        Add new template class that provide the collection traversal code
        needed by CollectionIndexCache. It has template specializations for
        all 3 types of traversal: Descendants, ChildrenOnly, and
        CustomForwardOnly.

        * html/CollectionType.h:
        Add CollectionTypeTraits traits so we can resolve the
        CollectionTraversalType used by a specific CollectionType at
        compile-time. This is needed for the second template parameter of
        CachedHTMLCollection.

        * html/GenericCachedHTMLCollection.cpp: Added.
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches):
        * html/GenericCachedHTMLCollection.h: Added.
        Add CachedHTMLCollection subclass is the generic one used for all
        CollectionTypes that do not have their own subclass (e.g. NodeChildren).
        This has an elementMatches() method with a switch() statement handling
        all these CollectionTypes. Those are not normally not performance
        sensitive.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLAllCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection. Also provide
        an elementMatches() method that simply returns true as we want to
        match all elements.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        Move CollectionIndexCache member to the subclass and drop the 2 other
        members as they are replaced with the CollectionTraversalType template
        parameter of CachedHTMLCollection.

        (WebCore::HTMLCollection::~HTMLCollection):
        Move Document::unregisterCollection() call to ~CachedHTMLCollection()
        as we needed to check if the CollectionIndexCache was valid first.

        (WebCore::HTMLCollection::updateNamedElementCache):
        Move part of the implementation to the CachedHTMLCollection subclass
        as it needs to know about the type of traversal and it needs to be
        able to call elementMatches().

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::rootNode):
        Inline for performance reasons and consistency with CachedLiveNodeList.

        (WebCore::HTMLCollection::memoryCost):
        Make virtual and move part of the implementation to the
        CachedHTMLCollection subclass to compute the cost of the
        CollectionIndexCache.

        (WebCore::HTMLCollection::invalidateCache):
        Move part of the implementation to the subclass to invalidate the
        CollectionIndexCache.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elements):

        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormControlsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.
        customElementAfter() no longer needs to be virtual as it
        is called directly by CachedHTMLCollection on the subclass.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        Call NodeListsNodeData::addCachedCollection() directly.

        * html/HTMLNameCollection.cpp:
        * html/HTMLNameCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.

        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedOptions):
        (WebCore::HTMLSelectElement::options):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):
        Call NodeListsNodeData::addCachedCollection() directly.

        * html/HTMLTableRowsCollection.cpp:
        * html/HTMLTableRowsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.
        customElementAfter() no longer needs to be virtual as it
        is called directly by CachedHTMLCollection on the subclass.

        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows):
        Call NodeListsNodeData::addCachedCollection() directly.

2015-08-15  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r168327): ImageDocuments with margins zoom to the wrong position when clicked
        https://bugs.webkit.org/show_bug.cgi?id=148063

        Reviewed by Simon Fraser.

        No new test because it doesn't seem possible to click on a window.open'd ImageDocument.

        * html/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        Use <img>-relative coordinates, not document-relative coordinates,
        because after r168327, the image can be centered.

2015-08-15  Simon Fraser  <simon.fraser@apple.com>

        Have will-change create stacking context when necessary
        https://bugs.webkit.org/show_bug.cgi?id=148060

        Reviewed by Zalan Bujtas.
        
        If will-change includes a property whose non-initial value can create
        stacking context, create stacking context for that element.

        Test: fast/css/will-change/will-change-creates-stacking-context.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/style/RenderStyle.h: Add willChangeCreatesStackingContext(),
        which on most cases is a fast, inlined 'return false'. Otherwise ask
        the WillChangeData.
        * rendering/style/WillChangeData.cpp:
        (WebCore::propertyCreatesStackingContext):
        (WebCore::WillChangeData::createsStackingContext):
        * rendering/style/WillChangeData.h:

2015-08-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188508.
        https://bugs.webkit.org/show_bug.cgi?id=148058

        Caused 10 tests to crash (Requested by smfr on #webkit).

        Reverted changeset:

        "Refactor HTMLCollection to be as fast as CachedLiveNodeList"
        https://bugs.webkit.org/show_bug.cgi?id=147979
        http://trac.webkit.org/changeset/188508

2015-08-14  Simon Fraser  <simon.fraser@apple.com>

        Implement parsing for CSS will-change
        https://bugs.webkit.org/show_bug.cgi?id=148052

        Reviewed by Dean Jackson.
        
        Syntax is
            will-change: auto | <animateable-feature>#
        where
            <animateable-feature> = scroll-position | contents | <custom-ident>
            
        To support this, add WillChangeData which stores a vector of "feature"
        and CSS property squished into 16 bits. This is stored in rareNonInheritedData.
        If null or an empty list, the property value is 'auto'. The list preserves
        unknown properties.

        Test: fast/css/will-change-parsing.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getWillChangePropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::isValidGridPositionCustomIdent): Renamed from isValidCustomIdent(),
        since it's grid-specific.
        (WebCore::CSSParser::parseIntegerOrCustomIdentFromGridPosition):
        (WebCore::valueIsCSSKeyword): Returns true for the "CSS-wide" keywords like
        "initial", "inherit" and "default".
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::isValidWillChangeAnimatableFeature):
        (WebCore::CSSParser::parseWillChange):
        (WebCore::isValidCustomIdent): Deleted.
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isPropertyID): New utility function.
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWillChange):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWillChange):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleAllInOne.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::willChangeDataEquivalent):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/WillChangeData.cpp: Added.
        (WebCore::WillChangeData::operator==):
        (WebCore::WillChangeData::containsScrollPosition):
        (WebCore::WillChangeData::containsContents):
        (WebCore::WillChangeData::containsProperty):
        (WebCore::WillChangeData::addFeature):
        (WebCore::WillChangeData::featureAt):
        * rendering/style/WillChangeData.h: Added.
        (WebCore::WillChangeData::create):
        (WebCore::WillChangeData::operator!=):
        (WebCore::WillChangeData::isAuto):
        (WebCore::WillChangeData::numFeatures):
        (WebCore::WillChangeData::WillChangeData):
        (WebCore::WillChangeData::AnimatableFeature::feature):
        (WebCore::WillChangeData::AnimatableFeature::property):
        (WebCore::WillChangeData::AnimatableFeature::featurePropertyPair):
        (WebCore::WillChangeData::AnimatableFeature::AnimatableFeature):
        (WebCore::WillChangeData::AnimatableFeature::operator==):

2015-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Build fix after r188510

        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton): Pass a raw pointer to drawCellOrFocusRingWithViewIntoContext.

2015-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Search fields should scale when rendering while zoomed
        https://bugs.webkit.org/show_bug.cgi?id=147867

        Reviewed by Daniel Bates.

        When rendering zoomed search fields, draw to an image buffer instead of drawing directly into the context. This
        allows us to scale the image buffer up before rendering. Also refactors common logic used to draw both selects
        (paintMenuList) and search fields into the new private method paintCellAndSetFocusedElementNeedsRepaintIfNecessary.

        * rendering/RenderThemeMac.h: Changed drawCellOrFocusRingWithViewIntoContext to take a raw pointer.
        * rendering/RenderThemeMac.mm:
        (WebCore::paintToggleButton): Passes a raw pointer to drawCellOrFocusRingWithViewIntoContext.
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext): Changed to take a raw pointer.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Refactored to use paintCellAndSetFocusedElementNeedsRepaintIfNecessary.
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary): Contains logic common to painting
            both selects and search fields.
        (WebCore::RenderThemeMac::paintSearchField): Use ThemeMac::drawCellOrFocusRingWithViewIntoContext
            to render search fields, utilizing an offscreen image buffer only when necessary.

2015-08-14  Chris Dumez  <cdumez@apple.com>

        Refactor HTMLCollection to be as fast as CachedLiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=147979

        Reviewed by Ryosuke Niwa.

        Refactor HTMLCollection to be as fast as CachedLiveNodeList. This is in
        preparation of having getElementsByTagName*() / getElementsByClassName()
        return an HTMLCollection instead of a NodeList, as per the
        specification. Chrome and Firefox already match the specification in
        this case.

        Traversing an HTMLCollection was slow because of all the extra
        branching it had compared to CachedLiveNodeList. To address the issue,
        this patch introduces a new templated CachedHTMLCollection subclass,
        which behaves in a similar way as CachedLiveNodeList. The 2 template
        parameters are:
        1. The type of the subclass of CachedHTMLCollection, so we can call
           elementMatches() directly on the subclass, without needed any
           virtual function call or switch statement. This is the same approach
           as in CachedLiveNodeList.
        2. The type of tree traversal used (Descendants, ChildrenOnly,
           CustomForwardOnly). Unlike LiveNodeList, HTMLCollection needs to
           support these 3 types of tree traversal. These were causing extra
           branching for every item() call. We are now able to choose the right
           type of traversal for the CachedHTMLCollection at compile time.

        * WebCore.xcodeproj/project.pbxproj:
        Add new files to the Project.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::children):
        (WebCore::ContainerNode::cachedHTMLCollection): Deleted.
        * dom/ContainerNode.h:
        Drop ContainerNode::ensureCachedHTMLCollection() and use
        NodeListsNodeData::addCachedCollection() directly at call sites
        instead. We need access to the CollectionType at build-time so
        we can resolve the CollectionTraversalType parameter for the
        GenericCachedHTMLCollection using CollectionTypeTraits.

        * dom/Document.cpp:
        * dom/Document.h:
        Update ensureCachedCollection() so the CollectionType is now a template
        parameter instead of a method argument. We need to know the
        CollectionType at build time to construct the GenericCachedHTMLCollection.

        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIterator<ElementType>::operator):
        (WebCore::ElementChildConstIterator<ElementType>::operator):
        Add support for decrementing an ElementChildIterator, for consistency
        with ElementDescendantIterator. We need this to support backward
        traversal in CachedHTMLCollections that use the 'ChildrenOnly' type
        of traversal.

        * dom/LiveNodeList.h:
        (WebCore::CachedLiveNodeList<NodeListType>::collectionBegin):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionLast):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseForward):
        (WebCore::CachedLiveNodeList<NodeListType>::collectionTraverseBackward):
        Move traversal implementation to CollectionTraversal.h, so it can be
        shared with achedHTMLCollection.h.

        * html/CachedHTMLCollection.h: Added.
        (WebCore::traversalType>::CachedHTMLCollection):
        (WebCore::traversalType>::~CachedHTMLCollection):
        (WebCore::traversalType>::CachedHTMLCollection::memoryCost):
        (WebCore::traversalType>::collectionCanTraverseBackward):
        (WebCore::traversalType>::collectionTraverseForward):
        (WebCore::traversalType>::collectionTraverseBackward):
        (WebCore::traversalType>::willValidateIndexCache):
        (WebCore::traversalType>::length):
        (WebCore::traversalType>::item):
        (WebCore::traversalType>::invalidateCache):
        (WebCore::traversalType>::elementMatches):
        (WebCore::nameShouldBeVisibleInDocumentAll):
        (WebCore::traversalType>::namedItem):

        * html/CollectionTraversal.h: Added.
        Add new template class that provide the collection traversal code
        needed by CollectionIndexCache. It has template specializations for
        all 3 types of traversal: Descendants, ChildrenOnly, and
        CustomForwardOnly.

        * html/CollectionType.h:
        Add CollectionTypeTraits traits so we can resolve the
        CollectionTraversalType used by a specific CollectionType at
        compile-time. This is needed for the second template parameter of
        CachedHTMLCollection.

        * html/GenericCachedHTMLCollection.cpp: Added.
        (WebCore::GenericCachedHTMLCollection<traversalType>::elementMatches):
        * html/GenericCachedHTMLCollection.h: Added.
        Add CachedHTMLCollection subclass is the generic one used for all
        CollectionTypes that do not have their own subclass (e.g. NodeChildren).
        This has an elementMatches() method with a switch() statement handling
        all these CollectionTypes. Those are not normally not performance
        sensitive.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLAllCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection. Also provide
        an elementMatches() method that simply returns true as we want to
        match all elements.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        Move CollectionIndexCache member to the subclass and drop the 2 other
        members as they are replaced with the CollectionTraversalType template
        parameter of CachedHTMLCollection.

        (WebCore::HTMLCollection::~HTMLCollection):
        Move Document::unregisterCollection() call to ~CachedHTMLCollection()
        as we needed to check if the CollectionIndexCache was valid first.

        (WebCore::HTMLCollection::updateNamedElementCache):
        Move part of the implementation to the CachedHTMLCollection subclass
        as it needs to know about the type of traversal and it needs to be
        able to call elementMatches().

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::rootNode):
        Inline for performance reasons and consistency with CachedLiveNodeList.

        (WebCore::HTMLCollection::memoryCost):
        Make virtual and move part of the implementation to the
        CachedHTMLCollection subclass to compute the cost of the
        CollectionIndexCache.

        (WebCore::HTMLCollection::invalidateCache):
        Move part of the implementation to the subclass to invalidate the
        CollectionIndexCache.

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elements):

        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormControlsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.
        customElementAfter() no longer needs to be virtual as it
        is called directly by CachedHTMLCollection on the subclass.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        Call NodeListsNodeData::addCachedCollection() directly.

        * html/HTMLNameCollection.cpp:
        * html/HTMLNameCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.

        * html/HTMLOptionsCollection.cpp:
        * html/HTMLOptionsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedOptions):
        (WebCore::HTMLSelectElement::options):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::cells):
        Call NodeListsNodeData::addCachedCollection() directly.

        * html/HTMLTableRowsCollection.cpp:
        * html/HTMLTableRowsCollection.h:
        Subclass CachedHTMLCollection instead of HTMLCollection.
        customElementAfter() no longer needs to be virtual as it
        is called directly by CachedHTMLCollection on the subclass.

        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::rows):
        Call NodeListsNodeData::addCachedCollection() directly.

2015-08-14  Matthew Daiter  <mdaiter@apple.com>

        Implementing enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=146426
        <rdar://problem/21599847>

        Reviewed by Eric Carlson.

        * CMakeLists.txt:
        * Modules/mediastream/MediaDeviceInfo.idl:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::enumerateDevices):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaDevicesPrivate.cpp:
        (WebCore::MediaDevicesPrivate::create):
        (WebCore::MediaDevicesPrivate::MediaDevicesPrivate):
        (WebCore::MediaDevicesPrivate::didCompleteRequest):
        (WebCore::MediaDevicesPrivate::availableMediaDevices):
        * platform/mediastream/MediaDevicesPrivate.h:
        (WebCore::MediaDevicesPrivate::~MediaDevicesPrivate):
        (WebCore::MediaDevicesPrivate::capturedDevices):

2015-08-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Downloads do not start if policy decision is made asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=147985

        Reviewed by Brady Eidson.

        It's only possible to convert a NSURLConnection to a download while the connection delegate's
        -connection:didReceiveResponse: is being called. However, WebKit clients can decide content policy
        asynchronously. If a client chooses to download a response asynchronously, we can no longer convert the
        connection to a download, so we should start a new download instead.

        New API test: _WKDownload.AsynchronousDownloadPolicy

        * dom/Document.cpp: Updated to include SubresourceLoader.h.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceLoader): Updated to return a SubresourceLoader.
        (WebCore::DocumentLoader::continueAfterContentPolicy): Cast mainResourceLoader() to a ResourceLoader since
        didFail() is private in SubresourceLoader.
        * loader/DocumentLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader): Initialized m_callingDidReceiveResponse to false.
        (WebCore::SubresourceLoader::didReceiveResponse): Used TemporaryChange<> to set m_callingDidReceiveResponse to true.
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp: Updated to include SubresourceLoader.h.
        * loader/mac/DocumentLoaderMac.cpp: Ditto.

2015-08-14  Zalan Bujtas  <zalan@apple.com>

        RenderBlock::simplifiedLayout should pop LayoutStateMaintainer when early returns.
        https://bugs.webkit.org/show_bug.cgi?id=148031

        Reviewed by Simon Fraser.

        LayoutStateMaintainer push/pop calls need to be balanced to ensure layout consistency.

        Unable to make a test case for this.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::~LayoutStateMaintainer): ASSERT the state properly.
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):
        (WebCore::LayoutStateMaintainer::didPush):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer): Deleted.

2015-08-14  Simon Fraser  <simon.fraser@apple.com>

        Remove a few includes from RenderObject.h
        https://bugs.webkit.org/show_bug.cgi?id=148007

        Reviewed by Tim Horton.

        Shrink down the RenderObject.h includes a little.

        * rendering/RenderElement.h:
        * rendering/RenderObject.h:
        * rendering/RenderText.h:

2015-08-14  Tim Horton  <timothy_horton@apple.com>

        Fix the Mavericks build.

        * platform/spi/mac/LookupSPI.h:

2015-08-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/mac/LookupSPI.h:

2015-08-14  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Handle missing plugins better at runtime
        https://bugs.webkit.org/show_bug.cgi?id=146999

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Warn the
        user if autoaudiosink wasn't found at runtime. In that case
        playbin will try to be smart by itself, hopefully. Also moved a
        couple GST_WARNING calls to WARN_MEDIA_MESSAGE.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Use
        WARN_MEDIA_MESSAGE here as well.

2015-08-13  Antti Koivisto  <antti@apple.com>

        Cover memory cache subresource validation policy with cache tests
        https://bugs.webkit.org/show_bug.cgi?id=147830

        Reviewed by Alexey Proskuryakov.

        Existing tests under http/tests/cache/disk-cache currently cover disk and XHR memory cache validation behaviors.
        They can be extended to cover the regular subresource policy too.

        Add window.internals API to disable CachedRawResource validation behavior. This makes XHR validate like
        other resources and allows existing tests (that use XHR) to cover normal subresource policy .

        Test results reveal some bugs. For example subresources in memory cache don't respect Vary header.

        It is generally bad that we have a separate XHR-and-main-resource validation policy in memory cache. Network cache
        doesn't have one.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clearTestingOverrides):
        (WebCore::FrameLoader::applyShouldOpenExternalURLsPolicyToNewDocumentLoader):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setOverrideCachePolicyForTesting):
        (WebCore::FrameLoader::setOverrideResourceLoadPriorityForTesting):
        (WebCore::FrameLoader::setStrictRawResourceValidationPolicyDisabledForTesting):
        (WebCore::FrameLoader::isStrictRawResourceValidationPolicyDisabledForTesting):
        (WebCore::FrameLoader::provisionalLoadErrorBeingHandledURL):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setLoadFinishTime):
        (WebCore::CachedResource::loadFinishTime):
        (WebCore::CachedResource::canReuse): Deleted.

            Made canReuse non-virtual and removed it from the base. Only CachedRawResource has implementation.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * testing/Internals.cpp:
        (WebCore::Internals::setOverrideResourceLoadPriority):
        (WebCore::Internals::setStrictRawResourceValidationPolicyDisabled):
        (WebCore::Internals::clearMemoryCache):
        * testing/Internals.h:

2015-08-13  Tim Horton  <timothy_horton@apple.com>

        Performing a Lookup on wrapped text puts the popover arrow in the wrong place (off to the right)
        https://bugs.webkit.org/show_bug.cgi?id=148012
        <rdar://problem/19238094>

        Reviewed by Simon Fraser.

        * platform/spi/mac/LookupSPI.h:
        Add some SPI.

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        Another Windows build fix.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build after r188430.

        * platform/graphics/ca/win/PlatformCALayerWin.h:

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        Generated files don't all need to include ScriptExecutionContext.h
        https://bugs.webkit.org/show_bug.cgi?id=148011

        Reviewed by Alexey Proskuryakov.
        
        Generated files which are not callbacks or constructors do not need to include
        ScriptExecutionContext.h.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Deleted.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:

2015-08-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188428.
        https://bugs.webkit.org/show_bug.cgi?id=148015

        broke cmake build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Move some commands from ./CMakeLists.txt to Source/cmake"
        https://bugs.webkit.org/show_bug.cgi?id=148003
        http://trac.webkit.org/changeset/188428

2015-08-13  Zalan Bujtas  <zalan@apple.com>

        Remove pixelSnapped* functions from RenderBoxModelObject/RenderBox.
        https://bugs.webkit.org/show_bug.cgi?id=147982

        Reviewed by Simon Fraser.

        RenderBoxModelObject/RenderBox::pixelSnapped* functions are misleading.
        They all round to integral values, while the rest of the pixel snapping
        functions round to device pixels.
        This patch moves integral rounding to the callers. (Note that they all will eventually
        go away as we convert additional modules to subpixel rendering (tables, scrolling etc).)

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * dom/Element.cpp:
        (WebCore::Element::offsetLeft):
        (WebCore::Element::offsetTop):
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        * dom/Position.cpp:
        (WebCore::Position::hasRenderedNonAnonymousDescendantsWithHeight):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementData):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyPaginationToViewport):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::calculateExtendedBackgroundMode):
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):
        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::pixelSnappedSize): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pixelSnappedClientWidth): Deleted.
        (WebCore::RenderBox::pixelSnappedClientHeight): Deleted.
        (WebCore::RenderBox::pixelSnappedOffsetWidth): Deleted.
        (WebCore::RenderBox::pixelSnappedOffsetHeight): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::pixelSnappedLogicalHeight): Deleted.
        (WebCore::RenderBox::pixelSnappedLogicalWidth): Deleted.
        (WebCore::RenderBox::pixelSnappedSize): Deleted.
        (WebCore::RenderBox::pixelSnappedBorderBoxRect): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetWidth): Deleted.
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetHeight): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetLeft): Deleted.
        (WebCore::RenderBoxModelObject::pixelSnappedOffsetTop): Deleted.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeWidth):
        (WebCore::nodeHeight):
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::perspectiveTransform):
        (WebCore::RenderLayer::clampScrollOffset):
        (WebCore::RenderLayer::visibleSize):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::hasHorizontalOverflow):
        (WebCore::RenderLayer::hasVerticalOverflow):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::overflowControlsIntersectRect):
        (WebCore::RenderLayer::isPointInResizeControl):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollWidth):
        (WebCore::RenderListBox::scrollHeight):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::buttonRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addOverflowFromChildren):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeIntrinsicPadding):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        (WebCore::RenderSVGRoot::computeFloatRectForRepaint):

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        Minor GraphicsLayer.h/PlatformCALayer.h cleanup
        https://bugs.webkit.org/show_bug.cgi?id=148009

        Reviewed by Tim Horton.

        Remove some #includes.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/PlatformCALayer.h:

2015-08-13  Alex Christensen  <achristensen@webkit.org>

        Move some commands from ./CMakeLists.txt to Source/cmake
        https://bugs.webkit.org/show_bug.cgi?id=148003

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        Added commands needed to build WebCore by itself.

2015-08-13  Tim Horton  <timothy_horton@apple.com>

        Refactor and improve TextIndicator to prepare for tests
        https://bugs.webkit.org/show_bug.cgi?id=147622

        Reviewed by Simon Fraser.

        No new tests because they're coming soon!

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::TextIndicator):
        (WebCore::TextIndicator::~TextIndicator):
        (WebCore::TextIndicator::createWithRange):
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::hasNonInlineOrReplacedElements):
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        (WebCore::takeSnapshot):
        (WebCore::takeSnapshots):
        (WebCore::initializeIndicator):
        (WebCore::snapshotSelectionWithHighlight): Deleted.
        (WebCore::TextIndicator::wantsBounce): Deleted.
        (WebCore::TextIndicator::wantsContentCrossfade): Deleted.
        (WebCore::TextIndicator::wantsFadeIn): Deleted.
        (WebCore::TextIndicator::wantsManualAnimation): Deleted.
        * page/TextIndicator.h:
        (WebCore::TextIndicator::indicatesCurrentSelection):
        (WebCore::TextIndicator::setWantsMargin): Deleted.
        (WebCore::TextIndicator::wantsMargin): Deleted.
        Rename wantsMargin to indicatesCurrentSelection. It's really about whether
        the TextIndicator indicates the existing selection, and the Mac presentation
        just uses that to determine whether or not to show a margin, but that
        margin has nothing to do with the cross-platform TextIndicator code.

        Move most of the snapshotting and rect gathering code to initializeTextIndicator, and call it
        from both ::createWithRange and ::createWithSelectionInFrame, instead of calling
        ::createWithSelectionInFrame from ::createWithRange after setting the selection.
        This way, the range passed into ::createWithRange is preserved for use in initializeTextIndicator,
        instead of round-tripping through selection code, which can change it (e.g. in the case
        of user-select: none; elements).

        Add TextIndicatorOptions, which allow callers to adjust the behavior of TextIndicator
        instead of having #if PLATFORM(X) strewn throughout TextIndicator.

        Add an option which was previously implemented at the iOS-specific callsites,
        TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges,
        which falls back to indicating a bounding rect and not doing a range-only paint
        if the given range includes any non-inline elements or any replaced elements.
        This makes it so that we do something reasonable-looking for very complex ranges,
        like article links on the New York Times, which include multiple disparate paragraphs
        of text and one or more images, and also so that indicating a range that only
        includes an image does something fairly reasonable.

        Move presentation-specific functions (wantsBounce, wantsContentCrossfade, etc.)
        to TextIndicatorWindow. Ideally TextIndicatorPresentationTransition would also move,
        but that is a fairly large and complicated change that should be made separately.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (indicatorWantsBounce):
        (indicatorWantsContentCrossfade):
        (indicatorWantsFadeIn):
        (indicatorWantsManualAnimation):
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        (-[WebTextIndicatorView _animationDuration]):
        (-[WebTextIndicatorView present]):
        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
        (WebCore::TextIndicatorWindow::clearTextIndicator):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Rename TextIndicatorDismissalAnimation to TextIndicatorWindowDismissalAnimation,
        and TextIndicatorLifetime to TextIndicatorWindowLifetime, because
        they are TextIndicatorWindow specific.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        (-[DOMRange boundingBox]):
        (-[DOMRange textRects]):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        * dom/Node.cpp:
        (WebCore::Node::textRects):
        * dom/Range.cpp:
        (WebCore::Range::intersectsNode):
        (WebCore::Range::absoluteBoundingBox):
        (WebCore::Range::absoluteTextRects):
        (WebCore::Range::absoluteTextQuads):
        (WebCore::Range::getClientRects):
        (WebCore::Range::getBoundingClientRect):
        (WebCore::Range::getBorderAndTextQuads):
        (WebCore::Range::boundingRectInternal):
        (WebCore::Range::absoluteBoundingRect):
        (WebCore::Range::boundingBox): Deleted.
        (WebCore::Range::textRects): Deleted.
        (WebCore::Range::textQuads): Deleted.
        (WebCore::Range::boundingRect): Deleted.
        * dom/Range.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::rootViewRectForRange):
        * editing/Editor.cpp:
        (WebCore::Editor::findStringAndScrollToVisible):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        * editing/mac/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRectForRange):
        Rename various Range methods to make it clear whether they return absolute or client rects.

2015-08-13  Jer Noble  <jer.noble@apple.com>

        Don't short circuit seeking
        https://bugs.webkit.org/show_bug.cgi?id=147892

        Reviewed by Eric Carlson.

        When two seekWithTolerance() requests come in before the first is acted upon in seekTask(),
        the second will result in a "no seek required" conditional, because the new "currentTime" is
        assumed to be the destination time of the first seek.

        When cancelling a pending seek, first replace the "now" value with the "now" value from the
        replaced seek, thus preserving the original currentTime across all replacement seeks.

        Drive-by fix: some added logging causes occasional crashes, due to the underlying object being
        accessed having been deleted.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekWithTolerance):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):

2015-08-13  Brent Fulgham  <bfulgham@apple.com>

        Prospective Mac/iOS build fix after the last Windows build fix.

        * page/CaptionUserPreferences.cpp:
        * page/UserContentController.cpp:

2015-08-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] More build fixes.

        * dom/make_event_factory.pl:
        (generateImplementation):
        * page/CaptionUserPreferences.cpp:
        * page/PageGroup.cpp:
        * page/UserContentController.cpp:

2015-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        A focused node should not be assisted when handling touch events synchronously
        https://bugs.webkit.org/show_bug.cgi?id=147836
        <rdar://problem/22204108>

        Reviewed by Enrica Casucci.

        Makes interaction with touch handlers no longer assist the currently focused element in the
        general case. Added plumbing to reassist a currently focused node when dispatching touch events,
        so that an input that programmatically focuses itself and prevents default on a touch event will
        be properly assisted when it has been programmatically focused (either through Javascript or the
        autofocus attribute) prior to receiving the touch event. This patch also removes the now
        unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
        upon autofocus.

        * dom/Element.cpp:
        (WebCore::Element::focus): Notifies the chrome client that the element has refocused before
            returning early.
        * page/ChromeClient.h: Refocusing an element does nothing by default.
        * platform/RuntimeApplicationChecksIOS.h: Removed special casing for Gmail Add Account.
        * platform/RuntimeApplicationChecksIOS.mm: See above.
        (WebCore::applicationIsGmailAddAccountOnIOS): See above.

2015-08-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * accessibility/AXObjectCache.cpp: Add missing 'DataLog.h' include.

2015-08-13 Wenson Hsieh  <wenson_hsieh@apple.com>

        Selects should scale when rendering while zoomed
        https://bugs.webkit.org/show_bug.cgi?id=147868

        Reviewed by Daniel Bates.

        When rendering zoomed <select> elements, draw to an image buffer instead of drawing directly
        into the context. This allows us to scale the image buffer up before rendering.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Use ThemeMac::drawCellOrFocusRingWithViewIntoContext
            to render search fields, utilizing an offscreen image buffer only when necessary.

2015-08-13  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r188388.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * dom/EventFactory.h:
        * rendering/RenderThemeWin.cpp:
        Strange things happen when you change including headers.  This fixed my local build.

2015-08-13  Geoffrey Garen  <ggaren@apple.com>

        Standardize on the phrase "delete code"
        https://bugs.webkit.org/show_bug.cgi?id=147984

        Reviewed by Mark Lam.

        Use "delete" when we talk about throwing away code, as opposed to
        "invalidate" or "discard".

        * bindings/js/GCController.cpp:
        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
        (WebCore::GCController::deleteAllCode):
        (WebCore::GCController::discardAllCompiledCode): Deleted.
        * bindings/js/GCController.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-08-13  Eric Carlson  <eric.carlson@apple.com>

        Don't short circuit seeking
        https://bugs.webkit.org/show_bug.cgi?id=147892

        Reviewed by Jer Noble.

        Test: media/video-seek-to-current-time.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Call clearSeeking.
        (WebCore::HTMLMediaElement::fastSeek): Add logging.
        (WebCore::HTMLMediaElement::seekWithTolerance): Add logging. Set m_pendingSeekType.
        (WebCore::HTMLMediaElement::seekTask):  Call clearSeeking. Don't short circuit a
          if the current or pending seek is a fast seek. Set m_seeking to true immediately
          before calling media engine as it may have been cleared before the seek task
          queue ran.
        (WebCore::HTMLMediaElement::clearSeeking): New.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElementEnums.h:

        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueue::enqueueTask): Clear m_pendingTasks.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): Don't return early
          when asked to seek to the current time.
        (WebCore::MediaPlayerPrivateAVFoundation::invalidateCachedDuration): Remove some 
          extremely noisy logging.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Add logging.

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        FilterOperation.h should not include FilterEffect.h
        https://bugs.webkit.org/show_bug.cgi?id=147970

        Reviewed by Daniel Bates.

        FilterEffect.h pulls in lots of JSC goop via runtime/Uint8ClampedArray.h,
        so move its include to FilterOperation.cpp.
        
        Causes include bloat because FilterOperation.h is pulled in via RenderStyle.h.

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::setFilterEffect):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::ReferenceFilterOperation::setFilterEffect): Deleted.

2015-08-13  Simon Fraser  <simon.fraser@apple.com>

        ScriptExecutionContext.h pulls in all the JSC headers
        https://bugs.webkit.org/show_bug.cgi?id=147969

        Reviewed by Alexey Proskuryakov.

        ScriptExecutionContext.h included ScheduledAction.h, which pulled in all the
        JSC headers via JSDOMBinding.h. There was no need for this #include, so remove
        it and fix the fallout.

        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdatabase/SQLTransaction.h:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * contentextensions/ContentExtensionStyleSheet.cpp:
        * dom/ScriptExecutionContext.h:
        * html/FTPDirectoryDocument.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/parser/HTMLTreeBuilder.h:

2015-08-12  Anders Carlsson  <andersca@apple.com>

        Use WTF::Optional in WindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=147956

        Reviewed by Sam Weinig.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::WindowFeatures):
        (WebCore::WindowFeatures::setWindowFeature):
        (WebCore::WindowFeatures::boolFeature):
        (WebCore::WindowFeatures::floatFeature):
        (WebCore::WindowFeatures::parseDialogFeatures):
        * page/WindowFeatures.h:
        (WebCore::WindowFeatures::WindowFeatures):

2015-08-13  Matthew Daiter  <mdaiter@apple.com>

        UserMediaRequest should supply IDs of devices selected by user
        https://bugs.webkit.org/show_bug.cgi?id=147263
        <rdar://problem/21983345>

        Reviewed by Jer Noble.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::userMediaAccessGranted):
        * Modules/mediastream/UserMediaRequest.h:
        * platform/mock/UserMediaClientMock.h:

2015-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Cairo] Improve image quality when using newer versions of cairo/pixman
        https://bugs.webkit.org/show_bug.cgi?id=147826

        Reviewed by Martin Robinson.

        Since cairo 1.14 the image filters changed a bit:

         - CAIRO_FILTER_GOOD uses a box filter when downscaling if the
           scale factor is less than 0.75, otherwise it uses a filter
           equivalent to CAIRO_FILTER_BILINEAR.
         - CAIRO_FILTER_BEST uses always a Catmull-Rom filter.

        We are currently using CAIRO_FILTER_BILINEAR for medium, high and
        default interpolation levels. We could use CAIRO_FILTER_GOOD for
        medium and default, and CAIRO_FILTER_BEST for high. This will not
        have any effect in previous versions of cairo because before 1.14
        CAIRO_FILTER_GOOD, CAIRO_FILTER_BILINEAR and CAIRO_FILTER_BEST had
        the same implementation in pixman.

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

2015-08-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] [CJK-configured device] System font has vertical punctuation
        https://bugs.webkit.org/show_bug.cgi?id=147964
        <rdar://problem/22256660>

        Reviewed by Dean Jackson.

        GlyphPage::fill() has multiple code paths to accomplish its goal. It uses the shouldUseCoreText() helper
        function to determine which one of the paths should be taken. However, not all of the code paths in
        GlyphPage::fill() are able of handling all situations. Indeed, the CoreText code paths in GlyphPage::fill()
        are only able to handle the situations which shouldUseCoreText() returns true for. This happens in the
        following cases:

        1. If the font is a composite font
        2. If the font is used for text-combine
        3. If the font has vertical glyphs

        In r187693, I added one more case to this list: If the font is the system font. However, I failed to add
        the necessary support to GlyphPage::fill() for this case. Becasue of this, we just happened to fall into
        the case of vertical fonts (just by coincidence), which causes us to use
        CTFontGetVerticalGlyphsForCharacters() instead of CTFontGetGlyphsForCharacters().

        The solution is to adopt the same behavior we were using before r187693. Back then, we were using
        CGFontGetGlyphsForUnichars(), which always returned horizontal glyphs. We should simply adopt this same
        behavior, except in the Core Text case. Therefore, this patch is just a simple check to see if we are
        using the system font when determining which Core Text function to use.

        Test: fast/text/system-font-punctuation.html

        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::setWidthVariant):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isForTextCombine):
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText):

2015-08-12  Jinyoung Hur  <hur.ims@navercorp.com>

        [WinCairo] Turn on WOFF font
        https://bugs.webkit.org/show_bug.cgi?id=147878

        WOFF is already usable in Windows Cairo. Just turn it on.

        Reviewed by Myles C. Maxfield.

        Test: fast\css\font-face-woff.html

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):

2015-08-12  Brent Fulgham  <bfulgham@apple.com>

        Move RenderBox-specific Scroll Snap code from RenderElement to RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=147963

        Reviewed by Simon Fraser.

        No new tests: No change in functionality.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): Remove RenderBox-specific code.
        (WebCore::RenderBox::willBeRemovedFromTree): Ditto.
        * rendering/RenderBox.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange): Move code from RenderElement to
        handle Scroll Snap Points.
        (WebCore::RenderElement::willBeRemovedFromTree): Added new override to handle
        scroll-snap point logic.

2015-08-12  Antti Koivisto  <antti@apple.com>

        CachedResource leak in validation code
        https://bugs.webkit.org/show_bug.cgi?id=147941

        Reviewed by Chris Dumez.

        While adding test coverage I discovered a way to hit ASSERT(!resource->m_proxyResource) in CachedResource::setResourceToRevalidate.
        I think this ends up leaking a resource too.

        Test: http/tests/cache/recursive-validation.html

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

            Tighten the condition.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setResourceToRevalidate):
        (WebCore::CachedResource::clearResourceToRevalidate):

            Replace workaround for this bug with an assert.

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::validationInProgress):
        (WebCore::CachedResource::validationCompleting):
        (WebCore::CachedResource::didSendData):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):

            Fix the bug by using (instead of revalidating) resource that we are just finishing revalidating.
            This can happen when a succesful revalidation synchronously triggers another load for the same resource.

2015-08-12  Matthew Daiter  <mdaiter@apple.com>

        Need to add stubs to enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=147903

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::enumerateDevices):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::enumerateDevices):
        * Modules/mediastream/UserMediaRequest.h:

2015-08-12  Matt Rajca  <mrajca@apple.com>

        Fixed the Release build when MEDIA_SESSION is enabled.

        * testing/Internals.cpp:
        (WebCore::interruptingCategoryFromString):

2015-08-07  Matt Rajca  <mrajca@apple.com>

        Media Session: notify the UI process when media controls are enabled/disabled
        https://bugs.webkit.org/show_bug.cgi?id=147802

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaRemoteControls.cpp:
        (WebCore::MediaRemoteControls::MediaRemoteControls): Keep track of the parent session.
        (WebCore::MediaRemoteControls::~MediaRemoteControls): Removed unnecessary line.
        (WebCore::MediaRemoteControls::setPreviousTrackEnabled): Tell the session a control was enabled/disabled.
        (WebCore::MediaRemoteControls::setNextTrackEnabled): Tell the session a control was enabled/disabled.
        * Modules/mediasession/MediaRemoteControls.h:
        (WebCore::MediaRemoteControls::create):
        (WebCore::MediaRemoteControls::setPreviousTrackEnabled): Moved to implementation file.
        (WebCore::MediaRemoteControls::setNextTrackEnabled): Moved to implementation file.
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Keep track of the remote controls' parent session.
        (WebCore::MediaSession::controlIsEnabledDidChange): Propagate the new media state to the UI process.
        * Modules/mediasession/MediaSession.h:
        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia): Include whether we can skip to the previous/next track.
        * page/MediaProducer.h:

2015-08-12  Alex Christensen  <achristensen@webkit.org>

        Fix Debug CMake builds on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147940

        Reviewed by Chris Dumez.

        * PlatformWin.cmake:
        Copy localized strings to the WebKit.resources directory.

2015-08-12  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r188339.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):
        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
        (WebCore::GCController::releaseExecutableMemory): Deleted.
        * bindings/js/GCController.h:
        Commit WebCore part of patch.

2015-08-12  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r185606): ASSERT in WebCore::RenderElement::styleWillChange
        https://bugs.webkit.org/show_bug.cgi?id=147596
        <rdar://problem/21963355>

        Reviewed by Jon Honeycutt.

        Only add (or remove) a RenderElement from the container of RenderBoxes with
        scroll snap coordinates if the element actually is a RenderBox.

        Tested by css3/scroll-snap/improper-snap-points-crash.html.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::willBeRemovedFromTree):

2015-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Implement selector highlighting for iOS
        https://bugs.webkit.org/show_bug.cgi?id=147919

        Reviewed by Timothy Hatcher.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::getHighlight):
        If the current highlight is a nodeList, generate highlights for each node in the list and
        return the concatenated value of those highlights.

2015-08-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove promise attribute specific handling from binding generator
        https://bugs.webkit.org/show_bug.cgi?id=147828

        Reviewed by Darin Adler.

        Reverting http://trac.webkit.org/changeset/184643, as CachedAttribute is used instead.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor): Deleted.
        (WebCore::setJSTestObjConstructorStaticStringAttr): Deleted.
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj voidMethod]): Deleted.
        (-[DOMTestObj voidMethodWithArgs:strArg:objArg:]): Deleted.
        * bindings/scripts/test/TestObj.idl:

2015-08-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        XHR.setRequestHeader should remove trailing and leading whitespaces from the header value
        https://bugs.webkit.org/show_bug.cgi?id=147445

        Reviewed by Darin Adler.

        Covered by added and modifed tests.

        * platform/network/HTTPParsers.h:
        (WebCore::isHTTPSpace):
        (WebCore::stripLeadingAndTrailingHTTPSpaces):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader): strip trailing and leading whitespace before testing for header value validity and storing.

2015-08-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        NetworkProcess: DNS prefetch happens in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=147824

        Reviewed by Alexey Proskuryakov.

        Use FrameLoaderClient to do the DNS prefetch.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * loader/FrameLoaderClient.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):

2015-08-11  Mark Lam  <mark.lam@apple.com>

        Implementation JavaScript watchdog using WTF::WorkQueue.
        https://bugs.webkit.org/show_bug.cgi?id=147107

        Reviewed by Geoffrey Garen.

        No new tests because we're not introducing any behavior change to WebCore here.
        We're only #include'ing Watchdog.h directly instead of going through VM.h.

        * ForwardingHeaders/runtime/Watchdog.h: Added.
        * PlatformEfl.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/WorkerScriptController.cpp:

2015-08-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] ASSERT(!m_properties.backingStore || owner()) sometimes on zooming
        https://bugs.webkit.org/show_bug.cgi?id=147854

        Reviewed by Tim Horton.

        When destroying a TileGrid, the container layer remains alive by virtue of being
        in the layer tree, and it and its tiles get visited during layer tree transaction
        building but we assert because we've cleared the owner on the tile layers.

        The real bug is that TileController doesn't tell GraphicsLayerCA when the custom
        sublayers change. Make this possible via a new PlatformCALayerClient function,
        and make TileController use this when rearranging its tile grids.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerCustomSublayersChanged):
        (WebCore::GraphicsLayerCA::updateContentsScale): No need to explicitly set
        the ChildrenChanged flag now.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerCustomSublayersChanged):
        (WebCore::PlatformCALayerClient::platformCALayerLayerDidDisplay):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setNeedsDisplay):
        (WebCore::TileController::setContentsScale):
        (WebCore::TileController::setZoomedOutContentsScale):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::clearZoomedOutTileGrid):
        (WebCore::TileController::tileGridsChanged):
        (WebCore::TileController::tileRevalidationTimerFired):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.h: Default param.

2015-08-11  Zalan Bujtas  <zalan@apple.com>

        Disconnect LayoutStateDisabler logic and RenderView pointer.
        https://bugs.webkit.org/show_bug.cgi?id=147906

        Reviewed by Simon Fraser.

        LayoutStateDisabler should disable layout state unconditionally.
        The only place where it was actually conditional was the subtree layout branch.
        Create a dedicated SubtreeLayoutStateMaintainer to manage the subtree layout case.

        No change in behaviour.

        * page/FrameView.cpp:
        (WebCore::SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer):
        (WebCore::SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer):
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::updateFirstLetter):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::repaintOverhangingFloats):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::RenderMediaControlTimelineContainer::layout):
        (WebCore::RenderTextTrackContainerElement::layout):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::populate):
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):
        * rendering/RenderView.h:
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        (WebCore::LayoutStateDisabler::~LayoutStateDisabler):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):

2015-08-11  Simon Fraser  <simon.fraser@apple.com>

        Fix ViewportConfiguration dumping.
        
        ViewportConfiguration::dump() was dumping parameters.width as parameters.initialScale.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfigurationTextStream::operator<<):

2015-08-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [font-features] Map OpenType feature tags to TrueType feature selectors
        https://bugs.webkit.org/show_bug.cgi?id=147819

        Reviewed by Dean Jackson.

        Allow uses of font-feature-settings even on TrueType fonts.

        Test: css3/font-feature-settings-preinstalled-fonts.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::appendRawTrueTypeFeature):
        (WebCore::appendTrueTypeFeature):

2015-08-11  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce use of PassRefPtr in WebCore/css
        https://bugs.webkit.org/show_bug.cgi?id=147821

        Reviewed by Daniel Bates.

        Use RefPtr when returning nullptr or RefPtr, if not, use Ref.

        * css/CSSBasicShapes.cpp:
        (WebCore::buildSerializablePositionOffset):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeEllipse::cssText):
        * css/CSSBasicShapes.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        (WebCore::CSSCalcExpressionNodeParser::parseCalc):
        (WebCore::createBlendHalf):
        (WebCore::createCSS):
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::image):
        * css/CSSCanvasValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::positionOffsetValue):
        (WebCore::ComputedStyleExtractor::currentColorOrValidColor):
        (WebCore::ComputedStyleExtractor::getFontSizeCSSValuePreferringKeyword):
        (WebCore::counterToCSSValue):
        (WebCore::zoomAdjustedPaddingOrMarginPixelValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        (WebCore::computeRenderStyleForProperty):
        (WebCore::valueForItemPositionWithOverflowAlignment):
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForShorthandProperties):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForSidesShorthand):
        (WebCore::ComputedStyleExtractor::getCSSPropertyValuesForGridShorthand):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValueInternal):
        (WebCore::ComputedStyleExtractor::getBackgroundShorthandValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::image):
        (WebCore::CSSCrossfadeValue::blend):
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * css/CSSFilterImageValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::gradientWithStylesResolved):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cloneForCSSOM):
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cloneForCSSOM):
        * css/CSSImageValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseFontFaceValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseContentDistributionOverflowPosition):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parsePositionX):
        (WebCore::CSSParser::parsePositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseAnimationDelay):
        (WebCore::CSSParser::parseAnimationDirection):
        (WebCore::CSSParser::parseAnimationDuration):
        (WebCore::CSSParser::parseAnimationFillMode):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationTrigger):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::gridMissingGridPositionValue):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackSize):
        (WebCore::CSSParser::parseGridBreadth):
        (WebCore::CSSParser::parseGridAutoFlow):
        (WebCore::CSSParser::parseGridTemplateAreas):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseInsetRoundedCorners):
        (WebCore::CSSParser::parseBasicShapeInset):
        (WebCore::CSSParser::parseShapeRadius):
        (WebCore::CSSParser::parseBasicShapeCircle):
        (WebCore::CSSParser::parseBasicShapeEllipse):
        (WebCore::CSSParser::parseBasicShapePolygon):
        (WebCore::CSSParser::parseBasicShapeAndOrBox):
        (WebCore::CSSParser::parseShapeProperty):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseBasicShape):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseImageResolution):
        (WebCore::CSSParser::parseImageSet):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformValue):
        (WebCore::CSSParser::parseBuiltinFilterArguments):
        (WebCore::CSSParser::parseTextIndent):
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createEmptyMediaRule):
        (WebCore::CSSParser::createSupportsRule):
        (WebCore::CSSParser::popSupportsRuleData):
        (WebCore::CSSParser::createKeyframesRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createRegionRule):
        (WebCore::CSSParser::createKeyframe):
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::rules):
        (WebCore::CSSStyleSheet::cssRules):
        * css/CSSStyleSheet.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::styleImage):
        * css/CSSToStyleMap.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::cloneForCSSOM):
        * css/CSSValueList.h:
        * css/MediaList.h:
        (WebCore::MediaQuerySet::copy):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::matchMedia):
        * css/MediaQueryMatcher.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValue):
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyCSSValueInternal):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RGBColor.cpp:
        (WebCore::RGBColor::red):
        (WebCore::RGBColor::green):
        (WebCore::RGBColor::blue):
        (WebCore::RGBColor::alpha):
        * css/RGBColor.h:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::glyphOrientationToCSSPrimitiveValue):
        (WebCore::strokeDashArrayToCSSValueList):
        (WebCore::ComputedStyleExtractor::adjustSVGPaintForCurrentColor):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGStrokeDasharray):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        (WebCore::CSSParser::parsePaintOrder):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::cloneForCSSOM):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::multiply):
        (WebCore::WebKitCSSMatrix::inverse):
        (WebCore::WebKitCSSMatrix::translate):
        (WebCore::WebKitCSSMatrix::scale):
        (WebCore::WebKitCSSMatrix::rotate):
        (WebCore::WebKitCSSMatrix::rotateAxisAngle):
        (WebCore::WebKitCSSMatrix::skewX):
        (WebCore::WebKitCSSMatrix::skewY):
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSTransformValue.cpp:
        (WebCore::WebKitCSSTransformValue::cloneForCSSOM):
        * css/WebKitCSSTransformValue.h:

2015-08-11  Sam Weinig  <sam@webkit.org>

        Move CountQueuingStrategy and related to files to their correct place in the Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=147901

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:

2015-08-11  Zalan Bujtas  <zalan@apple.com>

        Use more references in FrameView.
        https://bugs.webkit.org/show_bug.cgi?id=147899

        Reviewed by Simon Fraser.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::scrollElementToRect):
        * page/FrameView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::imageChanged):
        * testing/Internals.cpp:
        (WebCore::Internals::scrollElementToRect):

2015-08-11  Zalan Bujtas  <zalan@apple.com>

        Invalid FrameView::m_viewportRenderer after layout is finished.
        https://bugs.webkit.org/show_bug.cgi?id=147848
        rdar://problem/22205197

        Reviewed by Simon Fraser.

        We cache the current viewport renderer (FrameView::m_viewportRenderer) right before layout.
        It gets dereferenced later when layout is finished to update the overflow status.
        If the viewport renderer gets destroyed during layout, we end up with a dangling pointer.
        This patch replaces the pointer caching with type caching (none, body, document).

        Unable to construct a test case.

2015-08-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch Windows build to Visual Studio 2015
        https://bugs.webkit.org/show_bug.cgi?id=147887
        <rdar://problem/22235098>

        Reviewed by Alex Christensen.

        Update Visual Studio project file settings to use the current Visual
        Studio and compiler. Continue targeting binaries to run on our minimum
        supported configuration of Windows 7.

        No change in behavior, so no new tests.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:

2015-08-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        feMorphology is not rendered correctly on Retina display
        https://bugs.webkit.org/show_bug.cgi?id=147589

        Reviewed by Dean Jackson.

        The result ImageBuffer of any FilterEffect is already scaled up for 2x
        display. The FEMorphology needs to fix its painting data dimension and
        radius by multiplying them by the filter scale factor.
 
        Test: fast/hidpi/filters-morphology.html

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplySoftware):

2015-08-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Arabic letter Yeh is drawn in LastResort
        https://bugs.webkit.org/show_bug.cgi?id=147862
        <rdar://problem/22202935>

        Reviewed by Darin Adler.

        In order to perform font fallback, we must know which fonts support which characters. We
        perform this check by asking each font to map a sequence of codepoints to glyphs, and
        any glyphs which end up with a 0 value are unsupported by the font.

        One of the mechanisms that we use to do this is to combine the code points into a string,
        and tell Core Text to lay out the string. However, this is fundamentally a different
        operation than the one we are trying to perform. Strings combine adjacent codepoints into
        grapheme clusters, and CoreText operates on these. However, we are trying to gain
        information regarding codepoints, not grapheme clusters.

        Instead of taking this string-based approach, we should try harder to use Core Text
        functions which operate on ordered collections of characters, rather than strings. In
        particular, CTFontGetGlyphsForCharacters() and CTFontGetVerticalGlyphsForCharacters()
        have the behavior we want where any unmapped characters end up with a 0 value glyph.

        Previously, we were only using the result of those functions if they were successfully
        able to map their entire input. However, given the fact that we can degrade gracefully
        in the case of a partial mapping, we shouldn't need to bail completely to the
        string-based approach should a partial mapping occur.

        At some point we should delete the string-based approach entirely. However, this path
        is still explicitly used for composite fonts. Fixing that use case is out of scope
        for this patch.

        Test: fast/text/arabic-glyph-cache-fill-combine.html

        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::fill):

2015-08-11  Chris Dumez  <cdumez@apple.com>

        The 'length' property on interface objects should be configurable
        https://bugs.webkit.org/show_bug.cgi?id=147858

        Reviewed by Daniel Bates.

        Make the 'length' property configurable on interface objects to comply
        with the Web IDL specification [1] and to align our behavior with
        Firefox 38 and Chrome 44.

        This behavior is also covered by the following W3C test suite:
        http://w3c-test.org/dom/interfaces.html

        [1] http://heycam.github.io/webidl/#es-interface-call (17 July 2015)

        Test: fast/dom/length-property-configurable.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        Make the 'length' property configurable on interface objects.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):
        Rebaseline bindings tests.

2015-08-11  Per Arne Vollan  <peavo@outlook.com>

        [Win] Popup menus have incorrect placement when device scale factor != 1.
        https://bugs.webkit.org/show_bug.cgi?id=147880

        Reviewed by Brent Fulgham.

        We need to take the device scaling factor into account when calculating
        the position and size of the popup menu.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):

2015-08-11  Chris Dumez  <cdumez@apple.com>

        [WebIDL] All interface objects must have a property named "name"
        https://bugs.webkit.org/show_bug.cgi?id=147865

        Reviewed by Darin Adler.

        As per the Web IDL specification, all interface objects must have a
        property named "name" with attributes
        { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }
        whose value is the identifier of the corresponding interface:
        http://heycam.github.io/webidl/#es-interface-call
        http://heycam.github.io/webidl/#named-constructors

        Previously, our interface objects had no such property, this patch
        addresses the problem.

        Both Firefox 38 and Chrome 44 comply with the Web IDL specification
        here.

        Test: fast/dom/interface-name-property.html

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

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):
        Rebaseline bindings tests.

2015-08-11  Ting-Wei Lan  <lantw44@gmail.com>

        Fix debug build when optimization is enabled
        https://bugs.webkit.org/show_bug.cgi?id=147816

        Reviewed by Alexey Proskuryakov.

        No new tests because this is only a build fix.

        * editing/InsertNodeBeforeCommand.cpp:

2015-08-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline bindings tests after r188252.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetterConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::finishCreation):
        (WebCore::JSTestNamedConstructorNamedConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministicConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::finishCreation):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattributeConstructor::finishCreation):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonlyConstructor::finishCreation):

2015-08-10  Chris Dumez  <cdumez@apple.com>

        The 'prototype' property on interface objects should not be enumerable
        https://bugs.webkit.org/show_bug.cgi?id=147861

        Reviewed by Darin Adler.

        1. Make the 'prototype' property not enumerable on interface object to
           comply with the Web IDL specification [1] and to align our behavior
           with Firefox 38 and Chrome 44.

        2. Also update the 'prototype' property on named constructors to have the
           following attributes:
           { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }

           Previously, all these were true in WebKit. The new behavior complies
           with the Web IDL specification [2] and aligns our behavior with
           Firefox 38. On Chrome 44, the attributes are as follows:
           { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }

        This behavior is also covered by the following W3C test suite:
        http://w3c-test.org/dom/interfaces.html

        [1] http://heycam.github.io/webidl/#interface-object
        [2] http://heycam.github.io/webidl/#named-constructors

        Test: fast/dom/prototype-property-not-enumerable.html

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

2015-08-10  Alex Christensen  <achristensen@webkit.org>

        Build fix after r188239.

        * PlatformWinCairo.cmake:
        MediaPlayerPrivateMediaFoundation is needed on WinCairo with video properly enabled.

2015-08-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Post-review fixup after r188195
        https://bugs.webkit.org/show_bug.cgi?id=147806

        Unreviewed.

        Covered by fast/text/crash-obscure-text.html.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::objectForEqualityCheck):

2015-08-10  Alex Christensen  <achristensen@webkit.org>

        Build TestWebKitAPI with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147851

        Reviewed by Chris Dumez.

        * PlatformWin.cmake:
        Remove RenderThemeWin.cpp which is included in RenderingAllInOne.cpp.
        * WebCorePrefix.h:
        Include cmakeconfig.h before wtf/Platform.h like we do in JavaScriptCore's config.h to avoid warnings and redefining ENABLE_*  macros.

2015-08-10  Matthew Daiter  <mdaiter@apple.com>

        HTMLMediaElement needs way to find MediaDeviceInfo
        https://bugs.webkit.org/show_bug.cgi?id=147842

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerMediaDeviceIdentifierStorageDirectory):
        * html/HTMLMediaElement.h:
        * page/Settings.h:
        (WebCore::Settings::setMediaDeviceIdentifierStorageDirectory):
        (WebCore::Settings::mediaDeviceIdentifierStorageDirectory):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerMediaDeviceIdentifierStorageDirectory):

2015-08-10  Chris Dumez  <cdumez@apple.com>

        Simplify code for making Page-cacheability decision
        https://bugs.webkit.org/show_bug.cgi?id=147829

        Reviewed by Antti Koivisto.

        Simplify code for making Page-cacheability decision by merging logging
        code and decision making code. Having the same checks in two places was
        redundant and error-prone as we needed to keep them in sync.

        Also get rid of failure reason enum values as those have not been used
        in a while.

        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        (WebCore::canCachePage):
        (WebCore::PageCache::canCache):
        (WebCore::logPageCacheFailureDiagnosticMessage): Deleted.
        (WebCore::PageCache::singleton): Deleted.
        (WebCore::PageCache::setMaxSize): Deleted.
        (WebCore::PageCache::frameCount): Deleted.
        (WebCore::PageCache::markPagesForVisitedLinkStyleRecalc): Deleted.
        (WebCore::PageCache::markPagesForFullStyleRecalc): Deleted.
        (WebCore::PageCache::markPagesForDeviceOrPageScaleChanged): Deleted.
        (WebCore::PageCache::markPagesForContentsSizeChanged): Deleted.
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged): Deleted.
        (WebCore::pruningReasonToDiagnosticLoggingKey): Deleted.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::isDisabledKey):
        (WebCore::DiagnosticLoggingKeys::redirectKey):
        (WebCore::DiagnosticLoggingKeys::replaceKey):
        (WebCore::DiagnosticLoggingKeys::sourceKey):
        (WebCore::DiagnosticLoggingKeys::underMemoryPressureKey):
        (WebCore::DiagnosticLoggingKeys::reloadFromOriginKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2015-08-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: [iOS] Allow inspector to retrieve a list of system fonts
        https://bugs.webkit.org/show_bug.cgi?id=147033

        Reviewed by Joseph Pecoraro.

        Implement systemFontFamilies for iOS.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFontFamilies):

2015-08-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Invalid selectors can be applied to the stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=147230

        Reviewed by Timothy Hatcher.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::isValidSelectorListString):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        Now checks to see that the supplied selector is valid before trying to commit it to the rule.
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::checkStyleRuleSelector): Deleted.

2015-08-10  James Craig  <jcraig@apple.com>

        AX: Address follow-up comments in bug 145684
        https://bugs.webkit.org/show_bug.cgi?id=147817

        Reviewed by Dean Jackson.

        Minor cleanup and style updates requested by Dean.
        Updated Existing Test Expectations.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-show-controls):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-show-controls):

2015-08-07  Antti Koivisto  <antti@apple.com>

        Expand network cache tests to cover memory cache behavior
        https://bugs.webkit.org/show_bug.cgi?id=147783

        Reviewed by Alexey Proskuryakov.

        To support testing, include memory cache as a possible source type to XHR responses.

        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::revalidationInProgress):
        * platform/network/ResourceResponseBase.h:
        * testing/Internals.cpp:
        (WebCore::Internals::xhrResponseSource):

2015-08-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Compile warning (-Wsign-compare) on 32-bits at WebCore/platform/FileSystem.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146414

        Reviewed by Darin Adler.

        No behavioral changes.

        * platform/FileSystem.cpp:
        (WebCore::MappedFileData::MappedFileData): Making use of convertSafely.
        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createFromReadingFile): Making use of convertSafely.

2015-08-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStreamReader closed promise should use CachedAttribute
        https://bugs.webkit.org/show_bug.cgi?id=147487

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/streams/ReadableStreamReader.idl: Made closed a CachedAttribute.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed): Updated according CachedAttribute specific field.

2015-08-09  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Use the non-overlay scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=147725

        Reviewed by Gyuyoung Kim.

        No new tests because there is no behavior change.

        * platform/efl/ScrollbarThemeEfl.cpp:
        (WebCore::ScrollbarThemeEfl::usesOverlayScrollbars):
        Changed the condition of the 'usesOverlayScrollbars' to use the
        setting value.
        * platform/efl/ScrollbarThemeEfl.h:

2015-08-09  Chris Dumez  <cdumez@apple.com>

        Page cache doesn't work for pages actively using Geolocation
        https://bugs.webkit.org/show_bug.cgi?id=147785
        <rdar://problem/11147901>

        Reviewed by Darin Adler.

        Allow pages actively using Geolocation into the PageCache.

        Tests: fast/history/page-cache-geolocation-active-oneshot.html
               fast/history/page-cache-geolocation-active-watcher.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::canSuspendForPageCache):
        (WebCore::Geolocation::suspend): Deleted.
        * history/PageCache.cpp:

2015-08-09  Nan Wang  <n_wang@apple.com>

        AX: CSS table display styles can cause malformed, inaccessible AXTables to be exposed to the AX tree
        https://bugs.webkit.org/show_bug.cgi?id=136415
        <rdar://problem/22026625>

        Reviewed by Chris Fleizach.

        Applying CSS display styles to tables can end up inserting anonymous RenderTableRows, which is not handled well by the 
        accessibility code, which treats these as the actual rows. We can address this by diving deeper into anonymous nodes 
        and finding the real rows and cells we want. In addition, another thing also causing malformed tables is that "grid" 
        roles are being exposed as AXGrid instead of AXTable.

        Test: accessibility/mac/malformed-table.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addTableCellChild):
        (WebCore::AccessibilityTable::addChildrenFromSection):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2015-08-08  Darin Adler  <darin@apple.com>

        Remove -webkit-color-correction CSS property
        https://bugs.webkit.org/show_bug.cgi?id=147812

        Reviewed by Maciej Stachowiak.

        Covered by existing tests.

        I am doing some general cleanup of handling of color spaces in WebKit.
        This removes the obsolete web-visible property that allowed clients to
        get color correction on older Apple platforms where we chose not to do
        it all the time for performance reasons. Currently, it has no effect on
        any supported platform.

        Now that this property is removed, a website can detect that it's not
        there if it uses getComputedStyle, but I don't expect this to have
        significant compatibility fallout. It's harmless to continue using the
        property in legacy content or websites that have not been updated, since
        unknown property names are ignored and it had no effect before anyway.

        * css/CSSComputedStyleDeclaration.cpp: Removed
        CSSPropertyWebkitColorCorrection from the list of computed properties.
        (WebCore::ComputedStyleExtractor::propertyValue): Removed the
        CSSPropertyWebkitColorCorrection case.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Removed the
        CSSPropertyWebkitColorCorrection case.
        (WebCore::isKeywordPropertyID): Ditto.
        (WebCore::CSSParser::parseValue): Ditto.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Deleted the overload
        of this that converts a ColorSpace to a CSSPrimitiveValue.
        (WebCore::CSSPrimitiveValue::operator ColorSpace): Deleted.

        * css/CSSPropertyNames.in: Removed -webkit-color-correction.

        * css/CSSValueKeywords.in: Removed the -webkit-color-correction section,
        which contained sRGB.

        * css/SVGCSSValueKeywords.in: Uncommented sRGB now that it's not shared
        with -webkit-color-correction.

        * rendering/style/RenderStyle.h: Removed setColorSpace and initialColorSpace.
        Kept colorSpace around for now, but it simply returns ColorSpaceSRGB.
        This prevents us from needing to touch every single call site that passes
        the color space in to functions in the platform graphics abstraction.
        We'll touch most of those call sites when we change Color to include the
        color space and eventually we can delete this.

        * rendering/style/StyleRareInheritedData.cpp: Deleted colorSpace.
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Deleted
        code to initialize colorSpace and to copy colorSpace.
        (WebCore::StyleRareInheritedData::operator==): Deleted code to compare
        colorSpace.

2015-08-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Always require ExternalDeviceAutoPlayCandidate flag to AirPlay automatically
        https://bugs.webkit.org/show_bug.cgi?id=147801

        Reviewed by Dean Jackson.

        Test: http/tests/media/video-media-document-disposition-download.html

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Don't tell the last element
          to begin playing to the target unless the ExternalDeviceAutoPlayCandidate flag is set and 
          it is not currently playing.

2015-08-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in ComplexTextController when laying out obscure text
        https://bugs.webkit.org/show_bug.cgi?id=147806
        <rdar://problem/22102378>

        Reviewed by Darin Adler.

        CTFontDescriptorCopyAttribute(fontDescriptor.get(), kCTFontReferenceURLAttribute) can return nullptr.

        Test: fast/text/crash-obscure-text.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::safeCFEqual):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2015-08-08  Dean Jackson  <dino@apple.com>

        Remove the webkit prefix from CanvasRenderingContext2D imageSmoothingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=147803
        <rdar://problem/22200553>

        Reviewed by Sam Weinig.

        Rename webkitImageSmoothingEnabled to imageSmoothingEnabled.

        Updated existing tests, and made sure that the prefixed version is
        identical to the standard version.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::imageSmoothingEnabled): Renamed from webkitImageSmoothingEnabled.
        (WebCore::CanvasRenderingContext2D::setImageSmoothingEnabled): Renamed from setWebkitImageSmoothingEnabled.
        (WebCore::CanvasRenderingContext2D::webkitImageSmoothingEnabled): Deleted.
        (WebCore::CanvasRenderingContext2D::setWebkitImageSmoothingEnabled): Deleted.
        * html/canvas/CanvasRenderingContext2D.h: Rename the methods.
        * html/canvas/CanvasRenderingContext2D.idl: Add the non-prefixed form, and mark is as the
        implementation of the prefixed form.

2015-08-09  Andreas Kling  <akling@apple.com>

        Ref-ify some functions that always succeed in constructing Documents.
        <https://webkit.org/b/147552>

        Reviewed by Sam Weinig.

        Update some functions involved in the construction of new Document objects
        to codify that they always construct objects.

        Bonus: DOMImplementation::createCSSStyleSheet().

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        (WebCore::DOMImplementation::createHTMLDocument):
        (WebCore::DOMImplementation::createDocument):
        * dom/DOMImplementation.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/DocumentWriter.h:
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):
        * xml/XSLTProcessor.h:

2015-08-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179871.
        https://bugs.webkit.org/show_bug.cgi?id=147810

        Breaks product images on http://www.apple.com/shop/buy-
        mac/macbook (Requested by smfr on #webkit).

        Reverted changeset:

        "Render: properly update body's background image"
        https://bugs.webkit.org/show_bug.cgi?id=140183
        http://trac.webkit.org/changeset/179871

2015-08-07  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce uses of PassRefPtr in bindings
        https://bugs.webkit.org/show_bug.cgi?id=147781

        Reviewed by Chris Dumez.

        Use RefPtr when function can return null or an instance. If not, Ref is used.

        * bindings/gobject/GObjectNodeFilterCondition.h:
        * bindings/gobject/GObjectXPathNSResolver.h:
        * bindings/gobject/WebKitDOMNodeFilter.cpp:
        (WebKit::core):
        * bindings/gobject/WebKitDOMNodeFilterPrivate.h:
        * bindings/gobject/WebKitDOMXPathNSResolver.cpp:
        (WebKit::core):
        * bindings/gobject/WebKitDOMXPathNSResolverPrivate.h:
        * bindings/js/CallbackFunction.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::getEventListener):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::toInt8Array):
        (WebCore::toInt16Array):
        (WebCore::toInt32Array):
        (WebCore::toUint8Array):
        (WebCore::toUint8ClampedArray):
        (WebCore::toUint16Array):
        (WebCore::toUint32Array):
        (WebCore::toFloat32Array):
        (WebCore::toFloat64Array):
        * bindings/js/JSDOMStringListCustom.cpp:
        (WebCore::JSDOMStringList::toWrapped):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::readAccelerationArgument):
        (WebCore::readRotationRateArgument):
        * bindings/js/JSErrorHandler.h:
        (WebCore::createJSErrorHandler):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionOptions):
        * bindings/js/JSNodeCustom.cpp:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::toWrapped):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWorld):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        * bindings/js/SerializedScriptValue.h:
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode rangeOfContainingParagraph]):
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Remove dead code from FontCache::createFontPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=147804

        Reviewed by Zalan Bujtas.

        CTFontCreateForCSS() always returns the best font.

        No new tests because there is no behavior change.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamily):

2015-08-07  Zalan Bujtas  <zalan@apple.com>

        Move painting functions from RenderObject to RenderElement.
        https://bugs.webkit.org/show_bug.cgi?id=147764

        Reviewed by Simon Fraser.

        Ideally they should live in RenderBoxModelObject, but the current SVG architecture makes is difficult
        to move them there.

        No change in functionality.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::FloatRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::drawLineForBoxSide):
        (WebCore::RenderElement::paintFocusRing):
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide): Deleted.
        (WebCore::RenderObject::paintFocusRing): Deleted.
        (WebCore::RenderObject::paintOutline): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintCollapsedBorders):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):

2015-08-07  James Craig  <jcraig@apple.com>

        REGRESSION(r184722) AX: WebKit video playback toolbar removed from DOM; no longer accessible to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=145684

        Reviewed by Dean Jackson.

        Updated Apple Video controls to add an invisible but focusable button that allows VoiceOver 
        users (and when unblocked, keyboard users) to re-display the video controls.

        Test: media/video-controls-show-on-kb-or-ax-event.html

        * English.lproj/mediaControlsLocalizedStrings.js:
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-show-controls):
        (video::-webkit-media-show-controls):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleShowControlsClick):
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.updateForShowingControls):
        (Controller.prototype.showControls):
        (Controller.prototype.hideControls):
        (Controller.prototype.setNeedsUpdateForDisplayedWidth):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-show-controls):
        (video::-webkit-media-show-controls):

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        Build more testing binaries with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147799

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        MockCDM.cpp needs to be part of WebCoreTestSupport, not WebCore.
        * PlatformWin.cmake:
        Added files needed for AppleWin port.

2015-08-07  Anders Carlsson  <andersca@apple.com>

        Being moving away from using SQLTransactionStateMachine in SQLTransactionBackend
        https://bugs.webkit.org/show_bug.cgi?id=147798

        Reviewed by Geoffrey Garen.

        This is the first step towards getting rid of the state machine so we can ultimately merge SQLTransactionBackend
        into SQLTransaction.

        Instead of having the state machine run our functions, just run them ourselves where we can. For states that need
        to be handled in the frontend, call SQLTransaction::requestTransitToState explicitly.

        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::stateFunctionFor):
        (WebCore::SQLTransactionBackend::lockAcquired):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::runStatements):
        (WebCore::SQLTransactionBackend::runCurrentStatement):
        (WebCore::SQLTransactionBackend::handleCurrentStatementError):
        (WebCore::SQLTransactionBackend::handleTransactionError):
        (WebCore::SQLTransactionBackend::postflightAndCommit):
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState): Deleted.
        (WebCore::SQLTransactionBackend::nextStateForCurrentStatementError): Deleted.
        (WebCore::SQLTransactionBackend::nextStateForTransactionError): Deleted.
        (WebCore::SQLTransactionBackend::sendToFrontendState): Deleted.
        * Modules/webdatabase/SQLTransactionBackend.h:

2015-08-07  Filip Pizlo  <fpizlo@apple.com>

        Lightweight locks should be adaptive
        https://bugs.webkit.org/show_bug.cgi?id=147545

        Reviewed by Geoffrey Garen.

        * bindings/objc/WebScriptObject.mm:
        (WebCore::getJSWrapper):
        (WebCore::addJSWrapper):
        (WebCore::removeJSWrapper):
        (WebCore::removeJSWrapperIfRetainCountOne):
        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::setCurrentFrameBounds):
        (WebCore::CARingBuffer::getCurrentFrameBounds):
        * platform/audio/mac/CARingBuffer.h:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setExposedScrollViewRect:]):
        (-[WAKWindow exposedScrollViewRect]):

2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Post-review comments on r188146
        https://bugs.webkit.org/show_bug.cgi?id=147793

        Reviewed by Daniel Bates.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::appendTrueTypeFeature):
        (WebCore::appendOpenTypeFeature):
        (WebCore::applyFontFeatureSettings):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamily):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Font fallback is not language-sensitive
        https://bugs.webkit.org/show_bug.cgi?id=147390

        Reviewed by Dean Jackson.

        We need to make our font fallback code sensitive to locale.

        This patch rolls r187729 back in. However, only particular versions of iOS and OS X are
        performant enough to enable this language-sensitivity.

        This patch also applies to iOS.

        Test: fast/text/fallback-language-han.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::lookupCTFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

2015-08-07  Zalan Bujtas  <zalan@apple.com>

        RenderTheme::volumeSliderOffsetFromMuteButton should take const& RenderBox.
        https://bugs.webkit.org/show_bug.cgi?id=147731

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton): Deleted.
        * rendering/RenderMediaControls.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderTheme.h:

2015-08-07  Zalan Bujtas  <zalan@apple.com>

        Replace RenderObject::isRooted() logic with isDescendantOf().
        https://bugs.webkit.org/show_bug.cgi?id=147788

        Reviewed by Simon Fraser.

        And some related cleanups.

        No change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::extendedBackgroundRectForPainting):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isDescendantOf):
        (WebCore::scheduleRelayoutForSubtree):
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintRectangle):
        (WebCore::RenderObject::repaintSlowRepaintObject):
        (WebCore::RenderObject::isRooted):
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::unextendedBackgroundRect):
        (WebCore::RenderView::backgroundRect):
        * rendering/RenderView.h:

2015-08-07  Zalan Bujtas  <zalan@apple.com>

        Subtree layout code should use RenderElement.
        https://bugs.webkit.org/show_bug.cgi?id=147694

        Reviewed by Simon Fraser.

        Subtree layout will never begin at a RenderText, so tighten up
        the code to operate on RenderElements instead of RenderObjects.
        (This patch is based on webkit.org/b/126878)

        No change in functionality.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLayout):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Deleted.
        (WebCore::FrameView::layoutRoot): Deleted.
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::clearLayoutRootIfNeeded):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::clearLayoutRootIfNeeded): Deleted.
        (WebCore::RenderObject::willBeDestroyed): Deleted.
        * rendering/RenderObject.h:

2015-08-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Temporarily allow programmatic input assistance for adding Gmail account
        https://bugs.webkit.org/show_bug.cgi?id=147792

        Reviewed by Enrica Casucci.
        <rdar://problem/22126518>

        Temporary fix for keyboard input sliding out and immediately back in upon user interaction
        in the Gmail 2-factor authentication page.

        * platform/RuntimeApplicationChecksIOS.h:
        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsGmailAddAccountOnIOS): Added bundle ID for Gmail settings.

2015-08-07  Andy Estes  <aestes@apple.com>

        Crash when following a Google search link to Twitter with Limit Adult Content enabled
        https://bugs.webkit.org/show_bug.cgi?id=147651

        Reviewed by Brady Eidson.

        When a loaded CachedRawResource gets a new client, it synthesizes the callbacks that the new client would have
        received while the resource was loading. Unlike a real network load, it synthesizes these callbacks in a single
        run loop iteration. When DocumentLoader receives a redirect, and finds substitute data in the app cache for the
        redirect URL, it schedules a timer that removes DocumentLoader as a client of the CachedRawResource then
        synthesizes its own set of CachedRawResourceClient callbacks. But since CachedRawResource has already delivered
        client callbacks before the app cache timer fires, DocumentLoader unexpectedly ends up getting two sets of
        client callbacks and badness ensues.

        The fix is to let CachedRawResource detect if a redirect will trigger the client to load substitute data. If so,
        stop delivering client callbacks.

        Layout test to follow.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::syntheticRedirectReceived): If there is valid substitute data, do not continue.
        * loader/DocumentLoader.h:
        * loader/cache/CachedRawResource.cpp: Returned early if syntheticRedirectReceived() said not to continue.
        (WebCore::CachedRawResource::didAddClient):
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::syntheticRedirectReceived):

2015-08-06  Dean Jackson  <dino@apple.com>

        Shadows don't draw on fillText when using a gradient fill
        https://bugs.webkit.org/show_bug.cgi?id=147758
        <rdar://problem/20860912>

        Reviewed by Myles Maxfield.

        Since we use a mask to render a pattern or gradient
        into text, any shadow was being clipped out. Change
        this to draw the shadow before the mask + fill operation,
        using a technique similar to text-shadow.

        Test: fast/canvas/gradient-text-with-shadow.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Get the current shadow
        style, paint the text with a transformed shadow offset so that we only
        see the shadow and not the text, then combine with the existing pattern/gradient
        fill.

2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=147722

        Reviewed by Simon Fraser.

        Fonts with features are simply modeled as new font objects. Font
        feature information is contained within FontDescription, and our
        caches are correctly sensitive to this information. Therefore,
        we just need to make our font lookup code honor the request to
        use certain features.

        This patch creates a file, FontCacheCoreText.cpp, which will be the
        new home of all shared OS X / iOS FontCache code. Over time, I will
        be moving more and more source into this file, until there is
        nothing left of FontCacheMac.mm and FontCacheIOS.mm. For now, the
        only function in this file is the code which applies font features.

        Test: css3/font-feature-settings-preinstalled-fonts.html

        * WebCore.xcodeproj/project.pbxproj: Add FontCacheCoreText.cpp.
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp: Added.
        (WebCore::appendTrueTypeFeature): What the name says.
        (WebCore::appendOpenTypeFeature): Ditto.
        (WebCore::applyFontFeatureSettings): Ditto.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters): Call
        applyFontFeatureSettings().
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamily): Ditto.
        (WebCore::FontCache::systemFallbackForCharacters): Ditto.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Ditto.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        Ditto.

2015-08-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r187907.
        https://bugs.webkit.org/show_bug.cgi?id=147789

        taking a different approach to the fix (Requested by estes on
        #webkit).

        Reverted changeset:

        "Crash when following a Google search link to Twitter with
        Limit Adult Content enabled."
        https://bugs.webkit.org/show_bug.cgi?id=147651
        http://trac.webkit.org/changeset/187907

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r188130.

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        I forgot the parameter name.

2015-08-07  Alex Christensen  <achristensen@webkit.org>

        Fix WinCairo build after r188130.

        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        Update fontPlatformData parameters.

2015-08-07  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build after <http://trac.webkit.org/changeset/188130>
        (https://bugs.webkit.org/show_bug.cgi?id=147775)

        Include header FontDescription.h.

        * platform/graphics/win/FontCustomPlatformData.cpp:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:

2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow FontCustomPlatformData to consult with FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=147775

        Reviewed by Zalan Bujtas.

        In order to implement font-feature-settings, web fonts need to be
        able to consult with the set of active font features. Rather than
        add yet another argument to all the functions in this flow, this
        patch passes around a reference to the FontDescription itself instead
        of copies of constituent members of it.

        No new tests because there is no behavior change.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::font):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::createFont):
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::platformDataFromCustomData):
        * loader/cache/CachedSVGFont.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/freetype/FontPlatformData.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformCreateScaledFont):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:

2015-08-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Create CountQueuingStrategy object as per spec
        https://bugs.webkit.org/show_bug.cgi?id=146594

        Reviewed by Geoffrey Garen.

        CountQueuingStrategy is a class part of the Streams API that can be found at
        https://streams.spec.whatwg.org/#cqs-class. We had it as js at the tests but the spec says we have to provide it
        natively. The class is implemented in this patch by creating its corresponding IDL with the size method using
        the [CustomBinding] attribute, that does not create any bindings against the object allowing us full control to
        do what the spec requires (just returning 1 without any cast check). The constructor sets the highWaterMark
        property taking it from the argument.

        Covered by current tests
        (LayoutTests/streams/reference-implementation/count-queuing-strategy.html and
        LayoutTests/streams/reference-implementation/brand-checks.html).

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * PlatformMac.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp: Build infrastructure.
        * Modules/streams/CountQueuingStrategy.h: Added.
        (WebCore::CountQueuingStrategy::~CountQueuingStrategy): Created empty.
        (WebCore::CountQueuingStrategy::size): Returns 1.
        * Modules/streams/CountQueuingStrategy.idl: Added.
        * bindings/js/JSCountQueuingStrategyCustom.cpp: Added.
        (WebCore::jsCountQueuingStrategyPrototypeFunctionSize): Calls WebCore::CountQueuingStrategy::size.
        (WebCore::constructJSCountQueuingStrategy): Constructs the strategy, copies the highWaterMark from the argument
        and returns it.
        * bindings/js/JSDOMBinding.h:
        (WebCore::getPropertyFromObject): Moved from ReadableJSStream.cpp.
        (WebCore::setPropertyToObject): Added to create a property into an object.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::getPropertyFromObject): Deleted.

2015-08-07  Brady Eidson  <beidson@apple.com>

        Move concrete KeyedDecoder/Encoder implementations to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=147757.

        Rubberstamped by Andy Estes.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::KeyedDecoder): Static constructor to be implemented per-platform.
        (WebCore::KeyedEncoder::KeyedEncoder): Ditto.

        * platform/cf/KeyedDecoderCF.cpp: Renamed from Source/WebKit2/Shared/cf/KeyedDecoder.cpp.
        (WebCore::KeyedDecoder::decoder):
        (WebCore::KeyedDecoderCF::KeyedDecoderCF):
        (WebCore::KeyedDecoderCF::~KeyedDecoderCF):
        (WebCore::KeyedDecoderCF::decodeBytes):
        (WebCore::KeyedDecoderCF::decodeBool):
        (WebCore::KeyedDecoderCF::decodeUInt32):
        (WebCore::KeyedDecoderCF::decodeInt32):
        (WebCore::KeyedDecoderCF::decodeInt64):
        (WebCore::KeyedDecoderCF::decodeFloat):
        (WebCore::KeyedDecoderCF::decodeDouble):
        (WebCore::KeyedDecoderCF::decodeString):
        (WebCore::KeyedDecoderCF::beginObject):
        (WebCore::KeyedDecoderCF::endObject):
        (WebCore::KeyedDecoderCF::beginArray):
        (WebCore::KeyedDecoderCF::beginArrayElement):
        (WebCore::KeyedDecoderCF::endArrayElement):
        (WebCore::KeyedDecoderCF::endArray):
        * platform/cf/KeyedDecoderCF.h: Renamed from Source/WebKit2/Shared/cf/KeyedDecoder.h.
        
        * platform/cf/KeyedEncoderCF.cpp: Renamed from Source/WebKit2/Shared/cf/KeyedEncoder.cpp.
        (WebCore::KeyedEncoder::encoder):
        (WebCore::createDictionary):
        (WebCore::KeyedEncoderCF::KeyedEncoderCF):
        (WebCore::KeyedEncoderCF::~KeyedEncoderCF):
        (WebCore::KeyedEncoderCF::encodeBytes):
        (WebCore::KeyedEncoderCF::encodeBool):
        (WebCore::KeyedEncoderCF::encodeUInt32):
        (WebCore::KeyedEncoderCF::encodeInt32):
        (WebCore::KeyedEncoderCF::encodeInt64):
        (WebCore::KeyedEncoderCF::encodeFloat):
        (WebCore::KeyedEncoderCF::encodeDouble):
        (WebCore::KeyedEncoderCF::encodeString):
        (WebCore::KeyedEncoderCF::beginObject):
        (WebCore::KeyedEncoderCF::endObject):
        (WebCore::KeyedEncoderCF::beginArray):
        (WebCore::KeyedEncoderCF::beginArrayElement):
        (WebCore::KeyedEncoderCF::endArrayElement):
        (WebCore::KeyedEncoderCF::endArray):
        (WebCore::KeyedEncoderCF::finishEncoding):
        * platform/cf/KeyedEncoderCF.h: Renamed from Source/WebKit2/Shared/cf/KeyedEncoder.h.
        
        * platform/glib/KeyedDecoderGlib.cpp: Renamed from Source/WebKit2/Shared/glib/KeyedDecoder.cpp.
        (WebCore::KeyedDecoder::decoder):
        (WebCore::KeyedDecoderGlib::KeyedDecoderGlib):
        (WebCore::KeyedDecoderGlib::~KeyedDecoderGlib):
        (WebCore::KeyedDecoderGlib::dictionaryFromGVariant):
        (WebCore::KeyedDecoderGlib::decodeBytes):
        (WebCore::KeyedDecoderGlib::decodeSimpleValue):
        (WebCore::KeyedDecoderGlib::decodeBool):
        (WebCore::KeyedDecoderGlib::decodeUInt32):
        (WebCore::KeyedDecoderGlib::decodeInt32):
        (WebCore::KeyedDecoderGlib::decodeInt64):
        (WebCore::KeyedDecoderGlib::decodeFloat):
        (WebCore::KeyedDecoderGlib::decodeDouble):
        (WebCore::KeyedDecoderGlib::decodeString):
        (WebCore::KeyedDecoderGlib::beginObject):
        (WebCore::KeyedDecoderGlib::endObject):
        (WebCore::KeyedDecoderGlib::beginArray):
        (WebCore::KeyedDecoderGlib::beginArrayElement):
        (WebCore::KeyedDecoderGlib::endArrayElement):
        (WebCore::KeyedDecoderGlib::endArray):
        * platform/glib/KeyedDecoderGlib.h: Renamed from Source/WebKit2/Shared/glib/KeyedDecoder.h.
        
        * platform/glib/KeyedEncoderGlib.cpp: Renamed from Source/WebKit2/Shared/glib/KeyedEncoder.cpp.
        (WebCore::KeyedEncoder::encoder):
        (WebCore::KeyedEncoderGlib::KeyedEncoderGlib):
        (WebCore::KeyedEncoderGlib::~KeyedEncoderGlib):
        (WebCore::KeyedEncoderGlib::encodeBytes):
        (WebCore::KeyedEncoderGlib::encodeBool):
        (WebCore::KeyedEncoderGlib::encodeUInt32):
        (WebCore::KeyedEncoderGlib::encodeInt32):
        (WebCore::KeyedEncoderGlib::encodeInt64):
        (WebCore::KeyedEncoderGlib::encodeFloat):
        (WebCore::KeyedEncoderGlib::encodeDouble):
        (WebCore::KeyedEncoderGlib::encodeString):
        (WebCore::KeyedEncoderGlib::beginObject):
        (WebCore::KeyedEncoderGlib::endObject):
        (WebCore::KeyedEncoderGlib::beginArray):
        (WebCore::KeyedEncoderGlib::beginArrayElement):
        (WebCore::KeyedEncoderGlib::endArrayElement):
        (WebCore::KeyedEncoderGlib::endArray):
        (WebCore::KeyedEncoderGlib::finishEncoding):
        * platform/glib/KeyedEncoderGlib.h: Renamed from Source/WebKit2/Shared/glib/KeyedEncoder.h.

2015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not automatically show PackageKit codec installation notifications
        https://bugs.webkit.org/show_bug.cgi?id=135973

        Reviewed by Philippe Normand.

        Add description parameter to requestInstallMissingPlugins() that
        will be used by the API layer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::requestInstallMissingPlugins):
        * html/HTMLMediaElement.h:
        * page/ChromeClient.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::requestInstallMissingPlugins):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2015-08-07  Doug Russell  <d_russell@apple.com>

        AX: Bug 147737 is causing test failures in Mavericks WK1
        https://bugs.webkit.org/show_bug.cgi?id=147763

        Restrict change made in 147737 to ElCapitan+ because it is causing tests
        to fail in Mavericks.

        Reviewed by Chris Fleizach.

        Fixes failing tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):

2015-08-07  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Create [CustomBinding] extended IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=146593

        Reviewed by Geoffrey Garen.

        Added the [CustomBinding] IDL extended attribute. The idea is that when using this attribute, bindings generate
        only the signature of the JS functions and we have to implement all the access in the Custom.cpp files, meaning
        accessing the implementations at our wish.

        Added customBindingMethod, customBindingMethodWithArgs to the generator tests.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skipped [CustomBinding] methods.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Consider CustomBinding as ForwardDeclareInHeader.
        (GenerateImplementation): Avoid printing both header and implementation of the function.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipFunction): Skipped [CustomBinding] methods.
        * bindings/scripts/IDLAttributes.txt: Added [CustomBinding] IDL extended attribute.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/TestObj.idl: Added customBindingMethod, customBindingMethodWithArgs and their
        expectations.

2015-08-06  Zan Dobersek  <zdobersek@igalia.com>

        Source/WebCore/crypto code should pass std::function<> objects through rvalue references
        https://bugs.webkit.org/show_bug.cgi?id=147332

        Reviewed by Anders Carlsson.

        Pass the std::function<> callbacks through CryptoAlgorithm methods via
        rvlaue references. This avoids generation of unnecessary move and copy
        constructors for std::function<> objects that are being handled.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        (WebCore::CryptoAlgorithm::generateKey):
        (WebCore::CryptoAlgorithm::deriveKey):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        (WebCore::CryptoAlgorithm::encryptForWrapKey):
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::encryptForWrapKey):
        (WebCore::CryptoAlgorithmAES_KW::decryptForUnwrapKey):
        (WebCore::CryptoAlgorithmAES_KW::generateKey):
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::generateKey):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        Fix GTK clean build after r187997
        https://bugs.webkit.org/show_bug.cgi?id=147723

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        r187997 made it so WebCoreTestSupport does not link with WebCore, which is necessary to get DumpRenderTree to link.
        It also made it so WebCoreTestSupport is no longer dependent on WebCore, which causes it to build at the same time.
        This caused problems because WebCoreTestSupport uses headers that are generated for WebCore, such as WebKitFontFamilyNames.h.
        Adding a dependency makes it so that WebCoreTestSupport waits until WebCore is done compiling before compiling,
        which is what it used to do, but it does not cause linking problems with DumpRenderTree.

2015-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        CSSSegmentedFontFace::fontRanges() does not handle duplicate fonts correctly
        https://bugs.webkit.org/show_bug.cgi?id=147765

        Reviewed by Filip Pizlo.

        CSSSegmentedFontFace::fontRanges() was trying to hash on FontDescriptors by
        picking a few specific pieces of data out of the FontDescriptor, computing
        a hash on it, and using that unsigned as a key in a HashMap. This has two
        problems: it doesn't handle equality correctly, as hash collisions cannot
        depend on an equality operator to dedup, and it doesn't hash on all the
        members of a FontDescription.

        Instead, this HashMap should use FontDescriptionKey, which represents a
        FontDescription, and is designed exactly for the purpose of being used as a
        key in a HashMap.

        No new tests because there is no behavior change (because a problem occurs
        when two different FontDescriptions hash to the same value, which is rare).

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * css/CSSSegmentedFontFace.h:
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKeyHash::hash):
        (WebCore::FontDescriptionKeyHash::equal):

2015-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Remove dead code from FontCache::createFontPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=147762

        Reviewed by Andy Estes.

        No new tests because there is no behavior change.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::createFontPlatformData): Deleted.

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        Revert part of my "build fix" in r188101.

        * CMakeLists.txt:
        MockCDM was already conditionally added to WebCore_SOURCES, and that change causes dependency cycles when bug 147723 is fixed.

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        [Win] CMake build fix after r188098.

        * CMakeLists.txt:
        MockCDM is necessary for testing if ENCRYPTED_MEDIA_V2 is enabled.

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        [Win] Enable all Windows features in CMake
        https://bugs.webkit.org/show_bug.cgi?id=147744

        Reviewed by Tim Horton.

        * PlatformWin.cmake:
        Add a file needed for enabling video.

2015-08-06  Anders Carlsson  <andersca@apple.com>

        Rename SQLStatementBackend to SQLStatement
        https://bugs.webkit.org/show_bug.cgi?id=147755

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * Modules/webdatabase/SQLStatement.h: Renamed from Source/WebCore/Modules/webdatabase/SQLStatementBackend.h.
        (WebCore::SQLStatement::hasStatementCallback):
        (WebCore::SQLStatement::hasStatementErrorCallback):
        * Modules/webdatabase/SQLStatementBackend.cpp: Removed.
        (WebCore::SQLStatementBackend::SQLStatementBackend): Deleted.
        (WebCore::SQLStatementBackend::~SQLStatementBackend): Deleted.
        (WebCore::SQLStatementBackend::sqlError): Deleted.
        (WebCore::SQLStatementBackend::sqlResultSet): Deleted.
        (WebCore::SQLStatementBackend::execute): Deleted.
        (WebCore::SQLStatementBackend::performCallback): Deleted.
        (WebCore::SQLStatementBackend::setDatabaseDeletedError): Deleted.
        (WebCore::SQLStatementBackend::setVersionMismatchedError): Deleted.
        (WebCore::SQLStatementBackend::setFailureDueToQuota): Deleted.
        (WebCore::SQLStatementBackend::clearFailureDueToQuota): Deleted.
        (WebCore::SQLStatementBackend::lastExecutionFailedDueToQuota): Deleted.
        * Modules/webdatabase/SQLStatementBackend.h:
        (WebCore::SQLStatementBackend::hasStatementCallback): Deleted.
        (WebCore::SQLStatementBackend::hasStatementErrorCallback): Deleted.
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::currentStatement):
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Make FontDescriptionKey sensitive to FontFeatureSettings
        https://bugs.webkit.org/show_bug.cgi?id=147751

        Reviewed by Anders Carlsson.

        Just like how FontDescription hashes should be sensitive to locale, they should
        also be sensitive to font features.

        This patch also fixes operator== for FontDescriptionKey, which was previously
        comparing hashes for equality instead of the underlying data. Comparing hashes
        for equality is useless inside hashmaps.

        This is in preparation for implementing font-feature-settings.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue):
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize): Deleted.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::operator!=):
        (WebCore::FontDescriptionKey::isHashTableDeletedValue):
        (WebCore::FontDescriptionKey::computeHash):
        * platform/graphics/FontFeatureSettings.cpp:
        (WebCore::FontFeature::hash):
        (WebCore::FontFeatureSettings::hash):
        * platform/graphics/FontFeatureSettings.h:

2015-08-06  Anders Carlsson  <andersca@apple.com>

        Merge SQLStatement into SQLStatementBackend
        https://bugs.webkit.org/show_bug.cgi?id=147754

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/SQLStatement.cpp: Removed.
        (WebCore::SQLStatement::SQLStatement): Deleted.
        (WebCore::SQLStatement::setBackend): Deleted.
        (WebCore::SQLStatement::hasCallback): Deleted.
        (WebCore::SQLStatement::hasErrorCallback): Deleted.
        (WebCore::SQLStatement::performCallback): Deleted.
        * Modules/webdatabase/SQLStatement.h: Removed.
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        (WebCore::SQLStatementBackend::performCallback):
        (WebCore::SQLStatementBackend::frontend): Deleted.
        * Modules/webdatabase/SQLStatementBackend.h:
        (WebCore::SQLStatementBackend::hasStatementCallback):
        (WebCore::SQLStatementBackend::hasStatementErrorCallback):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::currentStatement):
        (WebCore::SQLTransactionBackend::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSQLTransactionCustom.cpp:

2015-08-06  Chris Dumez  <cdumez@apple.com>

        Toggle GPS state based on page visibility to save battery
        https://bugs.webkit.org/show_bug.cgi?id=147685

        Reviewed by Benjamin Poulain.

        Toggle GPS state based on page visibility to save battery. Previously,
        if the site you were viewing was watching your position and you
        switched tab, the GPS would stay on. This was bad for battery life.

        Tests: fast/dom/Geolocation/startUpdatingOnlyWhenPageVisible.html
               fast/dom/Geolocation/stopUpdatingForHiddenPage.html

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::addObserver):
        (WebCore::GeolocationController::viewStateDidChange):

2015-08-06  Anders Carlsson  <andersca@apple.com>

        SQLStatementBackend doesn't need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=147748

        Reviewed by Geoffrey Garen.

        There's no shared ownership of SQLStatementBackend so we can just use std::unique_ptr.

        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create): Deleted.
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.h:

2015-08-06  Eric Carlson  <eric.carlson@apple.com>

        Do not enforce "content-disposition: attachment" sandbox restrictions on a MediaDocument
        https://bugs.webkit.org/show_bug.cgi?id=147734
        rdar://problem/22028179

        Reviewed by Andy Estes.

        Test to follow, see https://bugs.webkit.org/show_bug.cgi?id=147735

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Use applyContentDispositionAttachmentSandbox
          instead of setting sandbox flags directly.
        (WebCore::Document::shouldEnforceContentDispositionAttachmentSandbox): Don't special
          case MediaDocument.
        (WebCore::Document::applyContentDispositionAttachmentSandbox): Apply sandbox flags
          according to document type.
        * dom/Document.h:

2015-08-06  Anders Carlsson  <andersca@apple.com>

        Get rid of DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=147733

        Reviewed by Geoffrey Garen.

        * CMakeLists.txt:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp: Removed.
        (WebCore::DatabaseBackendBase::DatabaseBackendBase): Deleted.
        (WebCore::DatabaseBackendBase::~DatabaseBackendBase): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h: Removed.
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Add comment to CSSParserString
        https://bugs.webkit.org/show_bug.cgi?id=147724

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * css/CSSParserValues.h:

2015-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Font feature settings comparisons are order-dependent and case-dependent
        https://bugs.webkit.org/show_bug.cgi?id=147719

        Reviewed by Benjamin Poulain.

        We should make our settings vector order-independent and case-independent.

        Test: css3/font-feature-settings-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFeatureTag):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontFeatureSettings):
        * platform/graphics/FontFeatureSettings.cpp:
        (WebCore::FontFeature::FontFeature):
        (WebCore::FontFeature::operator==):
        (WebCore::FontFeatureSettings::FontFeatureSettings):
        * platform/graphics/FontFeatureSettings.h:
        (WebCore::FontFeature::FontFeature):
        (WebCore::FontFeature::operator==):
        (WebCore::FontFeature::operator<):
        (WebCore::FontFeatureSettings::insert):
        (WebCore::FontFeatureSettings::FontFeatureSettings):
        (WebCore::FontFeatureSettings::append): Deleted.

2015-08-06  Doug Russell  <d_russell@apple.com>

        AX: AXLoadComplete that comes before AX API access won't fire
        https://bugs.webkit.org/show_bug.cgi?id=147737

        Reviewed by Chris Fleizach.

        Treat setEnhancedUserInterfaceAccessibility() as AX API access and if true,
        enableAccessibility().

        Test: accessibility/mac/loaded-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):

2015-08-06  Eric Carlson  <eric.carlson@apple.com>

        Do not enforce "content-disposition: attachment" sandbox restrictions on a MediaDocument
        https://bugs.webkit.org/show_bug.cgi?id=147734
        rdar://problem/22028179

        Reviewed by Dean Jackson.

        Test to follow, see https://bugs.webkit.org/show_bug.cgi?id=147735

        * dom/Document.cpp:
        (WebCore::Document::shouldEnforceContentDispositionAttachmentSandbox): Return
          early if the Document is a MediaDocument.

2015-08-06  Matt Rajca  <mrajca@apple.com>

        Media Session: remove media elements from the ID <-> element map on destruction
        https://bugs.webkit.org/show_bug.cgi?id=147707

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2015-08-06  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [CoordinatedGraphics] Remove unused functions in Coordinated TiledBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=147621

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp: Remove setTileSize() and tileSize().
        (WebCore::TiledBackingStore::setTileSize):

2015-08-06  Anders Carlsson  <andersca@apple.com>

        Move the last remnants of DatabaseBackendBase to Database
        https://bugs.webkit.org/show_bug.cgi?id=147730

        Reviewed by Tim Horton.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        * Modules/webdatabase/DatabaseBackendBase.h:
        (WebCore::DatabaseBackendBase::databaseContext): Deleted.
        (WebCore::DatabaseBackendBase::setFrontend): Deleted.

2015-08-06  Alex Christensen  <achristensen@webkit.org>

        Fix build without ENABLE(VIDEO) after r188030.

        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        Move definition of HTMLMediaElementInvalidID to Document.h so it can be used outside of ENABLE(VIDEO) macros.

2015-08-04  Matt Rajca  <mrajca@apple.com>

        Media Session: push paused state to the media session focus manager instead of polling
        https://bugs.webkit.org/show_bug.cgi?id=147633

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia): If a valid source element ID is passed in, set the 'IsSourcePlaying'
         flag accordingly.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::elementWithID):
        (WebCore::HTMLMediaElement::setMuted): Pass along the element ID.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
        (WebCore::HTMLMediaElement::setPlaying): Ditto.
        * html/HTMLMediaElement.h:
        * page/ChromeClient.h:
        * page/MediaProducer.h:
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingMedia): Pass along the source element ID.
        (WebCore::Page::isMediaElementPaused): Deleted. We now push media playback state changes instead of polling.
        * page/Page.h:

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        CharacterFallbackMapKey should be locale-specific
        https://bugs.webkit.org/show_bug.cgi?id=147532

        Reviewed by Dean Jackson.

        This is in preparation for locale-specific font fallback.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::Font::systemFallbackFontForCharacter):

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Expand CharacterFallbackMapKey to a struct
        https://bugs.webkit.org/show_bug.cgi?id=147530

        Reviewed by Dean Jackson.

        This is in prepraration for making this struct locale-specific.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::isHashTableDeletedValue):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::CharacterFallbackMapKeyHash::equal):
        (WebCore::Font::systemFallbackFontForCharacter):

2015-08-05  Chris Dumez  <cdumez@apple.com>

        Crash when removing children of a MathMLSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=147704
        <rdar://problem/21940321>

        Reviewed by Ryosuke Niwa.

        When MathMLSelectElement::childrenChanged() is called after its
        children have been removed, MathMLSelectElement calls
        updateSelectedChild() which accesses m_selectedChild. However,
        in this case, m_selectedChild is the previously selected child
        and it may be destroyed as this point if it was removed. To avoid
        this problem, MathMLSelectElement now keep a strong ref to the
        currently selected element.

        Test: mathml/maction-removeChild.html

        * mathml/MathMLSelectElement.h:

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate FontCascade.cpp to NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=147533

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp:
        (WebCore::fontCascadeCache):

2015-08-05  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performOpenAndVerify):
        * Modules/webdatabase/Database.h:

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete duplicate forward-declaration
        https://bugs.webkit.org/show_bug.cgi?id=147701

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * platform/spi/cocoa/CoreTextSPI.h:

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

        Move the last DatabaseBackendBase functions over to Database
        https://bugs.webkit.org/show_bug.cgi?id=147706

        Reviewed by Tim Horton.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::setExpectedVersion):
        (WebCore::Database::getActualVersionForTransaction):
        (WebCore::Database::version):
        (WebCore::Database::stringIdentifier):
        (WebCore::Database::displayName):
        (WebCore::Database::estimatedSize):
        (WebCore::Database::fileName):
        (WebCore::Database::details):
        (WebCore::Database::maximumSize):
        (WebCore::Database::databaseDebugName):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::databaseDebugName): Deleted.
        (WebCore::DatabaseBackendBase::~DatabaseBackendBase): Deleted.
        (WebCore::DatabaseBackendBase::version): Deleted.
        (WebCore::DatabaseBackendBase::securityOrigin): Deleted.
        (WebCore::DatabaseBackendBase::stringIdentifier): Deleted.
        (WebCore::DatabaseBackendBase::displayName): Deleted.
        (WebCore::DatabaseBackendBase::estimatedSize): Deleted.
        (WebCore::DatabaseBackendBase::fileName): Deleted.
        (WebCore::DatabaseBackendBase::details): Deleted.
        (WebCore::DatabaseBackendBase::setExpectedVersion): Deleted.
        (WebCore::DatabaseBackendBase::getActualVersionForTransaction): Deleted.
        (WebCore::DatabaseBackendBase::maximumSize): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:
        (WebCore::DatabaseBackendBase::opened): Deleted.
        (WebCore::DatabaseBackendBase::isNew): Deleted.
        (WebCore::DatabaseBackendBase::sqliteDatabase): Deleted.
        (WebCore::DatabaseBackendBase::expectedVersion): Deleted.
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * Modules/webdatabase/SQLTransactionClient.h:

2015-08-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/187972.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::addAudioConsumer):
        (WebCore::MediaStreamAudioSource::removeAudioConsumer):
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::close):
        (WebCore::Database::runTransaction):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::closeAllDatabases):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::setClient):
        (WebCore::notificationMutex):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        (WebCore::SQLCallbackWrapper::hasCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::getNextStatement):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):
        * bindings/js/WorkerScriptController.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::MessagePortChannel::locallyEntangledPort):
        (WebCore::PlatformMessagePortChannel::setRemotePort):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        (WebCore::PlatformMessagePortChannel::closeInternal):
        * dom/default/PlatformMessagePortChannel.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::synchronousNativeIconForPageURL):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::performRetainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::performReleaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
        (WebCore::IconDatabase::pageURLMappingCount):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::iconRecordCount):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::wakeSyncThread):
        (WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::IconDatabase::performOpenInitialization):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::writeToDatabase):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        (WebCore::IconDatabase::cleanupSyncThread):
        * loader/icon/IconDatabase.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFramePinState):
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
        (WebCore::ScrollingTree::isRubberBandInProgress):
        (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
        (WebCore::ScrollingTree::isScrollSnapInProgress):
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
        (WebCore::ScrollingTree::setCanRubberBandState):
        (WebCore::ScrollingTree::rubberBandsAtLeft):
        (WebCore::ScrollingTree::rubberBandsAtRight):
        (WebCore::ScrollingTree::rubberBandsAtBottom):
        (WebCore::ScrollingTree::rubberBandsAtTop):
        (WebCore::ScrollingTree::setScrollPinningBehavior):
        (WebCore::ScrollingTree::scrollPinningBehavior):
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        (WebCore::ScrollingTree::latchedNode):
        (WebCore::ScrollingTree::setLatchedNode):
        (WebCore::ScrollingTree::clearLatchedNode):
        * page/scrolling/ScrollingTree.h:
        * platform/MemoryPressureHandler.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::clearMemoryPressure):
        (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::setMonotonicAnimationStartTime):
        (WebCore::DisplayRefreshMonitor::mutex):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks):
        (WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::callbackContext):
        (WebCore::AVFWrapper::~AVFWrapper):
        (WebCore::AVFWrapper::mapLock):
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setTilesOpaque):
        (WebCore::LegacyTileCache::doLayoutTiles):
        (WebCore::LegacyTileCache::setCurrentScale):
        (WebCore::LegacyTileCache::commitScaleChange):
        (WebCore::LegacyTileCache::layoutTilesNow):
        (WebCore::LegacyTileCache::layoutTilesNowForRect):
        (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
        (WebCore::LegacyTileCache::removeAllTiles):
        (WebCore::LegacyTileCache::removeForegroundTiles):
        (WebCore::LegacyTileCache::setContentReplacementImage):
        (WebCore::LegacyTileCache::contentReplacementImage):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        (WebCore::LegacyTileCache::setNeedsDisplayInRect):
        (WebCore::LegacyTileCache::updateTilingMode):
        (WebCore::LegacyTileCache::setTilingMode):
        (WebCore::LegacyTileCache::doPendingRepaints):
        (WebCore::LegacyTileCache::flushSavedDisplayRects):
        (WebCore::LegacyTileCache::prepareToDraw):
        * platform/ios/LegacyTileLayerPool.h:
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::takeLayerWithSize):
        (WebCore::LegacyTileLayerPool::setCapacity):
        (WebCore::LegacyTileLayerPool::prune):
        (WebCore::LegacyTileLayerPool::drain):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::add):
        (WebCore::CurlDownloadManager::remove):
        (WebCore::CurlDownloadManager::getActiveDownloadCount):
        (WebCore::CurlDownloadManager::getPendingDownloadCount):
        (WebCore::CurlDownloadManager::stopThreadIfIdle):
        (WebCore::CurlDownloadManager::updateHandleList):
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::getTempPath):
        (WebCore::CurlDownload::getUrl):
        (WebCore::CurlDownload::getResponse):
        (WebCore::CurlDownload::closeFile):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):
        (WebCore::CurlDownload::didFail):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::cookieJarPath):
        (WebCore::sharedResourceMutex):
        (WebCore::curl_lock_callback):
        (WebCore::curl_unlock_callback):
        * platform/network/ios/QuickLook.mm:
        (WebCore::QLDirectoryAttributes):
        (qlPreviewConverterDictionaryMutex):
        (WebCore::addQLPreviewConverterWithFileForURL):
        (WebCore::qlPreviewConverterUTIForURL):
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::safeQLURLForDocumentURLAndResourceURL):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::setAuthorizer):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::databaseMutex):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:

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

        Move more functions from DatabaseBackendBase to Database
        https://bugs.webkit.org/show_bug.cgi?id=147705

        Reviewed by Tim Horton.

        * Modules/webdatabase/Database.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::Database::Database):
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        (WebCore::DoneCreatingDatabaseOnExitCaller::setOpenSucceeded):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::closeDatabase):
        (WebCore::Database::getCachedVersion):
        (WebCore::Database::setCachedVersion):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::version):
        (WebCore::formatErrorMessage): Deleted.
        (WebCore::guidMutex): Deleted.
        (WebCore::guidToVersionMap): Deleted.
        (WebCore::updateGuidVersionMap): Deleted.
        (WebCore::guidToDatabaseMap): Deleted.
        (WebCore::guidForOriginAndName): Deleted.
        (WebCore::DatabaseBackendBase::DatabaseBackendBase): Deleted.
        (WebCore::DatabaseBackendBase::closeDatabase): Deleted.
        (WebCore::DoneCreatingDatabaseOnExitCaller::DoneCreatingDatabaseOnExitCaller): Deleted.
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller): Deleted.
        (WebCore::DoneCreatingDatabaseOnExitCaller::setOpenSucceeded): Deleted.
        (WebCore::DatabaseBackendBase::performOpenAndVerify): Deleted.
        (WebCore::DatabaseBackendBase::getCachedVersion): Deleted.
        (WebCore::DatabaseBackendBase::setCachedVersion): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:

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

        Move more functions from DatabaseBackendBase to Database
        https://bugs.webkit.org/show_bug.cgi?id=147703

        Reviewed by Tim Horton.

        * Modules/webdatabase/Database.cpp:
        (WebCore::fullyQualifiedInfoTableName):
        (WebCore::setTextValueInDatabase):
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::performGetTableNames):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::getActualVersionForTransaction):
        (WebCore::DatabaseBackendBase::databaseInfoTableName): Deleted.
        (WebCore::fullyQualifiedInfoTableName): Deleted.
        (WebCore::retrieveTextResultFromDatabase): Deleted.
        (WebCore::setTextValueInDatabase): Deleted.
        (WebCore::DatabaseBackendBase::getVersionFromDatabase): Deleted.
        (WebCore::DatabaseBackendBase::setVersionInDatabase): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:

2015-08-05  Alex Christensen  <achristensen@webkit.org>

        Build DumpRenderTree with CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147519

        Reviewed by Brent Fulgham.

        * CMakeLists.txt:
        WebCoreTestSupport is a static library and should not be linked with WebCore.

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

        Move some more DatabaseBackendBase functions to Database
        https://bugs.webkit.org/show_bug.cgi?id=147702

        Reviewed by Tim Horton.

        * Modules/webdatabase/Database.cpp:
        (WebCore::formatErrorMessage):
        (WebCore::Database::disableAuthorizer):
        (WebCore::Database::enableAuthorizer):
        (WebCore::Database::setAuthorizerPermissions):
        (WebCore::Database::lastActionChangedDatabase):
        (WebCore::Database::lastActionWasInsert):
        (WebCore::Database::resetDeletes):
        (WebCore::Database::hadDeletes):
        (WebCore::Database::resetAuthorizer):
        (WebCore::Database::incrementalVacuumIfNeeded):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::disableAuthorizer): Deleted.
        (WebCore::DatabaseBackendBase::enableAuthorizer): Deleted.
        (WebCore::DatabaseBackendBase::setAuthorizerPermissions): Deleted.
        (WebCore::DatabaseBackendBase::lastActionChangedDatabase): Deleted.
        (WebCore::DatabaseBackendBase::lastActionWasInsert): Deleted.
        (WebCore::DatabaseBackendBase::resetDeletes): Deleted.
        (WebCore::DatabaseBackendBase::hadDeletes): Deleted.
        (WebCore::DatabaseBackendBase::resetAuthorizer): Deleted.
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:

2015-08-05  Zalan Bujtas  <zalan@apple.com>

        [Frame flattening] Return early when child RenderView is not available.
        https://bugs.webkit.org/show_bug.cgi?id=147697

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::peformLayoutWithFlattening):

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

        Remove more dead database code
        https://bugs.webkit.org/show_bug.cgi?id=147698

        Reviewed by Tim Horton.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::interrupt): Deleted.
        (WebCore::DatabaseBackendBase::isInterrupted): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::execute):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::computeNextStateAndCleanupIfNeeded):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::computeNextStateAndCleanupIfNeeded):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setFullsync):
        (WebCore::SQLiteDatabase::SQLiteDatabase): Deleted.
        (WebCore::SQLiteDatabase::interrupt): Deleted.
        (WebCore::SQLiteDatabase::isInterrupted): Deleted.
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare): Deleted.
        (WebCore::SQLiteStatement::step): Deleted.

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

        Fix build.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:

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

        Fix build.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::lookupCTFont):

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

        Change openDatabase to return a Database instead of a DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=147691

        Reviewed by Tim Horton.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::create): Deleted.
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseServer.h:

2015-08-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Migrate to CTFontCreateForCharactersWithLanguage from [NSFont findFontLike:forString:withRange:inLanguage]
        https://bugs.webkit.org/show_bug.cgi?id=147483

        Reviewed by Dean Jackson.

        [NSFont findFontLike:forString:withRange:inLanguage] doesn't properly handle its last argument. In
        addition, we want to be moving away from NSFont in the first place and on to Core Text. This new
        CoreText function correctly handles its language argument, which is required for language-specific
        font fallback.

        This patch rolls r187707 back in which was rolled out in r187802 due to test flakiness. This patch
        fixes the flakiness.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::platformPurgeInactiveFontData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fallbackDedupSet):
        (WebCore::FontCache::platformPurgeInactiveFontData):
        (WebCore::lookupCTFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/spi/mac/NSFontSPI.h:

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

        Get rid of DatabaseBackend as another step towards merging Database and DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=147687

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::close):
        (WebCore::Database::from): Deleted.
        (WebCore::Database::backend): Deleted.
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackend.cpp: Removed.
        (WebCore::DatabaseBackend::DatabaseBackend): Deleted.
        * Modules/webdatabase/DatabaseBackend.h: Removed.
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseOpenTask::debugTaskName):
        (WebCore::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseCloseTask::doPerformTask):
        (WebCore::DatabaseCloseTask::debugTaskName):
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::~DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::doPerformTask):
        (WebCore::DatabaseTransactionTask::debugTaskName):
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseTableNamesTask::doPerformTask):
        (WebCore::DatabaseTableNamesTask::debugTaskName):
        (WebCore::DatabaseBackend::DatabaseOpenTask::DatabaseOpenTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseOpenTask::doPerformTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseOpenTask::debugTaskName): Deleted.
        (WebCore::DatabaseBackend::DatabaseCloseTask::DatabaseCloseTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseCloseTask::doPerformTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseCloseTask::debugTaskName): Deleted.
        (WebCore::DatabaseBackend::DatabaseTransactionTask::DatabaseTransactionTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseTransactionTask::~DatabaseTransactionTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseTransactionTask::doPerformTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseTransactionTask::debugTaskName): Deleted.
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::DatabaseTableNamesTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::doPerformTask): Deleted.
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::debugTaskName): Deleted.
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseTask::database):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::execute):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-08-04  Filip Pizlo  <fpizlo@apple.com>

        Rename Mutex to DeprecatedMutex
        https://bugs.webkit.org/show_bug.cgi?id=147675

        Reviewed by Geoffrey Garen.

        No new tests because this is just a renaming.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::AsyncAudioDecoder):
        (WebCore::AsyncAudioDecoder::runLoop):
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::addAudioConsumer):
        (WebCore::MediaStreamAudioSource::removeAudioConsumer):
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::close):
        (WebCore::Database::runTransaction):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::hasPendingTransaction):
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::isInterrupted):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::setPaused):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::start):
        (WebCore::DatabaseThread::setPaused):
        (WebCore::DatabaseThread::handlePausedQueue):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::closeAllDatabases):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::originLockFor):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::setDatabasesPaused):
        (WebCore::DatabaseTracker::setClient):
        (WebCore::notificationMutex):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        (WebCore::SQLCallbackWrapper::hasCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::enqueueStatementBackend):
        (WebCore::SQLTransactionBackend::getNextStatement):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::isExecutionTerminating):
        * bindings/js/WorkerScriptController.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::MessagePortChannel::locallyEntangledPort):
        (WebCore::PlatformMessagePortChannel::setRemotePort):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        (WebCore::PlatformMessagePortChannel::closeInternal):
        * dom/default/PlatformMessagePortChannel.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::synchronousNativeIconForPageURL):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::performRetainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::performReleaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
        (WebCore::IconDatabase::pageURLMappingCount):
        (WebCore::IconDatabase::retainedPageURLCount):
        (WebCore::IconDatabase::iconRecordCount):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::wakeSyncThread):
        (WebCore::IconDatabase::isOpenBesidesMainThreadCallbacks):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::getOrCreatePageURLRecord):
        (WebCore::IconDatabase::iconDatabaseSyncThread):
        (WebCore::IconDatabase::performOpenInitialization):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::syncThreadMainLoop):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::writeToDatabase):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        (WebCore::IconDatabase::cleanupSyncThread):
        * loader/icon/IconDatabase.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFramePinState):
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
        (WebCore::ScrollingTree::isRubberBandInProgress):
        (WebCore::ScrollingTree::setMainFrameIsRubberBanding):
        (WebCore::ScrollingTree::isScrollSnapInProgress):
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
        (WebCore::ScrollingTree::setCanRubberBandState):
        (WebCore::ScrollingTree::rubberBandsAtLeft):
        (WebCore::ScrollingTree::rubberBandsAtRight):
        (WebCore::ScrollingTree::rubberBandsAtBottom):
        (WebCore::ScrollingTree::rubberBandsAtTop):
        (WebCore::ScrollingTree::setScrollPinningBehavior):
        (WebCore::ScrollingTree::scrollPinningBehavior):
        (WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
        (WebCore::ScrollingTree::latchedNode):
        (WebCore::ScrollingTree::setLatchedNode):
        (WebCore::ScrollingTree::clearLatchedNode):
        * page/scrolling/ScrollingTree.h:
        * platform/MemoryPressureHandler.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::setReceivedMemoryPressure):
        (WebCore::MemoryPressureHandler::clearMemoryPressure):
        (WebCore::MemoryPressureHandler::shouldWaitForMemoryClearMessage):
        (WebCore::MemoryPressureHandler::respondToMemoryPressureIfNeeded):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::setMonotonicAnimationStartTime):
        (WebCore::DisplayRefreshMonitor::mutex):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setDelayCallbacks):
        (WebCore::MediaPlayerPrivateAVFoundation::clearMainThreadPendingFlag):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::callbackContext):
        (WebCore::AVFWrapper::~AVFWrapper):
        (WebCore::AVFWrapper::mapLock):
        (WebCore::AVFWrapper::addToMap):
        (WebCore::AVFWrapper::removeFromMap):
        (WebCore::AVFWrapper::periodicTimeObserverCallback):
        (WebCore::AVFWrapper::processNotification):
        (WebCore::AVFWrapper::loadPlayableCompletionCallback):
        (WebCore::AVFWrapper::loadMetadataCompletionCallback):
        (WebCore::AVFWrapper::seekCompletedCallback):
        (WebCore::AVFWrapper::processCue):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::processShouldWaitForLoadingOfResource):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::handleSample):
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setTilesOpaque):
        (WebCore::LegacyTileCache::doLayoutTiles):
        (WebCore::LegacyTileCache::setCurrentScale):
        (WebCore::LegacyTileCache::commitScaleChange):
        (WebCore::LegacyTileCache::layoutTilesNow):
        (WebCore::LegacyTileCache::layoutTilesNowForRect):
        (WebCore::LegacyTileCache::removeAllNonVisibleTiles):
        (WebCore::LegacyTileCache::removeAllTiles):
        (WebCore::LegacyTileCache::removeForegroundTiles):
        (WebCore::LegacyTileCache::setContentReplacementImage):
        (WebCore::LegacyTileCache::contentReplacementImage):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        (WebCore::LegacyTileCache::setNeedsDisplayInRect):
        (WebCore::LegacyTileCache::updateTilingMode):
        (WebCore::LegacyTileCache::setTilingMode):
        (WebCore::LegacyTileCache::doPendingRepaints):
        (WebCore::LegacyTileCache::flushSavedDisplayRects):
        (WebCore::LegacyTileCache::prepareToDraw):
        * platform/ios/LegacyTileLayerPool.h:
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::takeLayerWithSize):
        (WebCore::LegacyTileLayerPool::setCapacity):
        (WebCore::LegacyTileLayerPool::prune):
        (WebCore::LegacyTileLayerPool::drain):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::add):
        (WebCore::CurlDownloadManager::remove):
        (WebCore::CurlDownloadManager::getActiveDownloadCount):
        (WebCore::CurlDownloadManager::getPendingDownloadCount):
        (WebCore::CurlDownloadManager::stopThreadIfIdle):
        (WebCore::CurlDownloadManager::updateHandleList):
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::init):
        (WebCore::CurlDownload::getTempPath):
        (WebCore::CurlDownload::getUrl):
        (WebCore::CurlDownload::getResponse):
        (WebCore::CurlDownload::closeFile):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):
        (WebCore::CurlDownload::didFail):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::cookieJarPath):
        (WebCore::sharedResourceMutex):
        (WebCore::curl_lock_callback):
        (WebCore::curl_unlock_callback):
        * platform/network/ios/QuickLook.mm:
        (WebCore::QLDirectoryAttributes):
        (qlPreviewConverterDictionaryMutex):
        (WebCore::addQLPreviewConverterWithFileForURL):
        (WebCore::qlPreviewConverterUTIForURL):
        (WebCore::removeQLPreviewConverterForURL):
        (WebCore::safeQLURLForDocumentURLAndResourceURL):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::interrupt):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::setMaximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::setAuthorizer):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::databaseMutex):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):
        * workers/WorkerThread.h:

2015-08-05  Matthew Daiter  <mdaiter@apple.com>

        Adding in MediaPrivateMediaStreamEngine to default compile
        https://bugs.webkit.org/show_bug.cgi?id=146790
        <rdar://problem/21747289>

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):

2015-08-05  Matthew Daiter  <mdaiter@apple.com>

        Remove m_synchronizer from MediaPlayerPrivateMediaStream
        https://bugs.webkit.org/show_bug.cgi?id=147637

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::playInternal): Deleted.

2015-08-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Build fix after 187961

        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):

2015-08-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r185111): Clicking phone numbers doesn't prompt to call sometimes
        https://bugs.webkit.org/show_bug.cgi?id=147678
        <rdar://problem/21827815>

        Reviewed by Brady Eidson.

        Fixes an issue where a non-user-initiated navigation of the main frame to a phone link (tel URL)
        may be ignored. The navigation is ignored if the page was reloaded as a result of a web content
        process crash, its lifetime exceeded the back-forward cache expiration interval, or a person
        quits and opens Safari again, among other scenarios.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setShouldOpenExternalURLsPolicy): Added.
        (WebCore::HistoryItem::shouldOpenExternalURLsPolicy): Added.
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadDifferentDocumentItem): Apply the "should open external URLs" policy
        from the history item, if applicable. Also, be more explicit when instantiating a NavigationAction
        so as to help make it straightforward to reduce the number of NavigationAction constructors we have
        in the future.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveDocumentState): Save the "should open external URLs" policy to
        the history item.
        (WebCore::HistoryController::restoreDocumentState): Apply the "should open external URLs" policy
        from the history item to the document loader.
        (WebCore::HistoryController::initializeItem): Update the "should open external URLs" policy of
        the history item to reflect the policy of the document loader associated with the current frame.

2015-08-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Checkboxes and radio buttons should scale when zooming or pinching to zoom
        https://bugs.webkit.org/show_bug.cgi?id=147405

        Reviewed by Dean Jackson.

        Refactors paintButton and paintToggleButton to use a temporary buffer when rendering
        if the controls are zoomed. This affects checkboxes, radio buttons, and normal (push)
        buttons.

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton): Refactored to use drawCellOrFocusRingWithViewIntoContext.
        (WebCore::paintButton): Refactored to use drawCellOrFocusRingWithViewIntoContext.
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext): Draws a given button cell
            and/or its focus ring into the given context, optionally using an offscreen buffer.
            This is a static function in ThemeMac so it can be accessed later on by
            RenderThemeMac when painting search fields that scale with zoom.
        (WebCore::ThemeMac::paint):
        (WebCore::buttonFocusRectOutlineWidth): Deleted. Made this value into a const float.

2015-08-04  Doug Russell  <d_russell@apple.com>

        AX: tree item children returned from ranged getter are different from full array of children
        https://bugs.webkit.org/show_bug.cgi?id=147660

        Reviewed by Chris Fleizach.

        Add an isTreeItem() check in ranged element getter so that it matches the logic in 
        the getter for the full children array. This prevents returning a row as a child
        when only the rows contents should be returned. This prevents navigation issues on
        websites without aria outlines.

        Test: accessibility/mac/aria-tree-item-children.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2015-08-04  Anders Carlsson  <andersca@apple.com>

        CTTE the database task code
        https://bugs.webkit.org/show_bug.cgi?id=147673

        Reviewed by Andreas Kling.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::tableNames):
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::DatabaseTask):
        (WebCore::DatabaseTask::performTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseBackend::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseBackend::DatabaseCloseTask::doPerformTask):
        (WebCore::DatabaseBackend::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::doPerformTask):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseTask::database):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::SameDatabasePredicate::operator()):

2015-08-04  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r173784): [Mac] Correct latching error for non-scrollable iframe nested inside scrollable div.
        https://bugs.webkit.org/show_bug.cgi?id=147668
        <rdar://problem/21870332>

        Reviewed by Simon Fraser.

        Test: platform/mac/fast/scrolling/scroll-div-with-nested-nonscrollable-iframe.html

        When we are wrapping up processing of the wheel event for a given frame, if the current latching context
        does NOT apply to the current frame (e.g., because it's latched to an enclosing frame) we should not pass
        wheel events directly to the latched elements scrollable container. Instead, we should just give the current
        frame an opportunity to perform any custom wheel event handling and return, so that the enclosing (latched)
        frame can do the rest of its event handling.
        
        If we don't do this, we incorrectly ask the enclosing frame to process the event, then return claiming that
        we handled the event, preventing the enclosing frame from doing its part of the processing.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompleteWheelEvent):

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Soft link libGLESv2 and libEGL on Windows again
        https://bugs.webkit.org/show_bug.cgi?id=147671

        Reviewed by Dean Jackson.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::initializeEGLDisplay):
        Fail gracefully if libEGL is not found.

2015-08-04  Anders Carlsson  <andersca@apple.com>

        Remove another unused database function
        https://bugs.webkit.org/show_bug.cgi?id=147670

        Reviewed by Daniel Bates.

        This was used back when we had WebSQL support in workers, we can safely remove all these functions now.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::interruptAllDatabasesForContext): Deleted.
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::interruptAllDatabasesForContext): Deleted.
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext): Deleted.
        * Modules/webdatabase/DatabaseTracker.h:

2015-08-04  Anders Carlsson  <andersca@apple.com>

        Remove database thread pause code
        https://bugs.webkit.org/show_bug.cgi?id=147669

        Reviewed by Daniel Bates.

        We now grab power assertions while running SQLite transactions, 
        and this code isn't used at all with modern WebKit so let's just get rid of it.

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext): Deleted.
        (WebCore::DatabaseContext::databaseThread): Deleted.
        (WebCore::DatabaseContext::setPaused): Deleted.
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused): Deleted.
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread): Deleted.
        (WebCore::DatabaseThread::requestTermination): Deleted.
        (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask): Deleted.
        (WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused): Deleted.
        (WebCore::DatabaseUnpauseTask::doPerformTask): Deleted.
        (WebCore::DatabaseUnpauseTask::debugTaskName): Deleted.
        (WebCore::DatabaseThread::setPaused): Deleted.
        (WebCore::DatabaseThread::handlePausedQueue): Deleted.
        (WebCore::DatabaseThread::databaseThread): Deleted.
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setDatabasesPaused): Deleted.
        * Modules/webdatabase/DatabaseTracker.h:

2015-08-04  Chris Dumez  <cdumez@apple.com>

        Subframes with no current HistoryItem should not prevent page-caching
        https://bugs.webkit.org/show_bug.cgi?id=147649
        <rdar://problem/21614832>

        Reviewed by Andreas Kling.

        Subframes with no current HistoryItem should not prevent page-caching.
        We need one for the main frame as this is the key in the PageCache.
        However, there is no reason to require one for subframes.

        This is a common reason for page-caching failures nowadays.

        Frames do no have a current HistoryItem until something has been loaded in them.

        Test: http/tests/navigation/page-cache-iframe-no-current-historyItem.html

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):

2015-08-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r187908

        * platform/win/WindowsTouch.h: If WINVER is set properly, we
        don't need these definitions.

2015-08-04  Anders Carlsson  <andersca@apple.com>

        Remove an unused Database function
        https://bugs.webkit.org/show_bug.cgi?id=147661

        Reviewed by Simon Fraser.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::closeImmediately): Deleted.
        * Modules/webdatabase/Database.h:

2015-08-04  Brady Eidson  <beidson@apple.com>

        Crash when following a Google search link to Twitter with Limit Adult Content enabled.
        <rdar://problem/22123707> and https://bugs.webkit.org/show_bug.cgi?id=147651

        Reviewed by Sam Weinig.

        No new tests (Doesn't occur in a tested config).

        For now, we'll skip the application cache for main resource loads if parental controls are enabled.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::startLoadingMainResource):

2015-08-04  Matthew Daiter  <mdaiter@apple.com>

        Added buffer to AVMediaCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=147454
        <rdar://problem/22079502>

        Reviewed by Jer Noble.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaCaptureSource::buffer):
        (WebCore::AVMediaCaptureSource::setBuffer):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):

2015-08-04  Matthew Daiter  <mdaiter@apple.com>

        Needless assignment of usingDot
        https://bugs.webkit.org/show_bug.cgi?id=147514

        Reviewed by Eric Carlson.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Deleted.

2015-08-04  Chris Dumez  <cdumez@apple.com>

        shouldParseTelephoneNumbersInNode() does not need to check for Comment nodes
        https://bugs.webkit.org/show_bug.cgi?id=147630

        Reviewed by Sam Weinig.

        shouldParseTelephoneNumbersInNode() does not need to check for Comment
        nodes. We already know the input is a ContainerNode and a Comment is
        NOT a ContainerNode. Also, we were already doing a isElementNode()
        check before calling disallowTelephoneNumberParsing().

        I also updated the function to use a for loop for clarity and dropped
        the isElementNode() check as calling hasTagName() / isLink() on a
        ContainerNode is as fast all calling it on an Element nowadays.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::disallowTelephoneNumberParsing):
        (WebCore::shouldParseTelephoneNumbersInNode):

2015-08-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Do not require a video track for AirPlay
        https://bugs.webkit.org/show_bug.cgi?id=147647

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleReadyStateChange): Call updateWirelessTargetAvailable().
        (Controller.prototype.updateHasVideo): Don't call updateWirelessTargetAvailable().
        (Controller.prototype.updateWirelessTargetAvailable): Don't require video.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Call updateMediaState when we reach HAVE_METADATA.
        (WebCore::HTMLMediaElement::mediaState): Don't require video, only that the file can play.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::showPlaybackTargetPicker): Check readyState instead of hasVideo.

2015-08-04  Anders Carlsson  <andersca@apple.com>

        Get rid of ReasonForCallingAllowPlugins since it's not used anywhere
        https://bugs.webkit.org/show_bug.cgi?id=147648

        Reviewed by Andreas Kling.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * loader/FrameLoaderTypes.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::allowPlugins):
        * loader/SubframeLoader.h:
        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::enabledPlugin):

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Fix debug CMake build on Windows after r187818.

        * PlatformWin.cmake:
        Debug *AllInOne.cpp object files in WebCore require /bigobj to compile successfully.

2015-08-04  Alexey Proskuryakov  <ap@apple.com>

        Implement NPAPI redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=138675
        rdar://problem/15779101

        Patch by Jeffrey Pfau, updated and tweaked by me.

        Reviewed by Anders Carlsson.

        Test: http/tests/plugins/get-url-redirect-notify.html

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::init):
        (WebCore::NetscapePlugInStreamLoader::willSendRequest):
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::isSubresourceLoader):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didSendData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::isSubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::willSendRequest): Deleted.
        * loader/SubresourceLoader.h:
        * plugins/npapi.h:
        * plugins/npfunctions.h:

2015-08-04  Zalan Bujtas  <zalan@apple.com>

        RenderTheme::paint() should take RenderBox instead of RenderObject.
        https://bugs.webkit.org/show_bug.cgi?id=147638

        Reviewed by Andreas Kling.

        No change in functionality.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::updateControlStatesForRenderer): ->RenderBox too.
        (WebCore::RenderTheme::isActive): Remove redundant code.
        * rendering/RenderTheme.h:

2015-08-04  Matthew Daiter  <mdaiter@apple.com>

        Render to GraphicsContext MediaPlayerPrivateMediaStreamAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=147643

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paint):

2015-08-04  Matthew Daiter  <mdaiter@apple.com>

        Added ability to create images from buffers for MediaStream paint methods
        https://bugs.webkit.org/show_bug.cgi?id=147642

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createImageFromSampleBuffer):

2015-08-04  Matthew Daiter  <mdaiter@apple.com>

        Add image variable rendered by paint methods for MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=147645

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:

2015-08-04  Zalan Bujtas  <zalan@apple.com>

        RenderTheme::baselinePosition() should take RenderBox instead of RenderObject.
        https://bugs.webkit.org/show_bug.cgi?id=147632

        Reviewed by Andreas Kling.

        It eliminates some redundant type checking and casting.

        No change in functionality.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::baselinePosition):
        * platform/efl/RenderThemeEfl.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::baselinePosition):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::baselinePosition):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::baselinePosition):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):
        * rendering/RenderThemeSafari.h:

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Enable WebGL on Windows CMake build.
        https://bugs.webkit.org/show_bug.cgi?id=143311

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt:
        ANGLE is built quite differently on Windows, so I'm not going to touch the existing CMake build system for
        ANGLE on Linux, although I think it should eventually be unified more by using ANGLE's OpenGL renderer.
        * PlatformWin.cmake:
        Added some needed source files and include directories.

2015-08-04  Jeremy Jones  <jeremyj@apple.com>

        Implement isPictureInPictureInterrupted.
        https://bugs.webkit.org/show_bug.cgi?id=147620

        Reviewed by Eric Carlson.

        Implement isPictureInPictureInterrupted so setting the property to true pauses playback.
        This allows PiP to pause when the device is locked while the app is suspended.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController isPictureInPictureInterrupted]):
        (-[WebAVPlayerController setPictureInPictureInterrupted:]):

2015-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        Introduce COMPILER(GCC_OR_CLANG) guard and make COMPILER(GCC) true only for GCC
        https://bugs.webkit.org/show_bug.cgi?id=146833

        Reviewed by Alexey Proskuryakov.

        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp:
        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApply):
        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::NetworkStateNotifier::readSocketCallback):

2015-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] Add an option to build AllInOne files
        https://bugs.webkit.org/show_bug.cgi?id=102647

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2015-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the all-in-one build on Linux after r187659
        https://bugs.webkit.org/show_bug.cgi?id=147557

        Reviewed by Alex Christensen.

        Removed MediaFeatureNames.cpp from the all-in-one build, because it caused build failures on Linux.
        Additionally removed css/MediaAllInOne.cpp since it is unused.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * css/CSSAllInOne.cpp:
        * css/MediaAllInOne.cpp: Removed.

2015-08-03  Benjamin Poulain  <bpoulain@apple.com>

        Returns inconsistent types for el.style.property and el.style.getPropertyValue('color')
        https://bugs.webkit.org/show_bug.cgi?id=147549

        Reviewed by Andreas Kling.

        Kudos to Greg Whitworth for finding this bug.

        Test: fast/css/getPropertyValue-returns-empty-on-missing-property.html

        * css/CSSStyleDeclaration.idl:
        Our definition was wrong.
        Current spec: http://www.w3.org/TR/cssom/#dom-cssstyledeclaration-getpropertyvalue
        Current draft: https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-getpropertyvalue
        Gecko and EdgeHTML follow the spec.

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix crashing Mavericks test

        Unreviewed.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::registeredFont):

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed post-review feedback on r187797

        The correct terminology is "registered" instead of "activated."

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::registeredFont):
        (WebCore::FontPlatformData::activatedFont): Deleted.

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up casts between NSFont*s and CTFontRefs
        https://bugs.webkit.org/show_bug.cgi?id=147618

        Reviewed by Mitz Pettel.

        For toll free bridged types, it makes more sense to do a C-style cast, than jump
        through hoops for older compilers.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::nsFont):
        (WebCore::FontPlatformData::hash):

2015-08-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r187707, r187709, r187724, and
        r187728.
        https://bugs.webkit.org/show_bug.cgi?id=147617

        fast/text/international/arabic-justify.html is flakey
        (Requested by litherum on #webkit).

        Reverted changesets:

        "[OS X] Migrate to CTFontCreateForCharactersWithLanguage from
        [NSFont findFontLike:forString:withRange:inLanguage]"
        https://bugs.webkit.org/show_bug.cgi?id=147483
        http://trac.webkit.org/changeset/187707

        "Fix the build"
        http://trac.webkit.org/changeset/187709

        "Expand CharacterFallbackMapKey to a struct"
        https://bugs.webkit.org/show_bug.cgi?id=147530
        http://trac.webkit.org/changeset/187724

        "CharacterFallbackMapKey should be locale-specific"
        https://bugs.webkit.org/show_bug.cgi?id=147532
        http://trac.webkit.org/changeset/187728

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r184899): Crash when focusing an input element styled with a web font
        https://bugs.webkit.org/show_bug.cgi?id=147616
        <rdar://problem/21838271>

        Reviewed by Dean Jackson.

        NSFontManager can't handle web fonts. We used to pass null to NSFontManager in this case,
        but r184899 changed that.

        Test: fast/text/input-webfont-focus.html

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::activatedFont):

2015-08-03  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        It turns out that the IFEQ command (at least on Cygwin) does not
        understand Wildcards for OS types. Consequently, we should not use
        Windows* in makefiles. Luckily, we only need Windows_NT anymore.

        * DerivedSources.make: Change Windows* -> Windows_NT to correct build.

2015-08-03  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r186916): TextIndicators for multiline link previews are unreadable/offset/blank
        https://bugs.webkit.org/show_bug.cgi?id=147615
        <rdar://problem/22116575>

        Reviewed by Dean Jackson.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        No need to offset by the difference between the text bounding rect and the selection bounding rect,
        because the snapshot is now (after r186916) taken of exactly the text bounding rect.

2015-08-03  Matt Rajca  <mrajca@apple.com>

        Media Session: let UI clients query whether a media element is paused
        https://bugs.webkit.org/show_bug.cgi?id=147588

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::isMediaElementPaused): Determine if the media element with the given ID is paused.
        * page/Page.h:

2015-08-03  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Always require user gesture to begin playing to AppleTV automatically
        https://bugs.webkit.org/show_bug.cgi?id=147591

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): Don't set the ExternalDeviceAutoPlayCandidate 
          flag until the user has explicitly triggered playback.

2015-08-03  Dean Jackson  <dino@apple.com>

        Inline video controls overlap each other while playing video in slideover mode
        https://bugs.webkit.org/show_bug.cgi?id=147535
        <rdar://problem/22026864>

        Reviewed by Eric Carlson.

        Now that the resizing code is in the shared controller, we need to
        make sure to hide the timeline scrubber in iOS when the controls
        get too small. This involved adding the dropped class to the timeline,
        and rules for hiding to the CSS.

        Meanwhile, when the page scale factor is less than one, we use the CSS zoom property
        and don't need to factor in the page scale factor when calculating
        the size.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateLayoutForDisplayedWidth): Don't use pageScaleFactor.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-panel .dropped): Add display none for this rule.

2015-08-03  Anders Carlsson  <andersca@apple.com>

        Safari is failing to remove SQLite Databases via Remove All Website Data
        https://bugs.webkit.org/show_bug.cgi?id=147584
        rdar://problem/22095006

        Reviewed by Brady Eidson.

        If we end up deleting every single database for an origin, make sure to also delete the origin.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):

2015-08-03  Zalan Bujtas  <zalan@apple.com>

        Move "starting from root" frame flattening logging to the correct place.
        https://bugs.webkit.org/show_bug.cgi?id=147571

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        (WebCore::FrameView::layout): Deleted.

2015-08-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r187729.
        https://bugs.webkit.org/show_bug.cgi?id=147575

        10% performance hit (Requested by litherum on #webkit).

        Reverted changeset:

        "[OS X] Font fallback is not language-sensitive"
        https://bugs.webkit.org/show_bug.cgi?id=147390
        http://trac.webkit.org/changeset/187729

2015-08-03  Zalan Bujtas  <zalan@apple.com>

        ChildWidgetState::ChildWidgetIs* naming is redundant.
        https://bugs.webkit.org/show_bug.cgi?id=147565

        Reviewed by Simon Fraser.

        Since strongly typed enum requires to write out 'ChildWidgetState::ChildWidgetIsDestroyed',
        the enumerator list names can be shortened.

        No change in behaviour.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::peformLayoutWithFlattening):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:

2015-08-03  Zalan Bujtas  <zalan@apple.com>

        Pass ControlStates& to RenderTheme methods instead of ControlStates*
        https://bugs.webkit.org/show_bug.cgi?id=147521

        Reviewed by Andreas Kling.

        No change in functionality.

        * platform/Theme.h:
        (WebCore::Theme::selectionColor):
        (WebCore::Theme::paint):
        (WebCore::Theme::inflateControlPaintRect):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::convertControlStatesToThemeDrawState):
        (WebCore::configureToggleButton):
        (WebCore::sharedRadioCell):
        (WebCore::sharedCheckboxCell):
        (WebCore::paintToggleButton):
        (WebCore::setUpButtonCell):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::paintStepper):
        (WebCore::ThemeMac::ensuredView):
        (WebCore::ThemeMac::inflateControlPaintRect):
        (WebCore::ThemeMac::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustRepaintRect):
        (WebCore::RenderTheme::updateControlStatesForRenderer):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor):

2015-08-03  Brady Eidson  <beidson@apple.com>

        Crash when signing into twitter calling WebCore::DocumentLoader::responseReceived(WebCore::CachedResource*, WebCore::ResourceResponse const&).
        <rdar://problem/22098457> and https://bugs.webkit.org/show_bug.cgi?id=147560

        Reviewed by Alexey Proskuryakov.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Only grab identifierForLoadWithoutResourceLoader() if there's no ResourceLoader.

2015-08-03  Zalan Bujtas  <zalan@apple.com>

        themePainted in RenderBox::paintBoxDecorations() is confusing.
        https://bugs.webkit.org/show_bug.cgi?id=147492

        Reviewed by Andreas Kling.

        What themePainted is supposed to indicate is whether the theme requires additional border and background painting.
        Rename it to borderOrBackgroundPaintingIsNeeded.

        No change in behaviour.

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

2015-08-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [EFL] http/tests/media/media-stream/disconnected-frame-already.html is crashing after r185903
        https://bugs.webkit.org/show_bug.cgi?id=146834

        Reviewed by Eric Carlson.

        r185903 went to far in removing some tests, in particular whether the current process is related to a frame.
        Readded that check.
        Refactored the code to remove the need for NavigatorUserMedia class.

        Covered by existing tests.

        * CMakeLists.txt: Removed NavigatorUserMedia.cpp.
        * Modules/mediastream/NavigatorUserMedia.cpp: Removed.
        * Modules/mediastream/NavigatorUserMedia.h: Removed.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia): Inlined NavigatorUserMeia::webkitGetUserMedia.

2015-08-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        JSXMLHttpRequest::visitAdditionalChildren does not need to explicitly mark m_response
        https://bugs.webkit.org/show_bug.cgi?id=147488

        Reviewed by Andreas Kling.

        Covered by existing tests.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitAdditionalChildren): Removed m_response marking.

2015-08-01  Chris Fleizach  <cfleizach@apple.com>

        AX: On some complex sites, iOS instantly crashes once VoiceOver is turned on
        https://bugs.webkit.org/show_bug.cgi?id=147529

        Reviewed by Dan Bernstein.

        Sometimes after focusing on a node, it seems like the entire document is destroyed.
        Accessibility the axObjectCache returns nullptr and we crash.

        Despite my best efforts, I couldn't make a layout test that reproduced this. It's possible
        the entire document needs to be destroyed and replaced with something.

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

2015-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Font fallback is not language-sensitive
        https://bugs.webkit.org/show_bug.cgi?id=147390

        Reviewed by Dean Jackson.

        We need to make our font fallback code sensitive to locale.

        Test: fast/text/fallback-language-han.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::lookupCTFont):
        (WebCore::FontCache::systemFallbackForCharacters):

2015-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        CharacterFallbackMapKey should be locale-specific
        https://bugs.webkit.org/show_bug.cgi?id=147532

        Reviewed by Dean Jackson.

        This is in preparation for locale-specific font fallback.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::Font::systemFallbackFontForCharacter):

2015-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Expand CharacterFallbackMapKey to a struct
        https://bugs.webkit.org/show_bug.cgi?id=147530

        Reviewed by Dean Jackson.

        This is in prepraration for making this struct locale-specific.

        No new tests because there is no behavior change.

        * platform/graphics/Font.cpp:
        (WebCore::CharacterFallbackMapKey::CharacterFallbackMapKey):
        (WebCore::CharacterFallbackMapKey::isHashTableDeletedValue):
        (WebCore::CharacterFallbackMapKey::operator==):
        (WebCore::CharacterFallbackMapKeyHash::hash):
        (WebCore::CharacterFallbackMapKeyHash::equal):
        (WebCore::Font::systemFallbackFontForCharacter):

2015-08-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build after r187721

        Unreviewed.

        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):

2015-08-01  Alex Christensen  <achristensen@webkit.org>

        Fix compile errors with VS2015
        https://bugs.webkit.org/show_bug.cgi?id=147526

        Reviewed by Myles Maxfield.

        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):
        Explicitly call the Ref constructor to avoid unresolved symbols with VS2015.
        Otherwise, VS2015 tries to use CSSPrimitiveValue::operator<Ref<CSSPrimitiveValue> > which doesn't exist.

2015-07-27  Matt Rajca  <mrajca@apple.com>

        Media Session: inform the UI process when the focused Content media element changes
        https://bugs.webkit.org/show_bug.cgi?id=147323

        Reviewed by Tim Horton.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): Eventually tell the UI process that the focused Content media element changed.
        * page/ChromeClient.h:

2015-07-27  Matt Rajca  <mrajca@apple.com>

        Media Session: give media elements unique IDs
        https://bugs.webkit.org/show_bug.cgi?id=147322

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::elementIDsToElements): Create a global map of element IDs to elements.
        (WebCore::HTMLMediaElement::elementWithID): Retrieve the element with the given ID.
        (WebCore::HTMLMediaElement::HTMLMediaElement): Give the element a unique ID.
        (WebCore::HTMLMediaElement::playInternal): Removed whitespace.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::elementID):

2015-07-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build

        Unreviewed.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::lookupCTFont):

2015-07-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Migrate to CTFontCreateForCharactersWithLanguage from [NSFont findFontLike:forString:withRange:inLanguage]
        https://bugs.webkit.org/show_bug.cgi?id=147483

        Reviewed by Dean Jackson.

        [NSFont findFontLike:forString:withRange:inLanguage] doesn't properly handle its last argument. In
        addition, we want to be moving away from NSFont in the first place and on to Core Text. This new
        CoreText function correctly handles its language argument, which is required for language-specific
        font fallback.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::platformPurgeInactiveFontData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fallbackDedupSet):
        (WebCore::FontCache::platformPurgeInactiveFontData):
        (WebCore::lookupCTFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/spi/mac/NSFontSPI.h:

2015-07-31  Chris Dumez  <cdumez@apple.com>

        Drop dummy Timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=147516

        Reviewed by Alexey Proskuryakov.

        Drop dummy Timer callbacks in the code base. A lot of Timer callbacks
        do nothing else beside calling a particular method. In such case, we
        can use the called method as Timer callback instead.

        * css/FontLoader.cpp:
        (WebCore::FontLoader::FontLoader):
        * css/FontLoader.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::styleRecalcTimerFired): Deleted.
        (WebCore::Document::domCookieCacheExpiryTimerFired): Deleted.
        * dom/Document.h:
        * html/MediaController.cpp:
        (MediaController::MediaController):
        (MediaController::timeupdateTimerFired): Deleted.
        * html/MediaController.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired): Deleted.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        (WebCore::MemoryCache::pruneTimerFired): Deleted.
        * loader/cache/MemoryCache.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::connectTimerFired): Deleted.
        * page/EventSource.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::delayedScrollEventTimerFired): Deleted.
        (WebCore::FrameView::postLayoutTimerFired): Deleted.
        * page/FrameView.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired): Deleted.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeCommitterTimerFired): Deleted.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::FontCache):
        (WebCore::FontCache::purgeTimerFired): Deleted.
        * platform/graphics/FontCache.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::timerFired): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekTimerFired): Deleted.

2015-07-31  Matthew Daiter  <mdaiter@apple.com>

        Removed pointSize from _addMarkersToList
        https://bugs.webkit.org/show_bug.cgi?id=147515

        Reviewed by Eric Carlson.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addMarkersToList): Deleted.

2015-07-31  Alex Christensen  <achristensen@webkit.org>

        Prepare for VS2015
        https://bugs.webkit.org/show_bug.cgi?id=146579

        Reviewed by Jon Honeycutt.

        * WebCore.vcxproj/build-generated-files.pl:
        Find a correct preprocessor when using VS2015.

2015-07-31  Eric Carlson  <eric.carlson@apple.com>

        [iOS] use a media-specific user gesture check
        https://bugs.webkit.org/show_bug.cgi?id=147509

        Reviewed by Tim Horton.

        Change an enum name added in r187688.

        * dom/UserGestureIndicator.cpp:
        (WebCore::isDefinite): DefinitelyProcessingMediaUserGesture -> DefinitelyProcessingPotentialUserGesture
        (WebCore::UserGestureIndicator::processingUserGestureForMedia): Ditto.
        * dom/UserGestureIndicator.h: Ditto.

2015-07-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Latin quotes are used with the system font on Chinese devices
        https://bugs.webkit.org/show_bug.cgi?id=147504

        Reviewed by Dean Jackson.

        The system font has some fancy logic regarding character selection which requires
        using Core Text for glyph selection.

        No new tests because tests can't change the system language of the device.

        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::shouldUseCoreText):

2015-07-31  Chris Dumez  <cdumez@apple.com>

        Coalesce authentication credential requests
        https://bugs.webkit.org/show_bug.cgi?id=128006
        <rdar://problem/16839069>

        Reviewed by Alexey Proskuryakov.

        Export symbol for ProtectionSpace::compare() so it can be called from
        WebKit2.

        * platform/network/ProtectionSpaceBase.h:

2015-07-31  Eric Carlson  <eric.carlson@apple.com>

        [iOS] use a media-specific user gesture check
        https://bugs.webkit.org/show_bug.cgi?id=147509

        Reviewed by Jer Noble.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGestureForMedia): New.
        * bindings/js/ScriptController.h:

        * dom/UserGestureIndicator.cpp:
        (WebCore::isDefinite): Allow DefinitelyProcessingMediaUserGesture.
        (WebCore::UserGestureIndicator::processingUserGestureForMedia): New.
        * dom/UserGestureIndicator.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::load): Use ScriptController::processingUserGestureForMedia instead of 
          ScriptController::processingUserGesture
        (WebCore::HTMLMediaElement::play): Ditto.

2015-07-31  Andreas Kling  <akling@apple.com>

        Crashes under HTMLMediaElement::updateActiveTextTrackCues() when destroying CachedPage.
        <https://webkit.org/b/147506>
        <rdar://problem/21939014>

        Reviewed by Chris Dumez.

        Don't mess with the media element's text tracks below its ActiveDOMObject::stop()
        implementation, since that may cause DOM mutations.

        I don't have a repro or a test for this, but plenty of crash logs to indicate that
        we're getting ourselves into trouble by modifying the DOM during CachedPage teardown.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackDisplay):

2015-07-31  Tim Horton  <timothy_horton@apple.com>

        [iOS] DOMNode preview snapshot rects are wrong for user-select: none links
        https://bugs.webkit.org/show_bug.cgi?id=147513
        <rdar://problem/22083354>

        Reviewed by Simon Fraser.

        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        Use the same code as WebKit2 to compute the fallback rect (if TextIndicator fails),
        asking the RenderObject (or RenderImage) for its bounding box instead of using the
        (often wrong) Range bounding rect.

        Make sure to use the fallback rect *any* time TextIndicator fails (before
        we would return no rects at all if TextIndicator::createWithRange returned null,
        and the fallback rect if it returned with an empty image).

        Inverse-page-scale the margin, to match the appearance in WebKit2.

2015-07-31  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Crash when converting Arabic fonts
        https://bugs.webkit.org/show_bug.cgi?id=147510

        Reviewed by Anders Carlsson.

        SVGToOTFFontConverter::compareCodepointsLexicographically() wasn't transitive.

        Test: fast/text/arabic-duplicate-glyph-font.html

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically):

2015-07-31  Jeremy Jones  <jeremyj@apple.com>

        Rename AVPlayerLayerView to _AVPlayerLayerView.
        https://bugs.webkit.org/show_bug.cgi?id=147399

        Reviewed by Eric Carlson.

        Change class name AVPlayerLayerView to match change in AVKit SPI. 
        This prevents conflicts with 3rd party apps.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebAVPlayerLayerView_dealloc):
        (getWebAVPlayerLayerViewClass):
        * platform/spi/cocoa/AVKitSPI.h:

2015-07-31  Chris Dumez  <cdumez@apple.com>

        ImageBufferDataCG should not add IOSurfaces to the pool
        https://bugs.webkit.org/show_bug.cgi?id=147494

        Reviewed by Tim Horton.

        ImageBufferDataCG should not add IOSurfaces to the pool as it is not
        safe. IOSurfaceIsInUse() does not return accurate result for those
        surfaces.

        This is a partial revert of r181301.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::~ImageBufferData): Deleted.
        * platform/graphics/cg/ImageBufferDataCG.h:

2015-07-31  Jer Noble  <jer.noble@apple.com>

         CRASH at WebCore::TaskDispatcher<WebCore::ScriptExecutionContext>::postTask + 38
         https://bugs.webkit.org/show_bug.cgi?id=147485

         Rubber-stamped by Joseph Pecoraro.

         Follow-up test crash fix: call superclass's contextDestroyed() which allows the
         m_scriptExecutionContext variable to be cleared.

         * html/HTMLMediaElement.cpp:
         (WebCore::HTMLMediaElement::contextDestroyed):

2015-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Only generate "themeWin*" UserAgentStyleSheet constants for Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=147378

        Reviewed by Alex Christensen.

        * DerivedSources.make:
        Only include windows user agent style sheets for Windows OSes.

2015-07-31  Alex Christensen  <achristensen@webkit.org>

        Prepare for debug CMake builds on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=147484

        Reviewed by Tim Horton.

        In order to get debug builds to link on Windows with CMake, we will need to use AllInOnes.
        This patch includes more files in the AllInOnes and removes some duplicate code.

        * WebCore.vcxproj/WebCore.vcxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * css/CSSAllInOne.cpp:
        Many files were added to the AllInOne files.  They should not be included in the Visual Studio solutions.
        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::create):
        Use CSSParserString::equalIgnoringCase to avoid ambiguous calls to overloaded functions.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::convertToFloatLength): Deleted.
        * css/TransformFunctions.cpp:
        (WebCore::transformOperationType):
        (WebCore::convertToFloatLength):
        * css/TransformFunctions.h:
        Removed duplicate convertToFloatLength function.
        * html/HTMLElementsAllInOne.cpp:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateNamedFlowsLayerListsIfNeeded):
        (WebCore::compareZIndexFlowThreadController): Renamed from compareZIndex to prevent naming conflicts.
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        (WebCore::compareZIndex): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldRepaintAfterLayout):
        (WebCore::compositedWithOwnBackingStore):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::descendantLayerPaintsIntoAncestor):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::compositedWithOwnBackingStore): Deleted.
        Removed duplicate compositedWithOwnBackingStore.
        (WebCore::paintScrollbar): Deleted duplicate function.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresScrollLayer):
        (WebCore::paintScrollbar):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderingAllInOne.cpp:

2015-07-31  Jer Noble  <jer.noble@apple.com>

        CRASH at WebCore::TaskDispatcher<WebCore::ScriptExecutionContext>::postTask + 38
        https://bugs.webkit.org/show_bug.cgi?id=147485

        Reviewed by Eric Carlson.

        CrashLogs indicate a use-after-free of the ScriptExecutionContext (i.e., Document) used by
        the GenericTaskQueue objects owned by HTMLMediaElement. When the ScriptExecutionContext
        notifies its ActiveDOMObjects that it is about to be destroyed, close() the
        GenericTaskQueues so that they can no longer accept new tasks.

        Previously, enqueueing a task on a closed GenericTaskQueue ASSERTed in debug builds, but
        silently succeeded in release builds. Calling enqueueTask() on a  closed GenericTaskQueue is
        now a no-op.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::contextDestroyed):
        * html/HTMLMediaElement.h:
        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueue::enqueueTask):

2015-07-31  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Have DataObjectGtk::unknownTypes() return a reference to the HashMap object
        https://bugs.webkit.org/show_bug.cgi?id=147401

        Reviewed by Carlos Garcia Campos.

        Don't copy the DataObjectGtk::m_unknownTypes HashMap on every retrieval through
        DataObjectGtk::unknownTypes(). The range-based for-loops that iterate over the
        map in PasteboardGtk.cpp and PasteboardHelper.cpp are also cleaned up.

        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::unknownTypes):
        * platform/gtk/DataObjectGtk.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePasteboard):
        (WebCore::Pasteboard::types):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):

2015-07-30  Zalan Bujtas  <zalan@apple.com>

        RenderTheme::paintBorderOnly and paintDecorations should take RenderBox instead of RenderObject.
        https://bugs.webkit.org/show_bug.cgi?id=147470

        Reviewed by Simon Fraser.

        Tighten the code so that RenderTheme paint functions take RenderBox instead of RenderObject.

        No change in functionality.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderTheme.h:

2015-07-30  Andreas Kling  <akling@apple.com>

        [CF] Web process continually eating memory on simple, shared Google Docs spreadsheet.
        <https://webkit.org/b/147403>
        <rdar://problem/18835799>

        Reviewed by Geoffrey Garen.

        Make sure we service the CFRunLoop on worker threads, since ports using CoreFoundation
        will be scheduling garbage collections and heap sweeps using CFRunLoop timers.

        This fix is a stopgap. Long term we need a better design for integrating GC tasks with
        with the web worker run loop.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode): Instead of sleeping forever, calculate a better
        wakeup deadline by asking the CFRunLoop when its next timer will fire. Then, when a
        timeout occurs, call CFRunLoopRunInMode (with seconds=0) to service pending timers.

2015-07-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Move locale information into FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=147457

        Reviewed by Andreas Kling.

        Currently, the "lang" attribute on a node sets locale information in RenderStyle.
        Font selection is sensitive to this locale information, and occurs deep within
        platform/ code, far away from RenderStyle. Because every RenderStyle owns a
        FontDescription, and font selection can consult with FontDescriptions, it makes
        sense to move the variable from RenderStyle to FontDescription, and provide
        convenience methods on RenderStyle which inspect its FontDescription for locale
        information.

        This patch is in preparation for correctly obeying locale information when
        performing font fallback.

        No new tests because there is no behavior change.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        * platform/graphics/FontCascade.cpp:
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::setLocale):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::locale):
        (WebCore::FontDescription::initialLocale):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::FontDescription): Deleted.
        (WebCore::FontDescription::setScript): Deleted.
        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::localeToScriptCodeForFontSelection):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Deleted.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Deleted.
        (WebCore::StyleRareInheritedData::operator==): Deleted.
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2015-07-30  Anders Carlsson  <andersca@apple.com>

        Remove stray printf.
        
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):

2015-07-30  Simon Fraser  <simon.fraser@apple.com>

        Make Path::apply() take a function reference
        https://bugs.webkit.org/show_bug.cgi?id=147472

        Reviewed by Anders Carlsson.

        Path::apply() should take a const reference to a std::function.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathApplierToPathApplier):
        (WebCore::Path::apply):

2015-07-30  Anders Carlsson  <andersca@apple.com>

        Assertion failure when a plug-in loads a resource that redirects somewhere
        https://bugs.webkit.org/show_bug.cgi?id=147469

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/plugins/get-url-redirect.html

        r186597 moved the call to addPlugInStreamLoader to willSendRequest. This is wrong since
        willSendRequest can be invoked more than once.
        
        Fix this by making the initialization phase of NetscapePlugInStreamLoader be more like
        SubresourceLoader where we only call addPlugInStreamLoader once we've successfully initialized
        the loader, and only call removePlugInStreamLoader if we've called addPlugInStreamLoader.

        Also change addPlugInStreamLoader and removePlugInStreamLoader to take references.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::addPlugInStreamLoader):
        (WebCore::DocumentLoader::removePlugInStreamLoader):
        * loader/DocumentLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        (WebCore::NetscapePlugInStreamLoader::init):
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        (WebCore::NetscapePlugInStreamLoader::didFail):
        (WebCore::NetscapePlugInStreamLoader::didCancel):
        (WebCore::NetscapePlugInStreamLoader::notifyDone):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest): Deleted.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::isPlugInStreamLoader): Deleted.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):

2015-07-30  Jer Noble  <jer.noble@apple.com>

        [iOS] Pressing 'done' in fullscreen video sometimes does nothing; stuck in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=147367

        Reviewed by Eric Carlson.

        During the request to exit fullscreen, the video element's m_videoFullscreenMode variable
        is set, but no exitFullscreen() request is sent up to the UIProcess. Previous threading
        issues have been discovered and fixed, but may have been re-introduced (or never fully
        fixed in the first place). To solve the bad behavior this threading issue creates, add
        a watchdog timer, similar to the one used in the desktop fullscreen controller, to ensure
        that if an exit fullscreen request is not acted upon, the UIProcess forcibly exits fullscreen
        anyway.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit): Initialize the timer.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Cancel the timer.
        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason): Set the timer.
        (WebVideoFullscreenInterfaceAVKit::watchdogTimerFired): Forcibly exit fullscreen mode.

2015-07-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up makeFontCascadeCacheKey()
        https://bugs.webkit.org/show_bug.cgi?id=147430

        Reviewed by Benjamin Poulain.

        FontDescriptionKey is designed to encapsulate all the cacheable properties of a FontDescription.
        However, a higher-level cache, FontCascadeCacheKey, was taking some values from FontDescriptions.
        The fact that there wasn't a bug before is just a happy coincidence. This patch moves those bits
        from the higher-level cache and puts them into FontDescriptionKey where they belong.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagKey):
        * platform/graphics/FontCascade.cpp:
        (WebCore::operator==):
        (WebCore::makeFontSelectorFlags): Deleted.
        (WebCore::makeFontCascadeCacheKey): Deleted.
        (WebCore::computeFontCascadeCacheHash): Deleted.

2015-07-18  Matt Rajca  <mrajca@apple.com>

        [Mac] Media Session: add support for more telephony interruptions
        https://bugs.webkit.org/show_bug.cgi?id=147079

        Reviewed by Eric Carlson.

        * platform/mediasession/mac/MediaSessionInterruptionProviderMac.mm:
        (WebCore::callDidEndRinging): End 'Transient' interruptions.
        (WebCore::callDidConnect): Forward this event to media sessions as a 'Content' interruption.
        (WebCore::MediaSessionInterruptionProviderMac::beginListeningForInterruptions): Register observers for new
         notification types.
        (WebCore::MediaSessionInterruptionProviderMac::stopListeningForInterruptions): Unregister all observers.

2015-07-29  Dean Jackson  <dino@apple.com>

        Don't use (Details) when exposing SPI
        https://bugs.webkit.org/show_bug.cgi?id=147426
        <rdar://problem/22062407>

        Reviewed by Dan Bernstein.

        If we are declaring the interface without any implementation,
        we should use class extensions.

        Added three new SPI.h files for NSButtonCell, NSURLConnection and
        NSURLRequest.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/spi/cocoa/AVKitSPI.h:
        * platform/spi/cocoa/CFNSURLConnectionSPI.h:
        * platform/spi/cocoa/NSButtonCellSPI.h: Copied from Source/WebCore/platform/spi/cocoa/NSColorSPI.h.
        * platform/spi/cocoa/NSCalendarDateSPI.h:
        * platform/spi/cocoa/NSColorSPI.h:
        * platform/spi/cocoa/NSFileManagerSPI.h:
        * platform/spi/cocoa/NSStringSPI.h:
        * platform/spi/cocoa/NSURLConnectionSPI.h: Copied from Source/WebCore/platform/spi/cocoa/NSStringSPI.h.
        * platform/spi/cocoa/NSURLDownloadSPI.h:
        * platform/spi/cocoa/NSURLRequestSPI.h: Copied from Source/WebCore/platform/spi/cocoa/NSStringSPI.h.
        * platform/spi/cocoa/QuartzCoreSPI.h:
        * platform/spi/cocoa/WebFilterEvaluatorSPI.h:
        * platform/spi/ios/CoreUISPI.h:
        * platform/spi/ios/LaunchServicesSPI.h:
        * platform/spi/ios/MediaPlayerSPI.h:
        * platform/spi/ios/QuickLookSPI.h:
        * platform/spi/ios/UIColorSPI.h:
        * platform/spi/mac/QuickLookMacSPI.h:
        * rendering/RenderThemeMac.mm:

2015-07-30  Alex Christensen  <achristensen@webkit.org>

        Remove LegacyCACFLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=147388

        Reviewed by Geoffrey Garen.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::create):
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp: Removed.
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: Removed.

2015-07-30  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r187587.

        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.h:
        * platform/graphics/Font.h:
        (WebCore::Font::DerivedFontData::DerivedFontData):
        * rendering/RenderLayerFilterInfo.h:
        Visual Studio doesn't like making std::unique_ptrs of private nested classes.
        It tries to make a std::default_delete with the private class as a template parameter.

2015-07-30  Simon Fraser  <simon.fraser@apple.com>

        Convert Path applier to use std::function
        https://bugs.webkit.org/show_bug.cgi?id=147368

        Reviewed by Sam Weinig.

        Use std::function for Path::apply().

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertPathToScreenSpaceFunction):
        (-[WebAccessibilityObjectWrapperBase convertPathToScreenSpace:]):
        (ConvertPathToScreenSpaceFunction): Deleted.
        * inspector/InspectorOverlay.cpp:
        (WebCore::appendPathSegment):
        (WebCore::buildObjectForShapeOutside):
        * platform/graphics/Path.cpp:
        (WebCore::Path::length):
        (WebCore::Path::traversalStateAtLength):
        (WebCore::pathLengthApplierFunction): Deleted.
        * platform/graphics/Path.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::findPathIntersections):
        (WebCore::FontCascade::dashesForIntersectionsWithRect):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::apply):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathApplierToPathApplier):
        (WebCore::Path::apply):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::updateZeroLengthSubpaths):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::processMarkerPositions):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::updateFromPathElement):
        * rendering/svg/SVGSubpathData.h:
        (WebCore::SVGSubpathData::updateFromPathElement):
        (WebCore::SVGSubpathData::SVGSubpathData): Deleted.
        * svg/SVGPathUtilities.cpp:
        (WebCore::pathIteratorForBuildingString):
        (WebCore::buildStringFromPath):

2015-07-30  Simon Fraser  <simon.fraser@apple.com>

        Selecting in an iframe can cause main page scrolling
        https://bugs.webkit.org/show_bug.cgi?id=147431
        rdar://problem/19244589

        Reviewed by Zalan Bujtas.
        
        The RenderLayer auatoscroll code walks up the RenderLayer hierarchy, crossing
        frame boundaries. However, as it crosses into an ancestor frame it failed to
        map the target rect into the coordinate space of the new frame, which caused
        us to scroll to an incorrect location in that parent frame.

        Test: fast/events/autoscroll-in-iframe.html

        * rendering/RenderLayer.cpp:
        (WebCore::parentLayerCrossFrame): Make the layer a reference, and pass in
        an optional rect. When crossing frame boundaries, map the rect from the
        contents of the child frame to the contents of the parent frame.
        (WebCore::RenderLayer::enclosingScrollableLayer): Pass optional rect.
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::hasScrollableOrRubberbandableAncestor):
        * rendering/RenderLayer.h:

2015-07-30  Simon Fraser  <simon.fraser@apple.com>

        Improve the history logging output
        https://bugs.webkit.org/show_bug.cgi?id=147429

        Reviewed by Alexey Proskuryakov.

        Improve the History log channel output to show which frame is navigating,
        print the addresses of the HistoryController and Frame, and print URLs
        for everything.
        
        Remove the BackForward log channel which had just one calling location,
        and log for pushState/replaceState.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::updateBackForwardListClippedAtTarget):
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):
        * platform/Logging.h:

2015-07-29  Matt Rajca  <mrajca@apple.com>

        Media Session: add infrastructure for testing media control events
        https://bugs.webkit.org/show_bug.cgi?id=147412

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSessionManager.h:
        * testing/Internals.cpp:
        (WebCore::Internals::sendMediaControlEvent): Let tests simulate media control events.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-30  Chris Dumez  <cdumez@apple.com>

        Mark more classes as fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=147440

        Reviewed by Sam Weinig.

        Mark more classes as fast allocated for performance. We heap-allocate
        objects of those types throughout the code base.

        * editing/Editor.h:
        * history/CachedFrame.h:
        * history/CachedPage.h:
        * html/parser/HTMLResourcePreloader.h:
        * loader/PolicyChecker.h:
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResource.h:
        * page/animation/AnimationController.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingStateTree.h:
        * platform/graphics/Font.h:
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/ImageQualityController.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/SimpleLineLayoutResolver.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/Shape.h:

2015-07-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crashes when SoupSession is destroyed in exit handler
        https://bugs.webkit.org/show_bug.cgi?id=145347

        Reviewed by Carlos Garcia Campos.

        Leak the default SoupSession with NeverDestroyed to avoid races at program exit.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::defaultSession):
        * platform/network/soup/SoupNetworkSession.h:

2015-07-30  Alex Christensen  <achristensen@webkit.org>

        Build AppleWin port with CMake
        https://bugs.webkit.org/show_bug.cgi?id=147385

        Reviewed by Martin Robinson.

        * CMakeLists.txt:
        Add makesafeseh.asm to 32-bit build.  It needs to be after the ADD_PRECOMPILED_HEADER macro
        because CMake can only set COMPILE_FLAGS once with set_source_files_properties, and we want 
        to use that to add /safeseh instead of a precompiled header (which wouldn't be used anyway in assembly).
        * PlatformAppleWin.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:
        Added missing source files and libraries.

2015-07-30  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r187582.

        * accessibility/AccessibilityAllInOne.cpp:
        Include new files.

2015-07-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Web Inspector: [Freetype] Allow inspector to retrieve a list of system fonts
        https://bugs.webkit.org/show_bug.cgi?id=147018

        Reviewed by Carlos Garcia Campos.

        No new tests; unskipped inspector/css/get-system-fonts.html

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::patternToFamilies): Added.
        (WebCore::FontCache::systemFontFamilies): Implemented.
        (WebCore::strongAliasesForFamily): Split some code off to patternToFamilies.

2015-07-30  Nan Wang  <n_wang@apple.com>

        AX: VoiceOver unable to access content in malformed trees
        https://bugs.webkit.org/show_bug.cgi?id=147295
        <rdar://problem/14862892>

        Reviewed by Chris Fleizach.

        VoiceOver is skipping the content of malformed trees. This fixes the problem
        by having the tree check if it has valid children (treeitems) and makes treeitems
        check if they are inside trees.

        Test: platform/mac/accessibility/malformed-tree.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::addChildren):
        (WebCore::AccessibilityObject::addChild):
        (WebCore::AccessibilityObject::insertChild):
        (WebCore::AccessibilityObject::shouldIgnoreAttributeRole):
        (WebCore::AccessibilityObject::canHaveChildren):
        (WebCore::AccessibilityObject::hasChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTree.cpp: Added.
        (WebCore::AccessibilityTree::AccessibilityTree):
        (WebCore::AccessibilityTree::~AccessibilityTree):
        (WebCore::AccessibilityTree::create):
        (WebCore::AccessibilityTree::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityTree::determineAccessibilityRole):
        (WebCore::AccessibilityTree::isTreeValid):
        * accessibility/AccessibilityTree.h: Added.
        * accessibility/AccessibilityTreeItem.cpp: Added.
        (WebCore::AccessibilityTreeItem::AccessibilityTreeItem):
        (WebCore::AccessibilityTreeItem::~AccessibilityTreeItem):
        (WebCore::AccessibilityTreeItem::create):
        (WebCore::AccessibilityTreeItem::determineAccessibilityRole):
        * accessibility/AccessibilityTreeItem.h: Added.

2015-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Paste data is removed from clipboard when closing browser tab
        https://bugs.webkit.org/show_bug.cgi?id=144549

        Reviewed by Martin Robinson.

        GTK+ stores all clipboards in gtk_main or gtk_application_shutdown
        when the main loop finishes. We don't use gtk_main() in the web
        process, so we need to do the same and store all clipboards on
        process shutdown.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::Pasteboard): Register the GtkClipboard.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::singleton): Make it destructible.
        (WebCore::PasteboardHelper::~PasteboardHelper): Call
        gtk_clipboard_store for every registered GtkClipboard.
        (WebCore::PasteboardHelper::registerClipboard): Save the given
        GtkClipboard.
        * platform/gtk/PasteboardHelper.h:

2015-07-29  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement basic types for ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=146926

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Enabled INTL.

2015-07-29  Chris Dumez  <cdumez@apple.com>

        Make TextLayout fast allocated
        https://bugs.webkit.org/show_bug.cgi?id=147428

        Reviewed by Simon Fraser.

        Make TextLayout fast allocated as it is allocated frequently and on the
        heap.

        * platform/graphics/mac/ComplexTextController.cpp:

2015-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix iOS build

        Unreviewed.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade): Deleted.
        * platform/graphics/FontCascade.h:

2015-07-29  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][CoordinatedGraphics] fixed position banner is moved when enabling delegateScrolling
        https://bugs.webkit.org/show_bug.cgi?id=146959

        Reviewed by Simon Fraser.

        Don't update fixed visible content area in ScrollingCoordinatorCoordinatedGraphics::requestScrollPositionUpdate
        because PageViewportController and WebView on CoordinatedGraphics also update the visible content area according
        to the scrolling. So this problem has been caused by duplicated fixed visible rect update.

        EFL WTR doesn't work with fixed layout and delegatesScrolling yet. So no test for this issue.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::requestScrollPositionUpdate): Deleted.

2015-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Use rvalue references in FontCascade
        https://bugs.webkit.org/show_bug.cgi?id=147427

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::resolvesFamilyFor):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        (WebCore::retrieveOrAddCachedFonts):
        (WebCore::FontCascade::update):
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::FontCascadeFonts):
        * platform/graphics/FontCascadeFonts.h:
        (WebCore::FontCascadeFonts::create):

2015-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename FontDescriptionFontDataCacheKey to FontDescriptionKey
        https://bugs.webkit.org/show_bug.cgi?id=147424

        Reviewed by Simon Fraser.

        This struct holds information about a FontDescription.

        No new tests because there is no behavior change.

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::computeHash): Deleted.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        (WebCore::FontDescriptionKey::operator==):
        (WebCore::FontDescriptionKey::operator!=):
        (WebCore::FontDescriptionKey::computeHash):
        (WebCore::FontDescriptionFontDataCacheKey::FontDescriptionFontDataCacheKey): Deleted.
        (WebCore::FontDescriptionFontDataCacheKey::operator==): Deleted.
        (WebCore::FontDescriptionFontDataCacheKey::operator!=): Deleted.
        (WebCore::FontDescriptionFontDataCacheKey::computeHash): Deleted.
        * platform/graphics/FontCascade.cpp:
        (WebCore::operator==):
        (WebCore::makeFontCascadeCacheKey):
        (WebCore::computeFontCascadeCacheHash):

2015-07-29  Zalan Bujtas  <zalan@apple.com>

        Remove the spanner placeholder from m_spannerMap when the placeholder object
        gets transferred to a descendant flow.
        https://bugs.webkit.org/show_bug.cgi?id=147380
        rdar://problem/21981078

        Reviewed by David Hyatt.

        Before r180328, the spanner placeholder was removed from m_spannerMap through
        RenderMultiColumnFlowThread::removeFlowChildInfo() by calling flowThreadRelativeWillBeRemoved()
        when the placeholder renderer got transferred to the descendant flow.
        Now we just remove it from the map when the renderer is being detached.

        Test: fast/multicol/newmulticol/spanner-crash-with-embedded-columns.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):

2015-07-29  Brady Eidson  <beidson@apple.com>

        Review feedback followup to: Crash in WebCore::DocumentLoader::stopLoadingForPolicyChange.
        https://bugs.webkit.org/show_bug.cgi?id=147418
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded):

2015-07-29  Brady Eidson  <beidson@apple.com>

        RELEASE_ASSERT followup to: Crash in WebCore::DocumentLoader::stopLoadingForPolicyChange.
        https://bugs.webkit.org/show_bug.cgi?id=147418

        Reviewed by Chris Dumez.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): RELEASE_ASSERT we have a FrameLoader here.
          We want to know if we ever get here without one.

2015-07-29  Brady Eidson  <beidson@apple.com>

        Crash in WebCore::DocumentLoader::stopLoadingForPolicyChange.
        <rdar://problem/21412186> and https://bugs.webkit.org/show_bug.cgi?id=147418

        Reviewed by Chris Dumez.

        No new tests (No known reproducibility)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): When setting to m_waitingForContentPolicy true, make sure we have a FrameLoader.
        (WebCore::DocumentLoader::detachFromFrame): Always explicitly call cancelPolicyCheckIfNeeded().
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): Cancel the policy check if there is one.
        (WebCore::DocumentLoader::cancelMainResourceLoad): Use cancelPolicyCheckIfNeeded().
        * loader/DocumentLoader.h:

2015-07-29  Brady Eidson  <beidson@apple.com>

        Crash calling webSocket.close() from onError handler for blocked web socket.
        <rdar://problem/21771620> and https://bugs.webkit.org/show_bug.cgi?id=147411

        Reviewed by Tim Horton.

        Tests: http/tests/security/mixedContent/websocket/insecure-websocket-in-iframe.html
               http/tests/security/mixedContent/websocket/insecure-websocket-in-main-frame.html

        This was introduced with http://trac.webkit.org/changeset/185848

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): When blocked because of mixedContent, call dispatchOrQueueErrorEvent().
        (WebCore::WebSocket::didReceiveMessageError): Use dispatchOrQueueErrorEvent() instead.
        (WebCore::WebSocket::dispatchOrQueueErrorEvent): Dispatch the error event, but don't dispatch one twice!
        * Modules/websockets/WebSocket.h:

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail): Null-check m_handshake before creating a console message from it.

2015-07-29  Michael Catanzaro  <mcatanzaro@igalia.com>

        Clean up RefPtrCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=147384

        Reviewed by Martin Robinson.

        Tests for null/non-null should all be done without equality comparisons.

        * platform/graphics/cairo/RefPtrCairo.cpp:
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):

2015-07-29  Dean Jackson  <dino@apple.com>

        Remove dispatch_apply_f and instead use vImage more directly
        https://bugs.webkit.org/show_bug.cgi?id=147391
        <rdar://problem/21893047>

        Fix the iOS builds.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::unpremultiplyBufferData):
        (WebCore::premultiplyBufferData):

2015-07-29  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessarily constructing PlatformMediaSessionManager on Document destruction
        https://bugs.webkit.org/show_bug.cgi?id=147398

        Reviewed by Jer Noble.

        Only call PlatformMediaSessionManager::stopAllMediaPlaybackForProcess() in
        destructors if an PlatformMediaSessionManager instance already exists, to
        avoid constructing one unecessarily at that point.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sharedManager):
        (WebCore::PlatformMediaSessionManager::sharedManagerIfExists):
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::PlatformMediaSessionManager::sharedManager):
        (WebCore::PlatformMediaSessionManager::sharedManagerIfExists):

2015-07-28  Simon Fraser  <simon.fraser@apple.com>

        Fix debug builds.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::premultiplyBufferData):
        (WebCore::unpremultiplyBufferData):

2015-07-28  Simon Fraser  <simon.fraser@apple.com>

        Animations sometimes fail to start
        https://bugs.webkit.org/show_bug.cgi?id=147394
        rdar://problem/21852603

        Reviewed by Dean Jackson.

        When an accelerated animation or transition was started at the same time as
        a non-accelerated one, and then the node for the former was removed, we could
        never kick off the non-accelerated animation.
        
        AnimationControllerPrivate has logic to synchronize the two types of animation
        when they start in the same animation update, which involves setting the
        m_waitingForAsyncStartNotification flag, and waiting for a notifyAnimationStarted()
        to come in from the graphics system.
        
        However, it failed to handle the case where the accelerated animation was removed
        before the callback was received, which left the m_waitingForAsyncStartNotification flag
        set to true, preventing the non-accelerated animation from running.
        
        Test: animations/remove-syncing-animation.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isAccelerated): Make this public.
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear): Add logging.
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse): Add logging.
        (WebCore::AnimationControllerPrivate::animationWillBeRemoved): Add logging.
        After removing animations from the maps, check to see if we expect any of the
        remaining animations are waiting for a notifyAnimationStarted(). If not, clear
        the m_waitingForAsyncStartNotification flag.
        (WebCore::AnimationController::notifyAnimationStarted): Log the renderer.
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate): Remove unneeded
        initializations of HashMaps.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions): Log renderers.
        (WebCore::CompositeAnimation::updateKeyframeAnimations): Ditto.

2015-07-28  Dean Jackson  <dino@apple.com>

        Remove dispatch_apply_f and instead use vImage more directly
        https://bugs.webkit.org/show_bug.cgi?id=147391
        <rdar://problem/21893047>

        Reviewed by Simon Fraser.

        Use vImage unmultiplication and premultiplication functions on the
        entire ImageBufferData object, rather than getting and setting data on an
        line by line using dispatch_apply.

        We were seeing some crashes in vImage with the smaller buffer sizes, and
        hopefully this will either fix the problem, or give us a better
        stack trace to diagnose.

        I also did a drive-by change of "dst" to "dest". It was inconsistent throughout
        the file.

        Convered by the tests in fast/canvas and imported/w3c/canvas

        * platform/graphics/cg/ImageBufferDataCG.cpp: Remove the ScanlineData structure. It is
        no longer needed.
        (WebCore::premultiplyBufferData): New function that calls vImagePremultiplyData_RGBA8888.
        (WebCore::unpremultiplyBufferData): New function that calls vImageUnpremultiplyData_RGBA8888.
        (WebCore::affineWarpBufferData): Extracting some common code into a function.
        (WebCore::ImageBufferData::getData): Use the two new functions as appropriate. Move
        some of the code around now that more is shared between the different #if branches.
        (WebCore::ImageBufferData::putData):
        (WebCore::convertScanline): Deleted.
        (WebCore::unpremultitplyScanline): Deleted.
        (WebCore::premultitplyScanline): Deleted.

2015-07-28  Alexey Proskuryakov  <ap@apple.com>

        Clean up usesAsyncCallbacks handling in ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=147342

        Reviewed by Darin Adler.

        Store "usesAsyncCallbacks" bit in ResourceHandle, because it's not accessible
        via client once the client is zeroed out.

        Changed ResourceHandle::setClient into ResourceHandle::clearClient, because it's
        only ever used to zero out the client pointer, and it doesn't support changing it.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::client):
        (WebCore::ResourceHandle::clearClient):
        (WebCore::ResourceHandle::setDefersLoading):
        (WebCore::ResourceHandle::usesAsyncCallbacks):
        (WebCore::ResourceHandle::setClient): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::makeDelegate):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):

2015-07-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Minor cleanups in FontCacheFreeType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=147392

        Reviewed by Martin Robinson.

        Mark several functions as static (file-scope), use more nullptr, and use more smart
        pointers. No behavior changes.

        * platform/graphics/freetype/FcUniquePtr.h:
        (WebCore::FcPtrDeleter<FcCharSet>::operator()):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters):
        (WebCore::findBestFontGivenFallbacks):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::fontWeightToFontconfigWeight):
        (WebCore::FontCache::createFontPlatformData):

2015-07-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Add ENABLE_ES6_MODULES compile time flag with the default value "false"
        https://bugs.webkit.org/show_bug.cgi?id=147350

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2015-07-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        [Freetype] Always allow font matching for strong aliases
        https://bugs.webkit.org/show_bug.cgi?id=147057

        Reviewed by Martin Robinson.

        Tests: platform/gtk/fonts/font-family-fallback-ignores-weak-aliases.html
               platform/gtk/fonts/font-family-fallback-respects-strong-aliases.html

        Treat fonts that are strongly-aliased to each other as if they were identical for the
        purposes of CSS font fallback. This improves the layout of many web pages by allowing
        fontconfig to replace fonts with metric-compatible equivalents (e.g. Arial -> Liberation
        Sans) instead of rejecting the metric-compatible font as unsuitable.

        * platform/graphics/cairo/RefPtrCairo.cpp:
        (WTF::refIfNotNull):
        (WTF::derefIfNotNull):
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/freetype/FcUniquePtr.h: Added.
        (WebCore::FcPtrDeleter<FcFontSet>::operator()):
        (WebCore::FcPtrDeleter<FcLangSet>::operator()):
        (WebCore::FcPtrDeleter<FcObjectSet>::operator()):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::strengthOfFirstAlias):
        (WebCore::strongAliasesForFamily):
        (WebCore::areStronglyAliased):
        (WebCore::FontCache::createFontPlatformData):

2015-07-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Crash when encountering characters whose natural font is one we can't look up
        https://bugs.webkit.org/show_bug.cgi?id=147377
        <rdar://problem/22022011>

        Reviewed by Simon Fraser.

        These characters hit the complex text code path, where CoreText picks fonts
        to use for each character. We then try to map these CoreText fonts back to
        our own Font objects, and we assume (on iOS) that our own font search will
        always return something.

        On OS X, we do not have such an assumption, and we handle the case where it
        does not hold. This method works on iOS as well, so the solution is to just
        perform it on both OSes.

        Test: fast/text/crash-complex-unknown-font.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2015-07-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] REGRESSION(r168075): Fullscreen web video doesn't pause on screen lock
        https://bugs.webkit.org/show_bug.cgi?id=147269

        Reviewed by Andreas Kling.

        Media elements should pause when the application is going to EnterBackground
        under lock regardless whether it is in full screen or not.

        * platform/audio/PlatformMediaSession.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::doInterruption): This code was moved from 
        beginInterruption().
                
        (WebCore::PlatformMediaSession::shouldDoInterruption): Move the condition 
        which allows the media session interruption to a separate function.
        
        (WebCore::PlatformMediaSession::beginInterruption): Call the functions
        shouldDoInterruption() and doInterruption().
        
        (WebCore::PlatformMediaSession::forceInterruption): This function will
        be called from PlatformMediaSessionManager::applicationDidEnterBackground()
        to override the decision which is made by PlatformMediaSession::beginInterruption()
        if the application isSuspendedUnderLock.
        
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::applicationDidEnterBackground):
        [UIApp isSuspendedUnderLock] is only valid when it is called when the
        UIApplicationDidEnterBackgroundNotification is received. We need to force
        interrupting the media sessions if the application isSuspendedUnderLock
        and UIApplicationWillResignActiveNotification was ignored because of PiP.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper applicationDidEnterBackground:]): Listen to 
        UIApplicationDidEnterBackgroundNotification and make a call on the web
        thread to PlatformMediaSessionManager::applicationDidEnterBackground() 
        and pass the isSuspendedUnderLock flag which is queried on the UIProcess.

2015-07-28  Tim Horton  <timothy_horton@apple.com>

        [iOS] Creating a TextIndicator causes the view to scroll to the current selection
        https://bugs.webkit.org/show_bug.cgi?id=147379
        <rdar://problem/22038421>

        Reviewed by Beth Dakin.

        * editing/Editor.cpp:
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        * editing/Editor.h:
        Add a flag so that setIgnoreCompositionSelectionChange(false) can still
        not force-reveal the current selection.

        This is useful for e.g. TextIndicator, who saves the selection, changes it,
        and then restores it, but doesn't want to scroll to the saved/restored selection.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        Make use of the above flag.

2015-07-28  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Set AirPlay discovery mode to disabled when page is hidden
        https://bugs.webkit.org/show_bug.cgi?id=147369

        Reviewed by Jer Noble.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresPlaybackTargetRouteMonitoring): Return false when
          the client is not visible.
        * html/MediaElementSession.h:

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::clientDataBufferingTimerFired): Call configureWireLessTargetMonitoring.

2015-07-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash happens when calling removeEventListener for an SVG element which has an instance inside a <defs> element of shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=147290

        Reviewed by Daniel Bates.

        When the shadow tree is built for a <use> element, all the SVG elements
        are allowed to be cloned in the shadow tree but later some of the elements
        are disallowed and removed. Make sure, when disallowing an element in the
        shadow tree, to reset the correspondingElement relationship between all
        the disallowed descendant SVG elements and all their original elements.
        
        Test: svg/custom/remove-event-listener-shadow-disallowed-element.svg

        *svg/SVGElement.cpp:
        (WebCore::SVGElement::setCorrespondingElement)
        * svg/SVGUseElement.cpp:
        (WebCore::removeDisallowedElementsFromSubtree):

2015-07-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, follow-up nit fix after r187489.

        Fix forward declarations ordering.

        * css/StyleSheetContents.h:

2015-07-27  David Hyatt  <hyatt@apple.com>

        ASSERTION FAILED: !currBox->needsLayout() loading bing maps (and apple.com/music and nytimes)
        https://bugs.webkit.org/show_bug.cgi?id=93891

        Reviewed by Simon Fraser.

        Added new tests in fast/dynamic.

        Change tracking of positioned objects to always insert objects that need a layout in the
        end of the ListHashMap for RenderViews. This ensures that dependencies between nested
        positioned objects that both need a layout by the RenderView are resolved in the correct order.

        Don't cache the end object when walking the ListHashMap to do layouts of positioned objects,
        since that list is getting updated dynamically as earlier objects can mark and insert new
        objects into the list during their layouts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObject):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::insertIntoTrackedRendererMaps):
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::RenderBlock::removePositionedObject):
        * rendering/RenderBlock.h:

2015-07-28  Simon Fraser  <simon.fraser@apple.com>

        Fix builds using PathCairo.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::apply):

2015-07-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show Pseudo Elements in DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=139612

        Reviewed by Timothy Hatcher.

        Tests: inspector/css/pseudo-element-matches-for-pseudo-element-node.html
               inspector/dom/pseudo-element-dynamic.html
               inspector/dom/pseudo-element-static.html

        Much of this patch was modelled after the Blink implementation of
        pseudo element inspection.

        * dom/PseudoElement.h:
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement):
        (WebCore::PseudoElement::clearHostElement):
        Since InspectorDOMAgent may hold a reference to this PseudoElement we
        can't report it as destroyed in the destructor, as that wouldn't be
        reached if the inspector holds a reference. Move this to when the
        psuedo element is disconnected, which is immediately before destruction.

        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        When computing styles for a pseudo element, compute styles from the
        host element for just the pseudo element's pseudo type. Likewise
        only include matched results, not inherited or others.

        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        Add the pseudo type to the checker context to try and detect exactly
        which selector in a list of selectors matched the pseudo element.

        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        When unbinding an element, also unbind any pseudo element children
        it may have had and bound.

        (WebCore::InspectorDOMAgent::assertEditableNode):
        (WebCore::InspectorDOMAgent::assertEditableElement):
        (WebCore::InspectorDOMAgent::removeNode):
        Improve grammar in error message. Don't allow editing pseudo elements.

        (WebCore::pseudoElementType):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        If a node is a pseudo element include its pseudoType.
        If a node has pseudo element children include them.

        (WebCore::InspectorDOMAgent::pseudoElementCreated):
        (WebCore::InspectorDOMAgent::pseudoElementDestroyed):
        When pseudo elements are dynamically created or destroyed
        push pseudo element nodes to the frontend if needed.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::pseudoElementCreatedImpl):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::pseudoElementCreated):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed):
        (WebCore::InspectorInstrumentation::layerTreeDidChange):
        (WebCore::InspectorInstrumentation::renderLayerDestroyed):
        Plumbing for pseudo element created/destroyed events.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        This is the only place a pseudo element is created, inform the inspector.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementData):
        Update the element data for the node highlight label to include the
        host element's selector and the pseudo element selector.

2015-07-28  Tim Horton  <timothy_horton@apple.com>

        Remove some more bits of WebTiledLayer
        https://bugs.webkit.org/show_bug.cgi?id=147356

        Reviewed by Simon Fraser.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::setContentsScale): Deleted.
        (PlatformCALayer::setTileSize): Deleted.

2015-07-28  Simon Fraser  <simon.fraser@apple.com>

        Change markContainingBlocksForLayout() to take an enum, rather than a bool
        https://bugs.webkit.org/show_bug.cgi?id=147345

        Reviewed by Daniel Bates.
        
        Change markContainingBlocksForLayout to take an enum class for the scheduleRelayout
        argument, for better code readability.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderObject.h:

2015-07-27  Simon Fraser  <simon.fraser@apple.com>

        PathApplierFunction should take a reference to a PathElement
        https://bugs.webkit.org/show_bug.cgi?id=147337

        Reviewed by Dan Bates.

        Convert PathApplierFunction to take a const PathElement&, since it can never be null.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (ConvertPathToScreenSpaceFunction):
        * inspector/InspectorOverlay.cpp:
        (WebCore::appendPathSegment):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        * platform/graphics/Path.h:
        * platform/graphics/PathTraversalState.h:
        (WebCore::PathTraversalState::processPathElement):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::CGPathApplierToPathApplier):
        * rendering/svg/SVGMarkerData.h:
        (WebCore::SVGMarkerData::updateFromPathElement):
        (WebCore::SVGMarkerData::updateMarkerDataForPathElement):
        * rendering/svg/SVGSubpathData.h:
        (WebCore::SVGSubpathData::updateFromPathElement):
        * svg/SVGPathUtilities.cpp:
        (WebCore::pathIteratorForBuildingString):

2015-07-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Notify fullscreen controller in UIProcess whether external playback is allowed
        https://bugs.webkit.org/show_bug.cgi?id=147343

        Reviewed by Brady Eidson.

        Pass the value of the MediaElementSession's wirelessVideoPlaybackDisabled() property up through WebKit2 to
        WebVideoFullscreenControllerAVKit.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::setWirelessVideoPlaybackDisabled): Pass to the interface on the main thread.
        * platform/ios/WebVideoFullscreenInterface.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setWirelessVideoPlaybackDisabled): Sets .allowsExternalPlayback to !disabled.
        (WebVideoFullscreenInterfaceAVKit::wirelessVideoPlaybackDisabled): Returns the last value set.
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setWebVideoFullscreenInterface): Update the value of wirelessVideoPlaybackDisabled
            if the element is present.
        (WebVideoFullscreenModelVideoElement::setVideoElement): Ditto if the interface is present.
        (WebVideoFullscreenModelVideoElement::updateForEventName): Update the value either way.

2015-07-28  Brady Eidson  <beidson@apple.com>

        Handle null CFArrayRef returning from _CFHTTPParsedCookiesWithResponseHeaderFields.
        <rdar://problem/21995928> and https://bugs.webkit.org/show_bug.cgi?id=147365

        Reviewed by Alexey Proskuryakov.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::filterCookies): ASSERT the input is not null.
        (WebCore::createCookies): Always return a CFArrayRef, even if it's empty.

2015-07-28  Chris Dumez  <cdumez@apple.com>

        Allow lax MIME type parsing for same-origin CSS in quirks mode.
        https://bugs.webkit.org/show_bug.cgi?id=147327
        <rdar://problem/22010303>

        Reviewed by Zalan Bujtas.

        The change made in r180020 is too strict for the web, and doesn't match Firefox
        Chrome, or IE's behavior. In particular, it does not respect the same-origin
        carveout that the HTML spec specifies:
        https://html.spec.whatwg.org/multipage/semantics.html#link-type-stylesheet

        This patch corrects that oversight and aligns our behavior with other popular
        browsers.

        This change was adapted from Blink r196678:
        https://src.chromium.org/viewvc/blink?revision=196678&view=revision

        Tests: http/tests/security/cross-origin-css-in-quirks-1.html
               http/tests/security/cross-origin-css-in-quirks-2.html
               http/tests/security/cross-origin-css-in-quirks-3.html
               http/tests/security/cross-origin-css-in-quirks-4.html
               http/tests/security/cross-origin-css-in-quirks-5.html
               http/tests/security/cross-origin-css-in-quirks-6.html
               http/tests/security/cross-origin-css-in-quirks-7.html
               http/tests/security/cross-origin-css-in-quirks-8.html
               http/tests/security/same-origin-css-1.html
               http/tests/security/same-origin-css-2.html
               http/tests/security/same-origin-css-3.html
               http/tests/security/same-origin-css-4.html
               http/tests/security/same-origin-css-5.html
               http/tests/security/same-origin-css-6.html
               http/tests/security/same-origin-css-7.html
               http/tests/security/same-origin-css-8.html
               http/tests/security/same-origin-css-in-quirks.html

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        * css/StyleSheetContents.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        (WebCore::CachedCSSStyleSheet::checkNotify): Deleted.
        * loader/cache/CachedCSSStyleSheet.h:

2015-07-28  Alexey Proskuryakov  <ap@apple.com>

        Rolling out r187463, because it caused memory corruption on multiple tests.

        Original bug:
        Crash happens when calling removeEventListener for an SVG element which has an instance inside a <defs> element of shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=147290

        * svg/custom/remove-event-listener-shadow-disallowed-element-expected.txt: Removed.
        * svg/custom/remove-event-listener-shadow-disallowed-element.svg: Removed.

        * svg/SVGUseElement.cpp:
        (WebCore::removeDisallowedElementsFromSubtree):
        (WebCore::associateClonesWithOriginals):

2015-07-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use fastMalloc instead of g_slice
        https://bugs.webkit.org/show_bug.cgi?id=147357

        Reviewed by Sergio Villar Senin.

        The use of g_slice is no longer encouraged by glib developers.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::mapGstBuffer):
        (WebCore::unmapGstBuffer):

2015-07-27  Jon Davis  <jond@apple.com>

        Adding Web Components to feature status page.
        https://bugs.webkit.org/show_bug.cgi?id=147270

        Reviewed by Timothy Hatcher.

        * features.json:

2015-07-27  Benjamin Poulain  <bpoulain@apple.com>

        ShrinkToFit() all the DFA's vectors when we no longer need to add new nodes to it
        https://bugs.webkit.org/show_bug.cgi?id=147341

        Reviewed by Geoffrey Garen.

        Add a finalizer to the DFA to reduce the total memory needed
        to store it.

        On real test lists, this cuts the peak memory usage by about 1 megabyte.

        The NFA already had a finalizer, no need to modify that one.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::finalize):
        * contentextensions/DFA.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NFAToDFA::convert):

2015-07-27  Brady Eidson  <beidson@apple.com>

        Crash in WebCore::DocumentLoader::willSendRequest() with ContentFilter and AppCache.
        <rdar://problem/21960398> and https://bugs.webkit.org/show_bug.cgi?id=147339

        Reviewed by Alexey Proskuryakov.

        No new tests (Not yet proven to be possible to test this).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Grab the identifier from the CachedResource directly, not from the null ResourceLoader.
        (WebCore::DocumentLoader::continueAfterNavigationPolicy): Null check the ResourceLoader, as it can definitely be gone by this point.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::clearLoader): Save off the identifier for later use.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::identifierForLoadWithoutResourceLoader): Expose the identifier that the ResourceLoader had when it went away.

2015-07-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash happens when calling removeEventListener for an SVG element which has an instance inside a <defs> element of shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=147290

        Reviewed by Simon Fraser.

        When the shadow tree is built for a <use> element, all the SVG elements
        are allowed to be cloned in the shadow tree but later some of the elements
        are disallowed and removed. Make sure, when disallowing an element in the
        shadow tree, to reset the correspondingElement relationship between all
        the disallowed descendant SVG elements and all their original elements.
        
        Test: svg/custom/remove-event-listener-shadow-disallowed-element.svg

        * svg/SVGUseElement.cpp:
        (WebCore::removeDisallowedElementsFromSubtree):

2015-07-27  Simon Fraser  <simon.fraser@apple.com>

        Rename AnimationBase::isTransformFunctionListValid()
        https://bugs.webkit.org/show_bug.cgi?id=147334

        Reviewed by Sam Weinig.
        
        isTransformFunctionListValid() was a confusing name for this state. It's true
        when the transform function lists for an animation or transition are matched,
        so rename it to transformFunctionListsMatch().

        No behavior change.

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::transformFunctionListsMatch):
        (WebCore::AnimationBase::isTransformFunctionListValid): Deleted.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation):
        (WebCore::ImplicitAnimation::validateTransformFunctionList):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):

2015-07-27  Alex Christensen  <achristensen@webkit.org>

        Progress towards building AppleWin with CMake
        https://bugs.webkit.org/show_bug.cgi?id=147325

        Reviewed by Martin Robinson.

        * PlatformAppleWin.cmake: Added.
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:
        Moved a lot of common directories from PlatformWinCairo to PlatformWin.

2015-07-27  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r187383

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-27  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore remove methods don't properly delete cookies
        https://bugs.webkit.org/show_bug.cgi?id=147333
        rdar://problem/21948230

        Reviewed by Tim Horton.

        If there are multiple cookies for a single domain, make sure to delete all of them
        and not just the first one we find.
        
        Fix this by keeping a mapping from domain to a list of cookies.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::deleteCookiesForHostnames):

2015-07-27  Simon Fraser  <simon.fraser@apple.com>

        Enhance Animation logging slightly
        https://bugs.webkit.org/show_bug.cgi?id=147324

        Reviewed by Anders Carlsson.

        Include the value of "param" in animation logging, because sometimes it's negative,
        and log state changes in a few more places.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2015-07-27  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Crash in CurlDownload::didReceiveHeader when downloading file.
        https://bugs.webkit.org/show_bug.cgi?id=146832

        Reviewed by Darin Adler.

        Only call ResourceResponse::setMimeType from the main thread.
        Also, CurlDownload should be reference counted to make sure it
        still lives when a function call is invoked on the main thread
        from the download thread.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::downloadThread):
        (WebCore::CurlDownload::CurlDownload):
        (WebCore::CurlDownload::start):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):
        * platform/network/curl/CurlDownload.h:
        (WebCore::CurlDownloadListener::didFail):
        (WebCore::CurlDownload::setListener):

2015-07-27  Matthew Daiter  <mdaiter@apple.com>

        Remove duplicate vectors inside of UserMediaRequest
        https://bugs.webkit.org/show_bug.cgi?id=147321
        <rdar://problem/22011290>

        Reviewed by Eric Carlson.

        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::deviceUIDsVideo): Deleted.
        (WebCore::UserMediaRequest::deviceUIDsAudio): Deleted.

2015-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Pass a GstInstallPluginsContext to gst_install_plugins_async
        https://bugs.webkit.org/show_bug.cgi?id=147103

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GUniquePtrGStreamer.h: Allow to use
        GUniquePtr with GstInstallPluginsContext.

2015-07-25  Alexey Proskuryakov  <ap@apple.com>

        Remove an never failing check for client() in ResourceHandle::canAuthenticateAgainstProtectionSpace.

        Requested by Brady Eidson in bug 147277.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):

2015-07-25  Tim Horton  <timothy_horton@apple.com>

        Expose TextIndicator-backed snapshot and rect gathering on DOMNode
        https://bugs.webkit.org/show_bug.cgi?id=147298
        <rdar://problem/21905839>

        Reviewed by Sam Weinig.

        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        No need to multiply by device scale here.

2015-07-25  Tim Horton  <timothy_horton@apple.com>

        Expose TextIndicator-backed snapshot and rect gathering on DOMNode
        https://bugs.webkit.org/show_bug.cgi?id=147298
        <rdar://problem/21905839>

        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMPrivate.h:
        Move this to a private header.

2015-07-25  Tim Horton  <timothy_horton@apple.com>

        Expose TextIndicator-backed snapshot and rect gathering on DOMNode
        https://bugs.webkit.org/show_bug.cgi?id=147298
        <rdar://problem/21905839>

        Reviewed by Sam Weinig.

        * bindings/objc/DOM.mm:
        (-[DOMNode getPreviewSnapshotImage:andRects:]):
        * bindings/objc/DOMExtensions.h:

2015-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix. Removed the unused argument.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::setTileSize):

2015-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        iOS build fix after r187384.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayer::setTileSize):

2015-07-25  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Video "start playback" playback controls not accessible
        https://bugs.webkit.org/show_bug.cgi?id=147285

        Reviewed by Jer Noble.

        The start playback control also needs the right label.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createBase):

2015-07-24  Tim Horton  <timothy_horton@apple.com>

        Remove a file that was accidentally added in r142320

        * PlatformMac.cmake:
        * platform/mac/PlatformSpeechSynthesisMac.mm: Removed.
        It looks like Chris added PlatformSpeechSynthesisMac and
        PlatformSpeechSynthesizerMac but only meant to add the latter.

2015-07-24  Tim Horton  <timothy_horton@apple.com>

        Remove a file that was supposed to be removed in r158096

        * platform/graphics/mac/WebTiledLayer.h: Removed.
        * platform/graphics/mac/WebTiledLayer.mm: Removed.

2015-07-24  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Build fix in ProtectionSpaceBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=147289

        Reviewed by Brent Fulgham.

        Fix the build break for [-Werror=return-type] error.

        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::isPasswordBased):

2015-07-24  Myles C. Maxfield  <mmaxfield@apple.com>

        text-overflow: ellipsis is broken by text-align: right and padding-left
        https://bugs.webkit.org/show_bug.cgi?id=121902

        Reviewed by Zalan Bujtas.

        Right offsets (which include padding) are not the same as widths (which don't).

        Test: fast/inline/padding-ellipsis-right.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::RenderBlockFlow::checkLinesForTextOverflow):

2015-07-24  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS 9 build after r187375.

        * platform/network/mac/CookieJarMac.mm:

2015-07-24  Sajid Anwar  <sajidanwar94@gmail.com>

        [MSE] Incorrect sample timestamps when using "sequence" mode
        https://bugs.webkit.org/show_bug.cgi?id=147252

        Reviewed by Jer Noble.

        Test: media/media-source/media-source-sequence-timestamps.html

        According to the specification, the "sequence" mode indicates that the samples in the buffer will use generated timestamps
        instead of the presentation/decode timestamps already present in the sample. The current implementation always adds
        the current timestamp offset to the samples' timestamps, as expected for "segments" mode.

        Add a method to media samples to allow their presentation and decode timestamps to be set to specific values.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Fix an algorithm condition to align with the specification, and
            correctly set the presentation and decode timestamps of samples when in "sequence" mode.
        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::setTimestamps): Add a new method to set the values of a sample's presentation and decode timestamps.
        * platform/mock/mediasource/MockBox.h:
        (WebCore::MockBox::setTimestamps): Set m_presentationTimestamp and m_decodeTimestamp.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::offsetTimestampsBy): Pass to MockBox.
        * testing/Internals.cpp:
        (WebCore::Internals::setShouldGenerateTimestamps): Expose the internal `setShouldGenerateTimestamps` method of SourceBuffer.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-24  Anders Carlsson  <andersca@apple.com>

        WKWebsiteDataStore remove methods don't properly delete cookies
        https://bugs.webkit.org/show_bug.cgi?id=147282
        rdar://problem/21948230

        Reviewed by Sam Weinig.

        Rename deleteCookiesForHostname to deleteCookiesForHostnames and
        make it take a vector of hostnames instead.
        
        Also, fix the Mac implementation to not be O(n2) by putting all cookies
        in a dictionary keyed on the domain.
        
        Also make sure to call _saveStorage after deleting cookies.
        
        Finally, get rid of deleteCookiesForHostname from CookieJarCFNet.cpp and
        use the Mac implementation on iOS as well. Just stub out deleteCookiesForHostnames
        on Windows since nobody is calling it.

        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteCookiesForHostname): Deleted.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteAllCookiesModifiedSince):
        (WebCore::deleteCookiesForHostname): Deleted.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteCookiesForHostname): Deleted.
        * platform/spi/cf/CFNetworkSPI.h:

2015-07-24  Chris Fleizach  <cfleizach@apple.com>

        AX: scrollable elements do not allow 3-finger swipe
        https://bugs.webkit.org/show_bug.cgi?id=141893

        Reviewed by Mario Sanchez Prada.

        To allow iOS Accessibility to perform by-page scrolling in overflow areas, we move
        that scrolling code into AccessibilityObject and then iterate all the possible ScrollableAreas,
        rather than just finding the parents that are ScrollViews. 

        Test: platform/ios-simulator/accessibility/scroll-in-overflow-div.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollAreaAndAncestor):
        (WebCore::AccessibilityObject::scrollPosition):
        (WebCore::AccessibilityObject::scrollVisibleContentRect):
        (WebCore::AccessibilityObject::scrollContentsSize):
        (WebCore::AccessibilityObject::scrollByPage):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityScroll:]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollPosition]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollSize]):
        (-[WebAccessibilityObjectWrapper _accessibilityScrollVisibleRect]):
        (-[WebAccessibilityObjectWrapper accessibilityElementDidBecomeFocused]):

2015-07-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Connect UserScript and UserStyleSheet through WebView.
        https://bugs.webkit.org/show_bug.cgi?id=147279
        <rdar://problem/21990767>

        Reviewed by Dean Jackson.

        Tested by http/tests/security/contentSecurityPolicy/user-style-sheet-font-crasher.html as well
        as many skipped tests.

        * DerivedSources.cpp: Conditionally compile JSSecurityPolicyViolationEvent.cpp if CSP_NEXT is enabled.
        * DerivedSources.make: Generate bindings for SecurityPolicyViolationEvent.idl.
        * WebCore.vcxproj/WebCore.vcxproj: Add missing files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2015-07-24  Alexey Proskuryakov  <ap@apple.com>

        [Cocoa] Clean up server trust handling in ResourceHandle.
        https://bugs.webkit.org/show_bug.cgi?id=147277
        rdar://problem/21394410

        Reviewed by Brady Eidson.

        * platform/network/ProtectionSpaceBase.h: (WebCore::ProtectionSpaceBase::isPasswordBased):
        * platform/network/ProtectionSpaceBase.cpp: (WebCore::ProtectionSpaceBase::isPasswordBased):
        Added. This is somewhat weak, as authentication schemes could change, but I couldn't find
        any better way.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        Factored out password handling, and made sure to not try that for server trust.

2015-07-24  Zalan Bujtas  <zalan@apple.com>

        [iOS]: Inline video controls are blurry on scaled-down pages on non-retina devices.
        https://bugs.webkit.org/show_bug.cgi?id=147272
        rdar://problem/21429111

        Reviewed by Simon Fraser.

        Blurry inline video controls are the result of transform scaling up the content when the page
        is zoomed out (page scale > 1).
        This patch addresses the blurriness by switching to css zoom when the content is being scaled up.
        While transform scale is a paint time operation, css zoom triggers layout and the content is getting
        painted on a non-scaled graphics context.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline-container):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.set pageScaleFactor):

2015-07-24  Alexey Proskuryakov  <ap@apple.com>

        Remove WEBCORE_EXPORT from Page::allowsMediaDocumentInlinePlayback()
        https://bugs.webkit.org/show_bug.cgi?id=147260

        Reviewed by Daniel Bates.

        * page/Page.h:
        (WebCore::Page::allowsMediaDocumentInlinePlayback):

2015-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Object.getOwnPropertySymbols on large list takes very long
        https://bugs.webkit.org/show_bug.cgi?id=146137

        Reviewed by Mark Lam.

        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
        (WebCore::Dictionary::getOwnPropertyNames):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):

2015-07-24  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r187149): Build fails when CSS_SELECTORS_LEVEL4 is disabled

        This is a follow-up fix to:
            [CSS Selectors Level 4] Add #ifdefs to the new '>>' descendant combinator
            <https://bugs.webkit.org/show_bug.cgi?id=147184>

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/CSSParserValues.h:
        * css/CSSSelector.h:
        - Change ENABLE_CSS_SELECTORS_LEVEL4 to
          ENABLE(CSS_SELECTORS_LEVEL4).

2015-07-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: Editing non-inspector-stylesheet rule selectors fails after the first change
        https://bugs.webkit.org/show_bug.cgi?id=147229

        Reviewed by Timothy Hatcher.

        Test: inspector/css/modify-rule-selector.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::setRuleSelector):
        Now checks to see if the stylesheet is not mutated before making the change to the
        rule's selector, and if so mark it as not mutated to allow future edits.

2015-07-24  Joseph Pecoraro  <pecoraro@apple.com>

        CSS "content" property is missing in getComputedStyles
        https://bugs.webkit.org/show_bug.cgi?id=147255

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:

2015-07-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Crashes during plugin installation
        https://bugs.webkit.org/show_bug.cgi?id=144099

        Reviewed by Philippe Normand.

        Add new methods to MediaPlayerClient and ChromeClient to request
        the API layer to start the installer when there are missing media
        plugins.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::requestInstallMissingPlugins): Pass
        the request to the ChromeClient.
        * html/HTMLMediaElement.h:
        * page/ChromeClient.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::requestInstallMissingPlugins):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Invalidate any pending request to install missing media plugins.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): In case of
        missing plugins message, start a request to install them if
        supported by GST.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::create):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::MediaPlayerRequestInstallMissingPluginsCallback):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::invalidate):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::complete):

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r187245.

        * PlatformWin.cmake:
        Add GDIUtilities.cpp to CMake build.

2015-07-23  Matthew Daiter  <mdaiter@apple.com>

        Linking WebKit2 to be able to grab media sources from a UID
        https://bugs.webkit.org/show_bug.cgi?id=147202
        <rdar://problem/21947608>

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::sourceWithUID):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::sourceWithUID):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::sourceWithUID):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::sourceWithUID):
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2015-07-23  Alex Christensen  <achristensen@webkit.org>

        Remove compile and runtime flags for promises.
        https://bugs.webkit.org/show_bug.cgi?id=147244

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::rejectPromiseWithExceptionIfAny):
        * bindings/js/JSDOMPromise.h:

2015-07-23  Nan Wang  <n_wang@apple.com>

        AX: AccessibilityNodeObject::childrenChanged() generates too many AXLiveRegionChanged notifications
        https://bugs.webkit.org/show_bug.cgi?id=147211
        <rdar://problem/19908029>

        Reviewed by Chris Fleizach.

        AccessibilityNodeObject::childrenChanged() can be called repeatedly, generating a live region
        change notification each time. Sometimes, so many happen that VoiceOver hangs. We can use a timer
        to make sure that we coalesce these notifications.

        Test: platform/mac/accessibility/aria-multiple-liveregions-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXComputedObjectAttributeCache::getIgnored):
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::frameLoadingEventNotification):
        (WebCore::AXObjectCache::postLiveRegionChangeNotification):
        (WebCore::AXObjectCache::liveRegionChangedNotificationPostTimerFired):
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::childrenChanged):

2015-07-23  Timothy Horton  <timothy_horton@apple.com>

        [iOS] Frame snapshots don't factor in page scale
        https://bugs.webkit.org/show_bug.cgi?id=147239
        <rdar://problem/21905756>

        Reviewed by Simon Fraser.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        Apply page scale when determining the backing store size and setting up the context.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        Don't assume snapshotFrameRect gave us an image with scale=deviceScale, because it
        will factor in the pageScale too.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::resolutionScale):
        Expose resolutionScale.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        This has been true for a long time.

2015-07-23  Jon Davis  <jond@apple.com>

        Adding Web Components to feature status page.
        https://bugs.webkit.org/show_bug.cgi?id=147209

        Reviewed by Timothy Hatcher.

        * features.json:

2015-07-21  Jer Noble  <jer.noble@apple.com>

        Notify the UI delegate when a MediaDocument's natural size changes
        https://bugs.webkit.org/show_bug.cgi?id=147182

        Reviewed by Simon Fraser.

        Notify the MediaDocument that it's underlying media element has changed its natural size, either when
        the media engine notifies us that the size changed, or when the ready state progresses to HAVE_METADATA.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Notify the media document.
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged): Ditto.
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::mediaElementNaturalSizeChanged): Pass to the chrome client.
        * html/MediaDocument.h:
        * page/ChromeClient.h:

2015-07-22  Simon Fraser  <simon.fraser@apple.com>

        Layer z-ordering is incorrect when scrolling on page witih position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=147220
        rdar://problem/15849697&21929247

        Reviewed by Dean Jackson.

        Overlap testing for compositing uses the currently laid out position of fixed
        elements, without taking into account the fact that async scrolling can move
        them around, and possibly under other non-composited elements. This manifested
        as position:fixed elements moving over other elements on some pages when
        scrolling, when they should have moved behind.
        
        Fix by expanding the overlap map entry for position:fixed elements to create
        an rect for the area they cover at all scroll locations, taking min and max
        scroll offsets into account.
        
        Also add a couple more LOG(Compositing) statements.

        Tests: compositing/layer-creation/fixed-overlap-extent-rtl.html
               compositing/layer-creation/fixed-overlap-extent.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::fixedPositionOffset):
        (WebCore::RenderLayerCompositor::computeExtent):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer):
        (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged):

2015-07-23  Jer Noble  <jer.noble@apple.com>

        Relax media playback restrictions if the allowsMediaDocumentInlinePlayback property is set.
        https://bugs.webkit.org/show_bug.cgi?id=147234

        Reviewed by Darin Adler.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Moved restriction check into MediaElementSession.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted): Check if is a top-level media document and if
            allowsMediaDocumentInilnePlayback is set, and return early.
        (WebCore::MediaElementSession::effectivePreloadForElement): Ditto.
        (WebCore::MediaElementSession::allowsAutomaticMediaDataLoading): Ditto.
        * html/MediaElementSession.h:

2015-07-23  Matthew Daiter  <mdaiter@apple.com>

        Bridged passing lists of devices between the UIProcess and the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=147056
        <rdar://problem/21883094>

        Reviewed by Brent Fulgham.

        * Modules/mediastream/UserMediaRequest.h: Added fields to store and
        retrieve lists of devices
        (WebCore::UserMediaRequest::deviceUIDsVideo):
        (WebCore::UserMediaRequest::deviceUIDsAudio):

2015-07-19  Matt Rajca  <mrajca@apple.com>

        Media Session: add support for ducking media elements
        https://bugs.webkit.org/show_bug.cgi?id=147089

        Reviewed by Eric Carlson.

        Test: media/session/transient-interruptions.html

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::handleDuckInterruption): Duck the active media elements.
        (WebCore::MediaSession::handleUnduckInterruption): Unduck the active media elements.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateVolume): Lower the volume of media elements to 25% when ducked (constant determined empirically).
        (WebCore::HTMLMediaElement::setShouldDuck): Call updateVolume to change the volume of the underlying media player.
        * html/HTMLMediaElement.h:

2015-07-23  Matt Rajca  <mrajca@apple.com>

        Media Session: add infrastructure for testing ducking https://bugs.webkit.org/show_bug.cgi?id=147080

        Reviewed by Jer Noble.

        We need to expose a media element's underlying media player's volume to tests so we can test ducking.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playerVolume):
        * html/HTMLMediaElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaElementPlayerVolume):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Add an explicit API to allow media documents to (temporarily) play inline
        https://bugs.webkit.org/show_bug.cgi?id=147181

        Reviewed by Beth Dakin.

        Add listeners for the new allowsMediaDocumentInlinePlayback API. When this value becomes
        NO, force any playing MediaDocuments to enter fullscreen mode.

        * dom/Document.cpp:
        (WebCore::Document::registerForAllowsMediaDocumentInlinePlaybackChangedCallbacks): Added registration method.
        (WebCore::Document::unregisterForAllowsMediaDocumentInlinePlaybackChangedCallbacks): Added deregistration method.
        (WebCore::Document::allowsMediaDocumentInlinePlaybackChanged): Notify all listeners.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Listen for allowsMediaDocumentInlinePlayback changes.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Stop listening to same.
        (WebCore::HTMLMediaElement::allowsMediaDocumentInlinePlaybackChanged): Enter fullscreen mode if the value
            changes to false during playback.
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback): Early true if the override value is set.
        * page/Page.cpp:
        (WebCore::Page::setAllowsMediaDocumentInlinePlayback): Notify all documents of the changed value.
        * page/Page.h:
        (WebCore::Page::allowsMediaDocumentInlinePlayback): Simple getter.

2015-07-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Add a function to CSSCompletions to get a list of supported system fonts
        https://bugs.webkit.org/show_bug.cgi?id=147009

        Reviewed by Joseph Pecoraro.

        Test: inspector/css/get-system-fonts.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedSystemFontFamilyNames):
        Gets the list of system fonts (implemented in each platform) and returns that list.
        * inspector/InspectorCSSAgent.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFontFamilies):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFontFamilies):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFontFamilies):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFontFamilies):

2015-07-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement High DPI support features
        https://bugs.webkit.org/show_bug.cgi?id=146335
        <rdar://problem/21558269>

        Reviewed by Alex Christensen.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (WebCore::PlatformCALayerWinInternal::drawTile): Don't translate the CGContext to the position
        of the CACFLayerRef; the underlying context is already in the right position.
        * platform/win/PlatformMouseEventWin.cpp: Update class to adjust mouse
        event coordinates based on scaling factor.
        (WebCore::deviceScaleFactor):
        (WebCore::positionForEvent):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::scrollbarThicknessInPixels):
        (WebCore::ScrollbarThemeWin::scrollbarThickness):
        (WebCore::ScrollbarThemeWin::themeChanged):
        * platform/win/WheelEventWin.cpp: Update class to adjust wheel event
        coordinates based on scaling factor.
        (WebCore::deviceScaleFactor):
        (WebCore::positionForEvent):
        (WebCore::globalPositionForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2015-07-23  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r182236): Justified Arabic text does not expand
        https://bugs.webkit.org/show_bug.cgi?id=147217

        Reviewed by Simon Fraser.

        When I was writing r182236, I got confused between the levels of the string hierarchy in ComplexTextController.
        I've added a comment in the header which should make it easier to get it right.

        Test: fast/text/international/arabic-justify.html

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

2015-07-23  Tim Horton  <timothy_horton@apple.com>

        Fix the build for __IPHONE_OS_VERSION_MIN_REQUIRED <= 80200 || !HAVE(AVKIT)

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (elementRectInWindow):
        This helper is only used in the #else block, so move it there.

2015-07-23  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the build

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-22  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add ENABLE_WEBASSEMBLY feature flag for WebAssembly
        https://bugs.webkit.org/show_bug.cgi?id=147212

        Reviewed by Filip Pizlo.

        No new tests.

        * Configurations/FeatureDefines.xcconfig:

2015-07-22  Tim Horton  <timothy_horton@apple.com>

        Try to fix the build

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-22  James Savage  <james.savage@apple.com>

        Use updated CoreAnimation snapshot SPI.
        https://bugs.webkit.org/show_bug.cgi?id=147197
        <rdar://problem/21032083>

        Reviewed by Tim Horton.
        Patch by James Savage.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline should immediately start moving play head when starting a new recording
        https://bugs.webkit.org/show_bug.cgi?id=147210

        Reviewed by Timothy Hatcher.

        Test: inspector/timeline/recording-start-stop-timestamps.html

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        Include the current timestamp when starting / stopping a recording.

2015-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Coordinates-based snap offsets don't update correctly when container is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=147215

        Reviewed by Brent Fulgham.

        Fixes the way we append the snap offsets of child elements with coordinates. We
        now consider the scroll offset of the parent scroll snapping container, so snap
        offset recomputations don't fail on scroll snapping containers.

        Test: css3/scroll-snap/scroll-snap-coordinate-overflow-resize.html

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Fixed to consider the scroll offset of the
            parent container.

2015-07-22  Matthew Daiter  <mdaiter@apple.com>

        Needed to add methods to get PreviewCaptureLayers from Video
        https://bugs.webkit.org/show_bug.cgi?id=147011
        <rdar://problem/21861999>

        Reviewed by Jer Noble.

        * platform/mediastream/mac/AVVideoCaptureSource.h: Added in preview
        layer to class
        (WebCore::AVVideoCaptureSource::previewLayer):
        * platform/mediastream/mac/AVVideoCaptureSource.mm: Instantiate
        previewLayer on load
        (WebCore::AVVideoCaptureSource::setupCaptureSession):

2015-07-22  Sungmann Cho  <sungmann.cho@navercorp.com>

        [EFL] The "Missing Plug-in" buttons are not showing up on some flash contents
        https://bugs.webkit.org/show_bug.cgi?id=147191

        Reviewed by Gyuyoung Kim.

        Currently, WebKitEFL doesn't show the "Missing Plug-in" buttons if the plugin-related tags
        don't have a "type" attribute. In such a case, WebCore tries to guess the MIME type from
        the extensions by using MIMETypeRegistry::getMIMETypeForExtension(). For WebKitEFL,
        MIMETypeRegistry::getMIMETypeForExtension() goes through |extensionMap|, which is a simple
        array of <extension, mime type>, looking for the mime type for the given extension.
        But |extensionMap| in MIMETypeRegistryEfl.cpp doesn't have the information for ".swf",
        so WebCore fails to guess the MIME type and regard the content type as ObjectContentFrame,
        not ObjectContentNetscapePlugin.

        * platform/efl/MIMETypeRegistryEfl.cpp:

2015-07-22  Matthew Daiter  <mdaiter@apple.com>

        Rank sources for fitness for UIDs in bestSourcesForTypeAndConstraints
        https://bugs.webkit.org/show_bug.cgi?id=147206
        <rdar://problem/21950653>

        Reviewed by Jer Noble.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::fitnessScore):
        (WebCore::RealtimeMediaSource::setFitnessScore):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints):

2015-07-22  Dean Jackson  <dino@apple.com>

        Video controls, though hidden, are still interactive when in PiP
        https://bugs.webkit.org/show_bug.cgi?id=147216
        <rdar://problem/21012688>

        Reviewed by Simon Fraser.

        Explicitly add the PiP class to the controls container so that
        we can hang a pointer-events: none off it.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel.picture-in-picture): Add a pointer-events: none.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePresentationModeChange): Add/remove a PiP class
        to the controls panel when necessary.

2015-07-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r187196.
        https://bugs.webkit.org/show_bug.cgi?id=147213

        broke all the iOS builds (Requested by thorton on #webkit).

        Reverted changeset:

        "Use updated CoreAnimation snapshot SPI."
        https://bugs.webkit.org/show_bug.cgi?id=147197
        http://trac.webkit.org/changeset/187196

2015-07-22  James Savage  <james.savage@apple.com>

        Use updated CoreAnimation snapshot SPI.
        https://bugs.webkit.org/show_bug.cgi?id=147197

        Reviewed by Tim Horton.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-22  Dean Jackson  <dino@apple.com>

        Out of bounds in WebGLRenderingContext::simulateVertexAttrib0
        https://bugs.webkit.org/show_bug.cgi?id=147176
        <rdar://problem/21567767>

        Reviewed by Oliver Hunt.

        Test: fast/canvas/webgl/out-of-bounds-simulated-vertexAttrib0-drawArrays.html

        Add overflow checking for the drawing calls, specifically the way
        they may simulate vertexAttrib0.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateDrawArrays): Call new validation method.
        (WebCore::WebGLRenderingContextBase::validateDrawElements): Ditto.
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0): New method that
        validates the parameters used to create the simulated attribute.
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0): No need to do overflow
        checking here now that the validation method does it for us.
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes): Deleted.
        * html/canvas/WebGLRenderingContextBase.h: Add new validation method.

2015-07-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: AppCache manifest 404 doesn't produce errors in console, manifest resource request always loading indicator
        https://bugs.webkit.org/show_bug.cgi?id=147135

        Reviewed by Alexey Proskuryakov.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        Always pass a document loader instead of passing null for the manifest request.

        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        Since we will be cancelling the resource handle ourselves in didReceiveResponse
        before receiving the didFail resource handle delegates, we should update the
        inspector about this resource load failing due to a cancel.

        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        Update the MessageSource from "Other" to "AppCache".

2015-07-22  Jeremy Jones  <jeremyj@apple.com>

        Fix fullscreen and PiP video animation and sizing regressions.
        https://bugs.webkit.org/show_bug.cgi?id=147189
        <rdar://problem/21930899>

        Reviewed by Jer Noble.

        Fixes WK1 specific regressions introduced by r187044. Flicker when entering fullscreen,
        wrong animation and missing initial animation rects.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (elementRectInWindow): Added.
        (WebVideoFullscreenControllerContext::didSetupFullscreen): Clear background decreases flash.
        (WebVideoFullscreenControllerContext::fullscreenMayReturnToInline): Use consistent inline rect.
        (WebVideoFullscreenControllerContext::setVideoLayerFrame): 
        Clear the transform on the web thread instead of on the UI thread.
        (WebVideoFullscreenControllerContext::setUpFullscreen): Use consistent inline rect.
        (WebVideoFullscreenControllerContext::exitFullscreen): Use consistent inline rect.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 
        (-[WebAVPlayerLayer resolveBounds]): Clear transform after setting frame.

2015-07-22  Jeremy Jones  <jeremyj@apple.com>

        Adopt AVKit's AVSimplePlayerLayerView change for PiP.
        https://bugs.webkit.org/show_bug.cgi?id=147186
        <rdar://problem/21928170>

        Reviewed by Jer Noble.

        Adopt AVKit changes by inheriting from UIView instead of from AVPictureInPicturePlayerLayerView.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebAVPlayerLayerView_layerClass): Style.
        (WebAVPlayerLayerView_playerController): Style.
        (WebAVPlayerLayerView_videoView): Style.
        (getWebAVPictureInPicturePlayerLayerViewClass): Inherit from UIView.

2015-07-22  Beth Dakin  <bdakin@apple.com>

        Animated images should animate in previews
        https://bugs.webkit.org/show_bug.cgi?id=147173
        -and corresponding-
        rdar://problem/21637698

        Reviewed by Dan Bernstein.

        New virtual function to indicate whether or not the image is animated.
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::isAnimated):

2015-07-22  Jinyoung Hur  <hur.ims@navercorp.com>

        [WinCairo] SVG path not rendered with all-zero dasharray
        https://bugs.webkit.org/show_bug.cgi?id=146997

        Reviewed by Martin Robinson.

        All-zero dash array should not be passed to cairo_set_dash() as an argument, because it will cause an internal Cairo error.
        Rather call cairo_set_dash() with num_dashes=0 to disable dash line.

        Tests: fast/canvas/canvas-lineDash.html
               svg/custom/zero-dasharray.html

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setLineDash):

2015-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Search fields render placeholder text improperly.
        https://bugs.webkit.org/show_bug.cgi?id=147192
        <rdar://problem/21901076>

        Reviewed by Alexey Proskuryakov.

        Due to changes in the way AppKit renders search inputs, we must now explicitly
        set the placeholder text of a search input rendered using the Mac theme to be
        an empty string when rendering the search input box (not including the actual
        placeholder text).

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setSearchCellState): Force the placeholder text of
            the NSSearchFieldCell for the Mac theme to be an empty string.

2015-07-22  Matthew Daiter  <mdaiter@apple.com>

        Need the ability to give only best source UIDs to UserMedia request
        https://bugs.webkit.org/show_bug.cgi?id=147171
        <rdar://problem/21931121>

        Reviewed by Eric Carlson.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::constraintsValidated):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::videoDeviceUIDs):
        (WebCore::UserMediaRequest::audioDeviceUIDs):
        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::bestSourcesForTypeAndConstraints):
        (WebCore::AVCaptureDeviceManager::bestSourceForTypeAndConstraints): Deleted.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):

2015-07-22  Mark Dittmer  <mark.s.dittmer@gmail.com>

        Fix toJSDOMWindow() in the case of an object that has the actual JS DOM window in its prototype chain.
        https://bugs.webkit.org/show_bug.cgi?id=146785

        Reviewed by Mark Lam.

        * bindings/js/JSDOMWindowBase.cpp: toJSDOMWindow(): Walk the prototype chain of the given JSValue until a JSDOMWindow or JSDOMWindowShell is found.

2015-07-22  Matthew Daiter  <mdaiter@apple.com>

        Remove revealing getVideoTracks() and getAudioTracks()
        https://bugs.webkit.org/show_bug.cgi?id=147126
        <rdar://problem/21908723>

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaStream.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Modded to use
        tracks() instead of getVideo/AudioTracks()
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::playInternal): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pauseInternal): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::naturalSize): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasVideo): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasAudio): Ditto
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::currentMediaTime):
        Changed to a FIXME
        * platform/mediastream/MediaStreamPrivate.h:

2015-07-22  Matthew Daiter  <mdaiter@apple.com>

        Ensure MediaPlayerPrivateAVFoundation doesn't load MediaStreams
        https://bugs.webkit.org/show_bug.cgi?id=147119
        <rdar://problem/21904955>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: Set
        networkstate to error when loading MediaStreams

2015-07-22  Alex Christensen  <achristensen@webkit.org>

        Fix quirks in CMake build on Mac and Windows
        https://bugs.webkit.org/show_bug.cgi?id=147174

        Reviewed by Gyuyoung Kim.

        * PlatformMac.cmake:
        Removed files that don't exist any more.
        * platform/win/WindowsTouch.h:
        Only use definitions of touch structures when compiling with VS2012.

2015-07-22  Csaba Osztrogonác  <ossy@webkit.org>

        Fix cast-align warning in NetworkStateNotifierEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145915

        Reviewed by Gyuyoung Kim.

        * platform/network/efl/NetworkStateNotifierEfl.cpp:
        (WebCore::NetworkStateNotifier::readSocketCallback):

2015-07-22  Ryuan Choi  <ryuan.choi@navercorp.com>

        [GTK][EFL] Remove dead functions in LocalizedStrings
        https://bugs.webkit.org/show_bug.cgi?id=147188

        Reviewed by Csaba Osztrogonác.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagHideMediaControls):
        (WebCore::contextMenuitemTagHideMediaControls): Fixed typo since r152117.
        (WebCore::inactivePluginText): Deleted since r151530.
        (WebCore::textTrackClosedCaptionsText): Deleted since r141864.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::inactivePluginText): Deleted since r151530.
        (WebCore::textTrackClosedCaptionsText): Deleted since r141864.

2015-07-21  Benjamin Poulain  <bpoulain@apple.com>

        [CSS Selectors Level 4] Add #ifdefs to the new '>>' descendant combinator
        https://bugs.webkit.org/show_bug.cgi?id=147184

        Reviewed by Anders Carlsson.

        Now that '>>>' is dead, the combinator '>>' is at risk.

        This patch #ifdef all that code with the other experimental
        features from Level 4.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):

2015-07-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Node highlights are wrong when the page is zoomed
        https://bugs.webkit.org/show_bug.cgi?id=147177

        Reviewed by Simon Fraser.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        Remove scaling that appears to no longer be needed, it was double
        scaling the overlay content and misplacing it in the process.

2015-07-21  Dean Jackson  <dino@apple.com>

        Default media controls use a serif font, which seems wrong
        https://bugs.webkit.org/show_bug.cgi?id=147179
        <rdar://problem/21931728>

        Reviewed by Simon Fraser.

        The captions menu (and other text) should use a system style,
        -webkit-small-control.

        * Modules/mediacontrols/mediaControlsApple.css:
        (::-webkit-media-controls):

2015-07-21  Matthew Daiter  <mdaiter@apple.com>

        Exposed method to query device by UID
        https://bugs.webkit.org/show_bug.cgi?id=147117
        <rdar://problem/21904678>

        Reviewed by Eric Carlson.

        * platform/mediastream/mac/AVCaptureDeviceManager.h: Added method to
        query device by UID
        * platform/mediastream/mac/AVCaptureDeviceManager.mm: Ditto
        (WebCore::AVCaptureDeviceManager::sourceWithUID): Ditto

2015-07-21  Benjamin Poulain  <benjamin@webkit.org>

        [Content Extensions] Use a jump table when consecutive transitions have different targets
        https://bugs.webkit.org/show_bug.cgi?id=147099

        Reviewed by Alex Christensen.

        When handling consecutive single transitions, merge them into
        a jump table instead of creating many individual CheckValue.

        From local testing on x86_64, it reduces the bytecode size by about 5%
        and improve the runtime by about 10%.

        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::extractJumpTable):
        (WebCore::ContentExtensions::DFABytecodeCompiler::transitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::checkForJumpTableMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileJumpTable):
        (WebCore::ContentExtensions::DFABytecodeCompiler::nodeTransitionsMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::ranges): Deleted.
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpetJumpTable):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:

2015-07-21  Simon Fraser  <simon.fraser@apple.com>

        Add a logging channel for Layout, remove the LiveConnect channel
        https://bugs.webkit.org/show_bug.cgi?id=147170

        Reviewed by Zalan Bujtas.

        Add a layout logging channel to WebCore, and remove the LiveConnect channel.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::autoSizeIfEnabled):
        * platform/Logging.h:

2015-07-21  Benjamin Poulain  <bpoulain@apple.com>

        StyleSheetContents::wrapperInsertRule() can create rules that overflow RuleData's selector index
        https://bugs.webkit.org/show_bug.cgi?id=147144

        Reviewed by Alex Christensen.

        RuleData identifies selectors by the index in a large array. The index only has 13 bits
        so rules with more than 8192 selectors should be split.

        One of the paths was not splitting the rule: StyleSheetContents::wrapperInsertRule().
        When rules with too many selectors were added, the index would overflow and
        some RuleData would point to selectors in the middle of selector chains. The resulting
        behavior is random based on the selectors and the DOM.

        We cannot easily fix that because the CSS OM API do not expect to create
        several rules in response to calls to the API.
        In this patch, I don't do anything fancy and just let the calls fail
        if we cannot use the rules safely.


        Content Extensions were also running into this problem. Large Selector lists are
        pretty common, and ContentExtensionStyleSheet::addDisplayNoneSelector() was
        overflowing the RuleData, creating broken page.

        Unlike CSSOM, there is no problem with splitting rules coming from Content Extensions.
        Instead of creating new APIs for that case, I rely on the parser to extend the StyleSheetContents.
        That code already knows how to break rules correctly.

        Tests: fast/css/insert-rule-overflow-rule-data.html
               http/tests/contentextensions/css-display-none-overflows-rule-data-1.html
               http/tests/contentextensions/css-display-none-overflows-rule-data-2.html

        * contentextensions/ContentExtensionStyleSheet.cpp:
        (WebCore::ContentExtensions::ContentExtensionStyleSheet::addDisplayNoneSelector):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::wrapperInsertRule):

2015-07-21  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] Keyboard bold/italic/underline keys don't highlight after being
        tapped to style a selection
        https://bugs.webkit.org/show_bug.cgi?id=147164
        <rdar://problem/21630806>

        Reviewed by Ryosuke Niwa.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::styleForSelectionStart):
        Use adjustedSelectionStartForStyleComputation(), which will ensure that
        we're at the start of the selected node, not at the end of the node
        before the selection.

2015-07-21  Tim Horton  <timothy_horton@apple.com>

        Placing video in fullscreen caused WebKit crash at WebCore::Range::textQuads
        https://bugs.webkit.org/show_bug.cgi?id=147166
        <rdar://problem/21928558>

        Reviewed by Simon Fraser.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        Check the Range, as always.

2015-07-21  Simon Fraser  <simon.fraser@apple.com>

        Safari mis-applies "animation-fill-mode: forwards" when using fractional iteration count
        https://bugs.webkit.org/show_bug.cgi?id=146996

        Reviewed by Dean Jackson.

        animation-fill-mode: forwards with fractional iteration counts always snapped to
        1 or 0, depending on direction. Fix to compute the fill-forward state from the
        correct keyframes.
        
        If filling forwards, AnimationBase::progress() sets the elapsed time to the duration,
        then uses fractionalTime() to handle animation direction mapping. If the fractionalTime
        is integral, we can return early, avoiding the cost of mapping through timing functions.

        Tested by existing tests.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty): It was possible
        to end up with prevIndex == nextIndex with reverse animations, which resulted
        in divide-by-zero when computing scale. Fix by picking a nextIndex that is different
        from prevIndex.

2015-07-21  David Hyatt  <hyatt@apple.com>

        Fix failing WK1 layout tests. Make sure to reset the text zoom scale
        in Internals::resetToConsistentState.

        Reviewed by Anders Carlsson

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2015-07-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r172417, r184065): Multiple rendering issues with fixed attached background-image
        https://bugs.webkit.org/show_bug.cgi?id=147049
        <rdar://problem/21110936>

        Reviewed by Simon Fraser.

        The fixed-attached background-image rendering is special. In general, to
        display it, the destinationSize should be set to visibleContentSize. The
        destinationLocation should be set such that the background-image does
        not move with scrolling. The topContentInset should be subtracted from
        the destinationLocation such that background-image can be rendered blurred
        in the topContentArea. However there are cases in which these rules have to
        be changed.
        
        -- destinationSize: In the case of fixed layout size, the fixedLayoutSize
        is bigger than the visibleContentSize. In this case, if the background-image
        belongs to the root element, the destinationSize has to be set to fixedLayoutSize.
        Otherwise it has to be set to the borderBoxSize unless the overflow is
        hidden.
        
        -- destinationLocation: If the background-image belongs to the root element, no
        scroll offset to added to destinationLocation. For non-root element case,
        FrameView::documentScrollOffsetRelativeToViewOrigin() should be used if no page
        scaling is applied. Otherwise FrameView::scrollOffsetForFixedPosition() should be
        used instead.
        
        Tests: platform/mac-wk2/tiled-drawing/fixed-layout-size-fixed-attachment-cover.html
               platform/mac-wk2/tiled-drawing/fixed-layout-size-fixed-attachment-local.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Ensure
        the geometry for the fixed-attached background-image is calculated correctly.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): Ensure the background layer
        gets the correct size for the fixedLayoutSize mode.

2015-07-21  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(DETAILS_ELEMENT) build after r186598
        https://bugs.webkit.org/show_bug.cgi?id=147115

        Reviewed by Chris Fleizach.

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

2015-07-21  David Hyatt  <hyatt@apple.com>

        Need a way to ignore text-zoom in a Web page.
        https://bugs.webkit.org/show_bug.cgi?id=27092
        rdar://problem/7037987

        Reviewed by Simon Fraser.

        This patch adds a new property, -webkit-text-zoom, with values of normal and reset. The reset
        keyword, just as with the zoom property, can be used to ignore any inherited zoom from the
        document.

        Added new test in fast/text.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator ContentDistributionType):
        (WebCore::CSSPrimitiveValue::operator TextZoom):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::csstoLengthConversionDataWithTextZoomFactor):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitTextSizeAdjust):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextZoom):
        (WebCore::StyleBuilderCustom::applyTextOrBoxShadowValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkForZoomChange):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageZoomFactor):
        (WebCore::Internals::setTextZoomFactor):
        (WebCore::Internals::setUseFixedLayout):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-21  Per Arne Vollan  <peavo@outlook.com>

        WinLauncher does not start on WinXP.
        https://bugs.webkit.org/show_bug.cgi?id=147147

        Reviewed by Alex Christensen.

        Calling GetProcessMemoryInfo() on WinXP requires that PSAPI_VERSION is set to 1,
        see https://msdn.microsoft.com/en-us/library/windows/desktop/ms683219(v=vs.85).aspx.

        * WebCore.vcxproj/WebCoreCommon.props:

2015-07-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r184376): [SOUP] Multiple assertions when downloading files
        https://bugs.webkit.org/show_bug.cgi?id=147039

        Reviewed by Darin Adler.

        No new tests; this will be covered once we enable the network process for API tests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::releaseForDownload): Call RefPtrBase::relaxAdoptionRequirement so
        that we don't assert when storing the non-adopted ResourceHandle in a RefPtr. The ref will
        be dropped in ResourceHandle::cleanupSoupOperation, which as the comment says should always
        run. HOPEFULLY.
        (WebCore::ResourceHandle::continueWillSendRequest): Don't assert that client() is nonnull,
        because the code clearly expects and handles the case where it is null.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Ditto; note that here client() will
        always be null for a download.

2015-07-20  Ada Chan  <adachan@apple.com>

        Follow-up to my earlier fix for r147085
        https://bugs.webkit.org/show_bug.cgi?id=147085

        Reviewed by Eric Carlson.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isPlayingAudioDidChange):
        Null-check document() before dereferencing it in case the audio context's document is destroyed
        by the time the code block is called on the main thread.

2015-07-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove RenderTheme::shouldShowPlaceholderWhenFocused()
        https://bugs.webkit.org/show_bug.cgi?id=147104

        Reviewed by Martin Robinson.

        GTK+ is the only port that returns false in
        shouldShowPlaceholderWhenFocused(). That's inconsistent with all
        other browsers that show the placeholder text even for focused
        entries in all platforms. We should change the GTK+ port
        behaviour, but that would leave all implementations of
        shouldShowPlaceholderWhenFocused returning true, so let's just
        remove it.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        Do not consider whether the entry is focused or not.
        * platform/efl/RenderThemeEfl.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::shouldShowPlaceholderWhenFocused): Deleted.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::shouldShowPlaceholderWhenFocused): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldShowPlaceholderWhenFocused): Deleted.
        * rendering/RenderThemeSafari.h:
        (WebCore::RenderThemeSafari::shouldShowPlaceholderWhenFocused): Deleted.
        * rendering/RenderThemeWin.h:

2015-07-20  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] CoordinatedGraphicsLayer::setContentsToImage() should avoid scheduling unnecessary flushes
        https://bugs.webkit.org/show_bug.cgi?id=147118

        Reviewed by Martin Robinson.

        Have CoordinatedGraphicsLayer::setContentsToImage() return early if the new
        passed-in Image and the corresponding native image pointer are equal to the
        currently set values.

        This specifically avoids scheduling unnecessary flushes when setContentsToImage()
        is repeatedly called with a null Image pointer, which in previous code would
        unconditionally result in a scheduled flush even if there was no Image assigned
        as the content of this layer before. Until now the layer flush scheduling was only
        avoided if the two non-null native image pointers were equal.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):

2015-07-20  Nan Wang  <n_wang@apple.com>

        AX: Selection change as a result of focusing an element may cause Safari to crash
        https://bugs.webkit.org/show_bug.cgi?id=147052
        <rdar://problem/21778212>

        Reviewed by Chris Fleizach.

        When focusing an element, it may trigger a deferred layout that invalidates the render 
        element, which will cause axObjectCache() to be a nullptr, and lead to a crash. Fix that
        by using a RefPtr to hold the object and also caching the axObjectCache().

        Test: platform/mac/accessibility/focus-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setSelectedRows):

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r187049.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateDomainCacheIfNeeded):
        Can't shrinkToFit HashSets.

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Cache actions with domains that match everything
        https://bugs.webkit.org/show_bug.cgi?id=147050

        Reviewed by Benjamin Poulain.

        If you have lots of rules with triggers like {"url-filter":".*","if-domain":["*webkit.org"]}
        we will spend a lot of time adding unnecessary actions to HashSets when you are not on webkit.org.
        Caching all the rules and only adding them to a collection once when the domain changes saves a lot of URL interpreting time.

        We already had an optimization for the css-display-none actions with triggers that matched everything using a special bytecode operation.
        This removes the need for a special bytecode operation by caching the triggers that match everything with and without domains,
        then from those cached actions we compile a stylesheet, and create cached actions for every new domain we visit.

        All functionality is covered by existing API tests.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::~CompiledContentExtension):
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors): Deleted.
        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::findFirstIgnorePreviousRules):
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::compileGlobalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::populateDomainCacheIfNeeded):
        (WebCore::ContentExtensions::ContentExtension::cachedDomainActions):
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithDomains):
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::compiledExtension):
        (WebCore::ContentExtensions::ContentExtension::universalActionsWithoutDomains):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::ContentExtensionRule::ContentExtensionRule):
        (WebCore::ContentExtensions::Action::deserialize):
        (WebCore::ContentExtensions::Action::deserializeType):
        (WebCore::ContentExtensions::Action::serializedLength):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::operator==):
        (WebCore::ContentExtensions::Action::setExtensionIdentifier):
        (WebCore::ContentExtensions::Action::extensionIdentifier):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsMatchingEverything):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsForDefaultStylesheetFromDFARoot): Deleted.
        * contentextensions/DFABytecodeInterpreter.h:
        * loader/ResourceLoadInfo.h:

2015-07-20  Jeremy Jones  <jeremyj@apple.com>

        Adopt AVPlayerLayerView
        https://bugs.webkit.org/show_bug.cgi?id=146862

        Reviewed by Jer Noble.

        The CALayerHost is replaced with WebLayerHostView to be compatible with UIView animations.
        Some animation is improved in the conversion.

        WebAVPlayerLayerView and WebAVPictureInPicturePlayerLayerView derive from AVKit and UIKit respectively.
        Because these frameworks are loaded at runtime, these classes must be generate using objc/runtime.h to
        register them from c functions at runtime. The most important part of these UIViews is that their
        backing layer is a WebAVPlayerLayer.

        WebCALayerHostWrapper and WebAVVideoLayer are combined into WebAVPlayerLayer to simplify the hierarchy.
        WebAVPlayerLayer is a stand-in for an AVPlayerLayer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): -removeFromSuperlayer is redundant.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenGravity): syncTextTrackBounds on change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame):
        We never want animation here, since all animation will happen in UIViews. 
        This is just for going into the final size after a transform based animation.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::didSetupFullscreen): layer -> view
        (WebVideoFullscreenControllerContext::didCleanupFullscreen): layer -> view
        (WebVideoFullscreenControllerContext::setUpFullscreen): layer -> view

        (WebVideoFullscreenControllerContext::setVideoLayerFrame): layer -> view
        Use fence port to synchronize between the UIThread and the WebThread,
        the same way WebKit2 uses a fence port to synchronize between processes.

        (WebVideoFullscreenControllerContext::setVideoLayerGravity):
        No longer necessary to cache videoGravity at this level.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:

        (-[WebAVPlayerLayer init]):
        (-[WebAVPlayerLayer dealloc]):
        (-[WebAVPlayerLayer playerController]):
        (-[WebAVPlayerLayer setBounds:]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (-[WebAVPlayerLayer videoGravity]):
        (-[WebAVPlayerLayer videoRect]):
        (+[WebAVPlayerLayer keyPathsForValuesAffectingVideoRect]):
        Added class WebAVPlayerLayer, replacing WebAVVideoLayer and WebCALayerHostWrapper.

        (WebAVPictureInPicturePlayerLayerView_layerClass):
        (getWebAVPictureInPicturePlayerLayerViewClass):
        Added runtime class WebAVPictureInPicturePlayerLayerView

        (WebAVPlayerLayerView_layerClass):
        (WebAVPlayerLayerView_playerController):
        (WebAVPlayerLayerView_setPlayerController):
        (WebAVPlayerLayerView_videoView):
        (WebAVPlayerLayerView_setVideoView):
        (WebAVPlayerLayerView_startRoutingVideoToPictureInPicturePlayerLayerView):
        (WebAVPlayerLayerView_stopRoutingVideoToPictureInPicturePlayerLayerView):
        (WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
        (getWebAVPlayerLayerViewClass):
        Added runtime class WebAVPlayerLayerView

        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions):
        Dimensions are also stored in WebAVPlayerLayer so it can make decisions about
        animating the video layer.

        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): 
        (WebVideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):
        Straightforward layer to view conversion.

        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        Set view frame using the view hierarchy instead of assuming it is directly in a window.

        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        Set view frame using the view hierarchy instead of assuming it is directly in a window.
        dispatch_async before calling didExitFullscreen() to allows CATransactions to complete.

        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        Set view frame using the view hierarchy instead of assuming it is directly in a window.
        dispatch_async before calling didSetupFullscreen() to allows CATransactions to complete.

        (-[WebCALayerHostWrapper dealloc]): Deleted.
        (-[WebCALayerHostWrapper setVideoSublayer:]): Deleted.
        (-[WebCALayerHostWrapper videoSublayer]): Deleted.
        (-[WebCALayerHostWrapper setBounds:]): Deleted.
        (-[WebCALayerHostWrapper resolveBounds]): Deleted.
        Class WebCALayerHostWrapper deleted. Functionality rolled into WebAVPlayerLayer.

        (+[WebAVVideoLayer videoLayer]): Deleted.
        (-[WebAVVideoLayer init]): Deleted.
        (-[WebAVVideoLayer setPlayerViewController:]): Deleted.
        (-[WebAVVideoLayer setVideoSublayer:]): Deleted.
        (-[WebAVVideoLayer setBounds:]): Deleted.
        (-[WebAVVideoLayer setVideoLayerGravity:]): Deleted.
        (-[WebAVVideoLayer videoLayerGravity]): Deleted.
        (-[WebAVVideoLayer enterPIPModeRedirectingVideoToLayer:]): Deleted.
        (-[WebAVVideoLayer leavePIPMode]): Deleted.
        Class WebAVVideoLayer deleted. Functionality rolled into WebAVPlayerLayer.

        * platform/ios/WebVideoFullscreenModel.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        No need to store frame and gravity in the model. It is stored in the UI where it is used.

        (WebVideoFullscreenModelVideoElement::videoLayerFrame): Deleted.
        (WebVideoFullscreenModelVideoElement::videoLayerGravity): Deleted.
        * platform/spi/cocoa/AVKitSPI.h: Add AVPlayerLayerView.

2015-07-20  Anders Carlsson  <andersca@apple.com>

        Add PLATFORM #ifdefs for Mac SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=147129

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:
        Skip NPAPI headers on iOS.

        * platform/mac/WebVideoFullscreenController.h:
        * platform/spi/mac/DataDetectorsSPI.h:
        * platform/spi/mac/NSEventSPI.h:
        * platform/spi/mac/NSFontSPI.h:
        * platform/spi/mac/NSMenuSPI.h:

2015-07-20  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r174287): Flash of black when opening a new web view or navigating to a new page
        https://bugs.webkit.org/show_bug.cgi?id=147127
        <rdar://problem/21474317>

        Reviewed by Simon Fraser.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        Avoid using an invalid documentBackgroundColor, fall back to baseBackgroundColor
        like we did before r174287.

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r187022.

        * platform/win/WindowsTouch.h:
        Undid changes from r187022

2015-07-20  Jeremy Jones  <jeremyj@apple.com>

        Allow video to rotate when app doesnt allow rotation.
        https://bugs.webkit.org/show_bug.cgi?id=147121

        Reviewed by Jer Noble.

        Set an SPI bool on the fullscreen video root view controller to allow it to override app rotation restrictions. 
        This allows video to be played in landscape in portrait only apps.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):

2015-07-20  Andreas Kling  <akling@apple.com>

        Unreviewed assertion fix following r187031.

        Just have GenericEventQueue::resume() return early if the queue isn't suspended.
        Suspend/Resume calls are not always symmetrical in HTMLMediaElement.

        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::resume):

2015-07-20  David Kilzer  <ddkilzer@apple.com>

        Unexpected ABI diffference between armv7 and armv7s in WebCore::GraphicsLayerCA::~GraphicsLayerCA()
        <http://webkit.org/b/147101>

        Reviewed by Michael Saboff.

        * platform/graphics/transforms/TransformationMatrix.h: Align
        Matrix4 on both armv7 and armv7s.

2015-07-20  Anders Carlsson  <andersca@apple.com>

        Add the necessary platform checks to iOS SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=147120

        Reviewed by Tim Horton.

        * platform/spi/ios/GraphicsServicesSPI.h:
        * platform/spi/ios/MediaPlayerSPI.h:
        * platform/spi/ios/MobileGestaltSPI.h:

2015-07-20  Andreas Kling  <akling@apple.com>

        Improve behavior of media elements in page cache.
        <https://webkit.org/b/147020>
        <rdar://problem/21712311>

        Reviewed by Chris Dumez.

        Make improvements for media elements when transitioning in/out of page cache:

        - Events that were scheduled when going into cache will now be delivered
          when the page is restored from cache.

        - Data buffering is turned off while in the cache. This reduces the memory
          cost of cached pages with media elements on iOS (where mediaserverd would
          keep upcoming video frames in memory for cached pages.)

        Test: media/restore-from-page-cache.html (amended)

        * dom/GenericEventQueue.h:
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::enqueueEvent):
        (WebCore::GenericEventQueue::suspend):
        (WebCore::GenericEventQueue::resume):

            Add a simple suspend/resume mechanism to GenericEventQueue that can
            be used to support page caching.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):

            Adapt to event queueing changes and add calls to setShouldBufferData().

        * html/HTMLSourceElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        (WebCore::HTMLSourceElement::create):
        (WebCore::HTMLSourceElement::activeDOMObjectName):
        (WebCore::HTMLSourceElement::canSuspendForPageCache):
        (WebCore::HTMLSourceElement::suspend):
        (WebCore::HTMLSourceElement::resume):
        (WebCore::HTMLSourceElement::stop):

            Turn HTMLSourceElement into an ActiveDOMObject so it gets all the
            appropriate page cache notifications directly. Suspend the delayed
            error event delivery timer when cached.

2015-07-20  Mark Lam  <mark.lam@apple.com>

        Rollout r187020 and r187021: breaks JSC API tests on debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=147110

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-07-18  Ada Chan  <adachan@apple.com>

        Fix deadlock between -[AVPlayerItem currentTime] and -[AVPlayer isExternalPlaybackActive]
        https://bugs.webkit.org/show_bug.cgi?id=147085
        <rdar://problem/21878275>

        Reviewed by Jer Noble.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isPlayingAudioDidChange):
        Call Document::updateIsPlayingMedia() on the main thread, since we could be on the audio I/O
        thread here and the Document::updateIsPlayingMedia() call could block, causing a deadlock.

2015-07-20  Alex Christensen  <achristensen@webkit.org>

        Resurrect CMake build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=147083

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * PlatformWin.cmake:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Range.cpp:
        * dom/Text.cpp:
        * editing/CompositeEditCommand.cpp:
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::createTexture):
        * platform/win/WindowsTouch.h:
        * rendering/RenderThemeWin.h:
        Fixed some including and compiling quirks needed for different configurations.

2015-07-20  Per Arne Vollan  <peavo@outlook.com>

        JavaScriptCore performance is very bad on Windows
        https://bugs.webkit.org/show_bug.cgi?id=146448

        Reviewed by Mark Lam.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM): Compile fix.

2015-07-19  Tim Horton  <timothy_horton@apple.com>

        Make shrink-wrapping test a ref-test instead of pixel-test
        https://bugs.webkit.org/show_bug.cgi?id=147081

        Reviewed by Sam Weinig.

        Nobody runs pixel tests.

        * svg/SVGPathUtilities.cpp:
        (WebCore::pathIteratorForBuildingString):
        (WebCore::buildStringFromPath):
        * svg/SVGPathUtilities.h:
        Add a helper that turns a Path into a SVG path string.

        * testing/Internals.cpp:
        (WebCore::Internals::pathStringWithShrinkWrappedRects):
        * testing/Internals.h:
        * testing/Internals.idl:
        Have the internals shrink-wrap method return an SVG path instead of a DOMPath.

2015-07-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r187008): CGPathCreateMutableCopyByTransformingPath() is not available on Windows
        <https://bugs.webkit.org/show_bug.cgi?id=147077>

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform): Restore less efficient code path
        for Windows.

2015-07-18  Tim Horton  <timothy_horton@apple.com>

        Simplify Path(CG)::transform/translate
        https://bugs.webkit.org/show_bug.cgi?id=147077

        Reviewed by Simon Fraser.

        No new tests; no behavior change.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::translate):
        (WebCore::Path::transform):
        Use CGPathCreateMutableCopyByTransformingPath to do the copy and transform
        in a single call instead of two.

        Make use of transform() to implement translate() instead of duplicating the code.
        Move the two functions near each other.

        (WebCore::Path::boundingRect):
        Remove irrelevant reference to Snow Leopard.

2015-07-17  Matt Rajca  <mrajca@apple.com>

        Media Session: Add support for 'Content' interruption types
        https://bugs.webkit.org/show_bug.cgi?id=147042

        Reviewed by Eric Carlson.

        Tests: Added media/session/content-interruptions

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::handleIndefinitePauseInterruption): Indefinitely pause the session by pausing media
         elements and removing them from the set of active participating elements.
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::didReceiveStartOfInterruptionNotification): Implemented support for 'Content'
         interruption types as described in 4.5.2.

2015-07-16  Matt Rajca  <mrajca@apple.com>

        Media Session: add support for telephony interruptions
        https://bugs.webkit.org/show_bug.cgi?id=147016

        Reviewed by Eric Carlson.

        * platform/audio/mac/MediaSessionInterruptionProviderMac.mm:
        (WebCore::callDidBeginRinging): Forward this event to media sessions as a 'Transient' interruption.
        (WebCore::MediaSessionInterruptionProviderMac::beginListeningForInterruptions):
        (WebCore::MediaSessionInterruptionProviderMac::stopListeningForInterruptions):

2015-07-17  Matt Rajca  <mrajca@apple.com>

        Media Session: add infrastructure for testing interruptions
        https://bugs.webkit.org/show_bug.cgi?id=147060

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.h: Export methods to be used with tests.
        * Modules/mediasession/MediaSessionManager.h: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: JSMediaSession needs to be marked with WEBCORE_EXPORT so it works with JSInternals.
        * testing/Internals.cpp:
        (WebCore::Internals::sendMediaSessionStartOfInterruptionNotification): Let tests send interruptions to MediaSessionManager.
        (WebCore::Internals::sendMediaSessionEndOfInterruptionNotification): Ditto.
        (WebCore::Internals::mediaSessionCurrentState): Expose the current state of media sessions to tests.
        * testing/Internals.h:
        * testing/Internals.idl: Add interfaces for sending interruptions from JS tests.

2015-07-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Reduce PassRefPtr in WebKit2 - 3
        https://bugs.webkit.org/show_bug.cgi?id=146995

        Reviewed by Daniel Bates.

        To remove PassRefPtr, this patch reduces use of PassRefPtr in WebKit2.
        Because some uses depend on WebCore, WebCore, WK1 ports are modified as well.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::createPopupMenu):
        (WebCore::EmptyChromeClient::createSearchPopupMenu):
        (WebCore::EmptyFrameLoaderClient::createDocumentLoader):
        (WebCore::EmptyFrameLoaderClient::createFrame):
        (WebCore::EmptyFrameLoaderClient::createPlugin):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        (WebCore::ResourceLoadScheduler::schedulePluginStreamLoad):
        * loader/ResourceLoadScheduler.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:
        * page/ChromeClient.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::texture):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::texture):
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h:
        * platform/graphics/texmap/TextureMapperTile.h:
        (WebCore::TextureMapperTile::texture):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::texture):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * storage/StorageNamespace.h:

2015-07-18  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r186976): Use piFloat instead of M_PI

        Attempt to fix the following build failure:

            PathUtilities.cpp(183): error C2065: 'M_PI' : undeclared identifier [...\Source\WebCore\WebCore.vcxproj\WebCore.vcxproj]

        * platform/graphics/PathUtilities.cpp:
        (WebCore::walkGraphAndExtractPolygon): Use piFloat since M_PI is
        not defined on Windows.

2015-07-18  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r186976): Windows build broke due to missing definition of M_PI

        Attempt to fix the following build failure:

            PathUtilities.cpp(182): error C2065: 'M_PI' : undeclared identifier [...\Source\WebCore\WebCore.vcxproj\WebCore.vcxproj]

        * platform/graphics/PathUtilities.cpp: Include <wtf/MathExtras.h>.

2015-07-17  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r169105): Do not assign a renderer to multiple selection subtrees.
        https://bugs.webkit.org/show_bug.cgi?id=147038
        rdar://problem/21819351

        Reviewed by David Kilzer.

        A renderer should never be assigned to multiple selection subtrees. (Currently RenderObject maintains the last selection state.)
        RenderView::applySubtreeSelection() loops from the start to the end of the selection to find renderers that are inside the selection.
        However, in case of regions (when multiple selection roots are present) traversing the renderer tree by calling RenderObject::nextInPreOrder() could
        end up going across selection roots.
        This patch ensures that we assign renderers to a specific selection only when the current selection root and the renderer's selection root match.

        Test: fast/regions/crash-when-renderer-is-in-multiple-selection-subtrees2.html

        * rendering/RenderView.cpp:
        (WebCore::SelectionIterator::SelectionIterator):
        (WebCore::SelectionIterator::current):
        (WebCore::SelectionIterator::checkForSpanner):
        (WebCore::RenderView::applySubtreeSelection):

2015-07-17  Andy Estes  <aestes@apple.com>

        [iOS] Further tighten the sandbox around pages fetched with Content-Disposition: attachment
        https://bugs.webkit.org/show_bug.cgi?id=147044
        rdar://problem/21567820

        Reviewed by Brady Eidson.

        In addition to placing resources fetched with 'Content-Disposition: attachment' in a unique origin,
        this change does the following:

        - Switches the sandbox type from SandboxOrigin to SandboxAll, which enforces the same restrictions as <iframe sandbox>.
        - Disables processing of <meta http-equiv> elements.
        - Disables loading of cross-origin subframes.

        Tests: http/tests/contentdispositionattachmentsandbox/cross-origin-frames-disabled.html
               http/tests/contentdispositionattachmentsandbox/form-submission-disabled.html
               http/tests/contentdispositionattachmentsandbox/http-equiv-disabled.html
               http/tests/contentdispositionattachmentsandbox/plugins-disabled.html
               http/tests/contentdispositionattachmentsandbox/scripts-disabled.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Switched to calling Document::httpEquivPolicy(). Logged an error to the console for policies other than Enabled.
        (WebCore::Document::initSecurityContext): Switched sandbox enforcement from SandboxOrigin to SandboxAll.
        (WebCore::Document::httpEquivPolicy): Returned a HttpEquivPolicy based on shouldEnforceContentDispositionAttachmentSandbox() and Settings::httpEquivEnabled().
        (WebCore::Document::shouldEnforceContentDispositionAttachmentSandbox): Returned true if Settings::contentDispositionAttachmentSandboxEnabled()
        and the document was fetched as an attachment.
        * dom/Document.h:
        * loader/cache/CachedResourceLoader.cpp: 
        (WebCore::CachedResourceLoader::canRequest): When requesting a subframe main resource when the parent frame enforces an attachment sandbox,
        only continue if the parent frame's SecurityOrigin allows the request.
        * page/Settings.in: Added contentDispositionAttachmentSandboxEnabled with an initial value of false.

2015-07-17  Zalan Bujtas  <zalan@apple.com>

        (display: block)input range's thumb disappears when moved.
        https://bugs.webkit.org/show_bug.cgi?id=146896
        <rdar://problem/21787807>

        Reviewed by Simon Fraser.

        Since the thumb is positioned after the layout for the input (shadow) subtree is finished, the repaint rects
        issued during the layout will not cover the re-positioned thumb.
        We need to issue a repaint soon after the thumb is re-positioned.

        Test: fast/repaint/block-inputrange-repaint.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout):

2015-07-17  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the build.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless):
        * html/HTMLMediaElement.h:

2015-07-17  Dean Jackson  <dino@apple.com>

        Picture in Picture interacts poorly with AirPlay/HDMI
        https://bugs.webkit.org/show_bug.cgi?id=147061
        <rdar://problem/19192076>

        Reviewed by Tim Horton.

        When we are actively playing to an external target, the
        picture in picture button should be hidden.

        Also, the availability of picture in picture is also
        dependent on AirPlay, so that we don't auto-pip when
        we're displaying on a TV.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.configureInlineControls): Call the update function.
        (ControllerIOS.prototype.updatePictureInPictureButton): Add or remove a hidden class.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::allowsPictureInPicture): Check Airplay status.

2015-07-17  Tim Horton  <timothy_horton@apple.com>

        [iOS] TextIndicator has a large forehead when line-height > 1
        https://bugs.webkit.org/show_bug.cgi?id=147058
        <rdar://problem/21643094>

        Reviewed by Dean Jackson.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        * editing/FrameSelection.h:
        Add a parameter controlling whether getClippedVisibleTextRectangles
        returns selection-height rects (including extra line-height) or text-height
        rects (including only the text height). Plumb it down.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        (WebCore::TextIndicator::createWithSelectionInFrame):
        Use the tighter text-height rects on iOS, where there's no selection highlight to cover up.
        Remove an assertion that is no longer always true, and which is mostly obsoleted by the
        fact that we don't let FrameSnapshotting code arbitrarily decide the rect to snapshot anymore.

2015-07-17  Tim Horton  <timothy_horton@apple.com>

        Improve rect shrink-wrapping algorithm
        https://bugs.webkit.org/show_bug.cgi?id=147037
        <rdar://problem/21643094>

        Reviewed by Simon Fraser.

        * platform/graphics/FloatPoint.h:
        (WebCore::areEssentiallyEqual):
        Added; implementation is the same as FloatSize's.

        * platform/graphics/PathUtilities.cpp:
        (WebCore::FloatPointGraph::FloatPointGraph):
        (WebCore::FloatPointGraph::~FloatPointGraph):
        (WebCore::FloatPointGraph::Node::Node):
        (WebCore::FloatPointGraph::Node::nextPoints):
        (WebCore::FloatPointGraph::Node::addNextPoint):
        (WebCore::FloatPointGraph::Node::isVisited):
        (WebCore::FloatPointGraph::Node::visit):
        (WebCore::FloatPointGraph::Node::reset):
        (WebCore::FloatPointGraph::reset):
        (WebCore::FloatPointGraph::findOrCreateNode):
        (WebCore::findLineSegmentIntersection):
        (WebCore::addIntersectionPoints):
        (WebCore::walkGraphAndExtractPolygon):
        (WebCore::findUnvisitedPolygonStartPoint):
        (WebCore::unitePolygons):
        (WebCore::edgesForRect):
        (WebCore::PathUtilities::pathWithShrinkWrappedRects):
        (WebCore::addShrinkWrapRightCorner): Deleted.
        (WebCore::addShrinkWrapLeftCorner): Deleted.
        (WebCore::addShrinkWrappedPathForRects): Deleted.
        (WebCore::rectsIntersectOrTouch): Deleted.
        (WebCore::findSetContainingRect): Deleted.
        Add a new implementation of shrink-wrap, which is significantly more
        generic than the old one, which assumed a top-down progression of rects.

        This version uses polygon intersection to find the path around the
        set of rects, and then follows said path and adds appropriately-sized
        arcs for the corners.

        The polygon intersection algorithm first finds all the intersection points
        between all of the rects, then builds a graph of edges outward from one point.
        It then traverses the graph, choosing at each point the next edge which
        has not been visited and has the greatest interior angle, recording the polygon as it goes.

        If at the end of the traversal we have not returned to the initial node,
        we give up on shrink-wrapping and just use a bounding box around the rects.

        If any of the original rects have not been visited at all, we repeat the traversal
        starting with that rect, making an additional polygon (since we removed completely contained
        rects before we started, having not visited the rect at all means that it's not connected
        to the others).

        Once we have a set of united polygons, we follow each one, determining the ideal (always
        equal in width and height, never more than half the length of either edge, so that we always
        have a smooth curve) arc radius and projecting it onto the edge, and then
        adding an arc between the end of the previous path and beginning of the next.

        Because the shrink-wrap algorithm is fairly expensive, if there are more than 20 rects,
        we fall back to a bounding box. Given the current use cases, this is more than enough
        rects, but can certainly be adjusted in the future if needed.

        * testing/Internals.cpp:
        (WebCore::Internals::pathWithShrinkWrappedRects):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a radius parameter.

2015-07-17  Nan Wang  <n_wang@apple.com>

        AX: iframe within table cell is inaccessible to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=147001
        <rdar://problem/21106945>

        Reviewed by Chris Fleizach.

        When a table cell is created before its parent table determines if it should be ignored or not,
        the table cell may cache the wrong role. Fix that by allowing each table cell to update its role
        after the table makes this determination.

        Test: accessibility/iframe-within-cell.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addChildrenFromSection):

2015-07-17  Myles C. Maxfield  <mmaxfield@apple.com>

        style.fontFamily accessor crashes on unstyled node created from DOMParser().parseFromString()
        https://bugs.webkit.org/show_bug.cgi?id=147026
        <rdar://problem/21864487>

        Reviewed by Andreas Kling.

        Font CSS properties are a little special because they are used as indices into caches.
        Normally, StyleResolver gives all nodes a default font family, so our cache works correctly.
        However, if the document doesn't have a Settings object, StyleResolver wasn't doing this.
        Documents created from DOMParser().parseFromString() don't have a Settings object.

        Test: fast/text/crash-font-family-parsed.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::initializeFontStyle): Set a font family even if we don't have a
        Settings object.

2015-07-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Video posters disappear once media has loaded
        https://bugs.webkit.org/show_bug.cgi?id=147045

        Reviewed by Simon Fraser.

        After r184932, all video elements are composited. However, there is logic in
        RenderLayerBacking::updateConfiguration() which adds the video layer to the page
        if the video is composited, without checking first to see if it should actually
        do so.

        Test: compositing/video/poster.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):

2015-07-17  Benjamin Poulain  <bpoulain@apple.com>

        [Content Extensions] Term::isUniversalTransition() incorrectly expects the end-of-line assertion in character sets
        https://bugs.webkit.org/show_bug.cgi?id=147032

        Reviewed by Alex Christensen.

        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        The universal transition is not supposed to account for the end-of-line assertion,
        it should be a transition matching any character.

        Here, we were counting 128 transitions, the 127 characters plus the
        transition on zero we are using for EOL.

        The end result is Term::isUniversalTransition() was completely useless.
        The only code using it is the pattern simplificaton phase. That part
        was not working correclty and was allowing useless ".*" in the patterns.

2015-07-17  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/21803781> The external URL policy is not reported correctly in navigation actions that create new windows
        https://bugs.webkit.org/show_bug.cgi?id=147040

        Reviewed by Dean Jackson.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/ShouldOpenExternalURLsInNewWindowActions.mm

        * loader/FrameLoader.cpp:
        (WebCore::shouldOpenExternalURLsPolicyToApply): Pulled the logic out of
        applyShouldOpenExternalURLsPolicyToNewDocumentLoader into this new helper.
        (WebCore::FrameLoader::loadURL): When targeting a new frame, apply the external URLs policy
        to the action passed to checkNewWindowPolicy.
        (WebCore::FrameLoader::applyShouldOpenExternalURLsPolicyToNewDocumentLoader): Call the new
        helper function.
        (WebCore::createWindow): Include the external URL policy in the action passed to
        createWindow.

2015-07-17  Anders Carlsson  <andersca@apple.com>

        ScrollView.h should be self-contained
        https://bugs.webkit.org/show_bug.cgi?id=147004

        Reviewed by Sam Weinig.

        * platform/ScrollView.h:

2015-07-17  Brady Eidson  <beidson@apple.com>

        Rolling r186895 back in, in its entirety.
        https://bugs.webkit.org/show_bug.cgi?id=146976

        Rubberstamped by Tim Horton.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::createCookies): Use new CFNetwork SPI.

2015-07-17  Benjamin Poulain  <bpoulain@apple.com>

        [Content Extensions] CSS-display-none rules are not working properly
        https://bugs.webkit.org/show_bug.cgi?id=147024

        Reviewed by Sam Weinig.

        There were 2 bugs prevening rules with css-display-none and a url-filter from working
        correctly.

        First, ContentExtensions::serializeActions() was merging selectors regardless of their
        trigger. All the CSS Selectors would be grouped together and applied regardless of which
        rule apply.

        That problem was fixed by grouping CSS rules by trigger. We want all the undistinguishable
        CSS rules to be merged. The trigger makes 2 rules dinstinguishable as one rule can apply
        on a page while the next rule does not. The simplest approach is to group by trigger.

        The second problem had to do with rules added before the document is created.
        When accumulating those rules, we were only keeping the last one. The reason was that
        DocumentLoader::addPendingContentExtensionDisplayNoneSelector() would only keep a single
        selector list by extension.

        This is fixed by keeping a vector of all the rules that apply.

        Tests: http/tests/contentextensions/css-display-none-with-different-case-sensitivity-are-not-merged.html
               http/tests/contentextensions/css-display-none-with-different-triggers-are-not-merged.html
               http/tests/contentextensions/two-distinguishable-css-display-none-rules-on-main-resource.html

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::isEmpty):
        (WebCore::ContentExtensions::TriggerHash::hash):
        (WebCore::ContentExtensions::TriggerHash::equal):
        (WebCore::ContentExtensions::TriggerHashTraits::constructDeletedValue):
        (WebCore::ContentExtensions::TriggerHashTraits::isDeletedValue):
        (WebCore::ContentExtensions::TriggerHashTraits::emptyValue):
        (WebCore::ContentExtensions::TriggerHashTraits::isEmptyValue):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad): Deleted.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::addPendingContentExtensionDisplayNoneSelector):
        * loader/DocumentLoader.h:

2015-07-17  Tim Horton  <timothy_horton@apple.com>

        iOS TextIndicators include text that is not supposed to be indicated
        https://bugs.webkit.org/show_bug.cgi?id=147028
        <rdar://problem/21643094>

        Reviewed by Sam Weinig.

        Paint the selection and background, but not other foregrounds, for iOS TextIndicators.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect):
        * page/FrameSnapshotting.h:
        Add a new snapshot option where we'll paint backgrounds and the selected
        foreground and nothing else.
        Pass the new snapshot option through as a paint behavior.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        Implement the incantations necessary to make a temporary selection
        change not get sent to the UI process and actually have WebCore know about it
        and accurately respond to questions about it.

        (WebCore::TextIndicator::createWithSelectionInFrame):
        Paint selection and backgrounds on iOS.

        * rendering/PaintPhase.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor):
        Add a new paint behavior, SelectionAndBackgroundsOnly, which behaves
        the same as selection only except it allows backgrounds to paint.

2015-07-17  Mark Lam  <mark.lam@apple.com>

        Remove leak of objects between isolated worlds on custom events, message events, and pop state events.
        https://bugs.webkit.org/show_bug.cgi?id=118884

        Reviewed by Filip Pizlo and Mark Lam.
        Patch by Keith Miller  <keith_miller@apple.com>.

        Tests: fast/events/event-leak-objects.html
               fast/events/event-properties-gc.html

        Fixes an issue where objects passed as certain properties of events could cross isolated worlds. This
        was fixed by checking that any object passed by an event must be serializable or originate from the same
        isolated world as the one it is currently being accessed in. In the case of MessageEvents and PopStateEvents we
        cache the values of the data and state properties, respectively, as they may be a deserialized object. In case
        an object was deserialized in a world with elevated privileges we also check the cached value is from the same
        world, if it is from a different world we recompute it. For testing purposes, I added a new function to Internals
        that determines whether a JSObject originated in the current world.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::worldForDOMObject):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomEventCustom.cpp: Copied from Source/WebCore/dom/CustomEvent.cpp.
        (WebCore::JSCustomEvent::detail):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore::CustomEvent::trySerializeDetail):
        * dom/CustomEvent.h:
        * dom/CustomEvent.idl:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::trySerializeData):
        * dom/MessageEvent.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::trySerializeState):
        * dom/PopStateEvent.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isFromCurrentWorld):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cleanup PasteboardHelper
        https://bugs.webkit.org/show_bug.cgi?id=147035

        Reviewed by Žan Doberšek.

        It's actually a singleton, but the API suggests you can create
        your own or use the default one, but the default one should be the
        only one. Rename PasteboardHelper::defaultPasteboardHelper() as
        PasteboardHelper::singleton() and make it non-copyable and never
        destroyed.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePlainText): Use PasteboardHelper::singleton().
        (WebCore::Pasteboard::write): Ditto.
        (WebCore::Pasteboard::writePasteboard): Ditto.
        (WebCore::Pasteboard::clear): Ditto.
        (WebCore::Pasteboard::canSmartReplace): Ditto.
        (WebCore::Pasteboard::read): Ditto.
        (WebCore::Pasteboard::hasData): Ditto.
        (WebCore::Pasteboard::types): Ditto.
        (WebCore::Pasteboard::readString): Ditto.
        (WebCore::Pasteboard::readFilenames): Ditto.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::singleton): Renamed as singleton, also
        use NeverDestroyed and return a reference instead of a pointer.
        (WebCore::PasteboardHelper::PasteboardHelper): Do all
        initializations here and remove the initialization static flag,
        since this is a real singleton now. Also use
        gdk_atom_intern_static_string() to initialize the atoms instead of
        gdk_atom_intern().
        (WebCore::PasteboardHelper::targetList):
        (WebCore::PasteboardHelper::targetListForDataObject):
        (WebCore::getClipboardContentsCallback):
        * platform/gtk/PasteboardHelper.h:

2015-07-16  Matt Rajca  <mrajca@apple.com>

        Media Session: handle 'Transient' and 'Transient Solo' interruption events
        https://bugs.webkit.org/show_bug.cgi?id=146840

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::handleDuckInterruption): Added stub.
        (WebCore::MediaSession::handleUnduckInterruption): Added stub.
        (WebCore::MediaSession::handlePauseInterruption): Pause active media elements. We use our helper method to do this
          "safely" since pausing a media element can change the collection we're iterating.
        (WebCore::MediaSession::handleUnpauseInterruption): Unpause active media elements. We use our helper method to do this
          "safely" since unpausing a media element can change the collection we're iterating.
        (WebCore::MediaSession::togglePlayback): Factored out "safe" iteration into a helper method elsewhere.
        (WebCore::MediaSession::safelyIterateActiveMediaElements): Safely iterate through the collection of active media
          elements.
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): On Mac, register for platform-specific interruptions.
        (WebCore::MediaSessionManager::didReceiveStartOfInterruptionNotification): Implemented section 4.5.2 of Media Session spec.
        (WebCore::MediaSessionManager::didReceiveEndOfInterruptionNotification): Ditto.
        * Modules/mediasession/MediaSessionManager.h:

2015-07-16  Matt Rajca  <mrajca@apple.com>

        Media Session: add support for platform-specific interruption providers
        https://bugs.webkit.org/show_bug.cgi?id=147008

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj: Include new source files.
        * platform/mediasession/MediaSessionInterruptionProvider.cpp: Added base class to be used by MediaSessionManager
          to listen for interruption notifications.
        (WebCore::MediaSessionInterruptionProvider::MediaSessionInterruptionProvider): Begin listening for interruptions
          upon construction.
        (WebCore::MediaSessionInterruptionProvider::~MediaSessionInterruptionProvider): Stop listening for interruptions
          before destruction.
        (WebCore::MediaSessionInterruptionProvider::beginListeningForInterruptions): To be overridden by subclasses.
        (WebCore::MediaSessionInterruptionProvider::stopListeningForInterruptions): To be overridden by subclasses.
        * platform/mediasession/MediaSessionInterruptionProvider.h: Added.
        (WebCore::MediaSessionInterruptionProviderClient::~MediaSessionInterruptionProviderClient):
        (WebCore::MediaSessionInterruptionProvider::client):
        * platform/mediasession/mac/MediaSessionInterruptionProviderMac.h: Added for providing Mac-specific interruptions.
        (WebCore::MediaSessionInterruptionProviderMac::~MediaSessionInterruptionProviderMac):
        * platform/mediasession/mac/MediaSessionInterruptionProviderMac.mm: Added stubs.
        (WebCore::MediaSessionInterruptionProviderMac::beginListeningForInterruptions):
        (WebCore::MediaSessionInterruptionProviderMac::stopListeningForInterruptions):

2015-07-16  Tim Horton  <timothy_horton@apple.com>

        Add shrink-wrapped link highlights
        https://bugs.webkit.org/show_bug.cgi?id=147021
        <rdar://problem/21643094>

        Reviewed by Enrica Casucci.

        * WebCore.xcodeproj/project.pbxproj:
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        (WebCore::TextIndicator::createWithSelectionInFrame):
        * page/TextIndicator.h:
        Add a margin parameter to TextIndicator; this inflates each text rect
        by the given amount.

        Use snapshotFrameRect instead of snapshotSelection because we really
        want an image that exactly fits textBoundingRectInDocumentCoordinates,
        and snapshotSelection comes up with selection rects in different ways,
        especially on iOS (where it comes up with nothing!).

        For now, avoid forcing black text or painting only the selection on iOS.
        Eventually, we should have TextIndicator options for these things that
        are then respected at the presentation layer.

2015-07-16  Matt Rajca  <mrajca@apple.com>

        Media Session: remove plumbing for delivering start/end-of-interruption events
        https://bugs.webkit.org/show_bug.cgi?id=147005

        Reviewed by Eric Carlson.

        Instead of receiving interruptions through WebKit, we will provide platform-specific implementations in WebCore
        so the same behavior is available to all clients.

        * Modules/mediasession/MediaSessionEvents.h:
        * page/Page.cpp:
        * page/Page.h:

2015-07-16  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Cache domain actions
        https://bugs.webkit.org/show_bug.cgi?id=146817

        Reviewed by Benjamin Poulain.

        Right now we run regular expressions on the domain every time we have any rules that match with if-domain or unless-domain.  
        This caches the results of running regular expressions on the domain of the main document's url so we only need to 
        run those regular expressions when the main document changes domain.  We also spend less time adding unused actions into HashSets.

        All behavior is covered by existing api tests, but I added some to explicitly test if-domain and unless-domain with multiple load types.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):
        (WebCore::ContentExtensions::ContentExtension::cachedDomainActions):
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::identifier):
        (WebCore::ContentExtensions::ContentExtension::compiledExtension):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getJumpDistance):
        (WebCore::ContentExtensions::matchesDomain):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsForDefaultStylesheetFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretWithDomains):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:

2015-07-16  Simon Fraser  <simon.fraser@apple.com>

        Fix disappearing position:fixed elements in fixed layout mode
        https://bugs.webkit.org/show_bug.cgi?id=147019

        Reviewed by Tim Horton.

        Test: compositing/fixed-with-fixed-layout.html
        
        When in fixed layout mode, and being scaled down, viewportConstrainedVisibleContentRect() is
        the wrong thing to use to determine if position:fixed elements are clipped out. In this case,
        use the simpler document bounds (before scaling).
        
        In the long term,  there needs to be an equivalent of viewportConstrainedVisibleContentRect()
        that gives an appropriate rect that can be used here.

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

2015-07-16  Benjamin Poulain  <bpoulain@apple.com>

        [Content extensions] Combine suffixes when generating NFAs
        https://bugs.webkit.org/show_bug.cgi?id=146961

        Reviewed by Alex Christensen.

        In this patch, I add a mechanism very similar to the prefix tree
        but for the suffix (called a reverse suffix tree here).

        The idea is here is to reuse the existing NFA nodes when generating
        a chain of suffix Term that were already generated previously.
        When generating a disjunction ending with the same suffix, we now
        have the same trailing NFA nodes for both sides of the disjunction.

        Mixing the prefix and suffix generation can be tricky, we do not want
        transitions from a pattern to creep into the suffix of an other.

        To avoid any conflict, the rules here are very simple:
        -Only use the reverse suffix tree for terms without actions
         up to a leaf term with actions.

         This rule ensure that no action will accidentally make its way
         to an other rule by resuing a vertex of the reverse suffix tree.

        -Only use the reverse suffix tree for chains of terms in which
         each term only has zero or one following term.

         With this condition, when taking any vertex of the reverse suffix
         tree, there is only one edge that move out of that vertex when reading
         from left to right.
         For any vertex, there is only one possible string generated
         left-to-right, a single suffix.

        This is overly restrictive but it is fast, easier to verify, and it works
        well in practice.
        For all the more complicated cases, we can count on the Minimizer to
        find a better solution.


        With all the simple suffixes merged, our NFAs are smaller, which
        let us combine more patterns.
        The DFAs are also smaller and faster to produce since their size
        is relative to the NFA sizes.

        Overall, I get the following gains:
        -Chris's test case:
            compile time -40%.
            bytecode size -14%.
        -Armand's test case:
            compile time -53%.
            bytecode size -13%.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::ActiveSubtree::ActiveSubtree):
        (WebCore::ContentExtensions::generateInfixUnsuitableForReverseSuffixTree):
        (WebCore::ContentExtensions::generateSuffixWithReverseSuffixTree):
        (WebCore::ContentExtensions::clearReverseSuffixTree):
        (WebCore::ContentExtensions::generateNFAForSubtree):
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        Forgot to close a tag, dot was not happy.

        * contentextensions/HashableActionList.h: Added.
        (WebCore::ContentExtensions::HashableActionList::HashableActionList):
        (WebCore::ContentExtensions::HashableActionList::isEmptyValue):
        (WebCore::ContentExtensions::HashableActionList::isDeletedValue):
        (WebCore::ContentExtensions::HashableActionList::operator==):
        (WebCore::ContentExtensions::HashableActionList::operator!=):
        (WebCore::ContentExtensions::HashableActionListHash::hash):
        (WebCore::ContentExtensions::HashableActionListHash::equal):
        We need a way to group reverse suffix tree by their terminal actions.
        This new hash structure lets us find unique vertex for a list of actions
        in any order.

        * contentextensions/ImmutableNFANodeBuilder.h:
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::isValid):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::nodeId):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::addTransition):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::addEpsilonTransition):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::ImmutableNFANodeBuilder): Deleted.
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::~ImmutableNFANodeBuilder): Deleted.
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::operator=): Deleted.
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::generateGraph):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        Node building changes a bit.

        Previously, it was assumed nodes are always built from left to right.
        Getting the node on the right was done by providing the left node and the term
        doing the transition.

        Now we have both left to right and right to left generation.

        The right-to-left has a specific property: no edge can be added after
        it's initial term (rule 2 of our reverse suffix tree). This simplifies
        things a bit since we can finalize all the nodes in the suffix tree.
        All we need is to keep their ID to be able to link new nodes
        to the reverse suffix tree.

2015-07-16  Brady Eidson  <beidson@apple.com>

        Rolling out part of r186895 until rdar://problem/21861167 is resolved.
        https://bugs.webkit.org/show_bug.cgi?id=146976

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::createCookies): Don’t use this new SPI quite yet.

2015-07-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/186903. It broke the build.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::currentWorld):
        (WebCore::worldForDOMObject): Deleted.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomEventCustom.cpp:
        (WebCore::JSCustomEvent::detail): Deleted.
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore::CustomEvent::eventInterface):
        (WebCore::CustomEvent::trySerializeDetail): Deleted.
        * dom/CustomEvent.h:
        * dom/CustomEvent.idl:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::data):
        (WebCore::MessageEvent::trySerializeData): Deleted.
        * dom/MessageEvent.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::create):
        (WebCore::PopStateEvent::eventInterface):
        (WebCore::PopStateEvent::trySerializeState): Deleted.
        * dom/PopStateEvent.h:
        * testing/Internals.cpp:
        (WebCore::Internals::deserializeBuffer):
        (WebCore::Internals::setUsesOverlayScrollbars):
        (WebCore::Internals::isFromCurrentWorld): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-16  Keith Miller  <keith_miller@apple.com>

        Remove leak of objects between isolated worlds on custom events, message events, and pop state events.
        https://bugs.webkit.org/show_bug.cgi?id=118884

        Reviewed by Filip Pizlo.

        Tests: fast/events/event-leak-objects.html
               fast/events/event-properties-gc.html

        Fixes an issue where objects passed as certain properties of events could cross isolated worlds. This
        was fixed by checking that any object passed by an event must be serializable or originate from the same
        isolated world as the one it is currently being accessed in. In the case of MessageEvents and PopStateEvents we
        cache the values of the data and state properties, respectively, as they may be a deserialized object. In case
        an object was deserialized in a world with elevated privileges we also check the cached value is from the same
        world, if it is from a different world we recompute it. For testing purposes, I added a new function to Internals
        that determines whether a JSObject originated in the current world.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::worldForDOMObject):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCustomEventCustom.cpp: Copied from Source/WebCore/dom/CustomEvent.cpp.
        (WebCore::JSCustomEvent::detail):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore::CustomEvent::trySerializeDetail):
        * dom/CustomEvent.h:
        * dom/CustomEvent.idl:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::trySerializeData):
        * dom/MessageEvent.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::trySerializeState):
        * dom/PopStateEvent.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isFromCurrentWorld):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-07-16  Brady Eidson  <beidson@apple.com>

        WebKit document.cookie mis-parsing.
        rdar://problem/21715050 and https://bugs.webkit.org/show_bug.cgi?id=146976

        Reviewed by Sam Weinig.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::createCookies): Use new SPI if available.
        (WebCore::setCookiesFromDOM):
        * platform/spi/cf/CFNetworkSPI.h:

2015-07-15  Anders Carlsson  <andersca@apple.com>

        Headers that use WEBCORE_EXPORT should include PlatformExportMacros.h
        https://bugs.webkit.org/show_bug.cgi?id=146984

        Reviewed by Daniel Bates.

        * contentextensions/DFA.h:
        * dom/ContextDestructionObserver.h:
        * dom/DeviceOrientationData.h:
        * dom/ExceptionCodePlaceholder.h:
        * editing/cocoa/HTMLConverter.h:
        * html/track/AudioTrack.h:
        * loader/FrameLoaderStateMachine.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/cache/CachedResourceHandle.h:
        * platform/URL.h:
        * platform/animation/Animation.h:
        * platform/audio/AudioHardwareListener.h:
        * platform/audio/AudioSession.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/network/Credential.h:
        * platform/network/CredentialBase.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/mac/AuthenticationMac.h:

2015-07-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: update $$() to return an Array
        https://bugs.webkit.org/show_bug.cgi?id=146964

        Reviewed by Brian Burg.

        Test: inspector/console/command-line-api.html

        * inspector/CommandLineAPIModuleSource.js:
        Update $$(...) to return an array.
        Also InjectedScriptHost.type was renamed to subtype
        a while ago.

2015-07-15  Tim Horton  <timothy_horton@apple.com>

        Move indicator rect uniting code to TextIndicatorWindow instead of TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=146992
        <rdar://problem/21643094>

        Reviewed by Daniel Bates.

        Having to unite all the rects if any overlap is an implementation
        detail of the Mac TextIndicatorWindow presentation, not a fundamental
        property of TextIndicator.

        Other TextIndicator presentations might be able to handle overlapping
        rects more effectively, so we shouldn't lose information unless we need to.

        This also avoids having a second copy of some constants!

        * page/TextIndicator.cpp:
        (WebCore::outsetIndicatorRectIncludingShadow): Deleted.
        (WebCore::textIndicatorsForTextRectsOverlap): Deleted.
        (WebCore::TextIndicator::TextIndicator): Deleted.
        * page/mac/TextIndicatorWindow.mm:
        (outsetIndicatorRectIncludingShadow):
        (textIndicatorsForTextRectsOverlap):
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):

2015-07-15  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Remove setContentsScale from TiledBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=146921

        Reviewed by Gyuyoung Kim.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setContentsScale): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2015-07-15  Sam Weinig  <sam@webkit.org>

        Color match plug-ins
        <rdar://problem/21758722>
        https://bugs.webkit.org/show_bug.cgi?id=146987

        Reviewed by Dean Jackson.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add colorMatchUntaggedContent property.

2015-07-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Another build fix after r186858.

        * html/canvas/DOMPath.h: Don't use WEBCORE_EXPORT on the
        overall class and the destructor declaration.

2015-07-15  Dean Jackson  <dino@apple.com>

        Tag WebGL layers with sRGB colorspace
        https://bugs.webkit.org/show_bug.cgi?id=146986
        <rdar://problem/21758704>

        Fix the build on older El Capitan releases.

        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):
        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-07-15  Dean Jackson  <dino@apple.com>

        Tag WebGL layers with sRGB colorspace
        https://bugs.webkit.org/show_bug.cgi?id=146986
        <rdar://problem/21758704>

        Reviewed by Simon Fraser.

        Label a CAOpenGLLayer as using the sRGB colorspace,
        like the rest of our page content.

        Test: fast/canvas/webgl/match-page-color-space.html

        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): Set the colorspace property on the layer.
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]):
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):

2015-07-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r186858.

        Add missing DOMPath and PathUtilities files to project.

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

2015-07-15  Anders Carlsson  <andersca@apple.com>

        Headers that look for NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES should import NSGeometry.h
        https://bugs.webkit.org/show_bug.cgi?id=146982

        Reviewed by Tim Horton.

        * platform/graphics/FloatPoint.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntSize.h:

2015-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Scroll snapping to elements is broken for main frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=146957

        Reviewed by Brent Fulgham.

        Fixes the case of elements with scroll snap coordinates in a scroll snapping mainframe by changing
        RenderBox::findEnclosingScrollableContainer to return the body's RenderBox when all enclosing elements
        are not overflow scrollable but the mainframe can scroll.

        Test: css3/scroll-snap/scroll-snap-coordinate-mainframe.html

        * page/FrameView.h: Export isScrollable so that the Internals API can use it.
        * rendering/RenderBox.cpp: Include MainFrame.h.
        (WebCore::RenderBox::findEnclosingScrollableContainer): Changed to return the body's RenderBox if
            none of its parent elements are overflow scrolling.
        * testing/Internals.cpp:
        (WebCore::Internals::scrollSnapOffsets): Updated to return snap offsets for the body element,
            allowing us to call window.internals.scrollSnapOffsets(document.body).

2015-07-15  Brady Eidson  <beidson@apple.com>

        WebKit document.cookie mis-parsing.
        rdar://problem/21715050 and https://bugs.webkit.org/show_bug.cgi?id=146976

        Reviewed by Sam Weinig.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM): Use new CFNetwork SPI when available.

2015-07-15  Jinyoung Hur  <hur.ims@navercorp.com>

        [WinCairo] font fallback not working
        https://bugs.webkit.org/show_bug.cgi?id=146595

        Reviewed by Myles C. Maxfield.

        A Win32 API, GetGlyphIndices(), is not used properly, so any glyphs are considered existing in a font and it prevents the font fall back mechanism from working.

        I think a specific font should be newly installed on the test machine to test this case but I have no idea how can it be done.

        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        (WebCore::GlyphPage::fill):

2015-07-15  Tim Horton  <timothy_horton@apple.com>

        Factor rect shrink-wrapping code out of RenderThemeMac for future reuse
        https://bugs.webkit.org/show_bug.cgi?id=146973
        <rdar://problem/21643094>

        Reviewed by Anders Carlsson.

        Test: fast/shrink-wrap/rect-shrink-wrap.html

        * WebCore.xcodeproj/project.pbxproj:
        Add DOMPath.cpp and PathUtilities.{h, cpp}.

        * bindings/js/JSDOMBinding.h:
        (WebCore::NativeValueTraits<double>::nativeValue):
        Make it possible to use sequence<double> in IDL files.

        * bindings/scripts/CodeGeneratorJS.pm:
        Export JSDOMPath for use in Internals.

        * html/canvas/DOMPath.cpp: Added.
        (WebCore::DOMPath::~DOMPath):
        * html/canvas/DOMPath.h:
        Out-of-line the DOMPath destructor so as not to anger the bindings
        integrity checker (otherwise, the address of the DOMPath destructor
        is different in WebCoreTestSupport and WebCore, causing us to fail
        the vtable equality test).

        * platform/graphics/Path.h:
        Forward declare FloatRect instead of including it unnecessarily.
        Export ensurePlatformPath().

        * platform/graphics/PathUtilities.cpp: Added.
        (WebCore::addShrinkWrapRightCorner):
        (WebCore::addShrinkWrapLeftCorner):
        (WebCore::addShrinkWrappedPathForRects):
        These parts are extracted from RenderThemeMac, with two changes:
            + support for arbitrarily-aligned rects
              (the other version assumed they were horizontally center-aligned)
            + support for overlapping rects
              (the other version assumed they touched but did not overlap)

        There are still things missing:
            + support for a fallback when the shape is too hard to shrink-wrap

        And things broken:
            + if the distance between two edges is smaller than the corner radius,
              we'll end up with a sharp edge in the path

        Both of these cases are covered in the layout test and can be improved.

        (WebCore::rectsIntersectOrTouch):
        Rect intersection with <= instead of <.

        (WebCore::contiguousRectGroupsFromRects):
        Given a set of rects, find all of the contiguous regions. We'll
        shrink-wrap each region independently.

        (WebCore::PathUtilities::pathWithShrinkWrappedRects):
        * platform/graphics/PathUtilities.h: Added.
        Add PathUtilities, where the shrink-wrapping code lives.

        * rendering/RenderThemeMac.mm:
        (WebCore::paintAttachmentTitleBackground):
        (WebCore::addAttachmentTitleBackgroundRightCorner): Deleted.
        (WebCore::addAttachmentTitleBackgroundLeftCorner): Deleted.
        Remove shrink-wrapping implementation and make use of the one in PathUtilities.

        * testing/Internals.cpp:
        (WebCore::Internals::pathWithShrinkWrappedRects):
        * testing/Internals.h:
        * testing/Internals.idl:
        Expose pathWithShrinkWrappedRects to tests via Internals.
        It takes a sequence<double> where every four values are the x, y, w, h
        of a rect, and returns a DOMPath which can be used with Canvas.

2015-07-15  Enrica Casucci  <enrica@apple.com>

        [iOS] Should look for RTF and RTFD pasteboard types before plain text.
        https://bugs.webkit.org/show_bug.cgi?id=146971
        rdar://problem/21840845

        Reviewed by Sam Weinig.

        The list of pasteboard types returned by supportedPasteboardTypes
        determines the order in which WebKit looks for data in the pasteboard
        to create a fragment. The incorrect order could make plain text to
        be preferred over rich format.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::supportedPasteboardTypes):

2015-07-15  Anders Carlsson  <andersca@apple.com>

        Private headers that include project headers should also be project headers
        https://bugs.webkit.org/show_bug.cgi?id=146974

        Reviewed by Dan Bernstein.

        Since these headers can't be included by WebKit anyway they shouldn't be installed.

        * WebCore.xcodeproj/project.pbxproj:

2015-07-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay route is not always set automatically
        https://bugs.webkit.org/show_bug.cgi?id=146969

        Reviewed by Jer Noble.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Return early if there are
          no clients. Make the first client in the vector automatically play to the target if there
          is no other match and there is an active route.
        (WebCore::WebMediaSessionManager::watchdogTimerFired): Call picker.invalidatePlaybackTargets,
          not stopMonitoringPlaybackTargets.

        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        (WebCore::MediaPlaybackTargetPicker::invalidatePlaybackTargets): New.
        * platform/graphics/MediaPlaybackTargetPicker.h:

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): Do nothing, AirPlay
          automatically stops monitoring when appropriate and release the picker also releases
          the output context, which drops the route.
        (WebCore::MediaPlaybackTargetPickerMac::invalidatePlaybackTargets): New.

2015-07-15  Anders Carlsson  <andersca@apple.com>

        Remove forwarding headers that no longer point to valid headers
        https://bugs.webkit.org/show_bug.cgi?id=146972

        Reviewed by Tim Horton.

        * ForwardingHeaders/heap/AllocationSpace.h: Removed.
        * ForwardingHeaders/runtime/IntegralTypedArrayBase.h: Removed.
        * ForwardingHeaders/runtime/PrototypeFunction.h: Removed.
        * ForwardingHeaders/runtime/StorageBarrier.h: Removed.
        * ForwardingHeaders/runtime/TypedArrayBase.h: Removed.

2015-07-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        Negative scroll snap repeat values cause web process to hang indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=146953
        <rdar://problem/21823681>

        Reviewed by Simon Fraser.

        Fixed dangerous behavior caused by setting -scroll-snap-points-x or -y to negative or very small
        positive values. In the case of negative or 0 repeats, the web process would hang indefinitely. In
        the case of very small positive values, a massive amount of memory could potentially be allocated
        just to store snap offsets.

        Tests: css3/scroll-snap/scroll-snap-negative-repeat.html
               css3/scroll-snap/scroll-snap-subpixel-repeat.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseNonElementSnapPoints): Changed to consider negative snap repeat values as invalid CSS.
        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateFromStyle): Changed to threshold non-negative snap repeat values to 1px.

2015-07-14  Dean Jackson  <dino@apple.com>

        Placeholder colors should be system grays
        https://bugs.webkit.org/show_bug.cgi?id=146955
        <rdar://problem/21774358>

        Reviewed by Sam Weinig.

        Update the PiP and Airplay placards to use the correct shades
        of gray.

        * Modules/mediacontrols/mediaControlsApple.css: No need to specify the
        font here, nor have rules for Picture in Picture, which isn't available
        on OS X.
        (audio::-webkit-media-controls-time-remaining-display): We should specify
        font style here.
        (video:-webkit-full-screen::-webkit-media-controls-panel): Drive-by cleanup.
        (audio::-webkit-media-controls-wireless-playback-status): Use a gray background
        and system gray for text and artwork.
        (audio::-webkit-media-controls-wireless-playback-status.small): Ditto.
        (audio::-webkit-media-controls-picture-in-picture-button): Deleted (not on OS X).
        (audio::-webkit-media-controls-wireless-playback-text-top): Deleted use of background color.
        (audio::-webkit-media-controls-wireless-playback-text-bottom): Ditto..

        * Modules/mediacontrols/mediaControlsiOS.css: Use a gray background
        and system gray for text and artwork.
        (audio::-webkit-media-controls-wireless-playback-status):
        (audio::-webkit-media-controls-wireless-playback-text-top):
        (audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):

2015-07-14  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Scrollbar is not drawn on MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=143566

        Reviewed by Gyuyoung Kim.

        Implement the ScrollbarThemeEfl to draw the scrollbar on EFL port.

        * PlatformEfl.cmake: Removed the ScrollbarEfl.cpp.

        * platform/Scrollbar.cpp: Removed the !PLATFORM(EFL) guard to use the createNativeScrollbar().

        * platform/efl/DefaultTheme/CMakeLists.txt: Replaced the image files with new ones.

        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar.edc:
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_bg_horizontal.png: Added.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_bg_vertical.png: Added.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_h.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_h.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_knob_v.png: Removed.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_thumb_horizontal.png: Added.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_thumb_vertical.png: Added.
        * platform/efl/DefaultTheme/widget/scrollbar/scrollbar_v.png: Removed.
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::toEdjeGroup):
        (WebCore::RenderThemeEfl::paintThemePart): Added the new function to draw the scrollbar
          using the RenderThemeEfl.

        * platform/efl/RenderThemeEfl.h:
        * platform/efl/ScrollbarEfl.cpp: Removed.
        * platform/efl/ScrollbarEfl.h: Removed.
        * platform/efl/ScrollbarThemeEfl.cpp: Implemented the default functions to draw the
          scrollbar.
        (WebCore::scrollbarMap):
        (WebCore::ScrollbarThemeEfl::~ScrollbarThemeEfl):
        (WebCore::ScrollbarThemeEfl::scrollbarThickness):
        (WebCore::ScrollbarThemeEfl::hasThumb):
        (WebCore::ScrollbarThemeEfl::backButtonRect):
        (WebCore::ScrollbarThemeEfl::forwardButtonRect):
        (WebCore::ScrollbarThemeEfl::trackRect):
        (WebCore::ScrollbarThemeEfl::minimumThumbLength):
        (WebCore::ScrollbarThemeEfl::paintTrackBackground):
        (WebCore::ScrollbarThemeEfl::paintThumb):
        (WebCore::ScrollbarThemeEfl::registerScrollbar):
        (WebCore::ScrollbarThemeEfl::unregisterScrollbar):
        (WebCore::ScrollbarThemeEfl::loadThemeIfNeeded):
        * platform/efl/ScrollbarThemeEfl.h:
        (WebCore::ScrollbarThemeEfl::usesOverlayScrollbars):

2015-07-14  Andreas Kling  <akling@apple.com>

        Don't persist history item tree for subframes across reloads.
        <https://webkit.org/b/146937>
        <rdar://problem/19925709>

        Reviewed by Brady Eidson.

        Throw away the subframe history items when reloading a page. This ensures that we
        don't accumulate outdated frame metadata when subframes change name across page loads.
        Since the history item tree is encoded in the UA session state and gets serialized to
        disk, it's important that we don't let it grow unbounded.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForReload):

2015-07-14  Antti Koivisto  <antti@apple.com>

        REGRESSION (r177876): store.apple.com profile and cart icons are missing
        https://bugs.webkit.org/show_bug.cgi?id=146894

        Reviewed by Myles C. Maxfield.

        If we had several @font-face rules for the same face covering overlapping ranges we
        would only try to get glyphs from the first one. If it didn't have the glyph we wouldn't
        try the other ones.

        Test: fast/css/font-face-multiple-missing-glyphs.html

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant):

            Get GlyphData with one call.

        * platform/graphics/FontRanges.cpp:
        (WebCore::FontRanges::~FontRanges):
        (WebCore::FontRanges::glyphDataForCharacter):

            Check that we actually have a glyph in the font for the character before returning it.

        (WebCore::FontRanges::fontForCharacter):
        (WebCore::FontRanges::fontForFirstRange):
        * platform/graphics/FontRanges.h:
        (WebCore::FontRanges::size):
        (WebCore::FontRanges::rangeAt):

2015-07-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Fix the 32 bit build after r186817
        https://bugs.webkit.org/show_bug.cgi?id=146947

        Changed CGRect to NSRect.

        Reviewed by Simon Fraser.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintButton):

2015-07-14  Anders Carlsson  <andersca@apple.com>

        Remove wkPopupMenu from WebCoreSystemInterface; it's not called from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=146945

        Reviewed by Tim Horton.

        * platform/mac/WebCoreSystemInterface.h:

2015-07-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        Input buttons rendered at the wrong size when pinching-to-zoom
        https://bugs.webkit.org/show_bug.cgi?id=146916

        Reviewed by Dean Jackson.

        Scales buttons and their focus rects up when pinching to zoom by painting to an offscreen ImageBuffer which is
        then scaled and painted onto the display.

        * platform/Theme.h: Modified signature of Theme::paint.
        (WebCore::Theme::paint): Added plumbing necessary to send the device and page scale factors to paintButton.
        * platform/mac/ThemeMac.h: Modified signature of paintButton.
        * platform/mac/ThemeMac.mm: Added ImageBuffer.h header.
        (WebCore::buttonFocusRectOutlineWidth): Represents the width of the focus rect of a button. Used by paintButton
            to determine the size of the ImageBuffer required to draw a focus rect.
        (WebCore::paintButton): Changed to paint button cells and the focus rect, if applicable, to a temporary ImageBuffer
            before painting the ImageBuffer onto the view. Refactored to receive a deviceScaleFactor and page scale factor,
            used when painting to the ImageBuffer.
        (WebCore::ThemeMac::paint): Added plumbing necessary to send the device and page scale factors to paintButton.
        * rendering/RenderTheme.cpp: Modified signature of RenderTheme::paint.
        (WebCore::RenderTheme::paint): Added plumbing necessary to send the device and page scale factors to paintButton.

2015-07-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r186809.
        https://bugs.webkit.org/show_bug.cgi?id=146943

        Caused about 190 layout test failures. (Requested by mlam_ on
        #webkit).

        Reverted changeset:

        "REGRESSION (r177876): store.apple.com profile and cart icons
        are missing"
        https://bugs.webkit.org/show_bug.cgi?id=146894
        http://trac.webkit.org/changeset/186809

2015-07-14  Antti Koivisto  <antti@apple.com>

        REGRESSION (r177876): store.apple.com profile and cart icons are missing
        https://bugs.webkit.org/show_bug.cgi?id=146894

        Reviewed by Myles C. Maxfield.

        If we had several @font-face rules for the same face covering overlapping ranges we
        would only try to get glyphs from the first one. If it didn't have the glyph we wouldn't
        try the other ones.

        Test: fast/css/font-face-multiple-missing-glyphs.html

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant):

            Get GlyphData with one call.

        * platform/graphics/FontRanges.cpp:
        (WebCore::FontRanges::~FontRanges):
        (WebCore::FontRanges::glyphDataForCharacter):

            Check that we actually have a glyph in the font for the character before returning it.

        (WebCore::FontRanges::fontForCharacter):
        (WebCore::FontRanges::fontForFirstRange):
        * platform/graphics/FontRanges.h:
        (WebCore::FontRanges::size):
        (WebCore::FontRanges::rangeAt):

2015-07-14  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Fix if-domain and unless-domain when loading main documents.
        https://bugs.webkit.org/show_bug.cgi?id=146868

        Reviewed by Benjamin Poulain.

        Tests: http/tests/contentextensions/block-everything-if-domain.html
               http/tests/contentextensions/block-everything-unless-domain-iframe.html
               http/tests/contentextensions/block-everything-unless-domain-redirect.php
               http/tests/contentextensions/block-everything-unless-domain.html

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        If we are loading a new main document, use that main document url as the main document url for domain comparison.

2015-07-05  Sam Weinig  <sam@webkit.org>

        DOM4: prepend, append, before, after & replace
        https://bugs.webkit.org/show_bug.cgi?id=74648

        Reviewed by Darin Adler.

        - Adds support for ChildNode.before/after/replaceWith and ParentNode.prepend/append
          which are new functions in https://dom.spec.whatwg.org
        - Uses custom bindings rather than implementing support for union types in the code
          generator as their uses seems isolated to just this spec at the moment. If more
          uses come along, we should implement proper support for them in the generator and
          remove the custom bindings added here.

        Tests: fast/dom/ChildNode-after.html
               fast/dom/ChildNode-before.html
               fast/dom/ChildNode-replaceWith.html
               fast/dom/ParentNode-append.html
               fast/dom/ParentNode-prepend.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files.

        * bindings/js/JSCharacterDataCustom.cpp: Added.
        (WebCore::JSCharacterData::before):
        (WebCore::JSCharacterData::after):
        (WebCore::JSCharacterData::replaceWith):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::prepend):
        (WebCore::JSDocument::append):
        (WebCore::JSDocument::createTouchList):
        * bindings/js/JSDocumentFragmentCustom.cpp: Added.
        (WebCore::JSDocumentFragment::prepend):
        (WebCore::JSDocumentFragment::append):
        * bindings/js/JSDocumentTypeCustom.cpp: Added.
        (WebCore::JSDocumentType::before):
        (WebCore::JSDocumentType::after):
        (WebCore::JSDocumentType::replaceWith):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        (WebCore::JSElement::before):
        (WebCore::JSElement::after):
        (WebCore::JSElement::replaceWith):
        (WebCore::JSElement::prepend):
        (WebCore::JSElement::append):
        Add custom bindings to implement the use of variadic union types.

        * bindings/js/JSNodeOrString.cpp: Added.
        (WebCore::toNodeOrStringVector):
        * bindings/js/JSNodeOrString.h: Added.
        Adds a help function for converting an JS argument list into a Vector
        of NodeOrString objects.

        * dom/ChildNode.idl:
        Expose before/after/replaceWith to JavaScript.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::append):
        (WebCore::ContainerNode::prepend):
        * dom/ContainerNode.h:
        Add implementations of append and prepend.

        * dom/Node.h:
        * dom/Node.cpp:
        (WebCore::nodeSetPreTransformedFromNodeOrStringVector):
        (WebCore::firstPrecedingSiblingNotInNodeSet):
        (WebCore::firstFollowingSiblingNotInNodeSet):
        Helper functions for before, after and removeWith.

        (WebCore::Node::before):
        (WebCore::Node::after):
        (WebCore::Node::replaceWith):
        Add implementations of before, after and removeWith.

        * dom/NodeOrString.cpp: Added.
        (WebCore::convertNodesOrStringsIntoNode):
        * dom/NodeOrString.h: Added.
        (WebCore::NodeOrString::NodeOrString):
        (WebCore::NodeOrString::~NodeOrString):
        (WebCore::NodeOrString::type):
        (WebCore::NodeOrString::node):
        (WebCore::NodeOrString::string):
        Custom union type representing the (Node or DOMString) IDL type.

        * dom/ParentNode.idl:
        Expose append/prepend to JavaScript.

2015-07-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer): Don't try to build
        the new Legible Output API features if they aren't available in the build
        environment.

2015-07-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update Media Player logic for new Legible Output API
        https://bugs.webkit.org/show_bug.cgi?id=146922
        <rdar://problem/20542574>

        Reviewed by Eric Carlson.

        * AVFoundationSupport.py: Check for updated AVFCF feature.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples): Update to call the
        new 'readNativeSampleBuffer' method.
        (WebCore::InbandTextTrackPrivateAVF::readNativeSampleBuffer): Added. This is a no-op
        on Windows if it has the new AVCF API. Otherwise, it contains the same implementation
        that has always been used in 'processNativeSamples'.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.cpp:
        (WebCore::InbandTextTrackPrivateAVCF::readNativeSampleBuffer): Added. Use the new
        Legible Output API instead of the old CoreMedia solution if it is available.
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        (WebCore::InbandTextTrackPrivateAVCF::mediaSelectionOption):
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.cpp:
        (WebCore::InbandTextTrackPrivateLegacyAVCF::readNativeSampleBuffer): Add a stub implementation.
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createPlayerItem): Use the new Legible Output API if it is available.

2015-07-13  Matt Rajca  <mrajca@apple.com>

        Media Session: add plumbing for delivering start/end-of-interruption events
        https://bugs.webkit.org/show_bug.cgi?id=146837

        Reviewed by Tim Horton.

        * Modules/mediasession/MediaSessionEvents.h: Renamed from MediaEventTypes.h and added new constants for
          interruption events.
        * WebCore.xcodeproj/project.pbxproj: Renamed MediaEventTypes.h.
        * page/Page.h: Added stub.
        * page/Page.cpp: Added stub.

2015-07-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When choosing an initial viewport scale, take overflow on the <body> into account
        https://bugs.webkit.org/show_bug.cgi?id=146918
        rdar://problem/9222837

        Reviewed by Tim Horton.

        Use as input to the viewport scaling algorithm a contents size from the FrameView
        that takes overflow on the viewport renderer into account. This prevents unexpected
        viewports scaling on pages that have content that overflows their expressed contents size,
        but apply overflow to the <body>.

        * page/FrameView.cpp:
        (WebCore::FrameView::contentsSizeRespectingOverflow): Look for overflow:hidden on each axis of
        the m_viewportRenderer, which is computed post-layout by calculateScrollbarModesForLayout()
        and is used for scrollbar logic on OS X. Clip unscaledDocumentRect on each axis, and then
        apply page scale.
        * page/FrameView.h:

2015-07-13  Brent Fulgham  <bfulgham@apple.com>

        Update WebCore Features.json
        https://bugs.webkit.org/show_bug.cgi?id=146914

        Reviewed by Benjamin Poulain.

        * features.json: Update with notes for CSS Scroll Snap Points, Filter Effects,
        backdrop-filters, and initial-letter.

2015-07-13  Matthew Daiter  <mdaiter@apple.com>

        Change MediaPlayer Media Stream method signatures to use references
        https://bugs.webkit.org/show_bug.cgi?id=146839
        <rdar://problem/21769035>

        Reviewed by Darin Adler.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayerPrivate.h: Changed to references
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load): Ditto
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Ditto
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:

2015-07-13  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        GTK] Build race with -DENABLE_WAYLAND_TARGET=ON
        https://bugs.webkit.org/show_bug.cgi?id=146740

        Reviewed by Martin Robinson.

        No new tests, no behavior changes.

        * PlatformGTK.cmake: platform/graphics/wayland sources should be
        included into WebCore source list instead of WebCorePlatformGTK.
        Also move the add_custom_command() block into if(ENABLE_WAYLAND_TARGET),
        this is not strictly needed to fix this bug, but it seems cleaner.

2015-07-13  Matthew Daiter  <mdaiter@apple.com>

        Adding MediaStream Engine building blocks to the code repo
        https://bugs.webkit.org/show_bug.cgi?id=146789
        <rdar://problem/21747025>

        Reviewed by Brent Fulgham.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: Added.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setLoadingProgresssed):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setHasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: Added.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::isAvailable):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareToPlay):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformMedia):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paused):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsScanning):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::naturalSize):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::durationMediaTime):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::seeking):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setPreservesPitch):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::networkState):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::readyState):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::maxMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::minMediaTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::buffered):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::didLoadingProgress):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setSize):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::movieLoadType):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareForRendering):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::engineDescription):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::languageOfPrimaryAudioTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::shouldBePlaying):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::addDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::removeDisplayLayer):
        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/MediaStreamPrivateAVFObjC.mm: Added.
        (WebCore::MediaStreamPrivateAVFObjC::create):
        (WebCore::MediaStreamPrivateAVFObjC::MediaStreamPrivateAVFObjC):
        (WebCore::MediaStreamPrivateAVFObjC::~MediaStreamPrivateAVFObjC):
        (WebCore::MediaStreamPrivateAVFObjC::duration):
        (WebCore::MediaStreamPrivateAVFObjC::buffered):
        (WebCore::MediaStreamPrivateAVFObjC::readyState):
        (WebCore::MediaStreamPrivateAVFObjC::hasAudio):
        (WebCore::MediaStreamPrivateAVFObjC::hasVideo):
        (WebCore::MediaStreamPrivateAVFObjC::naturalSize):
        * platform/mediastream/MediaStreamPrivate.h: 
        (WebCore::MediaStreamPrivate::MediaStreamPrivate): Added constructor.

2015-07-13  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Cancel AirPlay explicitly when exiting from full screen
        https://bugs.webkit.org/show_bug.cgi?id=146902
        <rdar://problem/20923632>

        Reviewed by Brent Fulgham.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::~WebVideoFullscreenInterfaceAVKit): Call setExternalPlayback(false)
          if playing to an external screen.

2015-07-12  Chris Fleizach  <cfleizach@apple.com>

        AX: WEB: VoiceOver for iOS does not read <iframe> elements during linear (swipe) navigation.
        https://bugs.webkit.org/show_bug.cgi?id=146861

        Reviewed by Darin Adler.

        AttachmentViews exist only on WK1 so we need account for both platforms.

        Test: platform/ios-simulator/accessibility/iframe-access.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):

2015-07-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Templating ReadableJSStream
        https://bugs.webkit.org/show_bug.cgi?id=146802

        Reviewed by Darin Adler.

        Introducing ReadableStream::clearValues to clear queued values when cancelling and going into error state.

        Introducing ReadableEnqueuingStream to handle the stream queue, as a class template.
        Specialized ReadableEnqueuingStream for the purpose of ReadableJSStream (storage of JSValue with variable size).

        Updated some static functions to accept a ReadableStream in lieu of the more specialized ReadableJSStream.

        Covered by existing tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToErrored):
        (WebCore::ReadableStream::cancelNoCheck):
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableEnqueuingStream::ReadableEnqueuingStream):
        (WebCore::ReadableEnqueuingStream::enqueueChunk):
        (WebCore::ReadableEnqueuingStream<ChunkType>::read):
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableEnqueuingStream<ReadableJSStreamValue>::read):
        (WebCore::ReadableEnqueuingStream<ReadableJSStreamValue>::enqueueChunk):
        (WebCore::createPullResultFulfilledFunction):
        (WebCore::createCancelResultFulfilledFunction):
        (WebCore::ReadableJSStream::ReadableJSStream):
        (WebCore::ReadableJSStream::enqueue):
        * bindings/js/ReadableJSStream.h:
        (WebCore::ReadableJSStreamValue::create):
        (WebCore::ReadableEnqueuingStream<ReadableJSStreamValue>::desiredSize):
        (WebCore::ReadableEnqueuingStream<ReadableJSStreamValue>::ReadableEnqueuingStream):

2015-07-11  Babak Shafiei  <bshafiei@apple.com>

        Unreviewed build fix.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cancelLoad):

2015-07-11  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Inspector should be able to be docked to the bottom of a narrow window
        https://bugs.webkit.org/show_bug.cgi?id=146871

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendClientLocal.cpp:

2015-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Update default link action sheets for app links
        https://bugs.webkit.org/show_bug.cgi?id=146658
        <rdar://problem/21221902>

        Reviewed by Dan Bernstein.

        * English.lproj/Localizable.strings:
        * platform/spi/ios/LaunchServicesSPI.h:

2015-07-11  Benjamin Poulain  <benjamin@webkit.org>

        Fix CONTENT_EXTENSIONS_STATE_MACHINE_DEBUGGING
        https://bugs.webkit.org/show_bug.cgi?id=146879

        Reviewed by Andreas Kling.

        Some of my recent changes broke CONTENT_EXTENSIONS_STATE_MACHINE_DEBUGGING :(

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::prefixTreeVertexToString):
        (WebCore::ContentExtensions::recursivePrint):
        (WebCore::ContentExtensions::CombinedURLFilters::print):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::debugPrintDot):

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

        [iOS WK2] Scrolling issues on horizontally scrollable RTL pages
        https://bugs.webkit.org/show_bug.cgi?id=146872
        rdar://problem/7569416

        Reviewed by Sam Weinig.

        Horizontally scrollable RTL pages in WebKit2 had a variety of issues: they had
        a gap down the right edge, and unreachable content on the left side, focussing
        form fields scrolled to the wrong location, and programmatic scrolls scrolled
        to the wrong place.
        
        Fix by plumbing the WebCore notion of scrollOrigin through to the UI process,
        and using it in various places. There are three main aspects to the patch:
        
        1. scroll origin is included in RemoteLayerTreeTransaction, and plumbed through
           to -[WKWebView _scrollToContentOffset:] for correct programmatic scrolling,
           including zooming to focussed form elements.
        2. WebPageProxy::computeCustomFixedPositionRect() uses the actual documentRect()
           rather than just conjuring up a rect with a zero origin, which makes position:fixed
           work correctly.
        3. _interactionViewsContainerView (which hosts tap highlights) is positioned to 
           coincide with the origin of the documentRect (i.e. at the scroll origin, which
           may not be top-left). This allows tap highlights to show in the correct location.
        4. ScrollView::unobscuredContentRect() is fixed to take scroll origin into account;
           if the returned rect is wrong, RenderLayer::hitTest() incorrectly clips the hit
           testing area.

        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::unobscuredContentRect):

2015-07-10  Chris Dumez  <cdumez@apple.com>

        [WK2] Diagnostic logging messages are causing too much IPC
        https://bugs.webkit.org/show_bug.cgi?id=146873
        <rdar://problem/21779205>

        Reviewed by Ryosuke Niwa.

        Move shouldLogAfterSampling() utility function to DiagnosticLoggingClient
        so it can be easily reused.

        * page/DiagnosticLoggingClient.h:
        (WebCore::DiagnosticLoggingClient::shouldLogAfterSampling):

2015-07-10  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove default constructor for WebCore::Pair()
        https://bugs.webkit.org/show_bug.cgi?id=146856
        <rdar://problem/21773212>

        Reviewed by Darin Adler.

        Remove default constructor for WebCore::Pair() and the setters Pair::set{First, Second}()
        since they are not used and it seems weird to keep the latter after the removal of the former.
        Should it turn out that we find a use for having a default constructor and/or setters then
        we can revert this change.

        * css/Pair.h:
        (WebCore::Pair::create): Deleted.
        (WebCore::Pair::setFirst): Deleted.
        (WebCore::Pair::setSecond): Deleted.
        (WebCore::Pair::Pair): Deleted.

2015-07-10  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Override primaryLayerID in CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=146826

        Reviewed by Gyuyoung Kim.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::id): Moved id as inline function.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (WebCore::CoordinatedGraphicsLayer::id):

2015-07-10  Matthew Daiter  <mdaiter@apple.com>

        Exposing webkitMediaStream as MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=146813
        <rdar://problem/21754383>

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaStream.idl: Changed interface
        name from webkitMediaStream to MediaStream

2015-07-10  Nan Wang  <n_wang@apple.com>

        Added ARIA 1.1 "cell" and "table" roles.
        https://bugs.webkit.org/show_bug.cgi?id=146011
        <rdar://problem/21398946>

        Reviewed by Chris Fleizach.

        Created a new role called GridCellRole to match the gridcell role, 
        so the previous CellRole and TableRole will match to cell and table role.
        Made the changes to make sure that both GridRole and TableRole have same
        behavior, as well as the circumstance for GridCellRole and CellRole.

        Test: accessibility/roles-table-and-cell.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute):
        (WebCore::AccessibilityNodeObject::canSetSelectedAttribute):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::roleValue):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2015-07-10  Daniel Bates  <dabates@apple.com>

        Serialized declaration for background-size/-webkit-mask-size should preserve identical
        values instead of coalescing them
        https://bugs.webkit.org/show_bug.cgi?id=143191
        <rdar://problem/21759393>

        Reviewed by Darin Adler.

        Inspired by Blink r157745:
        <http://src.chromium.org/viewvc/blink?view=revision&revision=157745>
        And Blink r172548:
        <http://src.chromium.org/viewvc/blink?view=revision&revision=172548>

        Fixes an issue where identical values in a CSS declaration for properties background-size
        and -webkit-mask-size would be coalesced when serialized.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillSize): Modified to create a Pair object with the appropriate
        identical value encoding strategy. We only coalesce identical values when serializing the
        declaration of property -webkit-background-size.
        * css/Pair.h:
        (WebCore::Pair::create): Added variant that takes an encoding.
        (WebCore::Pair::cssText): Moved implementation of Pair::generateCSSString() to here and
        modified to conditionally coalesce identical values during serialization.
        (WebCore::Pair::Pair): Added variant that takes an encoding.
        (WebCore::Pair::generateCSSString): Deleted; moved implementation into Pair::cssText().

2015-07-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Bidi-Isolate inlines break layout with collapsed whitespace
        https://bugs.webkit.org/show_bug.cgi?id=109624
        <rdar://problem/21752834>

        Reviewed by David Hyatt.

        This patch changes the logic in constructBidiRunsForSegment() when it encounters an
        isolate. It already has logic to create a BidiResolver for the isolated text;
        however, that logic doesn't handle setting up the MidpointState at all.
        Specifically, we can set the MidpointState's cursor to point to the context which
        we can remember from addPlaceholderRunForIsolatedInline(). This information is
        remembered in a HashMap in BidiResolver.

        This patch is a partial port of Blink patch
        https://src.chromium.org/viewvc/blink?view=rev&revision=159203

        Here is some explanatory text regarding how we collapse spaces:

        Collapsing whitespace happens in a series of phases. The first phase occurs when
        we perform line breaking. Here, we keep track of sequences of whitespace which
        should be collapsed, in the form of a vector of pairs of InlineIterators. We put
        this knowledge into a MidpointState object.

        Then, once we have a line, we run the bidi algorithm on the line (including the
        whitespace). As output, the bidi algorithm calls the BidiResolver::appendRun()
        callback with two InlineIterators each time it wants to create a run. Because
        each renderer that we create has to be owned by exactly one DOM node,
        BidiResolver::appendRun() iterates between its two InlineIterator arguments,
        calling RenderBlockFlow::appendRunsForObject() on each interstitial DOM node.

        This is the function where whitespace collapsing happens. The MidpointState object
        keeps a cursor into its remembered whitespace sequences. Here, we simply make a
        bidi run for each region in between adjacent whitespace pairs in the MidpointState
        object. These bidi runs eventually get turned into leaf InlineBoxes.

        The problem is that the BidiResolver::appendRun() callbacks don't occur in
        string-order, but the Midpoint InlineIterator pairs are in string-order. In
        particular, within a particular isolate, appendRun() gets called in string
        order, but callbacks that occur for inner isolates are deferred. This means that
        RenderBlockFlow::appendRunsForObject() gets confused when it looks for relevant
        whitespace to skip.

        Test: fast/text/bidi-isolate-whitespace-collapse.html

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::numMidpoints): Returning a const unsigned& is silly.
        (WebCore::MidpointState::currentMidpoint): Ditto.
        (WebCore::MidpointState::setCurrentMidpoint): The isolated MidpointState object
        needs to be able to set its current midpoint to point to the first one inside
        the isolate.
        (WebCore::MidpointState::decrementNumMidpoints): Renamed from "decrease"
        (WebCore::MidpointState::betweenMidpoints): This function is true iff
        currentMidpoint() % 2. Instead of keeping a member variable, we can just compute
        that.
        (WebCore::MidpointState::reset): Deleted.
        (WebCore::MidpointState::decreaseNumMidpoints): Deleted.
        (WebCore::MidpointState::setBetweenMidpoints): Deleted.
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary): Call
        RenderBlockFlow::appendRunsForObject() to keep our MidpointState object in sync
        when we pop out of the isolated object. However, we pass in a null run list,
        because we don't want to append just yet (that happens when we process the
        isolate).
        (WebCore::InlineBidiResolver::appendRun): Update for new signature of
        appendRunsForObject().
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::shouldSkipCreatingRunsForObject): Take a reference instead
        of a pointer.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun): Ditto.
        (WebCore::RenderBlockFlow::appendRunsForObject): Allow someone passing us a null
        BidiRunList. In this case, we will keep the resolver's midpointState() up to date,
        but won't actually emit any runs.
        (WebCore::notifyResolverToResumeInIsolate): Renamed from setUp.
        (WebCore::isolatedResolversMidpointState): Calculate the midpoint state for the
        isolated resolver.
        (WebCore::setUpResolverToResumeInIsolate): Call isolatedResolversMidpointState().
        (WebCore::constructBidiRunsForSegment): Pass in the topResolver, which is
        necessary for isolatedResolversMidpointState().
        * rendering/line/BreakingContext.h:
        (WebCore::checkMidpoints):

2015-07-10  Daniel Bates  <dabates@apple.com>

        Cleanup: WebCore::Pair class should use RefPtr&& instead of PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=146852

        Reviewed by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::createPrimitiveValuePair): Write using a variadic template that forwards its
        arguments to the appropriate Pair::create constructor.
        (WebCore::CSSParser::parse4ValuesFillPosition): Use RefPtr&& instead of PassRefPtr. 
        (WebCore::CSSParser::parse3ValuesFillPosition): Ditto.
        (WebCore::CSSParser::parseFillPosition): Use WTF::move() instead of RefPtr::release()
        so that we pass a rvalue reference to RefPtr.
        (WebCore::CSSParser::parseFillSize): Ditto.
        (WebCore::CSSParser::parseBorderImageRepeat): Ditto.
        * css/CSSParser.h:
        * css/Pair.h:
        (WebCore::Pair::create): Use RefPtr&& instead of PassRefPtr. 
        (WebCore::Pair::setFirst): Ditto.
        (WebCore::Pair::setSecond): Ditto.
        (WebCore::Pair::Pair): Ditto. Also substitute nullptr for 0 in the member initialization
        list of the default constructor.

2015-07-10  Zalan Bujtas  <zalan@apple.com>

        Crash at WebCore::WebPage::innerFrameQuad.
        https://bugs.webkit.org/show_bug.cgi?id=146843
        rdar://problem/21501819

        Reviewed by Andreas Kling.

        We may end up with a null rootEditableElement() after calling Document::updateLayout().

        Speculative fix. Not reproducible.

        * page/Frame.cpp: Some const cleanup.
        (WebCore::Frame::visiblePositionForPoint):
        * page/Frame.h:

2015-07-10  Brady Eidson  <beidson@apple.com>

        Crash in HistoryController::updateForCommit dereferencing a null HistoryItem.
        <rdar://problem/21371589> and https://bugs.webkit.org/show_bug.cgi?id=146842

        Reviewed by Chris Dumez.

        No new tests (Unknown how to reproduce).
        
        This patch basically rolls back part of http://trac.webkit.org/changeset/179472.
        
        r179472 changed HistoryController::setCurrentItem() to take a reference instead of a pointer.
        Unfortunately, we sometimes call setCurrentItem(nullptr).
        
        We'd like to *not* do that, and there are assertions in place to try to catch when we do,
        but in the meantime it is not valid to dereference nullptr.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSameDocumentItem):
        
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::recursiveUpdateForCommit):
        (WebCore::HistoryController::recursiveUpdateForSameDocumentNavigation):
        (WebCore::HistoryController::setCurrentItem): Take a ptr instead of a ref.
        (WebCore::HistoryController::createItem):
        * loader/HistoryController.h:

2015-07-10  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Grid item's auto-margins are not applied correctly
        https://bugs.webkit.org/show_bug.cgi?id=146581

        Reviewed by Darin Adler.

        Grid Layout specification states that auto-margins must prevent to apply
        any Box Alignment property in that dimension. Instead, auto-margin is
        applied as described in the spec.

        http://dev.w3.org/csswg/css-grid/#auto-margins

        Only Flexbox and Grid Layout implement vertical auto-margin alignment;
        for other layout modes, auto-margin should compute as 0.

        Tests: fast/css-grid-layout/grid-item-auto-margins-alignment-vertical-lr.html
               fast/css-grid-layout/grid-item-auto-margins-alignment-vertical-rl.html
               fast/css-grid-layout/grid-item-auto-margins-alignment.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateGridAlignmentAfterStyleChange):
        * rendering/RenderBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::hasAutoMarginsInColumnAxis):
        (WebCore::RenderGrid::hasAutoMarginsInRowAxis):
        (WebCore::RenderGrid::updateAutoMarginsInColumnAxisIfNeeded):
        (WebCore::RenderGrid::rowPositionForChild):
        (WebCore::RenderGrid::columnPositionForChild):
        * rendering/RenderGrid.h:

2015-07-10  Csaba Osztrogonác  <ossy@webkit.org>

        Fix overloaded virtual function warning in ScrollbarThemeGtk.h
        https://bugs.webkit.org/show_bug.cgi?id=145920

        Reviewed by Darin Adler.

        * platform/gtk/ScrollbarThemeGtk.h:

2015-07-10  Chris Fleizach  <cfleizach@apple.com>

        AX: <details> element should allow expand/close through AX API
        https://bugs.webkit.org/show_bug.cgi?id=146549

        Apply review comments from Daniel Bates.

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

2015-07-10  Brady Eidson  <beidson@apple.com>

        ASSERT restoring from page cache as DocumentLoader reattaches to its Frame.
        <rdar://problem/21766282> and https://bugs.webkit.org/show_bug.cgi?id=146786

        Reviewed by NOBODY (Fixing obvious boneheaded mistake in r186642)

        No new tests (Covered by existing)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::attachToFrame): Bail if reattaching to the current Frame,
          which happens when restoring from the page cache.

2015-07-09  Zalan Bujtas  <zalan@apple.com>

        Plugin create can end up destroying its renderer.
        https://bugs.webkit.org/show_bug.cgi?id=146824
        rdar://problem/18921429

        Reviewed by Andreas Kling.

        Plugins can run arbitrary code during initialization. If the plugin
        happens to destroy the associated node, its renderer becomes invalid.
        This patch checks whether the renderer survived the createPlugin() call.
        (This WeakPtr pattern is also used in RenderWidget to avoid dangling pointers.)

        Speculative fix. Not reproducible.

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

2015-07-09  Dan Bernstein  <mitz@apple.com>

        WebCore part of Track and expose policies for external URL schemes and App Links separately
        https://bugs.webkit.org/show_bug.cgi?id=146822

        Reviewed by Anders Carlsson.

        * loader/FrameLoaderTypes.h: Added ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes,
        meaning external schemes are allowed but App Links are not. The opposite state doesn’t
        exist.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Opening a link in a new window
        or in the current window should never open it as an App Link.

2015-07-09  Daniel Bates  <dabates@apple.com>

        Fetching Content Security Policy report URL should respect same origin policy
        https://bugs.webkit.org/show_bug.cgi?id=146754
        <rdar://problem/18860259>

        Reviewed by Brady Eidson.

        Inspired by Blink r149791 (by Mike West <mkwst@chromium.org>):
        <https://src.chromium.org/viewvc/blink?revision=149791&view=revision>

        As per <http://www.w3.org/TR/2015/CR-CSP2-20150219/#send-violation-reports>, fetching the
        Content Security Policy report URL should include cookies if and only if the origin of
        the protected resource is equal to the origin of the report URL.

        Tests: http/tests/security/contentSecurityPolicy/report-cross-origin-no-cookies-when-private-browsing-enabled.html
               http/tests/security/contentSecurityPolicy/report-cross-origin-no-cookies-when-private-browsing-toggled.html
               http/tests/security/contentSecurityPolicy/report-cross-origin-no-cookies.html
               http/tests/security/contentSecurityPolicy/report-same-origin-no-cookies-when-private-browsing-toggled.html
               http/tests/security/contentSecurityPolicy/report-same-origin-with-cookies-when-private-browsing-enabled.html
               http/tests/security/contentSecurityPolicy/report-same-origin-with-cookies.html

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):

2015-07-09  Timothy Horton  <timothy_horton@apple.com>

        Use CoreAnimation fences instead of synchronous IPC to synchronize resize
        https://bugs.webkit.org/show_bug.cgi?id=146294
        <rdar://problem/21090193>

        Reviewed by Anders Carlsson.

        * platform/cocoa/MachSendRight.h:
        Export some constructors.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add some SPI.

2015-07-09  Brady Eidson  <beidson@apple.com>

        Followup to r186647

        Reviewed by NOBODY.

        Thanks, EWS and commit-queue, for not catching this!

        * loader/DocumentLoader.h: Add a semi-colon.

2015-07-09  Dean Jackson  <dino@apple.com>

        REGRESSION: Inline media scrubbing always pauses the video
        https://bugs.webkit.org/show_bug.cgi?id=146819
        <rdar://problem/21572027>

        Reviewed by Eric Carlson. Joseph Pecoraro also was really
        helpful in diagnosing the problem.

        When we moved some code from a getter/setter in the child
        class to the base class, it was no longer being called due
        to the bad way we were implementing inheritance. The solution
        was to have the child class explicitly call into the base
        class.

        The much better solution would have been to rewrite everything
        to use ES6 classes or, as a smaller change, assign the __proto__
        directly on the child prototype. But I felt that was a bit
        too risky at this point.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.extend): Describe in a comment why the extend function
        is not suitable.
        * Modules/mediacontrols/mediaControlsiOS.js: Add a getter/setter for
        scrubbing that calls into the base Controller.

2015-07-09  Chris Fleizach  <cfleizach@apple.com>

        AX: <details> element should allow expand/close through AX API
        https://bugs.webkit.org/show_bug.cgi?id=146549

        Reviewed by Mario Sanchez Prada.

        Forgot this file with the original commit.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::toggleOpen):

2015-07-09  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add 3 byte jump size.
        https://bugs.webkit.org/show_bug.cgi?id=146425

        Reviewed by Darin Adler.

        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::smallestPossibleJumpSize):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::appendZeroes):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::jumpSizeInBytes):
        (WebCore::ContentExtensions::getJumpSize):
        (WebCore::ContentExtensions::getJumpDistance):
        Added DFABytecodeJumpSize::Int24.

2015-07-09  Brady Eidson  <beidson@apple.com>

        Add better ASSERTs to learn more about what is going wrong in DocumentLoader::detachFromFrame()
        https://bugs.webkit.org/show_bug.cgi?id=146816

        Reviewed by Alex Christensen.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::attachToFrame): Set the "has ever been attached" flag to true.
        (WebCore::DocumentLoader::detachFromFrame): ASSERT m_frame is non-null, but with a message 
          depending on the value of the "has ever been attached" flag.
        * loader/DocumentLoader.h:

2015-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] The mimeTypeCache should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=146809

        Reviewed by Eric Carlson.

        No new tests: No change in functionality.

        Don't copy the mime type cache every time someone asks it a question. Return
        by reference instead.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::mimeTypeCache):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::mimeTypeCache):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::mimeTypeCache):

2015-07-09  Wenson Hsieh  <whsieh@berkeley.edu>

        Rubber banding is broken when using a Mighty Mouse
        https://bugs.webkit.org/show_bug.cgi?id=146693

        Reviewed by Tim Horton.

        Sets the "constrain content edge scrolling" flag to true by default, causing scrolling
        with a Mighty Mouse to not extend beyond the container's edges.

        Test: platform/mac-wk2/tiled-drawing/scrolling/stateless-scrolling-no-rubber-band.html

        * rendering/RenderLayer.cpp: Remove code that defaulted the flag to false.
        (WebCore::RenderLayer::RenderLayer): Deleted.
        * rendering/RenderMarquee.cpp: Added special case for marquees that allows content to scroll.
        (WebCore::RenderMarquee::RenderMarquee): See above.

2015-07-09  Brady Eidson  <beidson@apple.com>

        DocumentLoader::detachFromFrame() is being called with no current Frame set.
        <rdar://problem/21293082> and https://bugs.webkit.org/show_bug.cgi?id=146786 

        Reviewed by Sam Weinig.

        No new tests (Unknown how to reproduce).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::attachToFrame):
        (WebCore::DocumentLoader::detachFromFrame): Null check m_frame before dereferencing it.
        (WebCore::DocumentLoader::setFrame): Deleted, renamed to attachToFrame(), and take's
          a Frame& instead of a Frame*.
        * loader/DocumentLoader.h:
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::initForSynthesizedDocument): setFrame is now attachToFrame.
        (WebCore::FrameLoader::setPolicyDocumentLoader): Ditto.
        (WebCore::FrameLoader::transitionToCommitted): Ditto.

2015-07-09  Matthew Daiter  <mdaiter@apple.com>

        Expose MediaStream methods to be used in the MediaStream Engine
        https://bugs.webkit.org/show_bug.cgi?id=146791
        <rdar://problem/21747589>

        Reviewed by Brent Fulgham.

        * Modules/mediastream/MediaStream.cpp: 
        (WebCore::MediaStream::getAudioTracks): Removed const
        (WebCore::MediaStream::getVideoTracks): Ditto
        * Modules/mediastream/MediaStream.h: Needed to change functions to
        override
        * platform/mediastream/MediaStreamPrivate.h: Added certain calls to
        PrivateClient that exposes methods to be used in the engine

2015-07-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Fix shape-highlight layout tests
        https://bugs.webkit.org/show_bug.cgi?id=146080

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForShapeOutside): Now properly returns the shape margin.

2015-07-09  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay to password protected AppleTV fails
        https://bugs.webkit.org/show_bug.cgi?id=146812

        Reviewed by Dean Jackson.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Initialize previouslyRequestedPicker.
        (WebCore::WebMediaSessionManager::clientStateDidChange): Cleanup the logic and add a comment
          to make it slightly easier to follow. Don't begin playing to a device unless playback
          has just started (don't switch in mid-play).
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Use the last client to
          request the device picker as a fallback in case no other client is a canditate. Add more
          logging to make it possible to debug the selection logic.
        (WebCore::WebMediaSessionManager::scheduleDelayedTask): Fiddle with the logging.

2015-07-09  Matthew Daiter  <mdaiter@apple.com>

        Implementing platform-specific section of enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=146461
        <rdar://problem/21614466>

        Reviewed by Darin Adler.

        * Modules/mediastream/MediaDeviceInfo.cpp: Changed access methods
        (WebCore::MediaDeviceInfo::audioInputType): Added AtomicString
        permanent refs
        (WebCore::MediaDeviceInfo::audioOutputType): Ditto
        (WebCore::MediaDeviceInfo::videoInputType): Ditto
        * Modules/mediastream/MediaDeviceInfo.h: Changed String refs to values
        (WebCore::MediaDeviceInfo::label): Ditto
        (WebCore::MediaDeviceInfo::deviceId): Ditto
        (WebCore::MediaDeviceInfo::groupId): Ditto
        (WebCore::MediaDeviceInfo::kind): Ditto
        * platform/mediastream/MediaDevicesPrivate.cpp: Implemented query for
        available devices
        (WebCore::MediaDevicesPrivate::MediaDevicesPrivate):
        (WebCore::MediaDevicesPrivate::create):
        (WebCore::MediaDevicesPrivate::availableMediaDevices):
        * platform/mediastream/MediaDevicesPrivate.h:
        (WebCore::MediaDevicesPrivate::~MediaDevicesPrivate):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/MediaStreamTrackSourcesRequestClient.h: Needed
        to tack on extra fields to hold data
        (WebCore::TrackSourceInfo::create):
        (WebCore::TrackSourceInfo::groupId):
        (WebCore::TrackSourceInfo::deviceId):
        (WebCore::TrackSourceInfo::TrackSourceInfo):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::getSourcesInfo):

2015-07-09  Per Arne Vollan  <peavo@outlook.com>

        [Win] Add memory pressure handler.
        https://bugs.webkit.org/show_bug.cgi?id=146685

        Reviewed by Brent Fulgham.

        Add memory pressure handler implementation on Windows.
        We check the memory usage at regular intervals with a timer.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):
        * platform/win/MemoryPressureHandlerWin.cpp: Added.
        (WebCore::CheckMemoryTimer::CheckMemoryTimer):
        (WebCore::CheckMemoryTimer::fired):
        (WebCore::CheckMemoryTimer::handleMemoryLow):
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        (WebCore::memCheckTimer):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):
        * platform/win/Win32Handle.h:
        (WebCore::Win32Handle::operator=):

2015-07-09  Matthew Daiter  <mdaiter@apple.com>

        Exposed AVVideoCaptureSource's bounds
        https://bugs.webkit.org/show_bug.cgi?id=146760
        <rdar://problem/21736772>

        Reviewed by Brent Fulgham.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        (WebCore::AVVideoCaptureSource::width): Needed access to video width
        (WebCore::AVVideoCaptureSource::height): Needed access to video height

2015-07-09  Karlen Simonyan  <szkarlen@gmail.com>

        [WinCairo] ClearType should be enabled on Cairo port
        https://bugs.webkit.org/show_bug.cgi?id=145492

        Reviewed by Brent Fulgham.

        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        Use CAIRO_ANTIALIAS_BEST instead of CAIRO_ANTIALIAS_GRAY.

2015-07-02  Chris Fleizach  <cfleizach@apple.com>

        AX: <details> element should allow expand/close through AX API
        https://bugs.webkit.org/show_bug.cgi?id=146549

        Reviewed by Mario Sanchez Prada.

        Allow AXExpanded to be writeable for <details> element, which, when set
        will toggle the opening and closing of the element. 
        Post a notification when that happens as well.

        Modified test: platform/mac/accessibility/details-summary.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hierarchicalLevel):
        (WebCore::AccessibilityNodeObject::setIsExpanded):
        (WebCore::shouldUseAccessibilityObjectInnerText):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsPressAction):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::toggleOpen):

2015-07-09  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Prevent crashes with plugins.
        https://bugs.webkit.org/show_bug.cgi?id=146705
        rdar://problem/20855444

        Reviewed by Brady Eidson.

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        Call addPlugInStreamLoader in ResourceLoader::willSendRequest to always add blocked loads.
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        Removed unnecessary early returns.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::isPlugInStreamLoader):

2015-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Honor CACFLayer content scale factor
        https://bugs.webkit.org/show_bug.cgi?id=146792

        Reviewed by Dean Jackson.

        * AVFoundationSupport.py: Check for the CACFLayerSet/GetContentsScale
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin): Use owner's scale factor (if
        present).
        (PlatformCALayerWin::contentsScale): Use CACFLayer API if present.
        (PlatformCALayerWin::setContentsScale): Ditto.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::PlatformCALayerWinInternal): Use owner's scale
        factor (if present).
        (PlatformCALayerWinInternal::addTile): Use tile parent's scale factor.

2015-07-08  Matt Rajca  <mrajca@apple.com>

        Media Session: report to chrome client 'hasActiveMediaElements' changes
        https://bugs.webkit.org/show_bug.cgi?id=146745

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp: All updates to active media elements are now funneled through a helper
          method that will invoke the 'hasMediaSessionWithActiveMediaElementsDidChange' callback when necessary.
        (WebCore::MediaSession::removeMediaElement):
        (WebCore::MediaSession::changeActiveMediaElements):
        (WebCore::MediaSession::addActiveMediaElement):
        (WebCore::MediaSession::releaseSession):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::hasActiveMediaElements):
        * Modules/mediasession/MediaSessionManager.h:

2015-07-09  Darin Adler  <darin@apple.com>

        REGRESSION (r182866): repeated prompts for password on internal Apple website using workers
        https://bugs.webkit.org/show_bug.cgi?id=146769

        Reviewed by Sam Weinig.

        Not sure how to make a regression test for this. Sure would be nice to have one though.

        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions): Added. Calls through to the
        base class copy constructor to copy data members of the base class (the lack of this was
        the bug). Also initializes all the data members of this class.
        (WebCore::ThreadableLoaderOptions::isolatedCopy): Changed to call the constructor above.

        * loader/ThreadableLoader.h: Added new constructor.

2015-07-09  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver cannot get to any content in Yahoo Mail messages table
        https://bugs.webkit.org/show_bug.cgi?id=146674

        Reviewed by Darin Adler.

        A table row could have any number of parent elements in the render tree, but for the purposes
        of accessibility we only want to report the AXTable as the parent so that it looks like a sane
        data table.

        Test: accessibility/aria-table-with-presentational-elements.html

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentObjectUnignored):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        * accessibility/AccessibilityARIAGridRow.h:

2015-07-08  Sungmann Cho  <sungmann.cho@navercorp.com>

        [GTK] The "Missing Plug-in" buttons are not showing up on some flash contents.
        https://bugs.webkit.org/show_bug.cgi?id=146707

        Reviewed by Martin Robinson.

        Currently, WebKitGTK+ doesn't show the "Missing Plug-in" buttons if the plugin-related tags
        don't have a "type" attribute. In such a case, WebCore tries to guess the MIME type from
        the extensions by using MIMETypeRegistry::getMIMETypeForExtension(). For WebKitGTK+,
        MIMETypeRegistry::getMIMETypeForExtension() goes through |extensionMap|, which is a simple
        array of <extension, mime type>, looking for the mime type for the given extension.
        But |extensionMap| in MIMETypeRegistryGtk.cpp doesn't have the information for ".swf",
        so WebCore fails to guess the MIME type and regard the content type as ObjectContentFrame,
        not ObjectContentNetscapePlugin.

        * platform/gtk/MIMETypeRegistryGtk.cpp:

2015-07-08  Brady Eidson  <beidson@apple.com>

        Crash calling [WebView close] in didFinishLoadForFrame callback.
        <rdar://problem/21690765> and https://bugs.webkit.org/show_bug.cgi?id=146773

        Reviewed by David Kilzer.

        Added API Test "WebViewCloseInsideDidFinishLoadForFrame"

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): After the delegate callback,
          don't use the local Page* variable from earlier, but instead refetch it from m_frame.

2015-07-08  Daniel Bates  <dabates@apple.com>

        Cleanup: Make ContentSecurityPolicy::ReportingStatus an enum class
        https://bugs.webkit.org/show_bug.cgi?id=146670

        Reviewed by Darin Adler.

        Make calling the ContentSecurityPolicy::allow* functions less error prone by making
        ContentSecurityPolicy::ReportingStatus an enum class. Among other benefits this will
        prevent a caller from inadvertently passing an enumerator of ContentSecurityPolicy::ReportingStatus
        as the boolean argument overridingContentSecurityPolicy, which is taken by the various
        ContentSecurityPolicy::allow* functions, by causing a compile-time error (since an enum class
        enumerator cannot be implicitly converted to an integral type).

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScript):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::allowJavaScriptURLs):
        (WebCore::CSPDirectiveList::allowInlineEventHandlers):
        (WebCore::CSPDirectiveList::allowInlineScript):
        (WebCore::CSPDirectiveList::allowInlineStyle):
        (WebCore::CSPDirectiveList::allowEval):
        (WebCore::CSPDirectiveList::allowPluginType):
        (WebCore::CSPDirectiveList::allowScriptFromSource):
        (WebCore::CSPDirectiveList::allowObjectFromSource):
        (WebCore::CSPDirectiveList::allowChildFrameFromSource):
        (WebCore::CSPDirectiveList::allowImageFromSource):
        (WebCore::CSPDirectiveList::allowStyleFromSource):
        (WebCore::CSPDirectiveList::allowFontFromSource):
        (WebCore::CSPDirectiveList::allowMediaFromSource):
        (WebCore::CSPDirectiveList::allowConnectToSource):
        (WebCore::CSPDirectiveList::allowFormAction):
        (WebCore::CSPDirectiveList::allowBaseURI):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::evalDisabledErrorMessage):
        * page/ContentSecurityPolicy.h:
        * page/DOMSecurityPolicy.cpp:
        (WebCore::DOMSecurityPolicy::allowsEval):

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Activate DOMURLMediaStream
        https://bugs.webkit.org/show_bug.cgi?id=146764
        <rdar://problem/21738101>

        Reviewed by Eric Carlson.

        * DerivedSources.make: Added DOMURLMediaStream.idl to list
        * WebCore.xcodeproj/project.pbxproj: Added DOMURLMediaStream.cpp and
        DOMURLMediaStream.h to compile

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Make sure MediaStream uses blob protocol
        https://bugs.webkit.org/show_bug.cgi?id=146752
        <rdar://problem/21736057>

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild): Added MediaStream
        blob protocol

2015-07-08  Andreas Kling  <akling@apple.com>

        Videos on apple.com don't show up when restored from page cache.
        <https://webkit.org/b/146766>
        <rdar://problem/21712311>

        Reviewed by Darin Adler.

        Break out most of HTMLMediaElement::stop() (override of ActiveDOMObject::stop(), to be clear)
        into a stopWithoutDestroyingMediaPlayer() function that both stop() and suspend() can call.

        Before this change, suspend() would call stop() when moving into the page cache, killing the
        internal MediaPlayer object which caused the video to disappear from the page.

        Test: LayoutTests/media/restore-from-page-cache.html (amended)

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        * html/HTMLMediaElement.h:

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Make MediaStream conform to its private client like MediaSource does
        https://bugs.webkit.org/show_bug.cgi?id=146756
        <rdar://problem/21736457>

        Reviewed by Brent Fulgham.

        MediaStream should be inheriting its PrivateClient's getters and
        setters for RefCounted, not inheriting its own.

        * Modules/mediastream/MediaStream.h: Changed MediaStream's inherit
        statements
        * platform/mediastream/MediaStreamPrivate.h: Changed
        MediaStreamPrivateClient to inherit RefCounted<MediaStreamPrivateClient>

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Made AVMediaCaptureSource's session accessor public
        https://bugs.webkit.org/show_bug.cgi?id=146758
        <rdar://problem/21736651>

        Reviewed by Brent Fulgham.

        * platform/mediastream/mac/AVMediaCaptureSource.h:
        (WebCore::AVMediaCaptureSource::session): Changed to public

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Make sure MediaStream engine loaded for interpreting MediaStreams
        https://bugs.webkit.org/show_bug.cgi?id=146748
        <rdar://problem/21735416>

        Reviewed by Brent Fulgham.

        Prevent the MediaSource engine from being used to process
        MediaStreams, since they are not compatible

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        Changed MediaStream to never be loaded
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType): 
        Changed MediaStream to never be loaded


2015-07-08  Benjamin Poulain  <bpoulain@apple.com>

        [Content Extensions] Fuse undistinguishable actions as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=146762

        Reviewed by Alex Christensen.

        Our previous code that fused actions was based on test lists that were
        grouping similar actions in the input.

        The input we get from developers is more distributed. It is very common to
        have trigger flags all over the place, and "css-display-none" mixed with "block".

        This patch refines the merging code to merge those cases as much as possible.

        The size taken by the actions is negligible, but having different actions make
        nodes unkillable by the Minimizer. By merging many more actions, the minimizer
        no longer see those subtrees as distinguishable and can do a better job.

        On a large test list, this cuts the bytecode size by 2 megabytes.

        Tests: http/tests/contentextensions/css-display-none-after-ignore-previous-rules.html
               http/tests/contentextensions/single-css-display-none.html

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::resolvePendingDisplayNoneActions):
        (WebCore::ContentExtensions::serializeActions):

2015-07-08  Matthew Daiter  <mdaiter@apple.com>

        Cleared contentMIMETypes for MediaStreams
        https://bugs.webkit.org/show_bug.cgi?id=146750
        <rdar://problem/21735678>

        Reviewed by Brent Fulgham.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Needed to clear contentMIMETypes

2015-07-08  Dean Jackson  <dino@apple.com>

        Audio elements with controls force their enclosing stacking context to composite
        https://bugs.webkit.org/show_bug.cgi?id=146751
        <rdar://problem/21466572>

        Reviewed by Simon Fraser.

        There were a number of issues with audio controls, on both iOS and OS X.

        - they used a blurry background which was not the intended design
        - they cause the page to composite, which causes a degradation in
          text rendering quality
        - they inserted 20px of padding above every audio element, which
          could break existing page designs.

        Removing the need for compositing and blending means that the
        colors used for control tints need to be adjusted for the non-blended
        case. Wherever I could, I kept as much as possible in a shared
        rule and made specific changes for audio or video.

        The controls were also unintentionally relying on the compositing
        to create stacking contexts and control the rendering order. Without
        them, I needed to add some explicit stacking.

        I also made some drive-by whitespace clean-ups.

        * Modules/mediacontrols/mediaControlsApple.css: Remove as much compositing
        as possible in audio controls.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.drawTimelineBackground): Use specific colors for audio.

        * Modules/mediacontrols/mediaControlsiOS.css: Remove as much need for compositing
        as possible.

2015-07-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash when appending an SVG <use> element dynamically which has animated SVG <path> element
        https://bugs.webkit.org/show_bug.cgi?id=146690
        <rdar://problem/20790376>

        Reviewed by Dean Jackson.

        Test: svg/animations/insert-animate-use-path-while-animation.svg

        The crashing call stack shows that
        SVGAnimatedListPropertyTearOff<SVGPathSegList>::m_animVal is null when
        trying to access it in synchronizeWrappersIfNeeded(). This happens because
        animationStarted() was not called for this animatedType.
        
        SVGAnimateElementBase::resetAnimatedType() calls
        SVGAnimatedPathAnimator::startAnimValAnimation() at the beginning of the
        animation. For the target element and all its instances, this function calls
        SVGAnimatedPathSegListPropertyTearOff::animationStarted() which calls
        SVGAnimatedListPropertyTearOff<SVGPathSegList>::animationStarted(). This
        last function allocates the member m_animVal when calling
        SVGAnimatedListPropertyTearOff<SVGPathSegList>::animVal(). 
        
        When adding a new instance of the same animating target element, 
        SVGAnimateElementBase::resetAnimatedType() just keeps calling
        SVGAnimatedPathAnimator::animValDidChange() for all the instances of the
        targetElement without ensuring that all of them have started their
        animations.
        
        The fix is to make SVGAnimatedPathAnimator::resetAnimValToBaseVal() ensure
        that animationStarted() is called for the targetElement and all its instances.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation): Move resetting
        the animation value and starting the animatedTypes code to a new overriding
        function which is named resetAnimValToBaseVal().
        
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal): Call the overriding
        function which calls buildSVGPathByteStreamFromSVGPathSegList() as before
        and ensure that all the animatedTypes have started their animations.
        
        * svg/SVGAnimatedPath.h:

2015-07-08  Brady Eidson  <beidson@apple.com>

        Move PingLoaders to the NetworkingProcess.
        <rdar://problem/18860263> and https://bugs.webkit.org/show_bug.cgi?id=146710

        Reviewed by Tim Horton.

        No new tests.
        There's no current solution for communicating back to a page that a ping load has reached its target.
        Until we have such a solution, any attempt at a layout test will be fragile at best.

        * WebCore.xcodeproj/project.pbxproj:
        
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::createPingHandle): Default implementation is create the PingHandle directly.
        * loader/LoaderStrategy.h:

        PingLoader becomes a static class for now that crafts the ResourceRequest then passes it off
        to the LoaderStrategy:        
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        (WebCore::PingLoader::startPingLoad):
        (WebCore::PingLoader::createPingLoader): Deleted.
        (WebCore::PingLoader::PingLoader): Deleted.
        (WebCore::PingLoader::~PingLoader): Deleted.
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired): Deleted.

        PingHandle does what PingLoader used to - It's a basic ResourceHandleClient that simply waits
        for any response/completion/failure and then deletes itself.
        * platform/network/PingHandle.h: Added.
        (WebCore::PingHandle::PingHandle):
        (WebCore::PingHandle::usesAsyncCallbacks):
        (WebCore::PingHandle::timeoutTimerFired):
        (WebCore::PingHandle::~PingHandle):

2015-07-08  Csaba Osztrogonác  <ossy@webkit.org>

        Add new sources to StyleAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146584

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * rendering/style/StyleAllInOne.cpp:

2015-07-08  Csaba Osztrogonác  <ossy@webkit.org>

        Add new sources to DOMAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146587

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * dom/DOMAllInOne.cpp:

2015-07-08  Csaba Osztrogonác  <ossy@webkit.org>

        Add new sources to AccessibilityAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=146582

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * accessibility/AccessibilityAllInOne.cpp:

2015-07-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Two clicks required to enable AirPlay at youtube.com
        https://bugs.webkit.org/show_bug.cgi?id=146733
        <rdar://problem/21556356>

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::clientStateDidChange): Only log when state has changed.
          Don't steal the route if another client is actively playing to the device.
        (WebCore::WebMediaSessionManager::setPlaybackTarget): Set m_targetChanged.
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Don't consider the
          requestedPicker flag until after a target change.
        * Modules/mediasession/WebMediaSessionManager.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Add logging.
        (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget): Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Always log.

2015-07-08  Zalan Bujtas  <zalan@apple.com>

        Do not waste window server memory for placeholder windows initiated by ThemeMac.
        https://bugs.webkit.org/show_bug.cgi?id=146730
        rdar://problem/20321222

        Using defer:YES prevents us from wasting any window server resources for WebCoreThemeWindow(s).

        Patch by Darin Adler.
        Reviewed by Zalan Bujtas.

        Not testable.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView window]):

2015-07-08  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GTK] Deactivate GObject bindings for static methods
        https://bugs.webkit.org/show_bug.cgi?id=146717

        Reviewed by Carlos Garcia Campos.

        Static methods are currently not supported by GObject bindings so we deactivate them from the generation.

        Current tests suffice. Expectations updated.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip isStatic functions.
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_implements_method4): Deleted.
        (webkit_dom_test_interface_supplemental_method4): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_class_method): Deleted.
        (webkit_dom_test_obj_class_method_with_optional): Deleted.
        (webkit_dom_test_obj_overloaded_method1): Deleted.

2015-07-07  Benjamin Poulain  <bpoulain@apple.com>

        Remove the overflow checks from the important vectors used by the content extensions machines
        https://bugs.webkit.org/show_bug.cgi?id=146703

        Reviewed by Andreas Kling.

        Most of the overflow checks cannot be eliminated by clang. Removing them
        explicitly removes 400 ms from the compile time of a very large test list.

        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFA.h:
        * contentextensions/DFACombiner.cpp:
        * contentextensions/DFAMinimizer.cpp:
        * contentextensions/ImmutableNFA.h:
        * contentextensions/MutableRangeList.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::epsilonClosureExcludingSelf):
        (WebCore::ContentExtensions::resolveEpsilonClosures):
        (WebCore::ContentExtensions::extendSetWithClosure):
        (WebCore::ContentExtensions::DataConverterWithEpsilonClosure::convert):
        (WebCore::ContentExtensions::DataConverterWithEpsilonClosure::extend):
        (WebCore::ContentExtensions::createCombinedTransition):
        (WebCore::ContentExtensions::getOrCreateDFANode):
        (WebCore::ContentExtensions::NFAToDFA::convert):

2015-07-07  Dean Jackson  <dino@apple.com>

        [iOS] MediaControls: Start Play and Can't Play buttons need to be cutout and blurred
        https://bugs.webkit.org/show_bug.cgi?id=146226

        Reviewed by Simon Fraser.

        This patch takes what Said Abou-Hallawa posted in an earlier revision and
        makes a few tweaks to workaround the bugs he's listed.

        Replicate the iOS System blur backdrop in pure CSS, so that the large
        start button looks more correct. Also add artwork for a failure state.

        * Modules/mediacontrols/mediaControlsiOS.css: New style rules for the start
        button, which now is a collection of elements rather than a <button>.
        (video::-webkit-media-controls-start-playback-button):
        (video::-webkit-media-controls-start-playback-background):
        (video::-webkit-media-controls-start-playback-tint):

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createBase): Replace the <button> with the hierarchy of
        elements to replicate the blur. Give some of them a class attribute, so they
        can match selectors (see the bugs Said filed in the original bugzilla).
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchStart): Toggle classes on
        the hierarchy as needed.
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): Ditto.
        (ControllerIOS.prototype.updateStatusDisplay): Ditto.

2015-07-07  Zalan Bujtas  <zalan@apple.com>

        Crash when parent iframe is set to display none and the child frame is mutated the same time.
        https://bugs.webkit.org/show_bug.cgi?id=146699
        rdar://problem/16207881

        Reviewed by Andreas Kling.

        When the parent iframe is set to display: none, we destroy the associated renderer (RenderIFrame).
        However if the child frame is mutated the same time, during layout we try to access this RenderIFrame
        to check whether it needs frame flattening.
        This patch checks whether the parent render widget is still valid.

        Test: fast/frames/crash-display-none-iframe-during-onbeforeload.html

        * page/FrameView.cpp:
        (WebCore::FrameView::isInChildFrameWithFrameFlattening): rearrange early returns.

2015-07-06  Matt Rajca  <mrajca@apple.com>

        Media Session: remove seek forward/backward attributes
        https://bugs.webkit.org/show_bug.cgi?id=146645

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaRemoteControls.h:
        * Modules/mediasession/MediaRemoteControls.idl:

2015-07-07  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r183133-r183138): Secondary clicking in whitespace selects preceding word
        https://bugs.webkit.org/show_bug.cgi?id=146695
        <rdar://problem/21441466>

        Reviewed by Tim Horton.

        When we would currently use dictionary lookup to decide on our text selection, first check if we
        are targeting an editable field. If we are, use the original selection behavior. Otherwise, use
        the new "dictionary lookup" selection.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestContextualWordOrLinkFromMouseEvent): Only use dictionary lookup
        when our target node is not editable.
        

2015-07-07  Brady Eidson  <beidson@apple.com>

        Another attempt to fix CURL/Soup builds after r186476

        Reviewed by NOBODY.

        * platform/network/curl/SocketStreamHandle.h:

        * platform/network/soup/SocketStreamHandle.h:

2015-07-07  Brady Eidson  <beidson@apple.com>

        Attempt to fix CURL/Soup builds after r186476

        Reviewed by NOBODY.

        * platform/network/curl/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):

        * platform/network/soup/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):

2015-07-07  Brady Eidson  <beidson@apple.com>

        HTTP Auth cached after disabling private browsing/reset.
        <rdar://problem/8293055> and https://bugs.webkit.org/show_bug.cgi?id=146654

        Reviewed by Tim Horton.

        Test: http/tests/security/private-browsing-http-auth.html

        - Change most static CredentialStorage methods to be instance methods instead.
        - Make a CredentialStorage objects be per-NetworkStorageSession.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::connect): Only start the web socket load if a networking
          context is available.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::defaultCredentialStorage): Returns the credential storage
          from the default NetworkStorageSession.
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::get):
        (WebCore::CredentialStorage::remove):
        (WebCore::CredentialStorage::findDefaultProtectionSpaceForURL):
        (WebCore::CredentialStorage::clearCredentials):
        (WebCore::protectionSpaceToCredentialMap): Deleted.
        (WebCore::originsWithCredentials): Deleted.
        (WebCore::pathToDefaultProtectionSpaceMap): Deleted.
        (WebCore::findDefaultProtectionSpaceForURL): Deleted.
        (WebCore::CredentialStorage::setPrivateMode): Deleted. Was a no-op anyways.
        * platform/network/CredentialStorage.h:
        
        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::credentialStorage):
        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        
        * platform/network/cf/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::getStoredCONNECTProxyCredentials):
        (WebCore::getStoredCONNECTProxyCredentials): Deleted.
        
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest):
        
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::applyAuthenticationToRequest):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        
2015-07-07  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(169105): CSS Regions: renderer returns wrong selection root when it is inside a column flow.
        https://bugs.webkit.org/show_bug.cgi?id=146529
        rdar://problem/21613670

        Reviewed by Mihnea Ovidenie and David Kilzer.

        This patch ensures that RenderObject::selectionRoot() handles column flows properly while searching for the associated
        selection root.
        When the renderer is inside a column flow and the column flow is part of a named flow, we stop
        traversing the ancestor chain, searching for the selection root, when we reach the column flow.
        Since the column flow is not a selection root, we mistakenly fall back to the RenderView as selection root.
        Instead, we should check if the column is inside a named flow and return the selection root accordingly.
        Returning the wrong selection root confuses RenderView::splitSelectionBetweenSubtrees() logic and this particular
        RenderObject could end up in multiple selection trees.

        Test: fast/regions/selection/crash-when-element-is-inside-column-and-the-containing-block-is-inside-flow.html

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

2015-07-07  Brent Fulgham  <bfulgham@apple.com>

        [Mac] REGRESSION (r184794): Play/Pause control doesn't update state in full screen
        https://bugs.webkit.org/show_bug.cgi?id=146689
        <rdar://problem/21393490>

        Reviewed by Dean Jackson.

        The changes in r184794 did not take full screen mode into account. This needed to be corrected.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePanelTransitionEnd):
        (Controller.prototype.setPlaying):
        (Controller.prototype.showControls):

2015-07-07  Wenson Hsieh  <whsieh@berkeley.edu>
        
        Snap point regions containing X and Y snap points should do a better job animating
        https://bugs.webkit.org/show_bug.cgi?id=142523
        <rdar://problem/20100753>

        Reviewed by Brent Fulgham.

        Reimplemented snap point animations to use a single timer for both horizontal and
        vertical axes to better support 2D snap scrolling. Instead of making velocity
        dependent on progress to the snap point and handling 2D snapping with different
        timer update functions, this implementation uses a fixed animation time to coordinate
        the snapping animation across both axes.

        Test: platform/mac-wk2/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-2d-overflow.html

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Refactored to use a single scroll snap timer.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: See above.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startScrollSnapTimer): See above.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopScrollSnapTimer): See above.
        * platform/cocoa/ScrollController.h: Refactored to use a single scroll snap timer and update function to handle
            snapping in both axes. This entails removing the ScrollEventAxis parameter from various functions below. Also
            removed methods that computed "snap" and "glide" offsets.
        (WebCore::ScrollControllerClient::startScrollSnapTimer): See above.
        (WebCore::ScrollControllerClient::stopScrollSnapTimer): See above.
        * platform/cocoa/ScrollController.mm: See above.
        (WebCore::ScrollController::ScrollController): Added new constants used to compute animation offsets.
        (WebCore::ScrollController::snapRubberBandTimerFired):  Added a check to prevent the rubber band timer from firing
            alongside the scroll snap timer. This results in scroll snapping taking precedence over rubber banding when
            scrolling against the edge of a container in the case of 2D scrolling. We didn't run into this issue before
            because snapping wasn't working properly at the edges of a 2D scrolling container. In the future, we may want
            to unify both snap scrolling and rubber banding timers to solve this issue.
        (WebCore::ScrollController::isScrollSnapInProgress): Refactored to use a single scroll snap timer.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Fixed an issue where wheel deltas were being pushed
            to the snap state incorrectly.
        (WebCore::ScrollController::processWheelEventForScrollSnap): Fixed an issue with 2D snapping where scrolling in 2 axes
            simultaneously would cause the vertical axis to override the horizontal axis. This is more like a sub-issue of fixing
            2D scrolling, and is required for 2D snap animations to work properly.
        (WebCore::ScrollController::startScrollSnapTimer): Refactored to use a single scroll snap timer.
        (WebCore::ScrollController::stopScrollSnapTimer): See above.
        (WebCore::ScrollController::scrollSnapTimerFired): This new method handles snap scroll updates on both axes.
        (WebCore::ScrollController::beginScrollSnapAnimation): Refactored to account for single scroll snap timer.
        (WebCore::ScrollController::endScrollSnapAnimation): See above.
        (WebCore::ScrollController::initializeScrollSnapAnimationParameters): New method that initializes parameters used to
            coordinate the animation state across horizontal and vertical axes.
        (WebCore::ScrollController::isSnappingOnAxis):  Checks whether or not a given axis is currently scroll snapping. This will
            return true in the case of active 2D scroll snapping.
        (WebCore::ScrollController::hasActiveScrollSnapTimerForAxis): Deleted.
        (WebCore::ScrollController::horizontalScrollSnapTimerFired): Deleted.
        (WebCore::ScrollController::verticalScrollSnapTimerFired): Deleted.
        (WebCore::ScrollController::scrollSnapAnimationUpdate): Deleted.
        (WebCore::ScrollController::initializeGlideParameters): Deleted.
        (WebCore::snapProgress): Deleted.
        (WebCore::clampedSnapMagnitude): Deleted.
        (WebCore::ScrollController::computeSnapDelta): Deleted.
        (WebCore::snapGlide): Deleted.
        (WebCore::ScrollController::computeGlideDelta): Deleted.
        * platform/cocoa/ScrollSnapAnimatorState.h:  Added a new datastructure, ScrollSnapAnimationCurveState, which tracks
            the scroll snap animation state across both axes.
        * platform/cocoa/ScrollSnapAnimatorState.mm: Removed fields relevant to the former "gliding" model and renamed the
            initial wheel delta variable to reflect this.
        (WebCore::ScrollSnapAnimatorState::averageInitialWheelDelta): Fixed an issue where wheel deltas were being pushed
            to the snap state incorrectly.
        (WebCore::ScrollSnapAnimatorState::clearInitialWheelDeltaWindow): Tiny for loop incrementor style fix.
        (WebCore::ScrollSnapAnimatorState::isSnapping): Checks whether this state is in either snapping or gliding mode.
        (WebCore::ScrollSnapAnimatorState::canReachTargetWithCurrentInitialScrollDelta): Checks whether the scroll velocity is
            consistent with the initial and target offsets.
        (WebCore::ScrollSnapAnimatorState::interpolatedOffsetAtProgress): Interpolates the offset for a given progress value.
        (WebCore::ScrollSnapAnimationCurveState::ScrollSnapAnimationCurveState): New constants.
        (WebCore::ScrollSnapAnimationCurveState::initializeSnapProgressCurve): Abstracts out part of the initialization process.
        (WebCore::ScrollSnapAnimationCurveState::initializeInterpolationCoefficientsIfNecessary): Abstracts out part of the
            initialization process.
        (WebCore::ScrollSnapAnimationCurveState::interpolatedPositionAtProgress): Abstracts out curve interpolation.
        (WebCore::ScrollSnapAnimationCurveState::shouldCompleteSnapAnimationImmediatelyAtTime): Added.
        (WebCore::ScrollSnapAnimationCurveState::animationProgressAtTime): Added.
        
2015-07-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, attempt to fix iOS build.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):

2015-07-07  Andreas Kling  <akling@apple.com>

        REGRESSION(r183706): HTMLImageElement sometimes fails to register as document named item.
        <https://webkit.org/b/146679>
        <rdar://problem/21613839>

        Reviewed by Antti Koivisto.

        After r183706, Element::hasName() no longer returns outdated information when called
        inside a parseAttribute() override. HTMLImageElement was relying on this to check
        if it *used* to have a name attribute before the currently parsing one was set.

        Since parseAttribute() only shows subclasses the new attribute value, I'm adding a
        flag to HTMLImageElement that remembers whether we had a name attribute or not.

        Test: fast/dom/HTMLImageElement/remove-img-with-name-from-document-crash.html

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

2015-07-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStreamReader.read() custom binding
        https://bugs.webkit.org/show_bug.cgi?id=146643

        Reviewed by Darin Adler.

        Moved ReadableStreamReader.read handling from callbacks to promises.
        Introduced DOMPromiseIteratorWithCallback for that purpose: it takes resolve() to resolve a promise with a not-ending iterator value,
        resolveEnd() to resolve a promise with a terminating iterator value and reject().
        Added template helper routine to convert typed values to JS iterator wrapping the value.
        Removed ReadableStreamReader.read custom binding.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp: Updated code to use DOMPromiseIteratorWithCallback API.
        (WebCore::ReadableStream::releaseReader):
        (WebCore::ReadableStream::changeStateToErrored):
        (WebCore::ReadableStream::read):
        (WebCore::ReadableStream::resolveReadCallback):
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::read):
        * Modules/streams/ReadableStreamReader.h:
        * Modules/streams/ReadableStreamReader.idl: Removed custom binding.
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJSIterator): create JS iterator from typed value.
        (WebCore::toJSIteratorEnd): create JS end iterator.
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::globalObject): Added globaObject getter and removed promise getter.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DOMPromiseIteratorWithCallback::DOMPromiseIteratorWithCallback):
        (WebCore::Error>::resolve):
        (WebCore::Error>::resolveEnd):
        (WebCore::Error>::reject):
        * bindings/js/JSReadableStreamReaderCustom.cpp: Removed custom binding.

2015-07-06  Zalan Bujtas  <zalan@apple.com>

        REGRESSION: Slider thumb does not render properly (image tests with <input type="range">)
        https://bugs.webkit.org/show_bug.cgi?id=146669
        rdar://problem/21677831

        Reviewed by Simon Fraser.

        Draw NSSliderCell's knob only when slider's thumb paint is requested.

        Covered by existing tests.

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

2015-07-06  Csaba Osztrogonác  <ossy@webkit.org>

        Move shouldIgnoreAttributeCase inline function to Element.h
        https://bugs.webkit.org/show_bug.cgi?id=146588

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::shouldIgnoreAttributeCase): Deleted.
        * dom/Element.h:
        (WebCore::shouldIgnoreAttributeCase):
        * dom/NamedNodeMap.cpp:
        (WebCore::shouldIgnoreAttributeCase): Deleted.

2015-07-06  Brent Fulgham  <bfulgham@apple.com>

        Ensure media playback is stopped during page close
        https://bugs.webkit.org/show_bug.cgi?id=146554
        <rdar://problem/18033944>

        Reviewed by Brady Eidson.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::WebAudio::hostingDocument): Added.
        * Modules/webaudio/AudioContext.h:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hostingDocument): Added.
        * dom/Document.cpp:
        (WebCore::Document::~Document): Call new 'stopAllMediaPlaybackForDocument' at destruction time.
        * platform/audio/PlatformMediaSession.h:
        Made PlatformMediaSessionManager a friend so it can access the protected 'client' accessor.
        Updated PlatformMediaSessionClient to require clients to have a "hostingDocument" member.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForDocument): Added. Only pauses
        playback on elements that match the provided document.
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForProcess): Added. Pauses playback
        on all elements in the current process.
        * platform/audio/PlatformMediaSessionManager.h:

2015-07-06  Daniel Bates  <dabates@apple.com>

        Isolated worlds should respect Content Security Policy; User Agent Shadow DOM
        should be exempt from Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=144830
        <rdar://problem/18860261>

        Inadvertently omitted argument overrideContentSecurityPolicy in calls to ContentSecurityPolicy::allowEval()
        that explicitly specified a report status. And the report status, which is an enum, was being implicitly
        converted to bool.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScript):
        * page/DOMSecurityPolicy.cpp:
        (WebCore::DOMSecurityPolicy::allowsEval):

2015-07-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r186385.
        https://bugs.webkit.org/show_bug.cgi?id=146668

        crashes 3 webaudio tests in debug builds (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "Ensure media playback is stopped during page close"
        https://bugs.webkit.org/show_bug.cgi?id=146554
        http://trac.webkit.org/changeset/186385

2015-07-06  Andreas Kling  <akling@apple.com>

        Crash when setting text direction via MakeTextWritingDirection* editing commands.
        <https://webkit.org/b/146665>
        <rdar://problem/20835477>

        Reviewed by Ryosuke Niwa.

        Fix two buggy clients of enclosingBlock(node) that would fail if the returned
        element is the same as the node passed in.

        Test: editing/style/change-text-direction-crash.html

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

2015-07-06  Simon Fraser  <simon.fraser@apple.com>

        Revert use of  SVG <mask> elements for -webkit-mask-image (r176798, r177494)
        https://bugs.webkit.org/show_bug.cgi?id=146653

        Reviewed by Dean Jackson.

        Fixes rdar://problem/21435233.

        r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
        was not being maintained, so revert it.

        This patch reverts r176798.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText): Deleted.
        (WebCore::CSSValue::destroy): Deleted.
        * css/CSSValue.h:
        (WebCore::CSSValue::isWebKitCSSResourceValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::maskImageValueFromIterator): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear): Deleted.
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::maskImagesWithPendingSVGDocuments): Deleted.
        * css/WebKitCSSResourceValue.cpp: Removed.
        * css/WebKitCSSResourceValue.h: Removed.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::addCachedResource): Deleted.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        (WebCore::CachedSVGDocument::CachedSVGDocument): Deleted.
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::containsSVGDocument): Deleted.
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::createPageFromBuffer): Deleted.
        * page/Page.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::containsSVGDocument): Deleted.
        * platform/graphics/MaskImageOperation.cpp: Removed.
        * platform/graphics/MaskImageOperation.h: Removed.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.cpp:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLayerMaskImageInfo.h: Removed.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::cullEmptyLayers):
        (WebCore::layerImagesIdentical):
        (WebCore::FillLayer::FillLayer): Deleted.
        (WebCore::FillLayer::operator=): Deleted.
        (WebCore::FillLayer::hasNonEmptyMaskImage): Deleted.
        (WebCore::FillLayer::imagesAreLoaded): Deleted.
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::maskImage): Deleted.
        (WebCore::FillLayer::imageOrMaskImage): Deleted.
        (WebCore::FillLayer::setMaskImage): Deleted.
        (WebCore::FillLayer::clearMaskImage): Deleted.
        (WebCore::FillLayer::hasMaskImage): Deleted.
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::applySVGMask): Deleted.
        (WebCore::RenderSVGResourceMasker::drawMaskForRenderer): Deleted.
        * rendering/svg/RenderSVGResourceMasker.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::createElementRenderer):
        (WebCore::SVGMaskElement::addClientRenderLayer): Deleted.
        (WebCore::SVGMaskElement::removeClientRenderLayer): Deleted.
        * svg/SVGMaskElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateExternalDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2015-07-06  Simon Fraser  <simon.fraser@apple.com>

        Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494, r186180)
        https://bugs.webkit.org/show_bug.cgi?id=146653

        Reviewed by Dean Jackson.

        Fixes rdar://problem/21435233.

        r177494 caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
        was not being maintained, so revert it.

        This patch reverts r177494.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseMaskImage): Deleted.
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSValue.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertMaskImageOperations): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::loadPendingImages):
        (WebCore::StyleResolver::adjustStyleForMaskImages): Deleted.
        (WebCore::StyleResolver::applyMatchedProperties): Deleted.
        * css/StyleResolver.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::containsSVGDocument):
        * page/FrameView.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::blendFunc): Deleted.
        (WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper): Deleted.
        (WebCore::MaskImagePropertyWrapper::equals): Deleted.
        * platform/ScrollView.h:
        (WebCore::ScrollView::containsSVGDocument):
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::~MaskImageOperation): Deleted.
        (WebCore::MaskImageOperation::operator==): Deleted.
        * platform/graphics/MaskImageOperation.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::maskClipRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::updateFillImages):
        (WebCore::RenderElement::~RenderElement): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer): Deleted.
        (WebCore::RenderLayer::calculateClipRects): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerMaskImageInfo.cpp: Removed.
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::image):
        (WebCore::FillLayer::imageOrMaskImage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setMaskImage): Deleted.
        * rendering/style/RenderStyle.h:

2015-07-06  Simon Fraser  <simon.fraser@apple.com>

        Revert use of SVG <mask> elements for -webkit-mask-image (r176798, r177494, r186180)
        https://bugs.webkit.org/show_bug.cgi?id=146653
        
        Fixes rdar://problem/21435233.

        This patch reverts r186180, but keeps the layout test.

        This feature caused a number of regressions (bugs 141857, 146509, 146561), added new layering violations, and
        was not being maintained, so revert it.
        
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource): Deleted.
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::acceptOverride): Deleted.
        (WebCore::CachedResourceRequest::setAcceptOverride): Deleted.
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::load): Deleted.
        * loader/cache/CachedSVGDocumentReference.h:
        (WebCore::CachedSVGDocumentReference::setAcceptsAnyImageType): Deleted.
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::ensureCachedSVGDocumentReference):
        (WebCore::MaskImageOperation::notifyFinished):

2015-07-06  Daniel Bates  <dabates@apple.com>

        Fix the Windows build following <https://trac.webkit.org/changeset/186388>
        (https://bugs.webkit.org/show_bug.cgi?id=144830)

        As we for for Mac in WebCoreAVFResourceLoader::startLoading(), instantiate ResourceLoaderOptions
        with ContentSecurityPolicyImposition::DoPolicyCheck.

        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        (WebCore::WebCoreAVCFResourceLoader::startLoading):

2015-07-06  Daniel Bates  <dabates@apple.com>

        Isolated worlds should respect Content Security Policy; User Agent Shadow DOM
        should be exempt from Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=144830
        <rdar://problem/18860261>

        Reviewed by Geoffrey Garen.

        Make scripts that run in an isolated world be subject to the Content Security Policy (CSP) of the page
        and exempt features implemented using a user agent shadow DOM. As a side effect of this change,
        Safari Content Extensions will respect the CSP policy of the page when loading subresources (e.g. an image).

        Tests: http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-audio.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-css-background.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-css-cursor.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-css-filter-on-image.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-css-webkit-image-set.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-embed-plugin.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-external-script.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-iframe.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-image-after-redirect.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-image.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-inline-script.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-inline-style.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-inline-stylesheet.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-object-plugin.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-object.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-svg-feimage-element.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-svg-font.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-svg-use-element.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-track.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/allow-video.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/block-loading-user-agent-image-from-non-user-agent-content.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/default-src-object-data-url-allowed.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/default-src-object-data-url-blocked.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/default-src-object-data-url-blocked2.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/default-src-object-data-url-blocked3.html
               http/tests/security/contentSecurityPolicy/userAgentShadowDOM/video-controls-allowed.html
               http/tests/security/isolatedWorld/image-load-should-not-bypass-main-world-csp.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Pass shouldBypassMainWorldContentSecurityPolicy to ContentSecurityPolicy::allowConnectToSource().
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::loadSubimages): Modified to take argument ResourceLoaderOptions (unused).
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::fixedSize): Explicitly instantiate default ResourceLoaderOptions and pass
        pass it when requesting a cached image. Added FIXME comment to skip Content Security Policy check when
        the cross fade is applied to an element in a user agent shadow tree.
        (WebCore::CSSCrossfadeValue::loadSubimages): Take a ResourceLoaderOptions as an argument and passes it
        as appropriate.
        (WebCore::CSSCrossfadeValue::image): Explicitly instantiate default ResourceLoaderOptions and pass it
        when requesting a cached image. Added FIXME comment to skip Content Security Policy check when the cross
        fade is applied to an element in a user agent shadow tree.
        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage): Take a ResourceLoaderOptions as an argument and passes it
        as appropriate.
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::fixedSize): Explicitly instantiate default ResourceLoaderOptions and pass
        pass it when requesting a cached image. Added FIXME comment to skip Content Security Policy check when
        the cross fade is applied to an element in a user agent shadow tree.
        (WebCore::CSSFilterImageValue::loadSubimages): Take a ResourceLoaderOptions as an argument and passes it
        as appropriate.
        (WebCore::CSSFilterImageValue::loadSubimages): Explicitly instantiate default ResourceLoaderOptions and pass
        pass it when requesting a cached image. Added FIXME comment to skip Content Security Policy check when
        the cross fade is applied to an element in a user agent shadow tree.
        (WebCore::CSSFilterImageValue::image):
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::cachedFont): Take a boolean, isInitiatingElementInUserAgentShadowTree,
        so as to determine the appropriate CSP imposition. In particular, we skip the CSP check when the initiating element
        (e.g. SVG font-face element) is in a user agent shadow tree.
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Take a boolean, isInitiatingElementInUserAgentShadowTree, and passes
        it as appropriate.
        * css/CSSFontSelector.h:
        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::loadSubimages): Take a ResourceLoaderOptions as an argument and passes it
        as appropriate.
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::loadSubimages): Ditto.
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue): Ditto.
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet): Deleted.
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage): Deleted.
        * css/CSSImageValue.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules): Take a boolean, isInitiatingElementInUserAgentShadowTree, and passes
        it as appropriate.
        (WebCore::RuleSet::addRulesFromSheet): Added FIXME comment to skip Content Security Policy check when
        when stylesheet is in a user agent shadow tree.
        * css/RuleSet.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver): Determine whether the SVG font-face element is in a user agent shadow tree
        and pass the appropriate value when calling CSSFontSelector::addFontFaceRule(). Also, modernized code; used C++11 range
        -based for-loop instead of const_iterator idiom.
        (WebCore::StyleResolver::loadPendingSVGDocuments): Skip CSP check when requesting subresources as a byproduct of
        resolving style for an element in a user agent shadow tree.
        (WebCore::StyleResolver::loadPendingImage): Ditto.
        (WebCore::StyleResolver::loadPendingShapeImage): Ditto.
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet): Added FIXME comment to skip Content Security Policy check when
        when stylesheet is in a user agent shadow tree.
        * dom/Element.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet): Skip CSP check for an inline <style> that is in a user agent shadow tree.
        * dom/Node.cpp:
        (WebCore::Node::isInUserAgentShadowTree): Added.
        * dom/Node.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript): Skip CSP check for an external JavaScript script in a user agent shadow tree.
        (WebCore::ScriptElement::executeScript): Skip CSP check for an inline JavaScript script that is in a user agent shadow tree.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged): Skip CSP check when modifying the inline style of an element in a user
        agent shadow tree.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL): Skip CSP check for a <audio>, <video> in a user agent shadow tree.
        (WebCore::HTMLMediaElement::outOfBandTrackSources): Ditto.
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::canLoadURL): Ditto.
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired): Determine whether the <track> is in a user agent shadow tree
        and pass the appropriate value when calling TextTrackLoader::load().
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Do CSP check when loading a resource by default.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Skip CSP check for an image that is in a user agent shadow tree.
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::start): Instantiate ResourceLoaderOptions passing placeholder value ContentSecurityPolicyImposition::DoPolicyCheck.
        This value does not affect the request because we do not check the Content Security Policy for raw resource requests.
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader): Added FIXME comment to skip Content Security Policy check
        when when associated plugin element is in a user agent shadow tree.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Skip CSP check for a <iframe> in a user agent shadow tree.
        * loader/ResourceLoaderOptions.h: Defined enum class ContentSecurityPolicyImposition with explicit type uint8_t so
        as to provide a hint to the compiler (for better packing) when it computes the memory layout for struct that
        contains an instance of this class.
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions): Added argument contentSecurityPolicyImposition.
        (WebCore::ResourceLoaderOptions::contentSecurityPolicyImposition): Added.
        (WebCore::ResourceLoaderOptions::setContentSecurityPolicyImposition): Added.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::pluginIsLoadable): Skip CSP check for a plugin element that is in a user agent shadow tree.
        (WebCore::SubframeLoader::createJavaAppletWidget): Skip CSP check for an applet element that is in a user agent shadow tree.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load): Take a boolean, isInitiatingElementInUserAgentShadowTree, and sets the appropriate
        Content Security Policy imposition for the text track request.
        * loader/TextTrackLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): Skip CSP check for a user-specified stylesheet.
        (WebCore::CachedResourceLoader::canRequest): Only check the CSP of the page if specified in the resource loader options for the request.
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions): Add ContentSecurityPolicyImposition::DoPolicyCheck to the default
        resource loader options so that do check the CSP policy of the page before performing a resource request by default.
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::load): Take a ResourceLoaderOptions as an argument and passes it as appropriate.
        * loader/cache/CachedSVGDocumentReference.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading): Instantiate ResourceLoaderOptions passing placeholder value ContentSecurityPolicyImposition::DoPolicyCheck.
        This value does not affect the request because we do not check the Content Security Policy for raw resource requests.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs): Take an argument called overrideContentSecurityPolicy (defaults to false). When
        overrideContentSecurityPolicy := true, this function unconditionally returns true.
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers): Ditto.
        (WebCore::ContentSecurityPolicy::allowInlineScript): Ditto.
        (WebCore::ContentSecurityPolicy::allowInlineStyle): Ditto.
        (WebCore::ContentSecurityPolicy::allowEval): Ditto.
        (WebCore::ContentSecurityPolicy::allowPluginType): Ditto.
        (WebCore::ContentSecurityPolicy::allowScriptFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowObjectFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowImageFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowStyleFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowFontFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowMediaFromSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowConnectToSource): Ditto.
        (WebCore::ContentSecurityPolicy::allowFormAction): Ditto.
        (WebCore::ContentSecurityPolicy::allowBaseURI): Ditto.
        * page/ContentSecurityPolicy.h:
        * page/DOMSecurityPolicy.cpp:
        * page/EventSource.cpp:
        (WebCore::EventSource::create): Pass shouldBypassMainWorldContentSecurityPolicy to ContentSecurityPolicy::allowConnectToSource().
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading): Instantiate ResourceLoaderOptions passing placeholder value ContentSecurityPolicyImposition::DoPolicyCheck.
        This value does not affect the request because we do not check the Content Security Policy for raw resource requests.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource): Skip CSP check for a SVG FEImage element in a user agent shadow tree.
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont): Skip CSP check for a SVG font-face-uri element in a user agent shadow tree.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateExternalDocument): Skip CSP check for a SVG use element in a user agent shadow tree.
        * testing/Internals.cpp:
        (WebCore::Internals::ensureUserAgentShadowRoot): Added.
        * testing/Internals.h:
        * testing/Internals.idl: Added declaration for ensureUserAgentShadowRoot().
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Pass shouldBypassMainWorldContentSecurityPolicy to ContentSecurityPolicy::allowConnectToSource().

2015-07-06  Brent Fulgham  <bfulgham@apple.com>

        Ensure media playback is stopped during page close
        https://bugs.webkit.org/show_bug.cgi?id=146554
        <rdar://problem/18033944>

        Reviewed by Brady Eidson.

        * Modules/webaudio/AudioContext.h:
        (WebCore::WebAudio::hostingDocument): Added.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hostingDocument): Added.
        * dom/Document.cpp:
        (WebCore::Document::~Document): Call new 'stopAllMediaPlaybackForDocument' at destruction time.
        * platform/audio/PlatformMediaSession.h:
        Made PlatformMediaSessionManager a friend so it can access the protected 'client' accessor.
        Updated PlatformMediaSessionClient to require clients to have a "hostingDocument" member.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForDocument): Added. Only pauses
        playback on elements that match the provided document.
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForProcess): Added. Pauses playback
        on all elements in the current process.
        * platform/audio/PlatformMediaSessionManager.h:

2015-07-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Remove memory page reporting
        https://bugs.webkit.org/show_bug.cgi?id=146659

        Reviewed by Benjamin Poulain.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::~CompiledContentExtension):
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::compiledExtension):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::getInstruction):
        (WebCore::ContentExtensions::jumpSizeInBytes):
        (WebCore::ContentExtensions::getJumpSize):
        (WebCore::ContentExtensions::getJumpDistance):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsForDefaultStylesheetFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        Don't keep track of memory page usage.  It wasn't even correct anyways.

2015-07-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Increase maxNFASize
        https://bugs.webkit.org/show_bug.cgi?id=146656

        Reviewed by Benjamin Poulain.

        Because of memory improvements in r186375, r186374, and r186079,
        we can now increase the maximum number of NFA nodes in order to avoid
        long compile times of some large, complicated content blockers.
        This also improves the interpreting time of content blockers.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Increase maxNFASize to 75000 to avoid long compile times.

2015-07-06  Dean Jackson  <dino@apple.com>

        Memory corruption in WebGLRenderingContext::simulateVertexAttrib0
        https://bugs.webkit.org/show_bug.cgi?id=146652
        <rdar://problem/21567767>

        Follow-up fix.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):

2015-07-06  Dean Jackson  <dino@apple.com>

        Memory corruption in WebGLRenderingContext::simulateVertexAttrib0
        https://bugs.webkit.org/show_bug.cgi?id=146652
        <rdar://problem/21567767>

        Reviewed by Brent Fulgham.

        The expression "(numVertex + 1) * 4 * sizeof(GC3Dfloat)" could potentially
        overflow. Make it use checked arithmetic.

        I couldn't make a test case that reliably exercised this.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0): Used Checked<GC3Dsizeiptr>
        for calculating the size of the buffer.

2015-07-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [Mac] REGRESSION: (r181403) Enter/Exit full screen on 1x secondary display plugged into 2x Mac displays WebView as 1/4 size during transition
        https://bugs.webkit.org/show_bug.cgi?id=146651

        Reviewed by Simon Fraser.

        * platform/mac/WebCoreFullScreenPlaceholderView.mm: set layerContentsPlacement
        to NSViewLayerContentsPlacementScaleProportionallyToFit so AppKit resizes the
        content CALayer to fit in the WebView.

2015-07-06  Benjamin Poulain  <benjamin@webkit.org>

        Reduce the memory usage of the prefix tree
        https://bugs.webkit.org/show_bug.cgi?id=146615

        Reviewed by Sam Weinig.

        This patch introduces two little changes that reduces the size
        of the prefix tree by about 40%.

        First, the Terms are interned. The new class CombinedFiltersAlphabet
        takes care of keeping a unique version of each term for use
        by the CombinedURLFilters.

        Since each Term is fairly big but we have a small number of
        unique term, we significantly reduce the edge size.

        Second, the actions are no longer stored on each Vertex.
        They are now stored on the side, in a HashMap indexed by
        their Vertex.

        This works well because the Actions are sparse over the tree.
        Typically, only the leaves have actions. Internal vertices
        sometime get actions but that's uncommon.

        ---

        The next step to reduce the memory footprint would be to
        make PrefixTreeVertex into a custom packed structure instead
        of using a Vector.

        Such change is very invasive and more error prone so I decided
        against it for this patch.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/CombinedFiltersAlphabet.cpp: Copied from Source/WebCore/contentextensions/CombinedURLFilters.h.
        (WebCore::ContentExtensions::TermCreatorTranslator::hash):
        (WebCore::ContentExtensions::TermCreatorTranslator::equal):
        (WebCore::ContentExtensions::TermCreatorTranslator::translate):
        (WebCore::ContentExtensions::CombinedFiltersAlphabet::interned):
        (WebCore::ContentExtensions::CombinedFiltersAlphabet::memoryUsed):
        * contentextensions/CombinedFiltersAlphabet.h: Copied from Source/WebCore/contentextensions/CombinedURLFilters.h.
        (WebCore::ContentExtensions::CombinedFiltersAlphabet::TermPointerHash::hash):
        (WebCore::ContentExtensions::CombinedFiltersAlphabet::TermPointerHash::equal):
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::recursiveMemoryUsed):
        (WebCore::ContentExtensions::CombinedURLFilters::memoryUsed):
        (WebCore::ContentExtensions::prefixTreeVertexToString):
        (WebCore::ContentExtensions::recursivePrint):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::isValid):
        (WebCore::ContentExtensions::Term::destroy):
        (WebCore::ContentExtensions::Term::memoryUsed):
        (WebCore::ContentExtensions::Term::toString): Deleted.
        (WebCore::ContentExtensions::TermHash::hash): Deleted.
        (WebCore::ContentExtensions::TermHash::equal): Deleted.
        (WebCore::ContentExtensions::Term::Term): Deleted.
        (WebCore::ContentExtensions::Term::isKnownToMatchAnyString): Deleted.
        (WebCore::ContentExtensions::Term::hasFixedLength): Deleted.
        (WebCore::ContentExtensions::Term::operator==): Deleted.
        (WebCore::ContentExtensions::Term::hash): Deleted.
        (WebCore::ContentExtensions::Term::isDeletedValue): Deleted.
        (WebCore::ContentExtensions::Term::isUniversalTransition): Deleted.
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom): Deleted.

2015-07-06  Benjamin Poulain  <benjamin@webkit.org>

        [Content Extensions] Make the DFA transitions ranges instead of characters
        https://bugs.webkit.org/show_bug.cgi?id=146575

        Reviewed by Alex Christensen.

        This patch changes the DFA and code using the DFA to use ranges
        to represent the transitions between any two nodes.

        This patch builds on top of the tools introduced in r186079.

        The DFA structure is basically the same as ImmutableNFA but without
        any epsilon transitions.

        This patch introduces a transition iterator to make the DFA
        compatible with the existing algorithms.

        ---

        The DFA combiner is rebuilt on top of MutableRangeList. Combining the transitions
        of two nodes is one by merging the range list of each not into a common
        MutableRangeList.
        The data converter takes care of creating the signature of the combination.

        The code got simpler since MutableRangeList does most of the work now. It is also
        much faster.

        ---

        The minimizer is more intersting.

        With the current algorithm, we cannot resolve overlaps between ranges. On the other
        hand, the minimizer does not care about the symbol of the transitions if we are careful
        to partition transitions of the same symbol together.

        What I did was to turn the minimizer into a pure transition based one, BUT each
        "symbol" is actually an unbreakable range.

        The first step is to go over all the transitions of all the nodes and find the largest
        ranges such that the alphabet of interest is covered but there is not a single intersection
        between any two nodes (what I called "singular transitions" in the code). 

        This can be done efficiently with MutableRangeList.
        A little trick there is that I also used the converter to count how many real transition
        overlaps any singular transition.

        Those singular transitions become the alphabet of our minimizer. The "symbol" of our alphabet
        is simply the position of the singular transition in the list.

        The partition of transition is created by populating each set with all the transition that
        overlaps the symbols.
        Note that since the partition is created on the fly, the Transition structure used for
        repartitioning only contains the source of the transitions.

        Once our transition parition has been carefuly created, we can completely forget about
        the symbols and only work with subsets.

        Since the singular transitions have no overlap (unlike fallback transitions), this new minimizer
        will find the minimial solution for well formed input.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::memoryUsed):
        (WebCore::ContentExtensions::printTransitions):
        (WebCore::ContentExtensions::DFANode::actions): Deleted.
        (WebCore::ContentExtensions::DFANode::transitions): Deleted.
        (WebCore::ContentExtensions::DFANode::fallbackTransitionDestination): Deleted.
        (WebCore::ContentExtensions::DFANode::changeFallbackTransition): Deleted.
        (WebCore::ContentExtensions::DFANode::addFallbackTransition): Deleted.
        (WebCore::ContentExtensions::DFANode::containsTransition): Deleted.
        (WebCore::ContentExtensions::DFANode::kill): Deleted.
        (WebCore::ContentExtensions::DFA::debugPrintDot): Deleted.
        * contentextensions/DFA.h:
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::range):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::target):
        (WebCore::ContentExtensions::DFANode::RangeIterator::range):
        (WebCore::ContentExtensions::DFANode::RangeIterator::target):
        (WebCore::ContentExtensions::DFANode::RangeIterator::resetTarget):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::ranges):
        (WebCore::ContentExtensions::DFABytecodeCompiler::nodeTransitionsMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        * contentextensions/DFACombiner.cpp:
        (WebCore::ContentExtensions::DFAMerger::TargetConverter::convert):
        (WebCore::ContentExtensions::DFAMerger::TargetConverter::extend):
        (WebCore::ContentExtensions::DFAMerger::TargetConverter::setHalfSignature):
        (WebCore::ContentExtensions::DFAMerger::merge):
        (WebCore::ContentExtensions::DFAMerger::getOrCreateCombinedNode):
        (WebCore::ContentExtensions::DFAMerger::setHalfSignature): Deleted.
        (WebCore::ContentExtensions::DFAMerger::populateTransitions): Deleted.
        (WebCore::ContentExtensions::DFAMerger::populateFromFallbackTransitions): Deleted.
        (WebCore::ContentExtensions::DFAMerger::createTransitions): Deleted.
        (WebCore::ContentExtensions::DFAMerger::createFallbackTransitionIfNeeded): Deleted.
        * contentextensions/DFAMinimizer.cpp:
        (WebCore::ContentExtensions::DFAMinimizer::minimize):
        * contentextensions/DFANode.cpp: Added.
        (WebCore::ContentExtensions::DFANode::actions):
        (WebCore::ContentExtensions::DFANode::containsTransition):
        (WebCore::ContentExtensions::DFANode::kill):
        (WebCore::ContentExtensions::DFANode::canUseFallbackTransition):
        (WebCore::ContentExtensions::DFANode::bestFallbackTarget):
        * contentextensions/DFANode.h:
        (WebCore::ContentExtensions::CharRange::size):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::operator*):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::operator==):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::operator!=):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::operator++):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::first):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::last):
        (WebCore::ContentExtensions::DFANode::ConstRangeIterator::data):
        (WebCore::ContentExtensions::DFANode::IterableConstRange::begin):
        (WebCore::ContentExtensions::DFANode::IterableConstRange::end):
        (WebCore::ContentExtensions::DFANode::transitions):
        (WebCore::ContentExtensions::DFANode::RangeIterator::operator*):
        (WebCore::ContentExtensions::DFANode::RangeIterator::operator==):
        (WebCore::ContentExtensions::DFANode::RangeIterator::operator!=):
        (WebCore::ContentExtensions::DFANode::RangeIterator::operator++):
        (WebCore::ContentExtensions::DFANode::RangeIterator::first):
        (WebCore::ContentExtensions::DFANode::RangeIterator::last):
        (WebCore::ContentExtensions::DFANode::RangeIterator::data):
        (WebCore::ContentExtensions::DFANode::IterableRange::begin):
        (WebCore::ContentExtensions::DFANode::IterableRange::end):
        (WebCore::ContentExtensions::DFANode::hasFallbackTransition): Deleted.
        (WebCore::ContentExtensions::DFANode::transitionsLength): Deleted.
        (WebCore::ContentExtensions::DFANode::transitionsStart): Deleted.
        (WebCore::ContentExtensions::DFANode::resetTransitions): Deleted.
        (WebCore::ContentExtensions::DFANode::setHasFallbackTransitionWithoutChangingDFA): Deleted.
        * contentextensions/ImmutableNFA.h:
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::first):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::last):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::range):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator*): Deleted.
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator->): Deleted.
        * contentextensions/ImmutableNFANodeBuilder.h:
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::first):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::last):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator*): Deleted.
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::FakeRangeIterator::operator->): Deleted.
        * contentextensions/MutableRange.h:
        (WebCore::ContentExtensions::MutableRange::size): Deleted.
        * contentextensions/MutableRangeList.h:
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::first):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::last):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::data):
        (WebCore::ContentExtensions::MutableRangeList::extend):
        (WebCore::ContentExtensions::MutableRangeList::size):
        (WebCore::ContentExtensions::MutableRangeList::initializeFrom):
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NFAToDFA::convert):
        (WebCore::ContentExtensions::canUseFallbackTransition): Deleted.
        (WebCore::ContentExtensions::findBestFallbackTarget): Deleted.

2015-07-06  Timothy Hatcher  <timothy@apple.com>

        Fix ASSERT causing crashes in Inspector tests on the bots.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable): Reset stopwatch before starting it.

2015-07-06  Brady Eidson  <beidson@apple.com>

        Remove unused "m_isPrivate" flag on NetworkStorageSession.
        https://bugs.webkit.org/show_bug.cgi?id=146648

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::isPrivateBrowsingSession): Deleted.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Deleted.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Deleted.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Deleted.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Deleted.

2015-07-04  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add a dedicated Network tab that is always live
        https://bugs.webkit.org/show_bug.cgi?id=146568

        Make sure the executionStopwatch is always started and never stops so resource loads
        always get timestamps, even when Timeline is not recording.

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable): Start executionStopwatch.
        (WebCore::InspectorPageAgent::frameStartedLoading): Reset and start executionStopwatch.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart): Removed executionStopwatch code.
        (WebCore::InspectorTimelineAgent::internalStop): Ditto.

2015-07-02  Timothy Hatcher  <timothy@apple.com>

        Update the localized strings file.

        * English.lproj/Localizable.strings: Updated with the script.

2015-07-06  Zalan Bujtas  <zalan@apple.com>

        Crash: LayoutState root's container is nullptr when the layout root is detached.
        https://bugs.webkit.org/show_bug.cgi?id=146646
        rdar://problem/21371544

        Reviewed by Simon Fraser.

        This is a speculative fix to ensure that when the root of the LayoutState is detached
        we don't try to access its container (nullptr).
        This is related to trac.webkit.org/r185484.

        Not reproducible.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState): Deleted.

2015-07-06  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Inactive AirPlay route should automatically timeout
        https://bugs.webkit.org/show_bug.cgi?id=146642
        <rdar://problem/21602955>

        Automatically clear a media element's AirPlay connection after it has been paused
        for 60 minutes, or after 8 minutes if it played to the end before pausing.

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::WebMediaSessionManager): Initialize m_watchdogTimer.
        (WebCore::WebMediaSessionManager::clientStateDidChange): Schedule watchdog timer configuration
          if the client started playing or paused.
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Schedule watchdog timer configuration.
        (WebCore::WebMediaSessionManager::toString): Print watchdog configuration flag.
        (WebCore::WebMediaSessionManager::taskTimerFired): Call configureWatchdogTimer.
        (WebCore::WebMediaSessionManager::configureWatchdogTimer): New, start or stop watchdog timer.
        (WebCore::WebMediaSessionManager::watchdogTimerFired): Stop monitoring for targets, which 
          clears the route.
        * Modules/mediasession/WebMediaSessionManager.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): Set DidPlayToEnd when appropriate.

        * page/MediaProducer.h: Add DidPlayToEnd.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): Clear m_client, call
          stopMonitoringPlaybackTargets.
        (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Send a neutered 
          MediaPlaybackTarget when m_outputDeviceMenuController is NULL.
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Add logging.
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): Clear the menu
          controller to cancel the route.

2015-07-06  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix build errors with OpenGL ES
        https://bugs.webkit.org/show_bug.cgi?id=146626

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/ANGLEWebKitBridge.h: Include <GLES2/gl2.h>
        when building with OpenGL ES 2 support enabled.
        (WebCore::ANGLEShaderSymbol::isSampler): Don't test for
        OpenGL-specific GL_SAMPLER_2D_RECT_ARB value when OpenGL ES 2
        support is enabled.

2015-07-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStream custom constructor
        https://bugs.webkit.org/show_bug.cgi?id=146547

        Reviewed by Darin Adler.

        Removed custom binding.
        Made use of Dictionary in lieu of JSObject to reduce readable stream constructor parameter parsing.
        Added support for passing ExecState to construtor within binding generator.

        No change in behavior.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::create):
        * Modules/streams/ReadableStream.idl:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/JSReadableStreamCustom.cpp:
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::create):
        (WebCore::ReadableJSStream::ReadableJSStream):
        * bindings/js/ReadableJSStream.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/IDLAttributes.txt:

2015-07-06  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Promise-returning functions should reject promises if the callee is not of the expected type
        https://bugs.webkit.org/show_bug.cgi?id=146585

        Reviewed by Darin Adler.

        Updated binding generator to reject promise in case the casting of the thisValue is not working properly
        (i.e. the callee is not wrapping a DOM object of the expected class.

        Covered by rebased test and binding expectations.

        * bindings/js/JSDOMPromise.h:
        (WebCore::callPromiseFunction): Removed wrapper class parameter.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated binding expectations.
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithException):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentPromise):

2015-07-05  Chris Dumez  <cdumez@apple.com>

        [WK2] Current page's scroll position is lost when transferring sessionState from one view to another
        https://bugs.webkit.org/show_bug.cgi?id=146625
        <rdar://problem/21585268>

        Reviewed by Gavin Barraclough.

        Export HistoryController:saveScrollPositionAndViewStateToItem()
        so that it can be called from WebKit2.

        * loader/HistoryController.h:

2015-07-05  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r180582): background-attachment: local; does not scroll the background image when scrolling the the element's contents
        https://bugs.webkit.org/show_bug.cgi?id=146623

        Reviewed by Zalan Bujtas.
        
        r180582 erroneously asserted that m_destOrigin in BackgroundImageGeometry was unused.
        However, it is needed to compute the correct phase when the destination rect is
        altered by clipping.

        Test: fast/backgrounds/background-attachment-local.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderBoxModelObject.h:
        (WebCore::BackgroundImageGeometry::BackgroundImageGeometry):
        (WebCore::BackgroundImageGeometry::relativePhase):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawMaskForRenderer):

2015-07-05  Chris Dumez  <cdumez@apple.com>

        [WK2] WebBackForwardListItems' pageState is not kept up-to-date
        https://bugs.webkit.org/show_bug.cgi?id=146614
        <rdar://problem/21585268>

        Reviewed by Gavin Barraclough.

        WebBackForwardListItems' pageState on UIProcess-side were not kept
        up-to-date when it was updated on WebContent process side. This meant
        that we were losing the scroll position (among other things) when
        transferring the session state over from one view to another.

        We now call notifyHistoryItemChanged(item) after saving the scroll
        position and the view state on the HistoryItem. As a result, the
        WebBackForwardListProxy will send the updated pageState to the
        UIProcess.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::notifyChanged):
        * history/HistoryItem.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):

2015-07-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed Windows build fix after r186279.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::destroyVideoLayer):
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::destroyRenderer):

2015-07-04  Chris Dumez  <cdumez@apple.com>

        Drop RefPtr::clear() method
        https://bugs.webkit.org/show_bug.cgi?id=146556

        Reviewed by Brady Eidson.

        Drop RefPtr::clear() method in favor of "= nullptr;" pattern.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS 8 build.

        * editing/cocoa/HTMLConverter.mm:

2015-07-03  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r178097): HTMLSelectElement.add(option, undefined) prepends option to the list of options; should append to the end of the list of options
        https://bugs.webkit.org/show_bug.cgi?id=146566
        <rdar://problem/21663919>

        Reviewed by Ryosuke Niwa.

        HTMLSelectElement.add(X, undefined) is supposed to be equivalent to
        HTMLSelectElement.add(X) which should *append* X. The same is true
        for HTMLOptionsCollection.add(X, undefined).

        However, due to a bug in our bindings generator for overloaded
        operations, the actual behavior was not the expected one. The
        second overload would be chosen: add(X, index) and undefined would
        be converted as 0-index, which would *prepend* X.

        This patch fixes the bindings generator so that undefined is allowed
        for optional parameters of an overload operation, when doing the
        overload resolution.

        Tests:
        - fast/dom/HTMLSelectElement/add.html
        - fast/dom/HTMLSelectElement/options-collection-add.html
        - http/tests/websocket/tests/hybi/undefined-protocol.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheckExpression):
        Allow undefined value for optional parameters when doing the overload
        resolution.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors):
        * bindings/scripts/test/TestObj.idl:
        Add bindings tests coverage and rebaseline.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Fixed the Mavericks build after r186236.

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::url): Removed the export macro from this inline function.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed):

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * editing/cocoa/HTMLConverter.mm:

2015-07-03  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

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

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_UNREACHABLE_CODE,
        GCC_WARN_UNDECLARED_SELECTOR, and GCC_NO_COMMON_BLOCKS. Removed GCC_MODEL_TUNING.

        * WebCore.xcodeproj/project.pbxproj: Updated LastUpgradeCheck. Disabled -Wunreachable-code
        for two bison-generated source files. Updated for rename of WebScriptObject.h.

        * bindings/objc/WebScriptObject.mm:
        (-[WebUndefined dealloc]): Removed unreachable code and suppressed warning about not calling
        super.
        * bridge/objc/WebScriptObject.h: Renamed to WebScriptObjectProtocol.h to enabled inlcuding
        the other WebScriptObject.h.
        * bridge/objc/WebScriptObjectProtocol.h: Renamed from WebScriptObject.h.

        * bridge/objc/objc_class.mm: Updated for rename and included WebScriptObject.h because we
        use selectors declared in that file.

        * bridge/objc/objc_instance.mm: Ditto.
        (ObjCRuntimeMethod::create): Resolved ambiguity between JSC::JSValue and the Objective-C
        JSValue class.
        (ObjCRuntimeMethod::createStructure): Ditto.
        (ObjcInstance::invokeMethod): Ditto.
        (ObjcInstance::invokeObjcMethod): Ditto.
        (ObjcInstance::invokeDefaultMethod): Ditto.
        (ObjcInstance::setValueOfUndefinedField): Ditto.
        (ObjcInstance::getValueOfUndefinedField): Ditto.
        (ObjcInstance::defaultValue): Ditto.
        (ObjcInstance::stringValue): Ditto.
        (ObjcInstance::numberValue): Ditto.
        (ObjcInstance::booleanValue): Ditto.
        (ObjcInstance::valueOf): Ditto,

        * bridge/objc/objc_runtime.h: Moved definition of isFallbackMethod() from here to the
        implementation.
        * bridge/objc/objc_runtime.mm: Updated for rename and included WebScriptObject.h because we
        use selectors declared in that file.
        (JSC::Bindings::ObjcMethod::isFallbackMethod): Moved definition from the header to here.

        * bridge/objc/objc_utility.mm: Updated for rename.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addScrollbarPseudoClassType): Removed unreachable code.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        Added declarations to the WebCoreMovieObserver interface.
        (WebCore::MediaPlayerPrivateQTKit::disableUnsupportedTracks): Suppressed
        -Wundeclared-selector around invocation of a selector that is not declared anywhere.

2015-07-03  Kyounga Ra  <kyounga@alticast.com>

        Memory leak for a protected Element having pending events in ImageLoader. 
        https://bugs.webkit.org/show_bug.cgi?id=146538

        Reviewed by Brady Eidson.

        If ImageLoader is destroyed before an active derefElementTimer is fired, protected element's refCount never be zero..

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::updateRenderer):
        (WebCore::ImageLoader::updatedHasPendingEvent):
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:

2015-07-03  Daniel Bates  <dabates@apple.com>

        REGRESSION (r178097): JavaScript TypeError after clicking on compose button in Yahoo Mail
        https://bugs.webkit.org/show_bug.cgi?id=146515
        <rdar://problem/21348421>

        Reviewed by Chris Dumez.

        Fixes an issue where extra arguments passed to a Web IDL overloaded function, whose implementation
        is generated by the bindings generator script, are not ignored as per the note in section "Interface object [[Call]] method"
        of the Web IDL spec, <http://www.w3.org/TR/2012/CR-WebIDL-20120419/> (19 April 2012).

        Currently for an overloaded function the JavaScript bindings generator script emits code to
        throw a TypeError when it cannot find a candidate function that takes the same number of
        arguments as passed by a caller. Prior to the change made in bug #139179 (r178097), the
        bindings code for HTMLSelectElement.add() was written by hand and ignored extra arguments
        that were passed to it. Following this change, the bindings code for HTMLSelectElement.add()
        is generated by the bindings generator script. Therefore, we throw a TypeError when Yahoo Mail
        calls HTMLSelectElement.add() with extra arguments because the code emitted by the bindings
        generator script does not ignore them.

        * bindings/scripts/CodeGeneratorJS.pm:
        (LengthOfLongestFunctionParameterList): Added. Computes the length of longest overload parameter list.
        (GenerateOverloadedFunction): Emit code that ignores more arguments than LengthOfLongestFunctionParameterList().
        (GenerateOverloadedConstructorDefinition): Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12): Added; expected result for an overloaded
        function that takes a variadic number of Blob elements.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod): Update expected result. The added
        if-conditional expression for the IDL declaration overloadedMethod(Blob... blobArgs) is empty
        because we do not support overloading of functions with variadic arguments.
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod1):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors5): Added; expected
        result for an overloaded constructors that takes a variadic number of long arguments.
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors): Update expected
        result. The added if-conditional expression for the IDL declaration Constructor(long... longArgs) is empty
        because we do not support overloading of constructors with variadic arguments.
        * bindings/scripts/test/TestObj.idl: Added declaration overloadedMethod(Blob...). Also fixed
        typo in license block text.
        * bindings/scripts/test/TestOverloadedConstructors.idl: Added declaration Constructor(long... longArgs).
        Also fixed typo in license block text.

2015-07-03  Mario Sanchez Prada  <mario@endlessm.com>

        Crash on xLarge memory allocation using bmalloc on 32bit systems
        https://bugs.webkit.org/show_bug.cgi?id=146440

        Reviewed by Gustavo Noronha Silva.

        Disable the gcc's -ftree-sra optimization (automatically enabled
        with -O1 and higher levels) for WebCore and 32bit Intel architectures,
        as that causes the crash in bmalloc when allocating large amounts of
        memory from the texture mapper's tiled backing store implementation.

        * CMakeLists.txt: Pass -fno-free-sra to gcc on 32bit Intel architectures.

2015-07-03  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r186054
        https://bugs.webkit.org/show_bug.cgi?id=146592

        Reviewed by Eric Carlson.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-07-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStream and Reader cancel() custom binding
        https://bugs.webkit.org/show_bug.cgi?id=146458

        Reviewed by Darin Adler.

        Removed stream and reader cancel custom binding.
        Updated binding generator to correctly handle promise-based APIs with optional parameters.

        No behavior changes.

        * Modules/streams/ReadableStream.idl: Removed custom
        * Modules/streams/ReadableStreamReader.idl: Ditto.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::cancel): Deleted.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::cancel): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm: Handling of promise parameter in case of optional arguments.
        (GenerateParametersCheck):
        (GenerateReturnParameters): Utility function to generate return parameters (exception and promise).
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentPromise):
        * bindings/scripts/test/TestObj.idl:


2015-07-02  Doug Russell  <d_russell@apple.com>

        AX: Selection change as a result of focusing an element should include that 
        information in the intent
        https://bugs.webkit.org/show_bug.cgi?id=146533

        Reviewed by Chris Fleizach.

        Added focusChange flag to AXTextStateChangeIntent.
        Added intent support to selection logic called by Element::updateFocusAppearance().
        Added NSAccessibilityTextSelectionChangedFocus to mac notifications.

        Test: platform/mac/accessibility/selection-notification-focus-change.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        * accessibility/AXTextStateChangeIntent.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::setTextSelectionIntent):
        (WebCore::AccessibilityRenderObject::setFocused):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/Element.h:
        (WebCore::Element::defaultFocusTextStateChangeIntent):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent):
        (WebCore::FrameSelection::selectAll):
        * editing/FrameSelection.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::restoreCachedSelection):
        * html/HTMLTextFormControlElement.h:
        * page/EventHandler.cpp:
        (WebCore::setInitialKeyboardSelection):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):

2015-07-02  Przemek Piorkowski  <piorkowskiprzemyslaw@gmail.com>

        [EFL] test_ewk2_application_cache_manager has been failed since r185527
        https://bugs.webkit.org/show_bug.cgi?id=146016

        Reviewed by Gyuyoung Kim.

        In order to handle properly WebApplicationCacheManagerProxy implementation which use
        WebsiteDataRecord it is necessary to enable PUBLIC_SUFFIX_LIST for EFL. 
        Implementation of PUBLIC_SUFFIX_LIST already exists for soup so EFL can use it as well.

        * PlatformEfl.cmake: PublicSuffixSoup.cpp added to source files.

2015-07-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r186251.
        https://bugs.webkit.org/show_bug.cgi?id=146573

        caused crashes in webaudio tests (Requested by cdumez on
        #webkit).

        Reverted changeset:

        "Ensure media playback is stopped during page close"
        https://bugs.webkit.org/show_bug.cgi?id=146554
        http://trac.webkit.org/changeset/186251

2015-07-02  Brent Fulgham  <bfulgham@apple.com>

        Ensure media playback is stopped during page close
        https://bugs.webkit.org/show_bug.cgi?id=146554
        <rdar://problem/18033944>

        Reviewed by Zalan Bujtas.

        Add new method to Page class to stop all media playback. It just uses the process
        MediaSessionManager singleton to inform all hosted in a particular document to stop.

        * Modules/webaudio/AudioContext.h:
        (WebCore::WebAudio::hostingDocument): Added.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hostingDocument): Added.
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown): Call the new PlatformMediaSessionManager::stopAllMediaPlaybackForDocument
        method on document cleanup.
        * platform/audio/PlatformMediaSession.h:
        Made PlatformMediaSessionManager a friend so it can access the protected 'client' accessor.
        Updated PlatformMediaSessionClient to require clients to have a "hostingDocument" member.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::stopAllMediaPlaybackForDocument): Added. Only pauses
        playback on elements that match the provided document.
        * platform/audio/PlatformMediaSessionManager.h:

2015-07-02  Dean Jackson  <dino@apple.com>

        Tapping a video in Safari causes the video to flash gray for a quick moment
        https://bugs.webkit.org/show_bug.cgi?id=146570
        <rdar://problem/21325181>

        Reviewed by Brent Fulgham.

        On iOS, video elements should not show the tap highlight.

        * css/html.css:
        (video):

2015-07-02  Dean Jackson  <dino@apple.com>

        WebKit should use 80% white background for PiP indicator
        https://bugs.webkit.org/show_bug.cgi?id=146444
        <rdar://problem/21555726>

        Reviewed by Brent Fulgham.

        The designers wanted 80% white, not 80% black (r186104).
        I've also reverted the AirPlay background back to black.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status):
        (audio::-webkit-media-controls-wireless-playback-status.small):
        (audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):

2015-07-02  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Clear current AirPlay source before setting another
        https://bugs.webkit.org/show_bug.cgi?id=145959

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::clientStateDidChange): Don't make a client begin playing 
          to the target just because it has paused.
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): Always select a client that
          requrested the picker, and never consider paused clients when choosing a client to begin
          playing to the targer. Call setShouldPlayToPlaybackTarget(true) after all of the other 
          clients have been told to stop playing to the target.

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

        Allow the UIDelegate to customize an image preview
        https://bugs.webkit.org/show_bug.cgi?id=146557
        -and corresponding-
        rdar://problem/21657424

        Reviewed by Tim Horton.

        Add WEBCORE_EXPORT to use this in WK2.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::url):

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

        Add preference to disable all http-equiv.
        <rdar://problem/9091261> and https://bugs.webkit.org/show_bug.cgi?id=146553

        Reviewed by Sam Weinig.

        No new tests (Covered by existing test)

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * page/Settings.in:

2015-07-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStreamController.enqueue() custom binding
        https://bugs.webkit.org/show_bug.cgi?id=146455

        Reviewed by Darin Adler.

        Made enqueue not custom. Updated error to use Default=Undefined in IDL.

        No change in behavior.

        * Modules/streams/ReadableStreamController.h:
        (WebCore::ReadableStreamController::error): Removed unneeded variation of error.
        (WebCore::ReadableStreamController::enqueue): Calling ReadableJSStream enqueue method.
        * Modules/streams/ReadableStreamController.idl: Updated error with Default=Undefined and made enqueue not custom.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMException): Adding support for RangeError exceptions.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::constructJSReadableStreamController): Deleted.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::error): Updated to pass error value as parameter.
        (WebCore::ReadableJSStream::enqueue): Added exception throwing through ExceptionCode.
        (WebCore::ReadableJSStream::retrieveChunkSize): Ditto.
        * bindings/js/ReadableJSStream.h:
        * dom/ExceptionCode.h: Adding RangeError.

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

        [Content Extensions] Block synchronous XMLHTTPRequest.
        <rdar://problem/21573006> and https://bugs.webkit.org/show_bug.cgi?id=146271

        Reviewed by Alex Christensen.

        Test: http/tests/contentextensions/sync-xhr-blocked.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously): If content blocked, set up an error, clear
          the response, and clear the response data.

2015-07-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Aggregate profile call information on the backend to drastically reduce profile sizes
        https://bugs.webkit.org/show_bug.cgi?id=146536

        Reviewed by Timothy Hatcher.

        * inspector/TimelineRecordFactory.cpp:
        (WebCore::buildAggregateCallInfoInspectorObject):
        (WebCore::buildInspectorObject):
        Replace the array of Call objects with a single aggregated call info object.

2015-07-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] REGRESSION (r185124) CACFLayer handling broken
        https://bugs.webkit.org/show_bug.cgi?id=146530
        <rdar://problem/21642241>

        Reviewed by Tim Horton.

        At some point in the past, the set of LayerChange flags
        overflowed the default MSVC enum type of 'int'. This caused
        Windows rendering code to not receive various update notifications.

        Zalan's change moved the DebugIndicatorsChanged flag into that
        overflow set, which made it obvious that something was wrong.

        The fix is to tell the compiler to use a compatible base type
        for the enum.

        * platform/graphics/ca/GraphicsLayerCA.h: Prevent overflow.

2015-07-01  Alex Christensen  <achristensen@webkit.org>

        Reduce resolution of performance.now.
        https://bugs.webkit.org/show_bug.cgi?id=146531
        rdar://problem/20116796

        Reviewed by Simon Fraser.

        Test: http/tests/misc/webtiming-resolution.html

        * page/Performance.cpp:
        (WebCore::Performance::now):
        Floor the time returned by performance.now to the nearest 5 microseconds.

2015-07-01  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Build fix

        Reviewed by Brent Fulgham.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer enterPIPModeRedirectingVideoToLayer:]): Renamed from enterOptimizedFullScreenModeRedirectingVideoToLayer.
        (-[WebAVVideoLayer leavePIPMode]): Renamed from leaveOptimizedFullScreenMode.
        (-[WebAVVideoLayer enterOptimizedFullScreenModeRedirectingVideoToLayer:]): Deleted.
        (-[WebAVVideoLayer leaveOptimizedFullScreenMode]): Deleted.

2015-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Support bold and thin italicized system fonts
        https://bugs.webkit.org/show_bug.cgi?id=146463
        <rdar://problem/20948885>

        Reviewed by Darin Adler.

        Add the italicized attribute to font descriptors.

        Test: fast/text/weighted-italicized-system-font.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::createCTFontWithFamilyNameAndWeight):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamilySpecialCase):
        (WebCore::fontWithFamily):
        * platform/spi/cocoa/CoreTextSPI.h:

2015-07-01  Alex Christensen  <achristensen@webkit.org>

        Fix ANGLE Windows build after r186169.
        https://bugs.webkit.org/show_bug.cgi?id=146532

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Don't compile OpenGLShims.cpp or Extensions3DOpenGL.cpp on Windows 
        because Windows uses OpenGLES through ANGLE, not OpenGL.
        * platform/graphics/ANGLEWebKitBridge.h:
        Use OpenGLESShims.h on Windows instead of OpenGLShims.h.
        * platform/graphics/OpenGLESShims.h:
        Added needed definitions from OpenGL to compile successfully.
        * platform/graphics/win/GL/glext.h: Removed.

2015-07-01  Dean Jackson  <dino@apple.com>

        Disable the experimental WebGL2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=146526
        <rdar://problem/21641235>

        Reviewed by Myles Maxfield.

        Add (and disable) an ENABLE_WEBGL2 flag. Also protect
        anything that is specific to WebGL2.

        Covered by running the WebGL 1.0.2 conformance suite
        and our LayoutTests.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::toJS):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::is3dType):
        * html/canvas/WebGL2RenderingContext.cpp:
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLGetInfo.cpp:
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * html/canvas/WebGLVertexArrayObject.cpp:
        * html/canvas/WebGLVertexArrayObject.h:
        * html/canvas/WebGLVertexArrayObject.idl:

2015-07-01  Chris Dumez  <cdumez@apple.com>

        Regression(183998): Disqus comments take a very long time to load
        https://bugs.webkit.org/show_bug.cgi?id=146522
        <rdar://problem/21590601>

        Reviewed by Simon Fraser.

        Stop throttling requestAnimationFrame() in iframes that are not visible
        due to them being zero-sized or display:none. Those are usually utility
        iframes and throttling them is risky.

        Se still throttle requestAnimationFrame() in iframes that would be
        visible in theory but are currently not noticeable because they are
        outside the viewport.

        Test:
        - fast/animation/request-animation-frame-throttle-subframe.html
        - fast/animation/request-animation-frame-throttle-subframe-display-none.html
        - fast/animation/request-animation-frame-throttle-subframe-zero-size.html

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

2015-06-30  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r179168): Characters overlap after resizing the font on the copy-pasted Japanese text
        https://bugs.webkit.org/show_bug.cgi?id=146492

        Reviewed by Darin Adler.

        The bug was caused by WebKit serializing the used line-height size (e.g. 18px) in the copied content
        instead of string "normal" and removeStyleFromRulesAndContext failing to strip it down when text with
        a font that influences the line height got pasted. This is because the used value of line-height
        property of the context and the pasted content doesn't match when the context doesn't use the same font.

        Fixed the bug by not considering line-height as a list of editing properties we try to preserve. This is
        fine because we don't provide editing operations to directly manipulate line-height.

        Test: editing/pasteboard/cjk-line-height.html

        * editing/EditingStyle.cpp:
        (WebCore::editingProperties): Removed CSSPropertyLineHeight.

2015-06-30  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r184296): View keeps scrolling upward
        https://bugs.webkit.org/show_bug.cgi?id=146497
        <rdar://problem/21524942>

        Reviewed by Darin Adler.

        Avoid improperly triggering the ScrollController wheel event handling
        logic when the wheel event deltaX/deltaY are zero. On certain sites,
        this caused a programmatic JavaScript scroll to be triggered unexpectedly,
        scrolling the page back to some initial state.

        This bug was introduced while trying to make sure scrollbars were notified
        when the wheel event had come to an end. Revise that change so that we still
        follow the right code path for non-stretchable regions. However, make sure
        that for zero-delta wheel events we make sure to properly handle the wheel
        event phase. 

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::shouldForwardWheelEventsToParent): New helper function
        to reduce the complexity of the logic in handleWheelEvent.
        (WebCore::ScrollAnimatorMac::handleWheelEvent): When wheel events should be forwarded
        to the parent scroll view, if the event was handled or has no change in position
        trigger the 'handleWheelEventPhase' logic so that scrollbars are hidden, etc.

2015-06-30  Dean Jackson  <dino@apple.com>

        Hide the inline controls when going into PiP
        https://bugs.webkit.org/show_bug.cgi?id=146487
        <rdar://problem/19881159>

        Reviewed by Eric Carlson.

        When the presentation mode is PiP, toggle a class
        on the container element so that we can completely
        hide the control toolbar. The placard should still
        remain visible.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel-container.picture-in-picture): Add
        a rule that hides the toolbar when PiP is active.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.showControls):
        (ControllerIOS.prototype.handlePresentationModeChange): Toggle a
        class. Also fix a bug I noticed where exiting from PiP was
        not auto-hiding the controls until the user tapped.

2015-07-01  Matthew Daiter  <mdaiter@apple.com>

        Enable MEDIA_STREAM flag
        https://bugs.webkit.org/show_bug.cgi?id=145947
        <rdar://problem/21365829>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Added MEDIA_STREAM flag
        * Modules/mediastream/MediaStreamTrack.h:
        * WebCore.xcodeproj/project.pbxproj: Changed project headers to
        private headers
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::refreshCaptureDeviceList): Deleted.
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::startProducingData):
        (WebCore::AVMediaCaptureSource::stopProducingData):

2015-07-01  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r185016): Intermittent crash in WebCore::TextTrackList::remove
        https://bugs.webkit.org/show_bug.cgi?id=146493
        <rdar://problem/21511122>

        Reviewed by Eric Carlson.

        The m_textTracks member is frequently null checked during other operations, but
        was not checked during track removal. This needs to be corrected.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeTextTrack): Check that m_textTracks is
        not null before using it during track removal.

2015-07-01  Antti Koivisto  <antti@apple.com>

        PNG mask images are loaded with Accept:image/svg+xml
        https://bugs.webkit.org/show_bug.cgi?id=146509
        rdar://problem/21584740

        Reviewed by Simon Fraser.

        For some strange reason MaskImageOperation code loads all mask images, including non-SVG ones
        using CachedSVGDocument. Resulting bad accept header may cause server to reject the request.

        This is far from ideal but as a quick fix we can override the accept header for mask images to
        allow any image type.

        Test: http/tests/misc/mask-image-accept.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::acceptOverride):
        (WebCore::CachedResourceRequest::setAcceptOverride):
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h:
        (WebCore::CachedSVGDocumentReference::loadRequested):
        (WebCore::CachedSVGDocumentReference::setAcceptsAnyImageType):
        (WebCore::CachedSVGDocumentReference::document):
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::ensureCachedSVGDocumentReference):

2015-07-01  Jer Noble  <jer.noble@apple.com>

        [MSE] Failures on W3C media-source tests regarding MIME types
        https://bugs.webkit.org/show_bug.cgi?id=146499

        Reviewed by Eric Carlson.

        Tests: http/tests/media/media-source/SourceBuffer-abort-readyState.html
               http/tests/media/media-source/SourceBuffer-abort-removed.html
               http/tests/media/media-source/SourceBuffer-abort-updating.html
               http/tests/media/media-source/SourceBuffer-abort.html

        Multiple failures in the W3C media-source test suite due to two failures in isTypeSupported MIME type handling:
        - MIME types without codec strings were being rejected.
        - MIME types with codec strings which are rejected by the system are being reported as supported.

        For the first, stop rejecting MIME types with non-existent codec strings. For MIME types which do have non-empty
        codec strings, treat a "Maybe" response as unsupported.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):

2015-06-30  Alex Christensen  <achristensen@webkit.org>

        Update ANGLE to b11e2483742db884bd0af41f78f528240577356b.
        https://bugs.webkit.org/show_bug.cgi?id=145010

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::appendSymbol):
        (WebCore::getStructInfo):
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::cleanupCompilers):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        (WebCore::getValidationResultValue): Deleted.
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEShaderSymbol::isSampler):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):
        (WebCore::GraphicsContext3D::precisionsMatch):
        Update WebCore to reflect changes in ANGLE.

2015-06-30  Zalan Bujtas  <zalan@apple.com>

        Frame flattening: Hit-testing an iframe could end up destroying the associated inline tree context.
        https://bugs.webkit.org/show_bug.cgi?id=146447
        rdar://problem/20613501

        Reviewed by Simon Fraser.

        This patch ensures that the render tree associated with the document on which
        the hit-test is initiated does not get laid out, unless it was directly mutated prior to the hittest.

        Hit-test requirements:
        1. A clean the render tree before hit-testing gets propagated to the renderers.
        Document::updateLayout() ensures it by calling both updateStyleIfNeeded() and layout() not only on the current tree, but also
        on the ancestors if needed.

        2. No render tree mutation while hit-testing the renderers.

        When an iframe is being hit-tested, this hit-test could bubble down to the child frame's render view.
        In order to ensure #1, we call Document::updateLayout() on the current (subframe) document.
        If updateStyleIfNeeded() mutates the render tree, we mark it dirty for layout(). However frame flattening also
        marks the parent renderer (RenderIFrame) dirty.
        While calling layout() to clean the current render tree, we end up laying out the parent tree too.
        Laying out the parent tree could end up destroying the inline tree context from where the
        hittest just bubbled down. (InlineFlowBox -> RenderWidget -> RenderView).

        This patch protects the render tree from such unintentional inline tree mutation during hittesting.
        After the initial layout we set a layout disallow flag on the frame view to defer subsequent layouts.
        This patch only changes behavior when frame flattening is enabled, but in future we may always want to enable this.

        Test: fast/frames/flattening/hittest-iframe-while-style-changes-crash.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded): Deleted. -> Assertion in no longer valid.
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower):
        (WebCore::FrameFlatteningLayoutDisallower::~FrameFlatteningLayoutDisallower):
        (WebCore::RenderView::hitTest): Protect the render tree from subsequent layouts.

2015-06-30  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=90906

        Reviewed by Benjamin Poulain.

        Test: js/intl.html

        * Configurations/FeatureDefines.xcconfig: add ENABLE_INTL flag

2015-06-30  Wenson Hsieh  <whsieh@berkeley.edu>

        scroll-snap-points do not work very well with mechanical scroll wheel events
        https://bugs.webkit.org/show_bug.cgi?id=142501
        <rdar://problem/20093511>

        Reviewed by Brent Fulgham.

        Stateless scroll events generated by scrolling with a mechanical mouse wheel now trigger scroll
        snapping after a fixed delay.

        Test: platform/mac-wk2/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-overflow-stateless.html

        * platform/cocoa/ScrollController.h: Added member to track stateless scrolling.
        * platform/cocoa/ScrollController.mm: Added constant for delay for stateless scroll snapping.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Triggers timer upon stateless scroll events.
        (WebCore::ScrollController::horizontalScrollSnapTimerFired): Timer now handles stateless scrolling updates.
        (WebCore::ScrollController::verticalScrollSnapTimerFired): See above.
        (WebCore::ScrollController::beginScrollSnapAnimation): Handles stateless scroll snapping.

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Gtk and EFL builds.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::flushPendingLayerChanges):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Missing tiles inside position:fixed on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=146485
        rdar://problem/21226861

        Reviewed by Tim Horton.

        Layer flushing adjusts the coverage rect for tiled layers, but does so at times
        when position:fixed layers are moved around by the scrolling tree. The computed
        coverage rect then doesn't reflect the layer's on-screen position, causing missing
        tiles.

        Fix by pushing the notion of being in a "stable state" onto FrameView, and passing
        that state into the layer flush. When not in a stable state, flushing doesn't change
        the visible and coverage rects for layers that are viewport-constrained.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        * page/FrameView.h: Remove some velocity-related data members that were unused.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::flushCompositingState):
        (WebCore::GraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): If this is a viewport-constrained
        layer, and the viewport is not stable, don't touch the rects.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::CommitState::CommitState):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Rename GraphicsLayer's allowsBackingStoreDetachment to isViewportConstrained
        https://bugs.webkit.org/show_bug.cgi?id=146483

        Reviewed by Tim Horton.

        What GraphicsLayer really needs to know is whether some other thread/process
        is moving its platform layers around behind its back, and this is is better
        expressed as "isViewportConstrained" rather than "allowsBackingStoreDetachment".
        
        The sense of the flag is flipped, and boolean logic adjusted accordingly.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setIsViewportConstrained):
        (WebCore::GraphicsLayer::isViewportConstrained):
        (WebCore::GraphicsLayer::setAllowsBackingStoreDetachment): Deleted.
        (WebCore::GraphicsLayer::allowsBackingStoreDetachment): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setIsScrollCoordinatedWithViewportConstrainedRole):

2015-06-30  Dean Jackson  <dino@apple.com>

        CABackdropFilter should set windowServerAware to false
        https://bugs.webkit.org/show_bug.cgi?id=146469
        <rdar://problem/21618614>

        Reviewed by Simon Fraser.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::PlatformCALayerCocoa): Set windowServerAware
        to false on Mac (it's not available on iOS).

2015-06-30  Chris Dumez  <cdumez@apple.com>

        Rolling out r175171
        https://bugs.webkit.org/show_bug.cgi?id=146470
        <rdar://problem/21349934>

        Unreviewed, rolling out <http://trac.webkit.org/changeset/175171>. It
        wasn't a huge win and Brady says it caused crash at
        <rdar://problem/21349934>.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):

2015-06-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Reduce rendering frames "Other" time by instrumenting compositing
        https://bugs.webkit.org/show_bug.cgi?id=146168

        Reviewed by Brian Burg.

        Added Inspector instrumentation for measuring CoreAnimation compositing time. We mark the start of a composite
        event when the LayerFlushScheduler triggers a scheduled layer flush. InspectorController now exports a function
        for marking the end of the composite event, which should be called during the CA transaction post-commit phase
        (based on platform support). Lacking platform support, the event is considered complete after CoreAnimation
        runloop observers have run.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didComposite):
        * inspector/InspectorController.h:
        New export for instrumentation in WebKit2.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willCompositeImpl):
        (WebCore::InspectorInstrumentation::didCompositeImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willComposite):
        (WebCore::InspectorInstrumentation::didComposite):
        Plumbing for new instrumentation.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::didComposite):
        (WebCore::toProtocol):
        * inspector/InspectorTimelineAgent.h:
        New Composite event type and instrumentation.

        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        Hook for start of compositing.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        New header include and interface declaration.

2015-06-30  Beth Dakin  <bdakin@apple.com>

        The bounds on InteractionInformationAtPosition should be more precise
        https://bugs.webkit.org/show_bug.cgi?id=146468
        -and corresponding-
        rdar://problem/20739834

        Reviewed by Enrica Casucci and Simon Fraser.

        Export absoluteContentQuad().
        * rendering/RenderBox.h:

2015-06-30  Zalan Bujtas  <zalan@apple.com>

        Addressing post-review comments in r185756.

        * html/RubyTextElement.cpp:
        (WebCore::RubyTextElement::createElementRenderer):

2015-06-30  Zalan Bujtas  <zalan@apple.com>

        Addressing post-review comments in r185916

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):

2015-06-30  Matt Rajca  <mrajca@apple.com>

        MediaSession: Use setSessionInternal to set the default media session in HTMLMediaElement's constructor
        https://bugs.webkit.org/show_bug.cgi?id=146465

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):

2015-06-30  Matt Rajca  <mrajca@apple.com>

        Media Session: implement algorithm for updating a media element's session (6.1)
        https://bugs.webkit.org/show_bug.cgi?id=146460

        Reviewed by Darin Adler.

        In addition to storing a pointer to the new media session, we now:

        - pause the media element if it is 'active' in the current media session
        - remove the media element from the current media session
        - release the current media session if there are no more active media elements
        - set the default media session if the new media session is null
        - update the 'kind' attribute to match the kind of the new media session

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::isMediaElementActive):
        (WebCore::MediaSession::hasActiveMediaElements):
        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSession):
        (WebCore::HTMLMediaElement::setSessionInternal):
        * html/HTMLMediaElement.h:

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Get rid of unused WKSI functions
        https://bugs.webkit.org/show_bug.cgi?id=146443

        Reviewed by Tim Horton.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):
        Just call CGPathAddRoundedRect directly.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Finish pulling must always be done asynchronously as it is the expected promise behavior (according to the spec)
        https://bugs.webkit.org/show_bug.cgi?id=146408

        Reviewed by Darin Adler.

        Current tests cover the case already.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::pull): Call finishPull() in a postTask to delay it and simulate the promise
        resolution.

2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Synced bad strategy test with reference implementation
        https://bugs.webkit.org/show_bug.cgi?id=146411

        Reviewed by Darin Adler.

        Current tests cover the case.

        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::retrieveChunkSize): Check for negative size then running the JavaScript function.

2015-06-30  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStream.getReader() custom binding
        https://bugs.webkit.org/show_bug.cgi?id=146404

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::getReader): Updated to take an exception.
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStream.idl: Updated to remove custom binding.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::getReader): Deleted.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::constructJSReadableStreamReader): Updated to pass an exception to getReader.

2015-06-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStreamReader.closed should use DOMPromise
        https://bugs.webkit.org/show_bug.cgi?id=146406

        Reviewed by Darin Adler.

        Added storage of ClosedPromise as Optional of ReadableStream.
        Updated code accordingly.

        Covered by existing tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::clearCallbacks):
        (WebCore::ReadableStream::releaseReader):
        (WebCore::ReadableStream::changeStateToErrored):
        (WebCore::ReadableStream::closed):
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::closed):
        * Modules/streams/ReadableStreamReader.h:
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):

2015-06-29  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] WKWebViews in Facebook app start off black
        https://bugs.webkit.org/show_bug.cgi?id=146445
        rdar://problem/21600433

        Reviewed by Tim Horton.

        If -isOpaque is toggled on a WKWebView, we failed to make the page tiles non-opaque
        for a while. After r183775, RenderLayerCompositor::rootBackgroundTransparencyChanged() was called,
        but only considered the computed document background color, and not the view transparency.
        
        Fix by having rootBackgroundTransparencyChanged() simply use viewHasTransparentBackground(),
        which checks the FrameView transparency. Now we just need to store a transparency bool rather
        than the old color (we only checked its alpha anyway).

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

2015-06-29  Dean Jackson  <dino@apple.com>

        WebKit should use 80% black background for PiP indicator
        https://bugs.webkit.org/show_bug.cgi?id=146444
        <rdar://problem/21555726>

        Reviewed by Sam Weinig.

        Change the black background to a slightly less black background.
        This also involved making the placard artwork white, in order
        to keep it visible against the new grey.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status):
        (audio::-webkit-media-controls-wireless-playback-status.small):
        (audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):

2015-06-29  Brady Eidson  <beidson@apple.com>

        Flag sync XHRs from the network process so they can be handled appropriately.
        <rdar://problem/21579162> and https://bugs.webkit.org/show_bug.cgi?id=146441

        Reviewed by Darin Adler.

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::loadingSynchronousXHR): Added so clients of asynchronous
          loads can signal they should be treated like synchronous loads at the platform level.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start): Adjust SchedulingBehavior based on the client.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Adjust SchedulingBehavior based on the client.

2015-06-29  Chris Fleizach  <cfleizach@apple.com>

        AX: PlatformSpeechSynthesizer code doesn't catch Objective-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=146419

        Reviewed by Simon Fraser.

        Make sure ObjC exception resulting from calling into the platform cause problems in WebKit.

        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        (-[WebSpeechSynthesisWrapper pause]):
        (-[WebSpeechSynthesisWrapper resume]):
        (-[WebSpeechSynthesisWrapper cancel]):
        (-[WebSpeechSynthesisWrapper speechSynthesizer:didStartSpeechUtterance:]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        (WebCore::PlatformSpeechSynthesizer::pause):

2015-06-29  Matt Rajca  <mrajca@apple.com>

        Removing an element from a media session should also remove it from the sets of active participating elements
        https://bugs.webkit.org/show_bug.cgi?id=146420

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::removeMediaElement):

2015-06-29  Dean Jackson  <dino@apple.com>

        Temporarily disable PICTURE_SIZES
        https://bugs.webkit.org/show_bug.cgi?id=146435
        <rdar://problem/21087013>

        Reviewed by Tim Horton.

        Temporarily disable PICTURE_SIZES because it causes problems with out
        of date <picture> polyfills.

        * Configurations/FeatureDefines.xcconfig:

2015-06-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * editing/cocoa/HTMLConverter.mm:
        * platform/spi/cocoa/NSAttributedStringSPI.h:

2015-06-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/cocoa/NSAttributedStringSPI.h:

2015-06-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/cocoa/NSAttributedStringSPI.h:

2015-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Font panel doesn't get updated when bolding text via cmd+b in Mail on OS X
        https://bugs.webkit.org/show_bug.cgi?id=146379

        Reviewed by Darin Adler.

        The bug was caused by WebKit not updating the font panel when the typing style changes.
        There was also a bug that WebKit never updated font attributes on OS X.

        Fixed the bugs by always updating the font panel after applying style instead of only
        when the selection changes and setting the font attributes.

        I tried really had to write a WebKit API test but I couldn't get it to work so there are
        no new tests :(

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::shouldApplyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::selectionStartHasStyle):
        (WebCore::Editor::document):
        (WebCore::Editor::styleForSelectionStart): Deleted.
        * editing/Editor.h:
        * editing/cocoa/EditorCocoa.h: Added. Shares the declaration for NSUnderlineStyle in iOS.
        * editing/cocoa/EditorCocoa.mm: Added.
        (WebCore::Editor::styleForSelectionStart): Moved from Editor.cpp
        (WebCore::Editor::getTextDecorationAttributesRespectingTypingStyle): Extracted from iOS's
        fontAttributesForSelectionStart implementation.
        * editing/cocoa/HTMLConverter.mm:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        * loader/EmptyClients.h:
        * page/EditorClient.h:

2015-06-29  Matt Rajca  <mrajca@apple.com>

        MediaSession: use a HashSet for the collection of participating elements
        https://bugs.webkit.org/show_bug.cgi?id=146421

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::addMediaElement):
        (WebCore::MediaSession::removeMediaElement):
        * Modules/mediasession/MediaSession.h:

2015-06-29  Dean Jackson  <dino@apple.com>

        Setting to enable/disable media controls sizing on page zoom
        https://bugs.webkit.org/show_bug.cgi?id=146423
        <rdar://problem/18379634>

        Reviewed by Eric Carlson.

        Add a new setting "MediaControlsScaleWithPageZoom" that can disable
        the behaviour we currently implement on iOS, where the media controls
        attempt to remain at a fixed size independent of page zoom.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMediaControlsDependOnPageScaleFactor): Do not
        set this value to true if the new setting is disabled.
        * page/Settings.cpp:
        * page/Settings.in: Add the new setting.

2015-06-29  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Update the MediaStream API
        https://bugs.webkit.org/show_bug.cgi?id=146313

        Reviewed by Eric Carlson.

        Update the MediaStream API (MediaStream, MediaStreamTrack and
        RealtimeMediaSource) to match the Media Capture and Stream
        specification [1]. Notable changes:

        Updated event handling to synchronously update corresponding
        state/attributes as events are dispatched.

        Removed 'new' state from MediaStreamTrack. A track is either 'live' or
        'ended'. As a consequence 'started' event is also removed.

        MediaStreamTrack always has a source (disconnected source concept was
        removed from the spec). Therefore, more state can be kept at the source
        without going away.

        Calculate MediaStream.active internally, from the track set, instead of
        setting it externally.

        Updated RealtimeMediaSource Observer interface.

        Replaced MediaStream's separate audio and video track lists with a
        single track set (more aligned with spec).

        Updated MediaStream constructor to adopt instead of clone track
        arguments (or tracks from MediaStream argument).

        Removed MediaStreamTrack.getSources() and corresponding test (removed
        from spec).

        Test status: 3 added, 8 existing enabled (some updated) and 1 removed.

        [1] http://w3c.github.io/mediacapture-main/archives/20150523/getusermedia.html

        Tests: fast/mediastream/MediaStreamTrack-clone.html
               fast/mediastream/MediaStreamTrack-kind.html
               fast/mediastream/MediaStreamTrack-stop.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::getAudioTracks):
        (WebCore::MediaStream::getVideoTracks):
        (WebCore::MediaStream::getTracks):
        (WebCore::MediaStream::contextDestroyed):
        (WebCore::MediaStream::trackDidEnd):
        (WebCore::MediaStream::activeStatusChanged):
        (WebCore::MediaStream::didAddTrackToPrivate):
        (WebCore::MediaStream::didRemoveTrackFromPrivate):
        (WebCore::MediaStream::internalAddTrack):
        (WebCore::MediaStream::internalRemoveTrack):
        (WebCore::MediaStream::scheduleActiveStateChange):
        (WebCore::MediaStream::activityEventTimerFired):
        (WebCore::MediaStream::trackVectorForType):
        (WebCore::MediaStream::~MediaStream): Deleted.
        (WebCore::MediaStream::registry): Deleted.
        (WebCore::MediaStream::addObserver): Deleted.
        (WebCore::MediaStream::removeObserver): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind):
        (WebCore::MediaStreamTrack::id):
        (WebCore::MediaStreamTrack::label):
        (WebCore::MediaStreamTrack::enabled):
        (WebCore::MediaStreamTrack::setEnabled):
        (WebCore::MediaStreamTrack::muted):
        (WebCore::MediaStreamTrack::readonly):
        (WebCore::MediaStreamTrack::remote):
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::ended):
        (WebCore::MediaStreamTrack::clone):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::states):
        (WebCore::MediaStreamTrack::getCapabilities):
        (WebCore::MediaStreamTrack::applyConstraints):
        (WebCore::MediaStreamTrack::trackEnded):
        (WebCore::MediaStreamTrack::trackMutedChanged):
        (WebCore::MediaStreamTrack::stop):
        (WebCore::MediaStreamTrack::getConstraints): Deleted.
        (WebCore::MediaStreamTrack::addObserver): Deleted.
        (WebCore::MediaStreamTrack::removeObserver): Deleted.
        (WebCore::MediaStreamTrack::configureTrackRendering): Deleted.
        (WebCore::MediaStreamTrack::activeDOMObjectName): Deleted.
        (WebCore::MediaStreamTrack::canSuspendForPageCache): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didRemoveRemoteStream): Deleted.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCreateStream):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::tracks):
        (WebCore::MediaStreamPrivate::updateActiveState):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        * platform/mediastream/MediaStreamPrivate.h:
        (WebCore::MediaStreamPrivate::active): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create):
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::label):
        (WebCore::MediaStreamTrackPrivate::setEnabled):
        (WebCore::MediaStreamTrackPrivate::endTrack):
        (WebCore::MediaStreamTrackPrivate::clone):
        (WebCore::MediaStreamTrackPrivate::type):
        (WebCore::MediaStreamTrackPrivate::applyConstraints):
        (WebCore::MediaStreamTrackPrivate::sourceStopped):
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged):
        (WebCore::MediaStreamTrackPrivate::preventSourceFromStopping):
        (WebCore::MediaStreamTrackPrivate::muted): Deleted.
        (WebCore::MediaStreamTrackPrivate::readonly): Deleted.
        (WebCore::MediaStreamTrackPrivate::remote): Deleted.
        (WebCore::MediaStreamTrackPrivate::constraints): Deleted.
        (WebCore::MediaStreamTrackPrivate::states): Deleted.
        (WebCore::MediaStreamTrackPrivate::capabilities): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::id):
        (WebCore::MediaStreamTrackPrivate::ended):
        (WebCore::MediaStreamTrackPrivate::enabled):
        (WebCore::MediaStreamTrackPrivate::setClient):
        (WebCore::MediaStreamTrackPrivate::source): Deleted.
        (WebCore::MediaStreamTrackPrivate::client): Deleted.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        (WebCore::RealtimeMediaSource::reset):
        (WebCore::RealtimeMediaSource::setMuted):
        (WebCore::RealtimeMediaSource::readonly):
        (WebCore::RealtimeMediaSource::stop):
        (WebCore::RealtimeMediaSource::requestStop):
        (WebCore::RealtimeMediaSource::addObserver): Deleted.
        (WebCore::RealtimeMediaSource::removeObserver): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        (WebCore::RealtimeMediaSource::stopped):
        (WebCore::RealtimeMediaSource::id): Deleted.
        (WebCore::RealtimeMediaSource::muted): Deleted.
        (WebCore::RealtimeMediaSource::setReadonly): Deleted.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Deleted.
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Deleted.

2015-06-29  Benjamin Poulain  <benjamin@webkit.org>

        Make the NFA transitions range-based
        https://bugs.webkit.org/show_bug.cgi?id=146338

        Reviewed by Alex Christensen.

        Change the NFA to use range based transition for any kind of transition.
        The fallback transition is also absorbed as ranges.

        Previously, the NFA would only have single transitions and a fallback
        transition for all cases not covered by single transitions.

        The problem with that design was that character ranges (e.g. [a-z]) were
        extended as individual transitions. Something like [^a] would cover
        most of the alphabet with transitions.
        When converting the NFA to DFA, the time is proportional to the number of states
        multiplied by the number of transitions. With many individual transitions,
        the run time was an order of magnitude higher than what we want.

        This patch changes the NFA to only handle ranges of characters. A single transition
        becomes a range with the character as first and last character in the range
        ('a' becomes 'a' to 'a').
        Ranges of characters are handled direclty (e.g. [a-z] becomes a single 'a' to 'z' transition).

        In the context of the state machines, ranges have identifies (the target of the transitions).
        When two ranges collide, they have to be split such that each part retain its target
        except the intersection that gets the union of the targets.

        Handling the union of ranges efficiently is critical because we have to do
        it for every NFA node in any subset when building the DFA. The helper
        class that does that is MutableRange.

        The union of ranges is done efficiently because of preconditions on our list of ranges:
        -The ranges must be sorted.
        -No range in a list can intersect any other range in the same list.

        To merge two ranges, we can go over them in order and split them part by part.
        It is easy to find what goes where because they are both sorted and we can
        compare the characters of each to know how to move forward.
        The time to merge 2 range list is proportional to O(n+m) where 'n' and 'm' are
        the number of ranges in each list.

        Since taking the union of two lists usually create new ranges, we have to allocate
        those somewhere efficiently. To do that, MutableRange support an inline capacity,
        which is used for the NFAToDFA Convertion.

        ---

        With ranges, the NFA-to-DFA conversion changes very little:
        -Each NFA nodes contains a list of ranges and each range has a list of targets.
        -The subset construction select any number of NFA nodes corresponding to
         a single deterministic state.
        -For the subset, we can use MutableRange to merge the ranges of every
         NFA node in the set. The resulting list has rangeis with targets corresponding
         to the union of all the transitions.
        -We go over all the ranges the same way we used to go over the transitions.
         Since the DFA does not support ranges, the ranges are spread as individual
         transitions + fallback transition.

        ---

        With the efficient merging solved, we still need the actual NFA to use ranges
        instead of individual transitions.

        I could have used MutableRange for that but it is not the most compact
        way to represent ranges that do not need merging.

        Instead, the NFA uses a custom structure: ImmutableNFA. It is basically
        the same thing, but in that one you cannot change a list of range
        after creating it.

        Consequently, the sorted ranges in ImmutableNFA are also subsequent
        in memory, which is really nice to go over them efficiently
        when merging ranges in the NFA-to-DFA conversion. :)

        When building the NFA, we don't know all the transitions when creating
        each node, BUT we know that we have very few node "unfinished" at any
        time. Since we build by going depth-first in the prefix-tree, we only
        have the max-depth of live nodes in the worst case.

        To help building the NFA out of the prefix tree, we have
        ImmutableNFANodeBuilder. It keeps all the informations about a NFA node,
        but in a non-compact, mutable form. When a ImmutableNFANodeBuilder
        is destroyed, it serialize the information into the immutable NFA.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::empty):
        * contentextensions/DFA.h:
        * contentextensions/ImmutableNFA.h: Added.
        (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator*):
        (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator->):
        (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator==):
        (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator!=):
        (WebCore::ContentExtensions::ImmutableNFA::ConstTargetIterator::operator++):
        (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::begin):
        (WebCore::ContentExtensions::ImmutableNFA::IterableConstTargets::end):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator*):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator->):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator==):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator!=):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::operator++):
        (WebCore::ContentExtensions::ImmutableNFA::ConstRangeIterator::data):
        (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::begin):
        (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::end):
        (WebCore::ContentExtensions::ImmutableNFA::IterableConstRange::debugPrint):
        (WebCore::ContentExtensions::ImmutableNFA::transitionsForNode):
        (WebCore::ContentExtensions::ImmutableNFA::root):
        (WebCore::ContentExtensions::ImmutableNFA::finalize):
        (WebCore::ContentExtensions::ImmutableNFA::memoryUsed):
        * contentextensions/ImmutableNFANodeBuilder.h: Added.
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::ImmutableNFANodeBuilder):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::~ImmutableNFANodeBuilder):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::addTransition):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::addEpsilonTransition):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::setActions):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::operator=):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::finalize):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::sinkActions):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::sinkTransitions):
        (WebCore::ContentExtensions::ImmutableNFANodeBuilder::sinkEpsilonTransitions):
        * contentextensions/MutableRange.h: Added.
        (WebCore::ContentExtensions::MutableRange::MutableRange):
        (WebCore::ContentExtensions::MutableRange::operator=):
        (WebCore::ContentExtensions::MutableRange::size):
        * contentextensions/MutableRangeList.h: Added.
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::operator*):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::operator->):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::operator==):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::operator!=):
        (WebCore::ContentExtensions::MutableRangeList::ConstIterator::operator++):
        (WebCore::ContentExtensions::MutableRangeList::begin):
        (WebCore::ContentExtensions::MutableRangeList::end):
        (WebCore::ContentExtensions::MutableRangeList::appendRange):
        (WebCore::ContentExtensions::MutableRangeList::extend):
        (WebCore::ContentExtensions::MutableRangeList::isEmpty):
        (WebCore::ContentExtensions::MutableRangeList::clear):
        (WebCore::ContentExtensions::MutableRangeList::debugPrint):
        (WebCore::ContentExtensions::MutableRangeList::insertBetween):
        (WebCore::ContentExtensions::MutableRangeList::initializeFrom):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        (WebCore::ContentExtensions::NFA::NFA): Deleted.
        (WebCore::ContentExtensions::NFA::createNode): Deleted.
        (WebCore::ContentExtensions::NFA::memoryUsed): Deleted.
        (WebCore::ContentExtensions::NFA::addTransition): Deleted.
        (WebCore::ContentExtensions::NFA::addEpsilonTransition): Deleted.
        (WebCore::ContentExtensions::NFA::addTransitionsOnAnyCharacter): Deleted.
        (WebCore::ContentExtensions::NFA::setActions): Deleted.
        (WebCore::ContentExtensions::NFA::graphSize): Deleted.
        (WebCore::ContentExtensions::NFA::restoreToGraphSize): Deleted.
        (WebCore::ContentExtensions::printRange): Deleted.
        (WebCore::ContentExtensions::printTransitions): Deleted.
        * contentextensions/NFA.h:
        (WebCore::ContentExtensions::NFA::root): Deleted.
        (WebCore::ContentExtensions::NFA::addRuleId): Deleted.
        * contentextensions/NFANode.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::epsilonClosureExcludingSelf):
        (WebCore::ContentExtensions::resolveEpsilonClosures):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        (WebCore::ContentExtensions::DataConverterWithEpsilonClosure::convert):
        (WebCore::ContentExtensions::DataConverterWithEpsilonClosure::extend):
        (WebCore::ContentExtensions::createCombinedTransition):
        (WebCore::ContentExtensions::canUseFallbackTransition):
        (WebCore::ContentExtensions::findBestFallbackTarget):
        (WebCore::ContentExtensions::getOrCreateDFANode):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        (WebCore::ContentExtensions::populateTransitions): Deleted.
        * contentextensions/NFAToDFA.h:
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::generateGraph):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        (WebCore::ContentExtensions::Term::Term::generateGraph): Deleted.

2015-06-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should allow using JSC::Value for "any" parameter in lieu of ScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=146403

        Reviewed by Darin Adler.

        Covered by existing tests.

        Enabling new APIs to use JSC::JSValue by using implicit case from ScriptValue to JSC::JSValue.
        Updated binding generator to include ScruptValue header in the needed JSXX.cpp files.
        Applied approach to ReadableStreamController.error.

        * Modules/streams/ReadableStreamController.h:
        (WebCore::ReadableStreamController::error):
        * Modules/streams/ReadableStreamController.idl:
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::constructJSReadableStreamController): Deleted.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::error):
        * bindings/js/ReadableJSStream.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestObj.cpp:

2015-06-29  Anders Carlsson  <andersca@apple.com>

        Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead of DISPATCH_SOURCE_TYPE_MEMORYSTATUS
        https://bugs.webkit.org/show_bug.cgi?id=146413
        rdar://problem/21295036

        Reviewed by Andreas Kling.

        Replace SPI with API.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/spi/cocoa/DispatchSPI.h: Removed.

2015-06-29  Andreas Kling  <akling@apple.com>

        [iOS] Pausing a media element should discard buffered data immediately if under memory pressure.
        <https://webkit.org/b/146410>
        <rdar://problem/20366883>

        Reviewed by Darin Adler.

        When moving a media element into paused state, call purgeBufferedDataIfPossible()
        right away if the system is under memory pressure.

        This ensures that mediaserverd drops its forward-looking frame queue right
        away instead of waiting for a new pressure notification.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pauseInternal):

2015-06-29  Matt Rajca  <mrajca@apple.com>

        Media Session: Media elements should report a null session for Default sessions
        https://bugs.webkit.org/show_bug.cgi?id=146373

        Reviewed by Eric Carlson.

        If a media element's current session is a 'Default' media session, its session property should report null in
        the JavaScript API.

        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::session):

2015-06-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [Mac] Disable QTKit by default.
        https://bugs.webkit.org/show_bug.cgi?id=146352

        Reviewed by Darin Adler.
        
        Fix the the requirement for enabling QTKit and AVFoundation.

        * page/Settings.cpp:
        (WebCore::invalidateAfterGenericFamilyChange): Remove the requirement
        for enabling QTKit and AVFoundation. The initial state of QTKit should
        be disabled on all OS X ports. And the initial state of AVFoundation
        should be enabled  on all OS X ports.

2015-06-29  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [EFL] Purge unused favicons from IconDatabase after 30 days.
        https://bugs.webkit.org/show_bug.cgi?id=146334

        Reviewed by Gyuyoung Kim.

        We need purge unused favicons from IconDatabase for database size control.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performURLImport):

2015-06-26  Matt Rajca  <mrajca@apple.com>

        Add support for 'Default' media session types
        https://bugs.webkit.org/show_bug.cgi?id=146355

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Added a new constructor for creating 'Default' media sessions.
        (WebCore::MediaSession::kind): 'Default' media sessions are represented by an empty string.
        * Modules/mediasession/MediaSession.h:
        * dom/Document.cpp:
        (WebCore::Document::defaultMediaSession): Lazily construct the default media session.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): New media elements are assigned to the 'Default' media session.

2015-06-28  Andreas Kling  <akling@apple.com>

        [iOS] Drop buffered data in paused media elements on memory pressure.
        <https://webkit.org/b/146369>
        <rdar://problem/20366883>

        Reviewed by Eric Carlson.

        To avoid getting crushed under mediaserverd memory growth when viewing
        a page with multiple media elements, add a step to the memory pressure
        handler that drops buffered data from all media elements that are
        not currently playing.

        On a test page with a bunch of embedded YouTube videos, this pass frees
        up ~4MB per paused video when the system memory pressure hits.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::allMediaElements):
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        * html/HTMLMediaElement.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-06-28  Chris Dumez  <cdumez@apple.com>

        Crash: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::CachedFrameBase::restore + 333
        https://bugs.webkit.org/show_bug.cgi?id=146388
        <rdar://problem/21567343>

        Reviewed by Darin Adler.

        Pages that are currently loading are not supposed to go into the
        PageCache. However, PageCache::canCache() only checks if the
        FrameLoader's documentLoader is loading. If the subframe is in
        provisional load stage, we would fail to detect that the frame is
        actually loading because the FrameLoader active documentLoader would
        be the provisional documentLoader, not the regular documentLoader.
        Therefore, the page would get added to the PageCache and the frame
        would keep loading while in the PageCache.

        On http://www.audiusa.com/models, this is what was happening. It was
        crashing because the subframe would finish loading while in the
        PageCache, in which case we would fire the 'load' event and the
        content 'load' event handler would then proceed to remove the iframe.
        Upon restoring the PageCache entry, we would run into trouble as we
        would have a CachedFrame whose Frame has been removed.

        The solution proposed is to prevent page-caching if a subframe is in
        provisional load stage.

        Test: http/tests/navigation/page-cache-iframe-provisional-load.html

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::provisionalLoadKey):
        * page/DiagnosticLoggingKeys.h:

2015-06-28  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Add support for chunks with customized sizes
        https://bugs.webkit.org/show_bug.cgi?id=146312

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::read): Decrement totalQueueSize with the chunk specific size.
        (WebCore::ReadableJSStream::enqueue): Calls retrieveSize, enqueue chunk with its size and increment totalQueueSize.
        (WebCore::ReadableJSStream::retrieveChunkSize): Calls size JS callback and convert it to double.
        * bindings/js/ReadableJSStream.h:

2015-06-28  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API]Remove ReadableStreamController.close custom binding
        https://bugs.webkit.org/show_bug.cgi?id=146380

        Reviewed by Darin Adler.

        No change in behavior.

        * Modules/streams/ReadableStreamController.h:
        (WebCore::ReadableStreamController::close): Calling ReadableJSStream close method.
        * Modules/streams/ReadableStreamController.idl: Removed Custom.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::close): Deleted.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::close): Moved custom binding code here.
        * bindings/js/ReadableJSStream.h:

2015-06-27  Chris Fleizach  <cfleizach@apple.com>

        AX: implement @aria-roledescription
        https://bugs.webkit.org/show_bug.cgi?id=146274

        Reviewed by Darin Adler.

        Add support for aria-roledescription.

        Test: accessibility/aria-roledescription.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasHighlighting):
        (WebCore::AccessibilityObject::roleDescription):
        (WebCore::nodeHasPresentationRole):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityMaxValue]):
        (-[WebAccessibilityObjectWrapper accessibilityRoleDescription]):
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):

2015-06-27  Darin Adler  <darin@apple.com>

        Fix the build.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::cfError): Take out log statement. Add FIXME comment
        that explains part of the reason we may get null here.
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::createNSErrorFromResourceErrorBase): Ditto.

2015-06-27  David Kilzer  <ddkilzer@apple.com>

        Crash in WebCore::ResourceError::cfError() after provisional load failed
        <http://webkit.org/b/146384>

        Reviewed by Darin Adler.

        This is a speculative fix based on the crashing stack.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::cfError): Add NULL check.
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::createNSErrorFromResourceErrorBase): Add nil check in
        case we ever turn off USE(CFNETWORK) for iOS.

2015-06-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Only flag a video element as eligible for auto-play to AppleTV one time
        https://bugs.webkit.org/show_bug.cgi?id=146386

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): Drive-by fix - early 
          return when there are no clients.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pendingActionTimerFired): Set m_failedToPlayToWirelessTarget if the
          media engine is still unable to play to the wireless target.
        (WebCore::HTMLMediaElement::prepareForLoad): Clear m_failedToPlayToWirelessTarget.
        (WebCore::HTMLMediaElement::mediaState): Don't set the ExternalDeviceAutoPlayCandidate flag
          if m_failedToPlayToWirelessTarget is true.
        * html/HTMLMediaElement.h:

2015-06-27  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStreamController.desiredSize property
        https://bugs.webkit.org/show_bug.cgi?id=146311

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * Modules/streams/ReadableStreamController.h: Adding desiredSize getter.
        (WebCore::ReadableStreamController::desiredSize): Ditto.
        * Modules/streams/ReadableStreamController.idl: Added desiredSize attribute.

2015-06-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][SOUP] Implement WebCore::PublicSuffix for soup and enable PUBLIC_SUFFIX_LIST for GTK+
        https://bugs.webkit.org/show_bug.cgi?id=146318

        Reviewed by Sergio Villar Senin.

        This is covered by unit tests.

        * PlatformGTK.cmake:
        * platform/soup/PublicSuffixSoup.cpp: Added.
        (WebCore::isPublicSuffix):
        (WebCore::topPrivatelyControlledDomain):

2015-06-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] AppleGothic has been superseded by Apple SD Gothic Neo
        https://bugs.webkit.org/show_bug.cgi?id=146372
        <rdar://problem/21574004>

        Reviewed by Dean Jackson.

        Test: fast/text/hangul-generic-font-families.html

        * page/mac/SettingsMac.mm:
        (WebCore::Settings::initializeDefaultFontFamilies):

2015-06-26  Matt Daiter  <mdaiter@apple.com>

        Supporting getStartDate and added tests
        https://bugs.webkit.org/show_bug.cgi?id=145676
        <rdar://problem/20876076>

        Reviewed by Brent Fulgham.

        Test: http/tests/media/hls/video-controller-getStartDate.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsDateOrNaN):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm: Added features to return 
        NaN for Date
        * bindings/scripts/CodeGeneratorGObject.pm: Needed to add
        type checking code for GObject (no date)
        (NativeToJSValue):
        * bindings/scripts/IDLAttributes.txt: 
        * html/HTMLMediaElement.cpp: Added getStartDate function
        (WebCore::HTMLMediaElement::getStartDate):
        * html/HTMLMediaElement.h: Needed to add declarations
        * html/HTMLMediaElement.idl: Needed to modify for returning NaN
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getStartDate):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h: Added in Mac-specific platform
        (WebCore::MediaPlayerPrivateInterface::getStartDate):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getStartDate):

2015-06-26  Beth Dakin  <bdakin@apple.com>

        WebPage::getPositionInformation() should not copy an image that is larger than the  
        screen
        https://bugs.webkit.org/show_bug.cgi?id=146367

        Reviewed by Tim Horton.

        Export the rect version of this function too.
        * platform/graphics/GraphicsContext.h:

2015-06-26  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Muted videos should not automatically play to AppleTV
        https://bugs.webkit.org/show_bug.cgi?id=146366

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_initiallyMuted.
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Support CheckMediaState.
        (WebCore::HTMLMediaElement::setReadyState): Set m_initiallyMuted to true if the element is
          muted or the volume is less than 5%.
        (WebCore::HTMLMediaElement::setMuted): Update media state asynchronously so multiple state
          changes can be coalesced.
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Ditto.
        (WebCore::HTMLMediaElement::setPlaying): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Ditto.
        (WebCore::HTMLMediaElement::removeEventListener): Ditto.
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Ditto.
        (WebCore::HTMLMediaElement::updateMediaState): Update after a timer when passed UpdateMediaState::Asynchronously.
        (WebCore::HTMLMediaElement::mediaState): Don't set the ExternalDeviceAutoPlayCandidate flag if
          m_initiallyMuted is true.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElementEnums.h:

2015-06-26  Daniel Bates  <dabates@apple.com>

        Rolling out r184660
        https://bugs.webkit.org/show_bug.cgi?id=145200

        Reverting r184660 because it caused a regression.

        * English.lproj/Localizable.strings:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createAutoFillButton): Deleted.
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillButtonText): Deleted.
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXAutoFillButtonText): Deleted.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXAutoFillButtonText): Deleted.

2015-06-26  Daniel Bates  <dabates@apple.com>

        Rolling out r185881
        https://bugs.webkit.org/show_bug.cgi?id=146243
        And
        r185828
        https://bugs.webkit.org/show_bug.cgi?id=145241

        Reverting r185881 and r185828 because the latter caused a regression.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityTextFieldDecorationHitTest): Deleted.
        (WebCore::AccessibilityRenderObject::accessibilityHitTest): Deleted.
        * accessibility/AccessibilityRenderObject.h:

2015-06-26  Dean Jackson  <dino@apple.com>

        No audio on animated page with the attached fixed layout epub
        https://bugs.webkit.org/show_bug.cgi?id=146365

        Reviewed by Eric Carlson.

        The new restriction RequireUserGestureForAudioRateChange conflicted
        with existing clients who expected RequireUserGestureForRateChange
        to allow autoplaying audio. Update the logic to ensure that
        RequireUserGestureForRateChange covers all media when set to
        false.

        This may require a revisit once we're using RequireUserGestureForAudioRateChange
        in production, because the global setting will trump that, and
        most clients have the global setting to false. We'll need to come
        up with a way to allow legacy clients to preserve their behaviour.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Only restrict audio
        if RequireUserGestureForRateChange is also false.

2015-06-25  Anders Carlsson  <andersca@apple.com>

        Get rid of ScrollbarThemeClient now that it's unused
        https://bugs.webkit.org/show_bug.cgi?id=146327

        Reviewed by Beth Dakin.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::scrollbarOverlayStyle): Deleted.
        (WebCore::Scrollbar::isScrollableAreaActive): Deleted.
        (WebCore::Scrollbar::isScrollViewScrollbar): Deleted.
        (WebCore::Scrollbar::root): Deleted.
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar):
        (WebCore::Scrollbar::orientation):
        (WebCore::Scrollbar::value):
        (WebCore::Scrollbar::currentPos):
        (WebCore::Scrollbar::visibleSize):
        (WebCore::Scrollbar::totalSize):
        (WebCore::Scrollbar::maximum):
        (WebCore::Scrollbar::controlSize):
        (WebCore::Scrollbar::lineStep):
        (WebCore::Scrollbar::pageStep):
        (WebCore::Scrollbar::pressedPart):
        (WebCore::Scrollbar::hoveredPart):
        (WebCore::Scrollbar::enabled):
        (WebCore::Scrollbar::styleChanged):
        (WebCore::Scrollbar::isAlphaLocked):
        (WebCore::Scrollbar::setIsAlphaLocked):
        * platform/ScrollbarTheme.h:
        * platform/ScrollbarThemeClient.h: Removed.
        (WebCore::ScrollbarThemeClient::~ScrollbarThemeClient): Deleted.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        * rendering/RenderScrollbarTheme.cpp:

2015-06-26  Chris Dumez  <cdumez@apple.com>

        Prevent new loads while in PageCache (or being added to PageCache)
        https://bugs.webkit.org/show_bug.cgi?id=146299
        <rdar://problem/21523788>

        Reviewed by Darin Adler.

        Generalize the change in r185337 to prevent new loads while in the
        PageCache (or being added to the PageCache), instead of merely
        preventing new loads in pagehide event handlers. We should never
        have any pages that are still loading inside the PageCache.

        The fix in r185337 was apparently insufficient to address the
        problem so generalizing the check / policy will hopefully catch
        more cases where content is able to start loads while being added
        to the PageCache. This patch also removes some of the complexity
        added in r185337 as it is no longer needed.

        No new tests, already covered by:
        http/tests/navigation/image-load-in-pagehide-handler.html
        http/tests/navigation/subframe-pagehide-handler-starts-load.html
        http/tests/navigation/subframe-pagehide-handler-starts-load2.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::handleBeforeUnloadEvent):
        (WebCore::FrameLoader::FrameLoader): Deleted.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::pageDismissalEventBeingDispatched):
        * loader/ImageLoader.cpp:
        (WebCore::pageIsBeingDismissed):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        * page/Page.cpp:
        (WebCore::Page::inPageCache):
        * page/Page.h:
        (WebCore::Page::group): Deleted.

2015-06-26  Simon Fraser  <simon.fraser@apple.com>

        [OS X] Change the layer tiling threshold from 2000 to 2048 pixels
        https://bugs.webkit.org/show_bug.cgi?id=146353

        Reviewed by Tim Horton.

        Programmers love powers of two.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2015-06-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Sans-serif generic font family should map to PingFang
        https://bugs.webkit.org/show_bug.cgi?id=146333
        <rdar://problem/21521217>

        Reviewed by Alexey Proskuryakov.

        Also performs a little bit of cleanup.

        Test: fast/text/han-generic-font-families.html

        * page/mac/SettingsMac.mm:
        (WebCore::sansSerifTraditionalHanFontFamily):
        (WebCore::sansSerifSimplifiedHanFontFamily):
        (WebCore::Settings::initializeDefaultFontFamilies):

2015-06-26  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Compile errors; ResourceResponseBase::resourceLoadTiming() has changed return type.
        https://bugs.webkit.org/show_bug.cgi?id=146343

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::calculateWebTimingInformations):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):
        (WebCore::ResourceHandleManager::initCookieSession):
        (WebCore::sockoptfunction): Deleted.

2015-06-26  Chris Fleizach  <cfleizach@apple.com>

        iOS speech synthesizer should expose names
        https://bugs.webkit.org/show_bug.cgi?id=146319

        Reviewed by Mario Sanchez Prada.

        Use newer API to get the name and identifier of each voice asset.

        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):

2015-06-26  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Remove unnecessary overriden methods from ScrollBarEfl
        https://bugs.webkit.org/show_bug.cgi?id=146342

        Reviewed by Gyuyoung Kim.

        * platform/efl/ScrollbarEfl.cpp:
        (WebCore::ScrollbarEfl::setParent): Deleted.
        (WebCore::ScrollbarEfl::setFrameRect): Deleted.
        (WebCore::ScrollbarEfl::frameRectsChanged): Deleted.
        (WebCore::ScrollbarEfl::invalidate): Deleted.
        * platform/efl/ScrollbarEfl.h:

2015-06-26  Csaba Osztrogonác  <ossy@webkit.org>

        Convert some of WebCore/dom over to range-for loops
        https://bugs.webkit.org/show_bug.cgi?id=126250

        Reviewed by Darin Adler.

        Based on the original patch of Sam Weinig <sam@webkit.org>.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::appendChild):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::getObservedNodes):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::collectMatchingObserversForMutation):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):

2015-06-25  Lucas Forschler  <lforschler@apple.com>

        Unreviewed build fix.
        
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):
        (WebCore::VectorMath::vmul):
        (WebCore::VectorMath::zvmul):

2015-06-25  Stephanie Lewis  <slewis@apple.com>

        Build fix.

        Unreviewed.

        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::process):

2015-06-25  Chris Fleizach  <cfleizach@apple.com>

        AX: improve list heuristics (presentational use versus actual lists)
        https://bugs.webkit.org/show_bug.cgi?id=134187

        Rolling this change back in. 
        It was taken out to allow clients to have time to update their expectations of what is a list vs. a group

        Test: accessibility/list-detection2.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isDescriptionList):
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):
        (WebCore::AccessibilityList::determineAccessibilityRole):
        * accessibility/AccessibilityList.h:

2015-06-25  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r185964.

        Correct a few pointers-that-should-be-references-now errors.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::AccessiblePopupMenu::accLocation):
        (WebCore::AccessiblePopupMenu::accHitTest):

2015-06-25  Doug Russell  <d_russell@apple.com>

        Bug 146300 AX: AccessibilityObject focus events that don't cause a selection 
        change can leave m_isSynchronizingSelection set to true
        https://bugs.webkit.org/show_bug.cgi?id=146300

        Reviewed by Chris Fleizach.

        Added a clearTextSelectionIntent() convenience function to be used after any
        event that can, but isn't guaranteed to result in a selection change. Matches
        calls to setTextSelectionIntent() convenience function.
        Added support for tests listening for focus change notifications.

        Test: platform/mac/accessibility/focus-setting-selection-syncronizing-not-clearing.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::clearTextSelectionIntent):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):

2015-06-25  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add a way to match a domain but not subdomains
        https://bugs.webkit.org/show_bug.cgi?id=146241
        rdar://problem/21557754

        Reviewed by Darin Adler.

        This patch makes it possible to have a trigger with an if-domain apply to sub2.sub1.webkit.org
        but not sub1.webkit.org by making the domains default to only applying to the domain and not subdomains.
        To make a domain apply to a domain and any subdomains, the domain must begin with a '*'.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::addDomain):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        Make domains apply only to the exact domain unless there is a * at the beginning,
        in which case they apply to the domain and any subdomains.

2015-06-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Swiping back just after scrolling can cause some tiles to disappear
        https://bugs.webkit.org/show_bug.cgi?id=146329
        rdar://problem/21233010

        Reviewed by Tim Horton.

        Have the Compositing log channel dump the visible rect used for layer flushing.

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

2015-06-25  Brent Fulgham  <bfulgham@apple.com>

        [WIN] Enable WEB_TIMING API
        https://bugs.webkit.org/show_bug.cgi?id=146330
        <rdar://problem/21530765>

        Reviewed by Dean Jackson.

        Tested by internal HLS tests.

        Enable WEB_TIMING features on Windows by activating the feature flag,
        and correcting some build errors.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start): "setCollectionTimingData" is only
        defined for PLATFORM(COCOA).
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        The 'ResourceHandle::getConnectionTimingData' method is only defined
        for PLATFORM(COCOA).

2015-06-25  Dean Jackson  <dino@apple.com>

        Inline media controls disappear when returning a video to inline
        https://bugs.webkit.org/show_bug.cgi?id=146328
        <rdar://problem/21142862>

        Reviewed by Tim Horton.

        We were getting into a state where the controls were being
        hidden via a timer while we were in fullscreen or on
        another tab. Meanwhile, we could exit from such
        a condition to a point where the controls were
        not visible, but not completely removed from the DOM, confusing
        the logic that decided whether to show them on tap.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.hideControls): If we are in the act of hiding
        controls, we can clear any existing timers that are going to try
        to hide them again.
        (Controller.prototype.resetHideControlsTimer): Make sure we null
        out the hideTimer object, since we look at its value often to
        decide whether or not a timer exists.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePlayButtonTouchEnd): If the user
        taps play, then we should call showControls, which resets the hide
        timers amongst other things. We need to do this due to the next change,
        so that a timer started before we pressed play doesn't cause the
        controls to instantly disappear as soon as we start playing.
        (ControllerIOS.prototype.handleWrapperTouchStart): We can get into
        the state where controls are invisible but still in the tree. Since the
        controlsAreHidden() logic only looks for the latter, we need to also
        look for invisible when the user taps for the controls. Yes, this
        naming doesn't make much sense :(

2015-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Web Inspector: Window dragging on toolbar should behave more like native window dragging
        https://bugs.webkit.org/show_bug.cgi?id=146324

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        Do nothing or pass it up to the the frontend client.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::startWindowDrag):
        Add a new host function to get native window dragging behavior.

2015-06-25  Tim Horton  <timothy_horton@apple.com>

        Viewport units are wrong when scaled in 2-up mode, cause content to hop around on apple.com/music
        https://bugs.webkit.org/show_bug.cgi?id=146322
        <rdar://problem/21413884>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportSizeForCSSViewportUnits):
        Use the fixed layout size, if enabled, instead of the visibleContentRect,
        for the viewport unit size. This ensures that viewport units take up the whole
        fixed-layout viewport, not just the size of the view scaled by the page scale
        (which visibleContentRect provides).

2015-06-25  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay menu button still doesn't always show on page load
        https://bugs.webkit.org/show_bug.cgi?id=146325

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): A player that can't currently play to a wireless 
          target does require target monitoring if an availability event listner has been registered,
          otherwise we may not register for availability change notifications.

2015-06-25  Anders Carlsson  <andersca@apple.com>

        Stop using ScrollbarThemeClient and just use Scrollbar directly
        https://bugs.webkit.org/show_bug.cgi?id=146320

        Reviewed by Tim Horton.

        * page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm:
        (WebCore::ScrollingStateFrameScrollingNode::setScrollbarPaintersFromScrollbars):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollbarOverlayStyle):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::~Scrollbar):
        (WebCore::Scrollbar::offsetDidChange):
        (WebCore::Scrollbar::updateThumb):
        (WebCore::Scrollbar::paint):
        (WebCore::thumbUnderMouse):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::startTimerIfNeeded):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::setHoveredPart):
        (WebCore::Scrollbar::setPressedPart):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::mouseDown):
        (WebCore::Scrollbar::setEnabled):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::updateEnabledState):
        (WebCore::ScrollbarTheme::paint):
        (WebCore::ScrollbarTheme::hitTest):
        (WebCore::ScrollbarTheme::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarTheme::invalidateParts):
        (WebCore::ScrollbarTheme::invalidatePart):
        (WebCore::ScrollbarTheme::paintTickmarks):
        (WebCore::ScrollbarTheme::shouldCenterOnThumb):
        (WebCore::ScrollbarTheme::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarTheme::shouldDragDocumentInsteadOfThumb):
        (WebCore::ScrollbarTheme::thumbPosition):
        (WebCore::ScrollbarTheme::thumbLength):
        (WebCore::ScrollbarTheme::trackPosition):
        (WebCore::ScrollbarTheme::trackLength):
        (WebCore::ScrollbarTheme::registerScrollbar):
        (WebCore::ScrollbarTheme::unregisterScrollbar):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        (WebCore::ScrollbarThemeComposite::hitTest):
        (WebCore::ScrollbarThemeComposite::invalidatePart):
        (WebCore::ScrollbarThemeComposite::splitTrack):
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        (WebCore::ScrollbarThemeComposite::minimumThumbLength):
        (WebCore::ScrollbarThemeComposite::trackPosition):
        (WebCore::ScrollbarThemeComposite::trackLength):
        (WebCore::ScrollbarThemeComposite::thumbRect):
        * platform/ScrollbarThemeComposite.h:
        (WebCore::ScrollbarThemeComposite::willPaintScrollbar):
        (WebCore::ScrollbarThemeComposite::didPaintScrollbar):
        (WebCore::ScrollbarThemeComposite::paintScrollbarBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackBackground):
        (WebCore::ScrollbarThemeComposite::paintTrackPiece):
        (WebCore::ScrollbarThemeComposite::paintButton):
        (WebCore::ScrollbarThemeComposite::paintThumb):
        (WebCore::ScrollbarThemeComposite::constrainTrackRectToTrackPieces):
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::hasThumb):
        (WebCore::ScrollbarThemeGtk::backButtonRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::registerScrollbar):
        (WebCore::ScrollbarThemeGtk::unregisterScrollbar):
        (WebCore::ScrollbarThemeGtk::updateScrollbarsFrameThickness):
        (WebCore::ScrollbarThemeGtk::thumbRect):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):
        (WebCore::ScrollbarThemeGtk::paint):
        (WebCore::ScrollbarThemeGtk::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeGtk::buttonSize):
        (WebCore::ScrollbarThemeGtk::minimumThumbLength):
        * platform/gtk/ScrollbarThemeGtk.h:
        (WebCore::ScrollbarThemeGtk::hasButtons):
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/ScrollbarThemeIOS.mm:
        (WebCore::ScrollbarThemeIOS::registerScrollbar):
        (WebCore::ScrollbarThemeIOS::unregisterScrollbar):
        (WebCore::ScrollbarThemeIOS::hasButtons):
        (WebCore::ScrollbarThemeIOS::hasThumb):
        (WebCore::ScrollbarThemeIOS::backButtonRect):
        (WebCore::ScrollbarThemeIOS::forwardButtonRect):
        (WebCore::ScrollbarThemeIOS::trackRect):
        (WebCore::ScrollbarThemeIOS::minimumThumbLength):
        (WebCore::ScrollbarThemeIOS::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeIOS::paint):
        * platform/mac/ScrollAnimatorMac.mm:
        (scrollbarPainterForScrollbar):
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[WebScrollbarPartAnimation startAnimation]):
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::invalidateScrollbarPartLayers):
        (WebCore::ScrollAnimatorMac::verticalScrollbarLayerDidChange):
        (WebCore::ScrollAnimatorMac::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::setNewPainterForScrollbar):
        (WebCore::ScrollbarThemeMac::painterForScrollbar):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeMac::shouldDragDocumentInsteadOfThumb):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::trackRect):
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        (WebCore::ScrollbarThemeMock::paintThumb):
        * platform/mock/ScrollbarThemeMock.h:
        (WebCore::ScrollbarThemeMock::hasButtons): Deleted.
        (WebCore::ScrollbarThemeMock::hasThumb): Deleted.
        (WebCore::ScrollbarThemeMock::backButtonRect): Deleted.
        (WebCore::ScrollbarThemeMock::forwardButtonRect): Deleted.
        (WebCore::ScrollbarThemeMock::maxOverlapBetweenPages): Deleted.
        (WebCore::ScrollbarThemeMock::isMockTheme): Deleted.
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::hasButtons):
        (WebCore::ScrollbarThemeSafari::hasThumb):
        (WebCore::ScrollbarThemeSafari::backButtonRect):
        (WebCore::ScrollbarThemeSafari::forwardButtonRect):
        (WebCore::ScrollbarThemeSafari::trackRect):
        (WebCore::ScrollbarThemeSafari::minimumThumbLength):
        (WebCore::ScrollbarThemeSafari::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeSafari::paintTrackBackground):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/win/ScrollbarThemeSafari.h:
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::hasThumb):
        (WebCore::ScrollbarThemeWin::backButtonRect):
        (WebCore::ScrollbarThemeWin::forwardButtonRect):
        (WebCore::ScrollbarThemeWin::trackRect):
        (WebCore::ScrollbarThemeWin::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeWin::shouldSnapBackToDragOrigin):
        (WebCore::ScrollbarThemeWin::paintTrackBackground):
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::paintGripper):
        (WebCore::ScrollbarThemeWin::paintThumb):
        * platform/win/ScrollbarThemeWin.h:
        * rendering/RenderScrollbar.h:
        (isType):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        (WebCore::RenderScrollbarPart::imageChanged):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::buttonSizesAlongTrackAxis):
        (WebCore::RenderScrollbarTheme::hasButtons):
        (WebCore::RenderScrollbarTheme::hasThumb):
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        (WebCore::RenderScrollbarTheme::willPaintScrollbar):
        (WebCore::RenderScrollbarTheme::didPaintScrollbar):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        (WebCore::RenderScrollbarTheme::paintTickmarks):
        * rendering/RenderScrollbarTheme.h:

2015-06-24  Matt Rajca  <mrajca@apple.com>

        MediaSession: fall back to "content" kind when an unsupported media session kind is passed in
        https://bugs.webkit.org/show_bug.cgi?id=146293

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::parseKind): Parse the media session kind to one of the four supported types.
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::kind): Format the value as a string (which the JS bindings expect).
        * Modules/mediasession/MediaSession.h: The media session kind is now stored as an enum rather than a string
          since we only support a small, fixed number of values.

2015-06-25  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Crash in WebCore::MediaPlayer::canPlayToWirelessPlaybackTarget
        https://bugs.webkit.org/show_bug.cgi?id=146317

        Reviewed by Brent Fulgham.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): NULL-check m_player before using it.

2015-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185956.
        https://bugs.webkit.org/show_bug.cgi?id=146321

        Causes massive crashes on test bots (Requested by bfulgham on
        #webkit).

        Reverted changeset:

        "Enabling MEDIA_STREAM"
        https://bugs.webkit.org/show_bug.cgi?id=145947
        http://trac.webkit.org/changeset/185956

2015-06-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update MediaPlayerPrivateAVFoundationCF::supportsType
        https://bugs.webkit.org/show_bug.cgi?id=146302
        <rdar://problem/19726553>

        Reviewed by Eric Carlson.

        Tested by existing media tests.

        Update the AVFoundationCF version of 'supportsType' to more closely match the AVFoundation
        version. Use this new code when the necessary AVFoundationCF functions are present.

        * AVFoundationSupport.py: Check for presence of AVCFURLAssetIsPlayableExtendedMIMEType.
        (fileContains): Added helper function.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj: Add AVFoundationSupport.py to project file to make
        maintenance easier.
        * WebCore.vcxproj/WebCoreGenerated.vcxproj.filters: Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::isUnsupportedMIMEType): Moved from ObjC version.
        (WebCore::MediaPlayerPrivateAVFoundation::staticMIMETypeList): Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/AVFoundationCFSoftLinking.h: Add missing declaration.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::avfMIMETypes): Added CF version of AVFoundation code.
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType): Update to use new AVCF
        method if it is available.
        (WebCore::MediaPlayerPrivateAVFoundationCF::languageOfPrimaryAudioTrack): Handle case of a
        null language locale. This is a drive-by fix of a bug found during testing.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::isUnsupportedMIMEType): Deleted.
        (WebCore::staticMIMETypeList): Deleted.

2015-06-25  Matthew Daiter  <mdaiter@apple.com>

        Enabling MEDIA_STREAM
        https://bugs.webkit.org/show_bug.cgi?id=145947
        <rdar://problem/21365829>

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/mediastream/UserMediaClient.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        * platform/mock/UserMediaClientMock.h:

2015-06-25  Zalan Bujtas  <zalan@apple.com>

        Do not send touch events to the slider's thumb when it does not have a renderer.
        https://bugs.webkit.org/show_bug.cgi?id=146307
        rdar://problem/21539399

        Reviewed by Simon Fraser.

        Bail out early if either the touch target or the renderer() is null.

        Test: fast/events/touch/input-range-with-thumb-display-none-crash.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::findTouchWithIdentifier):
        (WebCore::SliderThumbElement::handleTouchStart):
        (WebCore::SliderThumbElement::handleTouchMove):
        (WebCore::SliderThumbElement::handleTouchEndAndCancel):

2015-06-25  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement HighWaterMark
        https://bugs.webkit.org/show_bug.cgi?id=146235

        Reviewed by Darin Adler.

        Retrieval of HighWaterMark parameter from arguments passed to the ReadableStream JS constructor.
        Retrieval of size function callback from arguments passed to the ReadableStream JS constructor.
        Calling doPull() if buffer size is below HighWaterMark.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::pull): Adding precise check for HWM.
        * Modules/streams/ReadableStream.h: Introducing hasEnoughValues.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::getHighWaterMark): Utility routine to get properly HWM value.
        (WebCore::ReadableJSStream::create): Retrieval of HWM and size function.
        (WebCore::ReadableJSStream::ReadableJSStream):
        * bindings/js/ReadableJSStream.h: Adding hasEnoughValues and desiredSize prototypes.

2015-06-25  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS EWS build.

        * platform/spi/cocoa/SecuritySPI.h:

2015-06-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Empty gtk-font-name setting causes WebProcess crash rendering pages
        https://bugs.webkit.org/show_bug.cgi?id=146246

        Reviewed by Sergio Villar Senin.

        Return early if system font is empty.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::updateCachedSystemFontDescription):

2015-06-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, EFL build fix after r185940.

        Members were initialized in wrong order.

        * Modules/mediastream/MediaDeviceInfo.cpp:
        (WebCore::MediaDeviceInfo::MediaDeviceInfo):

2015-06-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, Build fix after r185940.

        Move implementation inside WebCore namespace.

        * Modules/mediastream/MediaDeviceInfo.cpp:

2015-06-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, speculative GTK build fix after 185940.

        Add new cpp file to CMakeLists.txt.

        * CMakeLists.txt:

2015-06-24  Matt Daiter  <mdaiter@apple.com>

        Building MediaDeviceInfo for enumerateDevices
        https://bugs.webkit.org/show_bug.cgi?id=146257
        <rdar://problem/21513462>

        Reviewed by Eric Carlson.

        MediaDeviceInfo necessary for enumerateDevices

        * CMakeLists.txt: Added MediaDevicesInfo.idl
        * DerivedSources.make: Added MediaDevicesInfo.idl
        * Modules/mediastream/MediaDeviceInfo.h: Created class for MediaDevicesInfo
        (WebCore::MediaDeviceInfo::create): Allocates class
        (WebCore::MediaDeviceInfo::MediaDeviceInfo): Creates class for public
        (WebCore::MediaDeviceInfo::~MediaDeviceInfo): 
        (WebCore::MediaDeviceInfo::label):
        (WebCore::MediaDeviceInfo::deviceId):
        (WebCore::MediaDeviceInfo::groupId):
        (WebCore::MediaDeviceInfo::kind):
        * Modules/mediastream/MediaDeviceInfo.idl:
        * WebCore.xcodeproj/project.pbxproj:

2015-06-24  Anders Carlsson  <andersca@apple.com>

        Detect view services by using the "com.apple.UIKit.vends-view-services" entitlement
        https://bugs.webkit.org/show_bug.cgi?id=146301

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/cocoa/SecuritySPI.h:

2015-06-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add a new color -apple-wireless-playback-target-active
        https://bugs.webkit.org/show_bug.cgi?id=146269
        <rdar://problem/21465189>

        Reviewed by Dean Jackson.

        At the moment we use -apple-system-blue to indicate an Airplay route is
        active. This might not always be blue, so we need to add another system
        color with a name that will allow us to change the underlying color.
        Initially -apple-wireless-playback-target-active will be an alias to
        -apple-system-blue.

        Existing tests are modified to include the new color value.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateWirelessTargetPickerButton):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-wireless-playback-picker-button.playing):
        Use the new color value in the media controls.
        
        * css/CSSParser.cpp:
        (WebCore::isAppleLegacyCssValueKeyword): Returns true if the value keyword
        has an '-apple' prefix which has to be replaced by '-webkit'
        
        (WebCore::cssValueKeywordID): Call a new function which handles all the
        '-apple' legacy keywords.
        
        * css/CSSValueKeywords.in: Define the new color keyword.
        
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor):
        Define the value of the new color keyword to be an alias of systemBlueColor.

2015-06-24  Matt Rajca  <mrajca@apple.com>

        MediaSession: propagate MediaSessionMetadata to WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=146282

        Reviewed by Darin Adler and Tim Horton.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::setMetadata):

2015-06-24  Chris Dumez  <cdumez@apple.com>

        Null dereference in DocumentLoader::areAllLoadersPageCacheAcceptable()
        https://bugs.webkit.org/show_bug.cgi?id=146286
        <rdar://problem/21523788>

        Reviewed by Sam Weinig.

        Add null check for the Page in areAllLoadersPageCacheAcceptable()
        to fix this top crasher until I can investigate how this can happen.

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

2015-06-24  Anders Carlsson  <andersca@apple.com>

        Move PluginMainThreadScheduler to WebKit/win
        https://bugs.webkit.org/show_bug.cgi?id=146289

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduler): Deleted.
        (WebCore::PluginMainThreadScheduler::PluginMainThreadScheduler): Deleted.
        (WebCore::PluginMainThreadScheduler::scheduleCall): Deleted.
        (WebCore::PluginMainThreadScheduler::registerPlugin): Deleted.
        (WebCore::PluginMainThreadScheduler::unregisterPlugin): Deleted.
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin): Deleted.
        (WebCore::PluginMainThreadScheduler::dispatchCalls): Deleted.
        (WebCore::PluginMainThreadScheduler::mainThreadCallback): Deleted.
        * plugins/PluginMainThreadScheduler.h:
        (WebCore::PluginMainThreadScheduler::Call::Call): Deleted.
        (WebCore::PluginMainThreadScheduler::Call::performCall): Deleted.

2015-06-24  Dean Jackson  <dino@apple.com>

        Better fix for Element with blur backdrop-filter shows edge duplication and dark edges
        https://bugs.webkit.org/show_bug.cgi?id=146287
        <rdar://problem/21530437>

        Reviewed by Simon Fraser.

        There is no need to carry around a bit in FilterOperations indicating what
        type of source property the object came from. Whether or not to clip to the
        bounds of the filter region is purely a property of the type of CALayer
        we are applying the filter to.

        This basically reverts r185846.

        Covered by the test for the previous commit.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBackdropFilterOperations): Deleted.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations): Deleted.
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm: Set the normalized
        edges property if we are a CABackdropLayer.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::operator==):
        (WebCore::FilterOperations::operationsMatch):
        (WebCore::FilterOperations::operator=): Deleted.
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::isUsedForBackdropFilters): Deleted.
        (WebCore::FilterOperations::setUsedForBackdropFilters): Deleted.

2015-06-24  Doug Russell  <d_russell@apple.com>

        Bug 146177 - AX: AXObjectCache should try to use an unignored accessibilityObject 
        when posting a selection notification when on the border between two accessibilityObjects
        https://bugs.webkit.org/show_bug.cgi?id=146177

        Reviewed by Darin Adler.

        Add support for position to be passed for selection changes to allow checking.
        for boundaries in the case of ignored elements.
        Add support for searching for unignored siblings of AccessibilityObjects.
        Include AccessibilityObject wrappers in notifications for tests.

        Test: platform/mac/accessibility/selection-element-tabbing-to-link.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::previousSiblingUnignored):
        (WebCore::AccessibilityObject::nextSiblingUnignored):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (isValueTypeSupported):
        (arrayRemovingNonSupportedTypes):
        (dictionaryRemovingNonSupportedTypes):
        (-[WebAccessibilityObjectWrapperBase accessibilityPostedNotification:userInfo:]):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):

2015-06-24  Anders Carlsson  <andersca@apple.com>

        Enable -Winconsistent-missing-override when building with Xcode
        https://bugs.webkit.org/show_bug.cgi?id=146288

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/webdatabase/DatabaseTask.h:
        * html/DateTimeLocalInputType.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::platformLayer): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::supportsScanning): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::fileSize): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::engineDescription): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::platformErrorCode): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundation::notifyTrackModeChanged): Deleted.
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        (WebCore::VideoTrackPrivateAVF::trackIndex): Deleted.
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        (WebCore::CDMSessionAVFoundationObjC::type): Deleted.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        (WebCore::CDMSessionMediaSourceAVFObjC::type): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsAcceleratedRendering): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayToWirelessPlaybackTarget): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedCredential): Deleted.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedRequestToContinueWithoutCredential): Deleted.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedCancellation): Deleted.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedRequestToPerformDefaultHandling): Deleted.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedChallengeRejection): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsFullscreen): Deleted.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        (WebCore::MediaPlayerPrivateQTKit::supportsScanning): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::networkState): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::readyState): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::maximumDurationToCacheMediaTime): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::engineDescription): Deleted.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/SerializedPlatformRepresentationMac.h:
        (WebCore::SerializedPlatformRepresentationMac::platformType): Deleted.
        * platform/mac/ThemeMac.h:
        (WebCore::ThemeMac::controlRequiresPreWhiteSpace): Deleted.
        * testing/MockCDM.cpp:
        (WebCore::MockCDMSession::setClient): Deleted.

2015-06-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Improve JSDOMPromise callPromiseFunction naming
        https://bugs.webkit.org/show_bug.cgi?id=146280

        Unreviewed.

        No change in behavior.

        * bindings/js/JSDOMPromise.h:
        (WebCore::callPromiseFunction):

2015-06-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r185804): Crash selecting time in the form on https://backup.brighthorizons.com/BackupCareRequest.aspx
        <rdar://problem/21525376>

        Reviewed by Sam Weinig.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        Null check.

2015-06-24  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: roundToDevicePixel() snaps to wrong value.
        https://bugs.webkit.org/show_bug.cgi?id=146273
        rdar://problem/18509840

        Reviewed by Simon Fraser.

        Due to the floating point approximate representation, we can't always produce
        the correct snap value. This patch addresses the issue by removing redundant kFixedPointDenominator multiplication
        and by changing the rounding in roundToDevicePixel() from float to double.

        API test is added.

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):

2015-06-23  Matt Rajca  <mrajca@apple.com>

        MediaSession: Support setting of metadata
        https://bugs.webkit.org/show_bug.cgi?id=146253

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Store a reference to the document so we can use it in setMetadata.
        (WebCore::MediaSession::setMetadata): Implemented as described in the Media Session spec.
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSession.idl: Added the setMetadata method.
        * Modules/mediasession/MediaSessionMetadata.h:
        (WebCore::MediaSessionMetadata::MediaSessionMetadata): Added to keep track of media session metadata.
        (WebCore::MediaSessionMetadata::title):
        (WebCore::MediaSessionMetadata::artist):
        (WebCore::MediaSessionMetadata::album):
        (WebCore::MediaSessionMetadata::artworkURL):
        * WebCore.xcodeproj/project.pbxproj: Added MediaSessionMetadata.h.

2015-06-24  Daniel Bates  <dabates@apple.com>

        Content Security Policy error message when frame load is blocked does not read well
        https://bugs.webkit.org/show_bug.cgi?id=146279

        Reviewed by Csaba Osztrogonác.

        Substitute "Refused to load frame" for "Refused to frame" as the prefix of the error message
        emitted when the Content Security Policy of the page blocks a frame load.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::checkSourceAndReportViolation):

2015-06-11  Sergio Villar Senin  <svillar@igalia.com>

        intrinsic size keywords don't work for heights
        https://bugs.webkit.org/show_bug.cgi?id=113610

        Reviewed by Darin Adler.

        Based on Blink's r148314 & r150355 by <cbiesinger@chromium.org>.

        Adds intrinsic values support to heigh & min/max-height. This involves the
        following changes:
        - RenderBox needs to pass the content height through to computeLogicalHeight and
        related functions, which needs it to resolve max-content, et. al.
        - Make the callers pass the content height to this function. Some callers pass
        logicalHeight() (adjusted for border/padding) which works because if
        logicalHeight is not the content height, then it is the height we ended up using,
        so the constrain* functions will just constrain to that value again.
        - Parsing code needs to be adjusted to support intrinsic values for heights.

        Tests: fast/css-intrinsic-dimensions/height-css-tables-collapsed.html
               fast/css-intrinsic-dimensions/height-css-tables.html
               fast/css-intrinsic-dimensions/height-flexbox.html
               fast/css-intrinsic-dimensions/height-positioned-replaced.html
               fast/css-intrinsic-dimensions/height-positioned.html
               fast/css-intrinsic-dimensions/height-replaced.html
               fast/css-intrinsic-dimensions/height-tables-collapsed.html
               fast/css-intrinsic-dimensions/height-tables.html
               fast/css-intrinsic-dimensions/height.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::isValidSize): Refactored from validateWidth and
        validateHeight.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::validateWidth): Deleted.
        (WebCore::CSSParser::validateHeight): Deleted.
        * css/CSSParser.h:
        * platform/Length.h:
        (WebCore::Length::isFillAvailable):
        (WebCore::Length::isFitContent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computeContentLogicalHeight):
        (WebCore::RenderBox::computeIntrinsicLogicalContentHeightUsing):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::calculateMaxColumnHeight):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::hasReplacedLogicalHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::layout):

2015-06-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185906.
        https://bugs.webkit.org/show_bug.cgi?id=146276

        MSVC doesn't yet provide a const-qualified std::array<T,
        N>::size(), failing to compile the static_assert (Requested by
        zdobersek on #webkit).

        Reverted changeset:

        "Improve the source code generated by make_names.pl"
        https://bugs.webkit.org/show_bug.cgi?id=146208
        http://trac.webkit.org/changeset/185906

2015-06-24  Zan Dobersek  <zdobersek@igalia.com>

        Improve the source code generated by make_names.pl
        https://bugs.webkit.org/show_bug.cgi?id=146208

        Reviewed by Darin Adler.

        Clean up and optimize the output that's generated by the make_names.pl script
        when generating large sets of DOM names for attributes and tags.

        The GenerateStrings() function in the StaticString.pm module is split into
        GenerateStringData() and GenerateASCIILiteral() so that the two new functions
        can be used independently, with the original function still being called when
        generating font names.

        Tags and attributes have the corresponding static QualifiedName globals defined
        as before. After that, two static const std::array<> objects are defined for
        both types -- the first is an ordered array of addresses of the QualifiedName
        objects (corresponding to the C array that was defined in getHTMLTags(),
        getSVGAttrs() etc.), and the second is an ordered array of StringImpl::StaticASCIILiteral
        objects that replaces separately defined StringImpl::StaticASCIILiteral objects
        and the additional tables that contained pairs of QualifiedName object addresses
        and the corresponding StaticASCIILiteral object references in the init() function.
        This is all generated by the printStaticData() function in make_names.pl.

        The printQualifiedNameCreation() function generates a static_assert() that ensures
        that the corresponding std::array<QualifiedName*> and std::array<StaticASCIILiteral>
        objects have the same amount of items, and then sets up a loop that walks through
        the two arrays and properly constructs the QualifiedName objects from the static
        literal data.

        On the GTK port, this shaves off ~54kB from the final stripped shared library
        on a 64-bit build, and ~21kB on a 32-bit build.

        * bindings/scripts/StaticString.pm:
        (GenerateStringData):
        (GenerateASCIILiteral):
        (GenerateStrings):
        * dom/make_names.pl:
        (printCppHead):
        (printNamesCppFile):
        (printStaticData):
        (printQualifiedNameCreation):
        (printInit): Deleted.
        (printDefinitions): Deleted.

2015-06-24  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Refactor UserMediaRequest to share more codes between MediaDevices.getUserMedia and legacy webkitGetUserMedia
        https://bugs.webkit.org/show_bug.cgi?id=146237

        Reviewed by Darin Adler.

        Covered by existing tests, no change in behavior.

        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::create): Simplified error handling by removing exception code parameter.
        * Modules/mediastream/MediaConstraintsImpl.h: Ditto.
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia): Removed code now in UserMediaRequest::start.
        * Modules/mediastream/NavigatorUserMedia.cpp:
        (WebCore::NavigatorUserMedia::webkitGetUserMedia): Ditto.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::parseOptions): Simplified error handling by removing exception code parameter.
        (WebCore::UserMediaRequest::start): Renamed create in start and added common code.
        * Modules/mediastream/UserMediaRequest.h:

2015-06-23  Andreas Kling  <akling@apple.com>

        Should reduce tile coverage for the first paint after a tab switch.
        <https://webkit.org/b/146252>
        <rdar://problem/19821583>

        Reviewed by Darin Adler.

        Reduce the number of tiles we need to paint after switching tabs,
        to shorten the time it takes before we can flush pixels to screen.

        We accomplish this by piggybacking on the "speculative tiling enabled"
        mode of FrameView, which was previously only used to throttle painting
        and layer flushes during page load.

        When a FrameView becomes visible, which is what happens when you
        switch to its tab, we revert the speculative tiling optimization to
        its initial state, and reset the "scrolled by user" flag.

        In practice this means that after switching tabs, we only generate
        enough tiles to fill the viewport. Then, after 500ms has passed
        or the user scrolls the page, we go back to the usual speculative
        tiling mode.

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

2015-06-23  Anders Carlsson  <andersca@apple.com>

        Remove windowResizerRect code, nobody is using it anymore
        https://bugs.webkit.org/show_bug.cgi?id=146265

        Reviewed by Beth Dakin.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::windowResizerRect): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::windowResizerRect): Deleted.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView): Deleted.
        (WebCore::ScrollView::windowResizerRectChanged): Deleted.
        (WebCore::ScrollView::containsScrollbarsAvoidingResizer): Deleted.
        (WebCore::ScrollView::adjustScrollbarsAvoidingResizerCount): Deleted.
        (WebCore::ScrollView::setParent): Deleted.
        * platform/ScrollView.h:
        (WebCore::ScrollView::windowResizerRect): Deleted.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar): Deleted.
        (WebCore::Scrollbar::setFrameRect): Deleted.
        (WebCore::Scrollbar::setParent): Deleted.
        * platform/Scrollbar.h:

2015-06-23  Dean Jackson  <dino@apple.com>

        Media controls are missing the white backdrop in UIWebViews
        https://bugs.webkit.org/show_bug.cgi?id=146251
        <rdar://problem/20181345>

        Reviewed by Simon Fraser.

        Implement two new CALayer subclasses that explicitly set
        something that resembles the system appearance for
        media-controls-dark-bar-background and media-controls-light-bar-background.
        This way, WebKit1 clients get a visible result.

        Creating the actual system recipes is tracked by:
        https://bugs.webkit.org/show_bug.cgi?id=146250

        * WebCore.xcodeproj/project.pbxproj: Add new files.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::PlatformCALayerCocoa): Use the new CALayer subclasses for
        the appropriate layer types.
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.h: Added.
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.mm: Added.
        (-[WebLightSystemBackdropLayer init]):
        (-[WebLightSystemBackdropLayer setBackgroundColor:]): Only set to a light grey.
        (-[WebDarkSystemBackdropLayer init]):
        (-[WebDarkSystemBackdropLayer setBackgroundColor:]): Only set to a dark grey.

2015-06-18  Matt Rajca  <mrajca@apple.com>

        Support releasing media sessions
        https://bugs.webkit.org/show_bug.cgi?id=146132

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaSession.cpp: Implemented as described in the Media Session spec.
        (WebCore::MediaSession::releaseSession):
        (WebCore::MediaSession::releaseInternal):
        * Modules/mediasession/MediaSession.h:

2015-06-23  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver and ARIA: has popup property not announced
        https://bugs.webkit.org/show_bug.cgi?id=146188

        Reviewed by Darin Adler.

        Expose the existing "has popup" property to the iOS Accessibility API.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHasPopup]):

2015-06-23  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Performance optimization: avoid computing overflow alignment if not needed
        https://bugs.webkit.org/show_bug.cgi?id=146231

        Reviewed by Sergio Villar Senin.

        We don't need to apply any overflow handling if alignment value don't have a potential
        risk of data loss, as it's the case of 'start' value.

        This patch avoid computing the overflow in all the cases, since it adds an unneeded
        overhead which affects performance.

        New code improves performance around 3%-8%, depending on the grid tests.

        No new tests, no new funcitonality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::rowPositionForChild):
        (WebCore::RenderGrid::columnPositionForChild):

2015-06-23  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        MediaDevices.getUserMedia should migrate from callbacks to DOMPromise
        https://bugs.webkit.org/show_bug.cgi?id=146200

        Reviewed by Darin Adler.

        Introduced DOMPromiseWithCallback to resolve/reject promises while allowing promise clients to use a typed callback approach.
        Migrated MediaDevices.getUserMedia from callbacks to DOMPromiseWithCallback.
        Removed MediaDevices.getUserMedia custom binding.

        Covered by existing tests.

        * CMakeLists.txt: Removing custom binding.
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia): Moving from callback to promise.
        * Modules/mediastream/MediaDevices.h: Ditto.
        * Modules/mediastream/MediaDevices.idl: Removing custom binding.
        * Modules/mediastream/NavigatorUserMedia.cpp:
        (WebCore::NavigatorUserMedia::webkitGetUserMedia): Converting from promise callback to API callbacks.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create): Moving from callback to promise.
        (WebCore::UserMediaRequest::UserMediaRequest): Ditto.
        (WebCore::UserMediaRequest::didCreateStream): Ditto.
        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError): Ditto.
        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError): Ditto.
        * Modules/mediastream/UserMediaRequest.h: Ditto.
        * bindings/js/JSDOMPromise.h: Introducing DOMPromiseWithCallback and removing crypto specific header.
        (WebCore::DOMPromiseWithCallback::DOMPromiseWithCallback):
        (WebCore::Error>::resolve):
        (WebCore::Error>::reject):
        * bindings/js/JSMediaDevicesCustom.cpp: Removed.
        * bindings/js/JSSubtleCryptoCustom.cpp: Updating headers.

2015-06-23  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStream js source "'cancel" callback
        https://bugs.webkit.org/show_bug.cgi?id=146204

        Reviewed by Darin Adler.

        Calling "cancel" JS function when web app is cancelling a JS readable stream.
        Handling of promise returned value in case of async cancel.

        Covered by rebased tests.

        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::invoke): Refactoring to pass cancel reason or controller to the JS function.
        (WebCore::ReadableJSStream::doStart): Ditto.
        (WebCore::startReadableStreamAsync): Renaming readableStream as protectedStream.
        (WebCore::createPullResultFulfilledFunction): Ditto.
        (WebCore::ReadableJSStream::doPull): Refactoring to pass cancel reason or controller to the JS function.
        (WebCore::createCancelResultFulfilledFunction): Cancel promise fullfil callback.
        (WebCore::createCancelResultRejectedFunction): Cancel promise reject callback.
        (WebCore::ReadableJSStream::doCancel): Calling cancel JS callback and handling promise returned value.
        * bindings/js/ReadableJSStream.h: Refactoring to pass cancel reason or controller to the JS function.

2015-06-22  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Hyphenation is not supported
        https://bugs.webkit.org/show_bug.cgi?id=89830

        Reviewed by Gyuyoung Kim.

        Share libHyphen backend of GTK port.

        Rebased fast/text/hyphenate-*.html

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/efl/FileSystemEfl.cpp:
        (WebCore::listDirectory): Deleted because of lack of functionality.
        eina_file_ls returns full directory path so fnmatch fails to check dict file.
        This patch reuse Posix implementation instead of EFL port specific function.
        * platform/posix/FileSystemPOSIX.cpp: Ditto.
        * platform/text/gtk/HyphenationLibHyphen.cpp: Moved to platform/text/hyphen
        * platform/text/hyphen/HyphenationLibHyphen.cpp:
        Renamed from Source/WebCore/platform/text/gtk/HyphenationLibHyphen.cpp.
        (WebCore::scanTestDictionariesDirectoryIfNecessary):
        Added PLATFORM guard and EFL implementation for the test directory

2015-06-22  Chris Dumez  <cdumez@apple.com>

        [WK1] WebAllowDenyPolicyListener.denyOnlyThisRequest() should not start a new permission request
        https://bugs.webkit.org/show_bug.cgi?id=146228
        <rdar://problem/15179262>

        Reviewed by Daniel Bates.

        Add Geolocation::resetIsAllowed() API that merely resets
        m_allowGeolocation to Unknown, so that we will request the permission
        again the next time a position is requested.

        * Modules/geolocation/Geolocation.h:
        (WebCore::Geolocation::resetIsAllowed):

2015-06-22  Simon Fraser  <simon.fraser@apple.com>

        ASSERT(!m_zOrderListsDirty) when mousing over web view with incremental rendering suppressed
        https://bugs.webkit.org/show_bug.cgi?id=146225

        Reviewed by Zalan Bujtas.

        Update RenderLayer's z-order lists when hit testing. There's no guarantee that they've
        been updated; this happens to work most of the time because painting updates them,
        but if incremental rendering is suppressed, we may not have painted yet.
        
        Easy to hit on webkit.org in MiniBrowser, but I wasn't able to make a reduced testcase.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::updateLayerListsIfNeeded): Flip the order of the tests, since checking
        dirty bits is cheaper than calling isStackingContext().

2015-06-22  Dean Jackson  <dino@apple.com>

        Rename PlatformCA*Mac to PlatformCA*Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=146224
        <rdar://problem/21497182>

        Reviewed by Simon Fraser.

        Rename PlatformCALayerMac and related files in platform/graphics/ca/mac
        to the more accurate Cocoa suffix.

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/ServicesOverlayController.mm:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/LayerFlushSchedulerMac.cpp: Renamed from Source/WebCore/platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp.
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.h: Renamed from Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.h.
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm: Renamed from Source/WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm.
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm: Renamed from Source/WebCore/platform/graphics/ca/mac/PlatformCAFiltersMac.mm.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h: Renamed from Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.h.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm: Renamed from Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm.
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.h: Renamed from Source/WebCore/platform/graphics/ca/mac/WebTiledBackingLayer.h.
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm: Renamed from Source/WebCore/platform/graphics/ca/mac/WebTiledBackingLayer.mm.
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:

2015-06-22  Alex Christensen  <achristensen@webkit.org>

        [cssjit] Disable compiling scrollbar pseudoclass selectors
        https://bugs.webkit.org/show_bug.cgi?id=146220

        Reviewed by Benjamin Poulain.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addScrollbarPseudoClassType):
        Don't compile selectors with scrollbar pseudoclasses.

2015-06-22  Simon Fraser  <simon.fraser@apple.com>

        -webkit-clip-path clips incorrectly if the element bounds go beyond the top edge of the page
        https://bugs.webkit.org/show_bug.cgi?id=146218
        rdar://problem/21127840

        Reviewed by Zalan Bujtas.

        The clip path is computed using the RenderLayer's bounding box, so needs to be offset
        by the offsetFromRenderer when set on the mask layer.

        Test: compositing/masks/compositing-clip-path-origin.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateMaskingLayerGeometry):

2015-06-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        Web sockets should be treated as active mixed content
        https://bugs.webkit.org/show_bug.cgi?id=140624

        Reviewed by Sam Weinig.

        Tests: http/tests/security/mixedContent/websocket/insecure-websocket-in-iframe.html
               http/tests/security/mixedContent/websocket/insecure-websocket-in-main-frame.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Block ws:// WebSocket connections from https:// pages, and
        emit the onerror event after doing so.
        * platform/SchemeRegistry.cpp:
        (WebCore::secureSchemes): Add wss:// to the list of secure schemes.

2015-06-22  Dean Jackson  <dino@apple.com>

        Element with blur backdrop-filter shows edge duplication and dark edges
        https://bugs.webkit.org/show_bug.cgi?id=146215
        <rdar://problem/20367695>

        Reviewed by Tim Horton.

        The input images to backdrop filters should duplicate their edge pixels
        outwards, rather than using transparent pixels. This is a flag we
        set on the Gaussian blur, but means we have to remember if the
        FilterOperations list came from a regular filter or a backdrop filter.

        Test: css3/filters/backdrop/blur-input-bounds.html

        * css/CSSPropertyNames.in: New custom convertor for backdrop-filter.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBackdropFilterOperations): New convertor
        that sets the backdrop flag, but is otherwise the same as a normal filter
        convertor.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations): Inherit the backdrop flag if either of our
        inputs has it.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Set the inputNormalizeEdges
        key on the CAFilter if necessary.
        * platform/graphics/filters/FilterOperations.cpp: Add a new flag indicating if
        these operations are intended for backdrops.
        (WebCore::FilterOperations::operator=):
        (WebCore::FilterOperations::operator==):
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::isUsedForBackdropFilters):
        (WebCore::FilterOperations::setUsedForBackdropFilters):

2015-06-22  Tim Horton  <timothy_horton@apple.com>

        [TextIndicator] Text shifts one pixel to the left when I force click to bring up Lookup in Mail messages
        https://bugs.webkit.org/show_bug.cgi?id=146214
        <rdar://problem/20782970>

        Reviewed by Dean Jackson.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]): Deleted.
        When the WebView is at a nonintegral position, we can end up needing a TextIndicator
        with a nonintegral position. We need to round the window position, so we need to apply
        the fractional part to the indicator layers inside, not to the window.

2015-06-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Arabic text styled with Georgia is rendered as boxes
        https://bugs.webkit.org/show_bug.cgi?id=145681
        <rdar://problem/21169844>

        Reviewed by Darin Adler.

        Georgia doesn't support Arabic, so we ask CoreText what font does support Arabic. It returns
        TimesNewRomanPSMT. However, WebKit explicitly disallows this font on iOS. Therefore, instead
        of using TimesNewRomanPSMT, we will simply just use GeezaPro.

        Test: fast/text/arabic-times-new-roman.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/Font.h: Let FontCacheIOS call fontFamilyShouldNotBeUsedForArabic()
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::fontFamilyShouldNotBeUsedForArabic):

2015-06-22  Alex Christensen  <achristensen@webkit.org>

        Unreviewed non-mac debug build fix after r185840.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        Added enable flag around assertion.

2015-06-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add SPI to reload without content blocking.
        https://bugs.webkit.org/show_bug.cgi?id=146128
        rdar://problem/20351903

        Reviewed by Sam Weinig.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/Page.h:
        (WebCore::Page::userContentController):
        (WebCore::Page::userContentExtensionsEnabled):
        (WebCore::Page::setUserContentExtensionsEnabled):
        (WebCore::Page::group):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::removeAllUserContentExtensions):
        (WebCore::UserContentController::processContentExtensionRulesForLoad):
        (WebCore::UserContentController::actionsForResourceLoad):
        * page/UserContentController.h:

2015-06-22  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r169105) Dangling renderer pointer in SelectionSubtreeRoot::SelectionSubtreeData.
        https://bugs.webkit.org/show_bug.cgi?id=146116
        rdar://problem/20959369

        Reviewed by Brent Fulgham.

        This patch ensures that we don't adjust the selection unless the visual selection still matches this subtree root.

        When multiple selection roots are present we need to ensure that a RenderObject
        only shows up in one of them.
        RenderView::splitSelectionBetweenSubtrees(), as the name implies, splits the
        selection and sets the selection range (start/end) on each selection root.
        However, SelectionSubtreeRoot::adjustForVisibleSelection() later recomputes the range
        based on visible selection and that could end up collecting renderers as selection start/end
        from another selection subtree.
        RenderObject's holds the last selection state (RenderObject::setSelectionState).
        If we set a renderer first as "on selection border" and later "inside" using multiple selection roots,
        we can't clean up selections properly when this object gets destroyed.
        One of the roots ends up with a dangling RenderObject pointer.

        Test: fast/regions/crash-when-renderer-is-in-multiple-selection-subtrees.html

        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection):

2015-06-22  Jeremy Jones  <jeremyj@apple.com>

        Do not exit fullscreen when starting PiP since this is done automatically.
        https://bugs.webkit.org/show_bug.cgi?id=144871

        Reviewed by Darin Adler.

        Since we don't explicitly exit fullscreen, update state in shouldExitFullscreenWithReason()

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare shouldExitFullscreenWithReason().
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewController:shouldExitFullScreenWithReason:]): Forward to WebVideoFullscreenInterfaceAVKit.
        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason): Added.
        (WebVideoFullscreenInterfaceAVKit::willStartPictureInPicture): Remove enter fullscreen code.
        * platform/spi/cocoa/AVKitSPI.h: Add missing enums.

2015-06-22  Daniel Bates  <dabates@apple.com>

        AX: UI Automation cannot find AutoFill or search cancel buttons
        https://bugs.webkit.org/show_bug.cgi?id=145241
        <rdar://problem/21051411>

        Reviewed by Chris Fleizach.

        Add support for hit testing the search cancel button and AutoFill button so that
        they can be accessed by UI Automation.

        Currently the accessibility hit test machinery ignores nodes in a shadow tree.
        So, it neither finds the <input type="search"> cancel button nor the AutoFill button
        when it performs a hit test. Therefore these buttons cannot be accessed using
        UI Automation.

        Tests: accessibility/hit-test-input-auto-fill-button.html
               accessibility/hit-test-input-search-cancel-button.html
               accessibility/input-search-cancel-button.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityTextFieldDecorationHitTest): Added; returns
        the AccessibilityObject for the search cancel button or AutoFill text field decoration as applicable.
        (WebCore::AccessibilityRenderObject::accessibilityHitTest): Check whether the hit node
        is a text field decoration.

2015-06-22  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStream cancel (abstract part)
        https://bugs.webkit.org/show_bug.cgi?id=146111

        Reviewed by Darin Adler.

        This patch implements ReadableStream and ReadableStreamReader cancel.
        The reader delegates cancellation to its stream.

        This patch also ensures that controller.close() will not throw in case cancellation is on-going.

        A follow-up patch will implement the calling of 'cancel' JS callback for JS sources.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::cancel): Checks whether locked or not before cancelling.
        (WebCore::ReadableStream::cancelNoCheck): Cancel without lock check.
        (WebCore::ReadableStream::notifyCancelSucceeded): Async cancel callback.
        (WebCore::ReadableStream::notifyCancelFailed): Ditto.
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStream.idl: Cleaned up IDL.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::cancel):
        * Modules/streams/ReadableStreamReader.h:
        * Modules/streams/ReadableStreamReader.idl: Cleaned up IDL
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::close):
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::cancel):
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::cancel):
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::doCancel):
        * bindings/js/ReadableJSStream.h:

2015-06-22  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Navigator.webkitGetUserMedia() requires three arguments
        https://bugs.webkit.org/show_bug.cgi?id=146022

        Reviewed by Eric Carlson.

        Updated custom binding to make the third error callback argument
        mandatory. Updated and unskipped three tests (for the GTK+ port).

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):

2015-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r185818.

        Actually rollout r185320.

        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::DNSResolveQueue::platformResolve):
        (WebCore::gotProxySettingsCallback): Deleted.
        (WebCore::DNSResolveQueue::platformMaybeResolveHost): Deleted.

2015-06-16  Gavin Barraclough  <barraclough@apple.com>

        Page load performance regression due to bugs.webkit.org/show_bug.cgi?id=145542
        https://bugs.webkit.org/show_bug.cgi?id=146198

        Unreviewed rollout.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::isUsingProxy):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        (WebCore::clientCallback):
        (WebCore::DNSResolveQueue::platformResolve):
        (WebCore::proxyIsEnabledInSystemPreferences): Deleted.
        (WebCore::isUsingProxy): Deleted.
        (WebCore::DNSResolveQueue::platformMaybeResolveHost): Deleted.
        * platform/network/soup/DNSSoup.cpp:

2015-06-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r172975): navigator.language unable to tell region for Traditional Chinese users
        https://bugs.webkit.org/show_bug.cgi?id=146121
        rdar://problem/21395180

        Reviewed by Darin Adler.

        Revert to previous behavior, which is wrong in many ways, but not as wrong as the new one.

        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode):
        (WebCore::platformUserPreferredLanguages):
        * platform/spi/cf/CFBundleSPI.h:

2015-06-19  Andy Estes  <aestes@apple.com>

        Give Node::didNotifySubtreeInsertions() a better name
        https://bugs.webkit.org/show_bug.cgi?id=146170

        Reviewed by Darin Adler.

        didNotifySubtreeInsertions() is not a good name. It sounds like we are notifying the subtree insertions, which doesn't make sense.

        This function is really about notifying the Node that the subtree it's a part of has finished being inserted into the DOM
        (i.e. all nodes have received their call to insertedInto()). Change the name to finishedInsertingSubtree() to better reflect this.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::notifyChildInserted):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree):
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        * dom/Node.h:
        (WebCore::Node::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::Node::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::ScriptElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * dom/ScriptElement.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::insertedInto):
        (WebCore::HTMLFrameElementBase::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * html/HTMLFrameElementBase.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedInto):
        (WebCore::HTMLScriptElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::HTMLScriptElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * html/HTMLScriptElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::insertedInto):
        (WebCore::SVGFEImageElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGFEImageElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/SVGFEImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::insertedInto):
        (WebCore::SVGMPathElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGMPathElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/SVGMPathElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::insertedInto):
        (WebCore::SVGScriptElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGScriptElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/SVGScriptElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::insertedInto):
        (WebCore::SVGTRefElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGTRefElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedInto):
        (WebCore::SVGTextPathElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGTextPathElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/SVGTextPathElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedInto):
        (WebCore::SVGSMILElement::finishedInsertingSubtree): Renamed from didNotifySubtreeInsertions.
        (WebCore::SVGSMILElement::didNotifySubtreeInsertions): Renamed to finishedInsertingSubtree.
        * svg/animation/SVGSMILElement.h:

2015-06-21  Philip Chimento  <philip.chimento@gmail.com>

        libwebkit2gtk fails to link without opengl
        https://bugs.webkit.org/show_bug.cgi?id=138332

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt: The third-party ANGLE directories need to be
        included even if ENABLE(GRAPHICS_CONTEXT_3D) is false. They must
        be included after the OpenGL headers as the comment says.
        * platform/graphics/texmap/BitmapTexturePool.cpp: Remove
        reference to no longer existent header file.

2015-06-20  Tim Horton  <timothy_horton@apple.com>

        Deselection of text causes a noticeable jump on force touch machines
        https://bugs.webkit.org/show_bug.cgi?id=146173
        <rdar://problem/20992842>

        Reviewed by Sam Weinig.

        When we have a TextIndicator of type Crossfade, we end up putting
        a layer with the blue highlight + text painted into it on top of the
        content, and cross-fading that layer to the yellow-highlighted text.

        This is necessary for BounceAndCrossfade TextIndicators, because the
        blue highlight has to bounce, but is not necessary for Crossfade-only
        ones; we can just fade in the yellow highlight on top of the
        existing blue page highlight, and all is well.

        So, get rid of the Crossfade TextIndicator type and use FadeIn, separately
        keeping track of whether or not we can add a margin (we still can't
        add a margin to TextIndicators that indicate the page's current selection,
        because the blue highlight cannot have the margin applied to it, and we
        want the bounds to match exactly).

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        If the range is the same as the selection, turn off the margin.
        We were previously doing this based on the presentation transition, but now
        there's no difference in presentation transition in this case.

        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::TextIndicator::wantsBounce):
        (WebCore::TextIndicator::wantsContentCrossfade):
        (WebCore::TextIndicator::wantsFadeIn):
        (WebCore::TextIndicator::wantsManualAnimation):
        * page/TextIndicator.h:
        Get rid of TextIndicatorPresentationTransition::Crossfade.

        (WebCore::TextIndicator::setWantsMargin):
        (WebCore::TextIndicator::wantsMargin):
        Keep track of whether we want a margin.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        Determine if we should use a margin based on wantsMargin instead of the
        presentation transition.

2015-06-20  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Do not consider test directories when DEVELOPER_MODE is OFF
        https://bugs.webkit.org/show_bug.cgi?id=146171

        Reviewed by Gyuyoung Kim.

        * platform/efl/EflInspectorUtilities.cpp:
        (WebCore::inspectorResourcePath): Only used WEB_INSPECTOR_DIR which CMake decides properly.

2015-06-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix absolute value warning in LocalizedStringsGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145919

        Reviewed by Martin Robinson.

        Use abs(static_cast<int>(time)) rather than static_cast<int>(abs(time)) to avoid clang's
        warnings about passing a float to abs() instead of std::abs(). Also, because casting an int
        to an int is silly.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedMediaTimeDescription):

2015-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Highlight currently edited CSS selector
        https://bugs.webkit.org/show_bug.cgi?id=145658

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/highlight-multiple-shapes.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildObjectForHighlightedNode):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector): Gets a list of all nodes matching a given selector string and highlights each of them.
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::hideHighlight):
        (WebCore::InspectorOverlay::highlightNodeList): Loops through a given NodeList to create highlightObjects for each of them.
        (WebCore::InspectorOverlay::shouldShowOverlay):
        (WebCore::buildObjectForElementData): Don't show flow fragments when highlighting multiple nodes.
        (WebCore::InspectorOverlay::buildHighlightObjectForNode):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode): Now returns an array containing the highlightObject for each highligthed node.
        (WebCore::InspectorOverlay::drawNodeHighlight): Now sends an array to the InspectorOverlayPage.js to provide support for highlighting multiple nodes.
        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlayPage.js: Now expects an array as its parameter and loops through it to highlight each node given.
        If the parameter array contains more than one element, do not draw the textbox containing info on that node.
        (drawNodeHighlight):

2015-06-19  Joseph Pecoraro  <pecoraro@apple.com>

        Crash under WebCore::PageConsoleClient::addMessage attempting to log insecure content message in ImageDocument
        https://bugs.webkit.org/show_bug.cgi?id=146096

        Reviewed by Timothy Hatcher.

        Was able to reproduce this using a user stylesheet with an http css font
        on a pdf (ImageDocument) main document loaded over https. Was unable to
        create a reliable test for this scenario.

        * page/PageConsoleClient.cpp:
        (WebCore::getParserLocationForConsoleMessage):
        The scriptableDocumentParser could be null, such as in an ImageDocument.

2015-06-19  Dean Jackson  <dino@apple.com>

        Extremely large canvas crashes on pre-El Capitan machines
        https://bugs.webkit.org/show_bug.cgi?id=146169
        <rdar://problem/21410046>

        Reviewed by Tim Horton.

        On machines before El Capitan, make the maximum canvas size
        8k by 8k.

        Covered by existing tests.

        * html/HTMLCanvasElement.cpp:

2015-06-19  Tim Horton  <timothy_horton@apple.com>

        Selection services cannot be invoked when force click is enabled
        https://bugs.webkit.org/show_bug.cgi?id=146166
        <rdar://problem/21468362>

        Reviewed by Darin Adler.

        * page/mac/ServicesOverlayController.h:
        Turn Highlight::Type into something we can use for dirty flags.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::createForSelection):
        (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber):
        (WebCore::ServicesOverlayController::ServicesOverlayController):
        (WebCore::ServicesOverlayController::selectionRectsDidChange):
        (WebCore::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        (WebCore::ServicesOverlayController::invalidateHighlightsOfType):
        (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded):
        (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown):
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight):
        (WebCore::ServicesOverlayController::determineActiveHighlight):
        (WebCore::ServicesOverlayController::didScrollFrame):
        (WebCore::ServicesOverlayController::handleClick):
        Coalesce highlight rebuilding so that things (like TextIndicator creation)
        that change the selection and then reset it immediately don't cause us
        to lose the active highlight.

        This also means that if the selection changes multiple times in a runloop
        (easily possible from script), we won't waste a lot of time rebuilding highlights.

        (WebCore::ServicesOverlayController::didRebuildPotentialHighlights):
        Merged into buildPotentialHighlightsIfNeeded.

2015-06-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TimelineAgent needs to handle nested runloops
        https://bugs.webkit.org/show_bug.cgi?id=145090

        Reviewed by Joseph Pecoraro.

        Previously nested run loops caused InspectorTimelineAgent to prematurely pop the current run loop record. This
        patch adds a counter to track the run loop nesting level, and rendering frame records are only pushed/popped
        when the nesting level is zero. Run loop entry/exit notifications received while the debugger is paused do not
        affect the nesting level.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:

2015-06-19  Brent Fulgham  <bfulgham@apple.com>

        Follow-up fix to r185766.
        https://bugs.webkit.org/show_bug.cgi?id=22132

        Reviewed by Zalan Bujtas.

        Suggested by Darin Adler in the bug.

        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware): Use WTF::move when passing
        the new tileImageCopy RefPtr.

2015-06-19  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Fix return-type-c-linkage warning after r185553
        https://bugs.webkit.org/show_bug.cgi?id=146014

        Reviewed by Martin Robinson.

        * platform/network/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericGetRequest): Return a pointer rather than a reference.
        * platform/network/soup/WebKitSoupRequestGeneric.h: webkitSoupRequestGenericGetRequest now
        returns a pointer rather than a reference.

2015-06-19  Dean Jackson  <dino@apple.com>

        Played <audio> looks invisible against the gray background
        https://bugs.webkit.org/show_bug.cgi?id=146164
        <rdar://problem/21014284>

        Reviewed by Brent Fulgham.

        The plus-darker blend mode was not allowing any white to
        show through in the rendering. We don't need this for
        audio controls, where we draw on an opaque grey background.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-panel): Darken the color of the controls a
        little to make white stand out more.
        (audio::-webkit-media-controls-timeline): Remove the plus-darker blending.
        (video::-webkit-media-controls-timeline): Apply blending only to video.

2015-06-19  Andy Estes  <aestes@apple.com>

        Various assertion failures occur when executing script in the midst of DOM insertion
        https://bugs.webkit.org/show_bug.cgi?id=132482

        Reviewed by Darin Adler.

        Prior to this change, when an element containing a <script> child was inserted into a document, the script was
        executed in ScriptElement::insertedInto(). That script can access nodes that follow it in the newly-inserted
        hierarchy but are not yet fully inserted, leading to at least the following problems:

            - The script could remove a node that is not yet marked as in the document.
            - The script could remove a named <map> that has yet to be added to TreeScope::m_imageMapsByName.
            - The script could remove a form control that has yet to be added to FormController::m_formElementsWithState.

        These scenarios all result in assertion failures. This change ensures that each node in the newly-inserted
        hierarchy is fully inserted before executing any scripts.

        Tests: fast/dom/element-removed-while-inserting-parent-crash.html
               fast/dom/named-map-removed-while-inserting-parent-crash.html
               fast/forms/form-control-removed-while-inserting-parent-crash.html
               svg/dom/element-removed-while-inserting-parent-crash.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::shouldNotifySubtreeInsertions): Renamed from insertedInto().
        Returned true in the case where insertedInto() would've called prepareScript().
        (WebCore::ScriptElement::didNotifySubtreeInsertions): Called prepareScript().
        (WebCore::ScriptElement::insertedInto): Renamed to shouldNotifySubtreeInsertions().
        * dom/ScriptElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedInto): If shouldNotifySubtreeInsertions() is true, returned InsertionShouldCallDidNotifySubtreeInsertions.
        Otherwise, returned InsertionDone.
        (WebCore::HTMLScriptElement::didNotifySubtreeInsertions): Called ScriptElement::didNotifySubtreeInsertions().
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::insertedInto): Did the same as HTMLScriptElement::insertedInto().
        (WebCore::SVGScriptElement::didNotifySubtreeInsertions): Called ScriptElement::didNotifySubtreeInsertions().
        * svg/SVGScriptElement.h:

2015-06-19  Brent Fulgham  <bfulgham@apple.com>

        All calls of ImageBuffer::create should null check the return value
        https://bugs.webkit.org/show_bug.cgi?id=22132

        Reviewed by Zalan Bujtas.

        ImageBuffer::create returns nullptr for a number of reasons, and should be
        expected to do so. We missed this check in a few places, resulting in
        crashes on some systems. Likewise, ImageBuffer::copyImage may return nullptr
        in normal use and should be checked.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern): Add nullptr check for create and copyImage. Remove
        extra call to 'setImageObserver'.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern): Add nullptr check for copyImage.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawPattern): Add nullptr checks for copyImage.
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware): Add nullptr check for copyImage.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asImageBuffer): Add nullptr check for create.
        (WebCore::FilterEffect::openCLImageToImageBuffer): Ditto.
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents): Add nullptr checks for create and copyImage.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Add nullptr check for copyImage.

2015-06-19  Jeremy Jones  <jeremyj@apple.com>

        Get CAContext directly for CALayer instead of walking the layer tree.
        https://bugs.webkit.org/show_bug.cgi?id=146138
        <rdar://problem/21455974>

        Reviewed by Darin Adler.

        This will get the context directly from the CALayer instead of getting all CAContexts, walking the layer tree 
        to the root and comparing that against each CAContext's root layer.

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

2015-06-18  Brent Fulgham  <bfulgham@apple.com>

        [iOS] scrollIntoViewIfNeeded is not working with scroll-snap points
        https://bugs.webkit.org/show_bug.cgi?id=145318
        <rdar://problem/21081501>

        Reviewed by Simon Fraser.

        Use the ScrollController in iOS to track the scroll snap point state.
        We do not need the animation implementation or timers since the actual
        animation is handled by UIKit.

        This change lets us communicate the current offset into the scroll snap
        offset vector between the WebProcess and RemoteScrollingTree so that
        both sides stay in sync regardless of whether user gestures or style
        updates have caused us to shift to a different snap point.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Set the
        current horizontal and vertical scroll snap offset indices.
        (WebCore::AsyncScrollingCoordinator::updateOverflowScrollingNode): Ditto.
        * page/scrolling/AsyncScrollingCoordinator.h: Mark the setActiveScrollSnapIndices
        for export so that it can be reached by the UIProcess.
        * page/scrolling/ScrollingCoordinator.h: Keep track of horizontal and
        vertical scroll snap offset indices.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollingStateScrollingNode::setCurrentVerticalSnapPointIndex): Added.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::currentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollingStateScrollingNode::currentVerticalSnapPointIndex): Added.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren): Update the scroll snap
        point offset indices if either has changed.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::currentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollingTreeScrollingNode::currentVerticalSnapPointIndex): Added.
        (WebCore::ScrollingTreeScrollingNode::setCurrentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollingTreeScrollingNode::setCurrentVerticalSnapPointIndex): Added.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::currentSnapPointIndicesDidChange): New method
        to handle notifications about scroll snap index changes from the UIProcess.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::currentSnapPointIndicesDidChange): New method
        to handle notifications about scroll snap index changes from the UIProcess.
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): Update scroll
        snap point current offset indices if they have changed.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Remove unneeded
        PLATFORM(MAC) macro.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator): We have a ScrollController if we are
        supporting scroll snap points or rubber banding.
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): This method is not needed
        for iOS builds.
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): Enable this on iOS.
        (WebCore::ScrollAnimator::updateScrollSnapState): Renamed from 'updateScrollAnimatorsAndTimers'
        and enabled on iOS.
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers): Deleted.
        * platform/ScrollAnimator.h: Enable some scroll snap methods on iOS.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleWheelEvent): Enable scroll snap index bookkeeping on iOS, too.
        (WebCore::ScrollableArea::updateScrollSnapState): Revise to call 'updateScrollSnapState' instead
        of 'updateScrollAnimatorsAndTimers'.
        * platform/cocoa/ScrollController.h: Enable some methods on iOS. Reorder methods to
        reduce the number of macros needed to do so.
        * platform/cocoa/ScrollController.mm:
        (systemUptime): Only build for Mac.
        (WebCore::ScrollController::ScrollController): Disable rubber band-specific members on iOS.
        (WebCore::ScrollController::handleWheelEvent): Only build this on Mac.
        (WebCore::ScrollController::isRubberBandInProgress): Always return 'false' on iOS.
        (WebCore::ScrollController::startSnapRubberbandTimer): Only build this on Mac.
        (WebCore::ScrollController::shouldRubberBandInHorizontalDirection): Ditto.
        (WebCore::ScrollController::scrollSnapPointState): Enable on iOS.
        (WebCore::ScrollController::hasActiveScrollSnapTimerForAxis): Only build on Mac.
        (WebCore::ScrollController::updateScrollSnapState): renamed from 'updateScrollAnimatorsAndTimers'
        (WebCore::ScrollController::startScrollSnapTimer): Only build on Mac.
        (WebCore::ScrollController::initializeGlideParameters): Ditto.
        (WebCore::ScrollController::activeScrollSnapIndexForAxis): Enable on iOS.
        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset): Ditto.
        (WebCore::ScrollController::beginScrollSnapAnimation): Only build on Mac.
        (WebCore::ScrollController::computeGlideDelta): Ditto.
        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Deleted.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Capture any changes in scroll
        snap offset indices.

2015-06-19  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen view should not update bounds of video when in PiP.
        https://bugs.webkit.org/show_bug.cgi?id=146134

        Reviewed by Darin Adler.

        Don't update bounds on video layer when it is not a child.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer setBounds:]):

2015-06-19  Zalan Bujtas  <zalan@apple.com>

        RenderRubyText requires RenderRubyRun parent.
        https://bugs.webkit.org/show_bug.cgi?id=146148
        rdar://problem/21423319

        Reviewed by Simon Fraser.

        RenderRubyText expects its parent to be RenderRubyRun and since a
        a non-block <rt> requires anonymous wrapper, we should check whether
        the display type is actually block.

        Test: fast/ruby/crash-when-ruby-rt-is-non-block.html

        * html/RubyTextElement.cpp:
        (WebCore::RubyTextElement::createElementRenderer):

2015-06-19  Jeremy Jones  <jeremyj@apple.com>

        cancelPreviousPerformRequestsWithTarget for -resolveBounds in wrong class.
        https://bugs.webkit.org/show_bug.cgi?id=146140

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebCALayerHostWrapper dealloc]): Added.
        (-[WebAVVideoLayer dealloc]): Deleted.

2015-06-19  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Null pointer crash in BitmapTexture::updateContents.
        https://bugs.webkit.org/show_bug.cgi?id=146147

        Reviewed by Brent Fulgham.

        Added null pointer check.

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

2015-06-19  Anders Carlsson  <andersca@apple.com>

        Spintracer treats the web process as hung when it's showing JavaScript dialogs in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=146124
        rdar://problem/21449395

        Reviewed by Geoffrey Garen.

        * platform/spi/cg/CoreGraphicsSPI.h:

2015-06-19  Csaba Osztrogonác  <ossy@webkit.org>

        Remove unnecessary svn:executable flags
        https://bugs.webkit.org/show_bug.cgi?id=146107

        Reviewed by Alexey Proskuryakov.

        * html/canvas/CanvasRenderingContext2D.cpp: Removed property svn:executable.
        * mathml/MathMLMencloseElement.cpp: Removed property svn:executable.
        * mathml/MathMLMencloseElement.h: Removed property svn:executable.
        * platform/efl/RenderThemeEfl.cpp: Removed property svn:executable.
        * rendering/mathml/RenderMathMLMenclose.cpp: Removed property svn:executable.
        * rendering/mathml/RenderMathMLMenclose.h: Removed property svn:executable.

2015-06-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Bindings generator should generate code to catch exception and reject promises for Promise-based APIs
        https://bugs.webkit.org/show_bug.cgi?id=146060

        Reviewed by Darin Adler.

        The binding generator splits the function that binds JS to the DOM class implementation in two for functions returning promise.
        The first function, called from JS, is responsible of casting this to the expected JSXXX class.
        If casting fails, an exception is raised. Otherwise, it calls the second function.
        After calling the second function, it checks whether an exception is raised, in which case it returns a rejected promise.
        The second function is responsible of argument conversion and calling the DOM class function.

        Covered by expectations and AudioContext promise still working.
        A test case is added for a promise returning function taking a typed argument as input (if argument value cannot be typed, the promise is rejected).
        A second test case is a promise-returning function that can raise an exception. In that case the DOMException is used as rejection value.

        As can be seen from generated code, this generalized code adds a mandatory check (is there an exception?) at the end of the function.
        This check is done even in cases we know there will be no exception.
        This may be covered by another patch if this optimization is thought useful enough.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::rejectPromiseWithExceptionIfAny): Utility method for the binding code.
        (WebCore::callPromiseFunction): Ditto.
        * bindings/js/JSDOMPromise.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GenerateFunctionCastedThis): Extracted from GenerateImplementationFunctionCall to reuse it in case of promise-returning functions.
        (GenerateImplementationFunctionCall):
        (GenerateCallbackImplementation): Deleted.
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentPromise):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithException):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionPromise):
        * bindings/scripts/test/TestObj.idl:

2015-06-18  Jeremy Jones  <jeremyj@apple.com>

        Disable UIWindow for fullscreen video for selected clients.
        https://bugs.webkit.org/show_bug.cgi?id=145852

        Reviewed by Simon Fraser.

        Disable UIWindow for fullscreen video doesn't work everywhere (rdar://problem/21315993), so just disable it when creating a UIWindow won't work.
        Fix some interface hiding and layout problems that showed up in the non UIWindow code path.

        * platform/RuntimeApplicationChecksIOS.h:
        * platform/RuntimeApplicationChecksIOS.mm: Remove iAD bundle identifier.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Opt out of UIWindow when hosted in another process. And fix view parenting for non-window case.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Fix for AVKit exit fullscreen complaining about -needsLayout.

        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen):
        These hide and show the view controller where we hide and show the window.

2015-06-18  Dean Jackson  <dino@apple.com>

        Provide a way for web developers to draw a Theme-specific Wireless Playback icon
        https://bugs.webkit.org/show_bug.cgi?id=146123
        <rdar://problem/21119287>

        Reviewed by Simon Fraser.

        Implement a -webkit-named-image() CSS <image> generator that allows a site to
        request artwork by name and get the platform variant. At the moment
        we only support "wireless-playback" which returns a generic image everywhere
        but Cocoa platforms, where we render the AirPlay icon.

        In order to do this I added a ThemeCocoa to share any Theme code between
        Mac and iOS.

        Test: fast/css/named-icons.html

        * WebCore.xcodeproj/project.pbxproj: Add new files CSSNamedImageValue, NamedImageGeneratedImage and ThemeCocoa.

        * css/CSSImageGeneratorValue.cpp: Handle the new NamedImageClass in the switch statements for downcasting.
        (WebCore::CSSImageGeneratorValue::image):
        (WebCore::CSSImageGeneratorValue::isFixedSize):
        (WebCore::CSSImageGeneratorValue::isPending):
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque):

        * css/CSSNamedImageValue.cpp: New class. Just holds a name String.
        (WebCore::CSSNamedImageValue::customCSSText):
        (WebCore::CSSNamedImageValue::image):
        (WebCore::CSSNamedImageValue::equals):
        * css/CSSNamedImageValue.h:
        (WebCore::CSSNamedImageValue::create):
        (WebCore::CSSNamedImageValue::isFixedSize):
        (WebCore::CSSNamedImageValue::isPending):
        (WebCore::CSSNamedImageValue::CSSNamedImageValue):

        * css/CSSParser.cpp:
        (WebCore::CSSParser::isGeneratedImageValue): Allow "-webkit-named-image(".
        (WebCore::CSSParser::parseGeneratedImage): Call parseNamedImage if we hit named-icon.
        (WebCore::CSSParser::parseNamedImage): Parse the function looking for a CSS ident.
        * css/CSSParser.h:

        * css/CSSValue.cpp: Handle NamedImageClass in the various switch statements.
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isNamedImageValue): Helper to detect the correct CSSValue subclass.

        * platform/Theme.cpp:
        (WebCore::Theme::drawNamedImage): Draw a generic wireless playback icon.
        * platform/Theme.h: Add drawNamedImage.

        * platform/cocoa/ThemeCocoa.cpp: New shared base class for ThemeMac and ThemeIOS.
        (WebCore::fitContextToBox):
        (WebCore::ThemeCocoa::drawNamedImage): Draw an AirPlay icon for wireless playback.
        * platform/cocoa/ThemeCocoa.h:

        * platform/graphics/CrossfadeGeneratedImage.h: Drive-by removal of unnecessary forward class definition.

        * platform/graphics/ImageBuffer.h: Add NamedImageGeneratedImage as a friend class.

        * platform/graphics/NamedImageGeneratedImage.cpp: New class. Calls into the Theme to render the artwork.
        (WebCore::NamedImageGeneratedImage::NamedImageGeneratedImage):
        (WebCore::NamedImageGeneratedImage::draw):
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:

        * platform/ios/ThemeIOS.h: Inherit from ThemeCocoa.
        * platform/mac/ThemeMac.h: Ditto.

2015-06-18  KyungTae Kim  <ktf.kim@samsung.com> and Myles C. Maxfield  <mmaxfield@apple.com>

        [CSS3] Add support for the word-break:keep-all CSS property
        https://bugs.webkit.org/show_bug.cgi?id=123782

        Reviewed by Darin Adler.

        Add support for word-break:keep-all CSS property by CSS3 spec:
        http://www.w3.org/TR/2013/WD-css-text-3-20131010/#word-break-property

        Test: fast/text/word-break-keep-all.html

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EWordBreak):
        * css/CSSValueKeywords.in:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.h:
        (WebCore::nextBreakablePositionKeepingAllWords):
        (WebCore::nextBreakablePositionKeepingAllWordsIgnoringNBSP):
        (WebCore::isBreakable):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):
        * rendering/style/RenderStyleConstants.h:

2015-06-18  Jon Lee  <jonlee@apple.com>

        Update AVKit usage of pip
        https://bugs.webkit.org/show_bug.cgi?id=146095
        <rdar://problem/21386853>

        Reviewed by Eric Carlson.

        - Rename enum VideoFullscreenModeOptimized to VideoFullscreenModePictureInPicture
        - Rename MediaElementSession::allowsAlternateFullscreen to allowsPictureInPicture
        - Rename Settings::allowsAlternateFullscreen to allowsPictureInPictureMediaPlayback
        - Update AVKit calls and AVKitSPI.h
        - Rename WebVideoFullscreenInterfaceAVKit delegate functions and member variables

        * html/HTMLMediaElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::allowsPictureInPicture): Renamed.
        (WebCore::MediaElementSession::allowsAlternateFullscreen): Deleted.
        * html/MediaElementSession.h:
        * page/Settings.cpp:
        * page/Settings.in:
        * platform/graphics/MediaPlayerEnums.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Remove unused setIsOptimized.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/spi/cocoa/AVKitSPI.h: Remove unused typedef.
        * platform/spi/mac/AVFoundationSPI.h:

2015-06-18  Jeremy Jones  <jeremyj@apple.com>

        Fix crash when entering fullscreen during exit fullscreen animation.
        https://bugs.webkit.org/show_bug.cgi?id=146117

        Reviewed by Simon Fraser.

        Because enterFullscreen can be called during exitFullscreen animation, the exit fullscreen teardown
        should not imply a fullscreen state change on video element.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::exitFullscreen): May be called from mainThread
        (-[WebVideoFullscreenController exitFullscreen]): May be called from mainThread
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoElement): 
        Changing associated video element does not imply fullscreen mode change.

2015-06-18  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: improve generated types for objects passed to backend commands
        https://bugs.webkit.org/show_bug.cgi?id=146091

        Reviewed by Joseph Pecoraro.

        Update type signatures for backend command implementations. In a few cases, clean
        up relevant helper function signatures and copy data out of parameter objects where
        the code previously held onto a reference.

        No new tests, no behavior changed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::computePseudoClassMask):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::parseQuad):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::replayToPosition):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        Clean up extraHTTPHeaders to copy header key/values out of the InspectorObject, rather
        than retaining the protocol object indefinitely. This matches the ownership scheme used
        everywhere else.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        * inspector/InspectorWorkerAgent.h:

2015-06-18  Anders Carlsson  <andersca@apple.com>

        Remove shouldInterruptJavaScript
        https://bugs.webkit.org/show_bug.cgi?id=146118

        Reviewed by Antti Koivisto.

        The WebKit SPI methods for deciding whether JavaScript execution should be interrupted hasn't been used
        for many releases. Furthermore, they don't make sense in the multi-process architecture since it's still possible
        to interrupt execution (by closing the browser tab or window) from the UI process.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::shouldInterruptScript):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::shouldInterruptJavaScript): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:

2015-06-18  Benjamin Poulain  <bpoulain@apple.com>

        [CSS JIT][ARMv7] The pseudo element early exit trashes r6
        https://bugs.webkit.org/show_bug.cgi?id=146078

        Reviewed by Alex Christensen.

        The pseudo element early failure runs before we generate the prologue.
        The reason is that we can often exit immediately on function entry, before
        we even touch any memory.

        On ARMv7, we don't have many spare registers so the MacroAssembler
        uses r6 as a scratch register and the client code is expected to save
        it.

        In the early failure case, we were not pushing r6 before using the MacroAssembler
        and its value could be trashed.

        This patch push the macro assembler registers separately from the prologue.

        For restoring the registers, a new function generateFunctionEnding() encapsulate
        the pop() and ret().

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::pushMacroAssemblerRegisters):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::popMacroAssemblerRegisters):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::operator=):
        We have a new case for the stack allocator: some stack changes are conditional
        at compile time instead of runtime. This is easy to deal with by overriding
        the stack if a path is not taken at compile time.

2015-06-17  Conrad Shultz  <conrad_shultz@apple.com>

        REGRESSION: js/dom/navigator-plugins-crash.html asserts a lot
        https://bugs.webkit.org/show_bug.cgi?id=144399

        Reviewed by Darin Adler.

        Earlier work made the array of web-visible plug-ins dynamic, but allowed DOMPlugin (and, indirectly by extension,
        DOMMimeType) to continue keeping a reference to a plug-in in terms of an index into that array. This superficially
        appeared correct since DOMPlugin immutably holds onto a PluginData instance, which in turn immutably holds onto a
        Page instance. PluginStrategy::getWebVisiblePluginInfo() is passed this Page, which is used to determine the contents
        of the plugin array. The expectation was that keeping an index would still be safe since the Page is not changing,
        but this is not strictly correct since relevant attributes of the Page and/or the available plugins may still change.

        It's not entirely clear why the test failures are intermittent and occur only on certain configurations, but address
        them by eliminating the incorrect storage of indexes in favor of keeping copies of the relevant plugin info itself.

        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        Instead of storing the MIME type index, retrieve and store the MIME class info and plugin info.
        (WebCore::DOMMimeType::type):
        Directly access the m_mimeClassInfo member.
        (WebCore::DOMMimeType::suffixes):
        Ditto.
        (WebCore::DOMMimeType::description):
        Ditto.
        (WebCore::DOMMimeType::enabledPlugin):
        Directly access the m_pluginInfo member.
        (WebCore::DOMMimeType::mimeClassInfo): Deleted.

        * plugins/DOMMimeType.h:
        Update member variables.

        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::DOMPlugin):
        Instead of storing the plugin index, store the plugin info directly.
        (WebCore::DOMPlugin::name):
        Directly access m_pluginInfo.
        (WebCore::DOMPlugin::filename):
        Ditto.
        (WebCore::DOMPlugin::description):
        Ditto.
        (WebCore::DOMPlugin::length):
        Ditto.
        (WebCore::DOMPlugin::item):
        Access m_pluginInfo directly; find the matching plug-in based on matching PluginInfo (for which an overloaded
        comparator is supplied below).
        (WebCore::DOMPlugin::pluginInfo): Deleted.

        * plugins/DOMPlugin.h:
        Update member variables.
        (WebCore::DOMPlugin::create):
        Accept a PluginInfo instead of a plugin index.

        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::namedItem):

        * plugins/PluginData.h:
        (WebCore::operator==):
        Added; compare PluginInfo structs on the basis of member equality.

2015-06-17  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Log blocked loads to the WebInspector console
        https://bugs.webkit.org/show_bug.cgi?id=146089

        Reviewed by Joseph Pecoraro.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::displayNoneCSSRule):
        Log which URLs are blocked and the URL of the page they are blocked from.

2015-06-18  Joseph Pecoraro  <pecoraro@apple.com>

        Crash under WebCore::DOMWindow::dispatchMessageEventWithOriginCheck attempting to log console message
        https://bugs.webkit.org/show_bug.cgi?id=146093

        Reviewed by Timothy Hatcher.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        The console could be null so null check its use.

2015-06-18  Csaba Osztrogonác  <ossy@webkit.org>

        Suppress null-conversion warnings in ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=145125

        Reviewed by Alex Christensen.

        * CMakeLists.txt:

2015-06-18  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Implement ReadableStreamReader.releaseLock
        https://bugs.webkit.org/show_bug.cgi?id=145299

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::close): Moving some close code to newly added releaseReader.
        (WebCore::ReadableStream::releaseReader): Implements reader release and callbacks finalization.
        (WebCore::ReadableStream::changeStateToErrored): Calls releaseReader.
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::hasReadPendingRequests): Added to enable reader.releaseLock throwing if read requests are pending.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::releaseLock): Implementation of releaseLock
        * Modules/streams/ReadableStreamReader.h:
        * Modules/streams/ReadableStreamReader.idl:
        (WebCore::releaseLock): Deleted.

2015-06-18  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        GObject and ObjC bindings generator should not generate code for promise-based APIs
        https://bugs.webkit.org/show_bug.cgi?id=146059

        Reviewed by Darin Adler.

        Covered by rebased expectations.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Disabling GObject DOM binding for functions returning promises.
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipFunction): Disabling ObjC DOM binding for functions returning promises.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Rebasing expectation.
        (webkit_dom_test_obj_get_read_only_long_attr): Deleted.
        (webkit_dom_test_obj_get_read_only_string_attr): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Rebasing expectation.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        (core): Deleted.

2015-06-17  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] test_ewk2_context_url_scheme_register has been crashed since r185553
        https://bugs.webkit.org/show_bug.cgi?id=146075

        Reviewed by Carlos Garcia Campos.

        Since r185553, CustomProtocolManager sends StartLoading message to UIProcess
        with request of SoupGenericRequest instead of request itself.
        But, request of SoupGenericRequest is nullptr in EFL port because EFL port
        does not use m_initiatingPageID.

        This patch updates request of SoupGenericRequest although m_initiatingPageID is null.

        * platform/network/soup/ResourceRequestSoup.cpp: 
        (WebCore::ResourceRequest::updateSoupRequest):

2015-06-17  Daniel Bates  <dabates@apple.com>

        Client may receive began editing callback for already focused text field
        https://bugs.webkit.org/show_bug.cgi?id=146074
        <rdar://problem/21293562>

        Reviewed by Darin Adler.

        Fixes an issue where the client would be notified that began editing in a text field
        for each programmatic DOM focus event dispatched at the text field regardless of
        whether the field was focused. The client should only be notified that began editing
        exactly once when a text field becomes focused (either programmatically or by user interaction).

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent): Move logic to dispatch editing began callback from here...
        (WebCore::TextFieldInputType::handleFocusEvent): to here. This function is called when the
        text field becomes newly focused.
        * html/TextFieldInputType.h:

2015-06-17  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Fail to parse invalid arrays
        https://bugs.webkit.org/show_bug.cgi?id=146079
        rdar://problem/21422649

        Reviewed by Benjamin Poulain.

        Covered by new and corrected API tests.

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        Fail to parse invalid arrays for if-domain, unless-domain, resource-type, and load-type arrays.

2015-06-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Position::findParent() should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=146038

        Reviewed by Darin Adler.

        * dom/Position.cpp:
        (WebCore::Position::containerNode):
        (WebCore::Position::parentAnchoredEquivalent):
        Pass a reference; there is already a null check.
        (WebCore::Position::previous):
        Add a missing null check. Code below this expects that node is non-null.
        (WebCore::Position::next):
        Ditto.
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        Pass a reference.
        (WebCore::Position::findParent):
        Changed to take a reference.

        * dom/Position.h:
        Ditto.

2015-06-17  Brent Fulgham  <bfulgham@apple.com>

        Overflow regions with scroll snap points are not reliably rubber banding
        https://bugs.webkit.org/show_bug.cgi?id=142522
        <rdar://problem/20100726>

        Reviewed by Darin Adler.

        When computing the target scroll destination, update the nearest snap point index
        and other bookkeeping, but keep the original gesture target if it would have taken
        us beyond either limit of the scroll container.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollExtents): Add new method
        to support client API.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollExtents): Add new method to support client API.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerClient::scrollExtents): Added new pure virtual method to API.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::beginScrollSnapAnimation): Hold onto original user gesture
        target, and use that instead of our nearest snap point if the gesture takes us past
        either extreme of the scroll container.

2015-06-17  Tim Horton  <timothy_horton@apple.com>

        Swipe gesture can get stuck, preventing scrolling and other gestures
        https://bugs.webkit.org/show_bug.cgi?id=146088
        <rdar://problem/16056087>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSEventSPI.h: Added.
        Add an SPI header.

2015-06-16  Matt Rajca  <mrajca@apple.com>

        MediaSession: handle MediaEventTrackNext and MediaEventTrackPrevious events
        https://bugs.webkit.org/show_bug.cgi?id=146028

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaRemoteControls.idl: Added nexttrack/previoustrack event handlers.
        * Modules/mediasession/MediaSession.cpp: Dispatch the nexttrack/previoustrack events.
        (WebCore::MediaSession::skipToNextTrack):
        (WebCore::MediaSession::skipToPreviousTrack):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionManager.cpp: Skip to the next/previous track as described in the media session spec.
        (WebCore::MediaSessionManager::skipToNextTrack):
        (WebCore::MediaSessionManager::skipToPreviousTrack):
        * Modules/mediasession/MediaSessionManager.h:
        * dom/EventNames.h: Added the nexttrack/previoustrack event names.
        * page/Page.cpp: Tell MediaSessionManager to handle the new track-skipping events.
        (WebCore::Page::handleMediaEvent):

2015-06-17  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver in iOS not announcing generic WAI-ARIA region, even if labelled properly
        https://bugs.webkit.org/show_bug.cgi?id=146066

        Reviewed by Darin Adler.

        Allow the region role to identify as a landmark type.

        Updated test: platform/ios-simulator/accessibility/landmark-types.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):

2015-06-17  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r173283-r173296): Amazon.com front page has no caret in the search field
        https://bugs.webkit.org/show_bug.cgi?id=146073
        rdar://problem/21022203

        Reviewed by Tim Horton.

        Text controls (text inputs and textareas) need backing store even when empty, because
        they need to be able to paint a caret.

        Test: compositing/backing/form-controls-backing.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):

2015-06-17  Zalan Bujtas  <zalan@apple.com>

        Selection cache produces invalid result when ancestor has float element.
        https://bugs.webkit.org/show_bug.cgi?id=146042
        rdar://problem/20604592

        Reviewed by Ryosuke Niwa.

        Selection cache already takes floats into account, however it's not enough to check current
        block against floats. Any of the ancestor's float starting from the selection root block
        can impact the selection offsets.

        Test: fast/block/selection-cache-is-incorrect-when-non-direct-parent-has-float.html

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::ContainingBlockInfo):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::setBlock):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::block):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::cache):
        (WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::hasFloatsOrFlowThreads):
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):

2015-06-17  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose element tag name as an object attribute
        https://bugs.webkit.org/show_bug.cgi?id=146062

        Reviewed by Mario Sanchez Prada.

        Expose the element tag name as an object attribute with name "tag" and
        value being the lowercase tag name, both being what Gecko does for ATK.

        No new tests. We already have sufficient coverage for AtkObject attributes.
        These tests have been updated to reflect the addition of the new attribute.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2015-06-17  Antti Koivisto  <antti@apple.com>

        iOS WebKit1: [LegacyTileLayer drawInContext:] should ensure it has web lock
        https://bugs.webkit.org/show_bug.cgi?id=146072
        rdar://problem/21149759

        Reviewed by Simon Fraser

        There are some scenarios where we end up drawing without web lock due to client or system issues.
        This can cause crashes.

        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileLayer setNeedsDisplayInRect:]):
        (-[LegacyTileLayer drawInContext:]):

            Ensure we have the web lock when called in main thread (even though we should have it already).

2015-06-17  Brent Fulgham  <bfulgham@apple.com>

        CSS scroll snap: defining snap points on axis that does not scroll does not work properly
        https://bugs.webkit.org/show_bug.cgi?id=146043
        <rdar://problem/20125511>

        Reviewed by Simon Fraser.

        Tested by css3/scroll-snap/scroll-snap-mismatch.html

        We always seed the set of scroll snap points with the start and end of the scroll container. This is not
        the right behavior if there are no scroll points defined, because we end up creating a snap for the start
        and end of the container, and any scroll gesture just takes us across the entire element.
        
        Instead, when we do not find any scroll snap points, we should clear the snap point state for the container.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateFromStyle): If we did not find any snap points (i.e., the snapOffsets container
        only holds '0', return an empty Vector. 
        (WebCore::updateSnapOffsetsForScrollableArea): If the set of snap points produced by 'updateFromStyle' is empty,
        clear the horizontal (or vertical) snap offsets for the scroll area.
        

2015-06-17  Chris Fleizach  <cfleizach@apple.com>

        AX: input role="spinbutton" gets skipped in voiceover
        https://bugs.webkit.org/show_bug.cgi?id=145514

        Reviewed by Mario Sanchez Prada.

        SpinButton role was added, but left out of iOS.
        To prevent this from happening again, explicitly list every role in the switch statement that
        determines accessible visibility.

        Test: platform/ios-simulator/accessibility/spinbutton.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        (-[WebAccessibilityObjectWrapper isAccessibilityElement]):

2015-06-17  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableJSStream should handle promises returned by JS source pull callback
        https://bugs.webkit.org/show_bug.cgi?id=145965

        Reviewed by Darin Adler.

        Implemented asynchronous pulling.
        In particular, ensuring that doPull is not called as long as previous call to doPull is finished.
        Storing whether to pull automatically when the current pull is finished. 

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::pull): stores whether to pull again.
        (WebCore::ReadableStream::finishPulling): called when pulling finishes.
        * Modules/streams/ReadableStream.h:
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::createPullResultFulfilledFunction): The promise resolve callback.
        (WebCore::ReadableJSStream::doPull): Handling of promise.
        * bindings/js/ReadableJSStream.h:

2015-06-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebProcess crashes after too many redirect error when there's an active NPAPI plugin
        https://bugs.webkit.org/show_bug.cgi?id=146019

        Reviewed by Darin Adler.

        This happens with the GTK+ port after a navigation action ends up
        in an infinite redirection and the ResourceHandle fails with too
        many redirections error. I should actually happen after any error
        is reported by the ResourceHnalder before the load is
        committed. But tt only happens if there's an active NPAPI
        plugin. The problem is that FrameLoader::receivedMainResourceError()
        is called recursively because DocumentLoader::stopLoading() ends up
        calling mainReceivedError() that calls FrameLoader::receivedMainResourceError()
        again. DocumentLoader::stopLoading() checks if the document is
        still loading, which can happen if the main resource is loading,
        if there's any subresource loading or if there's a plugin
        loading. So, in case of being loading, those cases are handled
        individually to cancel the main resource, or set an error in the
        document loader and cancel subresources and plugins, except for
        this case of plugins, that mainReceivedError is called instead of
        setting cancelled error on the document loader.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): If the document is still
        loading because there are active plugins, set the cancelled error
        on the document instead of calling mainReceivedError again.

2015-06-16  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Implement ReadableStream locked property
        https://bugs.webkit.org/show_bug.cgi?id=146023

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::locked): Renamed isLocked by locked.
        * Modules/streams/ReadableStream.idl: Adding locked.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::getReader): Using isLocked.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::constructJSReadableStreamReader): Using isLocked.

2015-06-16  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r184899): [Cocoa] font-variant: small-caps is not honored with web fonts
        https://bugs.webkit.org/show_bug.cgi?id=145873
        <rdar://problem/21314282>

        Reviewed by Dean Jackson.

        When font-variant: small-caps is applied, we create a smaller version of the original font
        and draw capital characters in that smaller font. CGFontRefs do not have an intrinsic size,
        and web fonts historically only had a CGFontRef, which means that there was no need to
        convert the CGFontRef to be smaller (as opposed to regular fonts, which had a CTFontRef and
        therefore needed the conversion). Instead, we just changed m_size, which represents
        the size that the text should be drawn in.

        However, r184899 gave CTFontRefs to web fonts. This means that now the FontPlatformData's
        m_size variable disagreed with the CTFontRef member. The solution here is to unify the web
        font and regular font codepaths, and treat them the same throughout.

        Note that this patch removes the last use of the m_isCustomFont variable. As soon as we
        entirely migrate to CORETEXT_WEB_FONTS, we should delete this variable.

        Test: fast/text/small-caps-web-font.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCreateScaledFont): Treat web fonts the same as regular fonts.
        * platform/text/TextFlags.h: Add a comment regarding teh deletion of m_isCustomFont.

2015-06-16  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Implement branch compaction for DFA bytecode.
        https://bugs.webkit.org/show_bug.cgi?id=145619

        Reviewed by Benjamin Poulain.

        This patch adds another pass to the DFABytecodeCompiler which finds where the bytecode from each node
        would be if it were compiled with no branch compaction, then uses that as a worst-case value to determine
        how many bytes are needed to store the relative jump distance.  Then when linking, it will fill in the 
        value as it already did, but with a variable size jump.  The jumps are also now signed distances relative to
        where the jump is stored.

        This patch is covered by existing tests, which have many jumps that are near the -128/127 byte boundary,
        and the switch from 16-bit jumps to 32-bit jumps near the -65536/65535 byte boundary is analogous.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::smallestPossibleJumpSize):
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::append):
        (WebCore::ContentExtensions::appendZeroes):
        (WebCore::ContentExtensions::setBits):
        (WebCore::ContentExtensions::appendActionBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::longestPossibleJump):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitJump):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValue):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValueRange):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitTerminate):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compiledNodeMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::ranges):
        (WebCore::ContentExtensions::DFABytecodeCompiler::checkForRangeMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileCheckForRange):
        (WebCore::ContentExtensions::DFABytecodeCompiler::nodeTransitionsMaxBytecodeSize):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        (WebCore::ContentExtensions::set32Bits): Deleted.
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::getInstruction):
        (WebCore::ContentExtensions::jumpSizeInBytes):
        (WebCore::ContentExtensions::getJumpSize):
        (WebCore::ContentExtensions::getJumpDistance):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsForDefaultStylesheetFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * loader/ResourceLoadInfo.h:

2015-06-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Should be possible to build with support for both X11 and Wayland.
        https://bugs.webkit.org/show_bug.cgi?id=145701

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        When building both targets, we have to include the wayland-egl
        headers in order to build the Wayland target. This causes that
        EGLNativePixmapType and EGLNativeWindowType get defined as
        different types than when building only the X11 target.

        By type casting them to the ones that are expected, we are able
        to build both targets at the same time.

        I have done tests (building each target alone as also both targets
        at the same time), and everything seems to works as expected.

        Once built for both targets, if you try to launch the MiniBrowser
        from inside a Wayland compositor (Weston on top of X for example),
        it will trigger the X11 target if the DISPLAY environment variable
        is set and the environment variable GDK_BACKEND is not set to wayland,
        otherwise it will trigger the Wayland target.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow): Add type casts. We have
        to consider here two different type casts depending on the type of
        GLNativeWindowType to avoid a build failure on 32-bits platforms.
        The static_cast one was already beeing done as an implicit cast
        (from uint64_t to XID), the reinterpret_cast is the new one that
        we need to do only when building on both platforms.
        * platform/graphics/egl/GLContextEGL.cpp: Add missing include when
        building both targets that is required for defining DefaultRootWindow().
        (WebCore::GLContextEGL::createPixmapContext): Add type cast.

2015-06-15  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] Crash long pressing on <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=146009
        <rdar://problem/21234453>

        Reviewed by Ryosuke Niwa.

        * dom/Position.cpp:
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):
        Null check the container node before passing it to findParent().

2015-06-15  Chris Fleizach  <cfleizach@apple.com>

        AX:  iOS accessibility tests are not running because we need WKTR support
        https://bugs.webkit.org/show_bug.cgi?id=145991

        Reviewed by Daniel Bates.

        Make some minor modifications to support notification handling in WKTR.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityClickPoint]):
        (-[WebAccessibilityObjectWrapper description]):
        (-[WebAccessibilityObjectWrapper accessibilitySetPostedNotificationCallback:withContext:]): Deleted.
        (-[WebAccessibilityObjectWrapper accessibilityPostedNotification:]): Deleted.

2015-06-16  Mark Lam  <mark.lam@apple.com>

        Use NakedPtr<Exception>& to return exception results.
        https://bugs.webkit.org/show_bug.cgi?id=145870

        Reviewed by Anders Carlsson and Filip Pizlo.

        No new WebCore tests because this functionality is already covered by existing tests.
        API tests added for WTF::NakedPtr.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::JSMainThreadExecState::didLeaveScriptContext):
        (WebCore::functionCallHandlerFromAnyThread):
        (WebCore::evaluateHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::currentState):
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerGlobalScopeWrapper):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):

2015-06-16  Brent Fulgham  <bfulgham@apple.com>

        CSS Scroll Snap - support snapping to nested elements
        https://bugs.webkit.org/show_bug.cgi?id=145843
        <rdar://problem/21339581>

        Reviewed by Darin Adler.

        Tested by css3/scroll-snap/nested-elements.html

        The Scroll Snap Point implementation was not properly handling nested elements.
        This could be resolved by recursively calling 'appendChildSnapOffsets', but this
        seemed like an inefficient approach, especially considering how often this method
        is called during various scaling and other operations.
        
        Instead, do the following:
        (1) Add a new HashSet to RenderView that holds a collection of RenderElements that
            have scroll-snap-coordinates.
        (2) During RenderElement::styleWillChange, register all elements that have the
            scroll-snap-coordinates style with the RenderView.
        (3) When performing 'appendChildSnapOffsets', refer to the HashSet of elements, select the
            subset of these entries relevant to the current scrolling container, and build up the
            set of scroll-snap-coordinates needed for the current scrolling container.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Check the scroll-snap-coordinate RenderElement HashSet
        for the RenderView to find all elements that are children of the current scrolling container.
        Add the scroll-snap-coordinates for these RenderElements to the current set of snap points.
        * rendering/RenderElement.cpp:
        (WebCore::findEnclosingScrollableContainer): New helper function.
        (WebCore::RenderElement::styleWillChange): If the current element has scroll-snap-coordinate
        defined, remember it for later so we can use it with the relevant scrolling container
        after layout completes.
        (WebCore::RenderElement::willBeRemovedFromTree): Unregister the current element from the
        RenderView.
        (WebCore::RenderElement::findEnclosingScrollableContainer): Added. Locate the relevant
        scrolling container for the current object.
        * rendering/RenderElement.h:
        * rendering/RenderView.cpp:
        (WebCore::Document::registerRenderElementWithScrollSnapCoordinates): Added.
        (WebCore::Document::unregisterRenderElementWithScrollSnapCoordinates): Added.
        * rendering/RenderView.h:

2015-06-16  Brady Eidson  <beidson@apple.com>

        [IndexedDB] array index keys are concatenated across cursor lifetime
        <rdar://problem/19684902> and https://bugs.webkit.org/show_bug.cgi?id=138504

        Reviewed by Brady Eidson, patch by Mark Dixon <mark@lowla.io>

        Tested by:
        storage/indexeddb/keypath-arrays.html

        IDBKeyData and IDBKeyPath need to clear any existing array values before calling
        decodeObjects to update the value of an existing object.
        
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::decode):

2015-06-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Canvas dimensions should be limited to 4096x4096 pixels on iOS devices.
        https://bugs.webkit.org/show_bug.cgi?id=145998

        Reviewed by Darin Adler.

        The value of MaxCanvasArea should depend on the platform. If the platform
        is iOS, the limit should be 64M. Otherwise the limit should be 1G.

        Test: fast/canvas/pattern-too-large-to-create-2.html

        * html/HTMLCanvasElement.cpp: Change MaxCanvasArea value based on the platform. 
        
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::graphicsElement): Remove un-implemented constructor.

2015-06-16  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r185012): chat frame in Gmail now says "Something's not right"
        https://bugs.webkit.org/show_bug.cgi?id=146025
        <rdar://problem/21391412>

        Reviewed by Darin Adler.

        Only throttle timers in non-visible iframes once they've reached the
        max nesting level to avoid throttling critical one-shot timers. This is
        consistent with the default DOMTimer throttling behavior that is
        defined in the specification.

        Power-wise, we are mostly interested in DOMTimers that fire frequently
        and cause high CPU usage over an extended period of time anyway.

        * dom/Document.cpp:
        (WebCore::Document::setTimerThrottlingEnabled):
        (WebCore::Document::timerAlignmentInterval):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):
        * dom/ScriptExecutionContext.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::alignedFireTime):

2015-06-16  sylvain-galineau  <galineau@adobe.com>

        Incorrect order of arguments in initial-letter property
        https://bugs.webkit.org/show_bug.cgi?id=139667

        Reviewed by Sam Weinig.

        The CSS specification swapped the order of the initial-letters numeric values.
        The drop cap's height now comes first, followed by its optional vertical position.
        See http://www.w3.org/TR/css-inline/#sizing-drop-initials.
         
        No new tests. Existing tests updated.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): swap arguments to reflect new spec order.

2015-06-16  Alex Christensen  <achristensen@webkit.org>

        Remove some unused values.
        https://bugs.webkit.org/show_bug.cgi?id=145997

        Reviewed by Gyuyoung Kim.

        This patch should have no change in behavior.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::computeBestScrollOffset):
        (WebCore::AccessibilityObject::scrollToMakeVisibleWithSubFocus):
        (WebCore::AccessibilityObject::scrollToGlobalPoint):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateTexFuncData):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::leftTruncateToBuffer):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::paintCurrentFrameInContext):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::anchorRect):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::modifyStartEndPositionsRespectingLigatures):
        Remove unused values.

2015-06-16  Youenn Fablet <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [Streams API] Calling controller.error() should trigger storing an undefined error
        https://bugs.webkit.org/show_bug.cgi?id=145976

        Reviewed by Darin Adler.

        Covered by rebased test.

        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::error): Storing undefined if no error value passed.
        * bindings/js/ReadableJSStream.cpp: Removed storeError(ExecState*).
        (WebCore::ReadableJSStream::ReadableJSStream):

2015-06-16  Chris Dumez  <cdumez@apple.com>

        Purge StyledElement's presentation attribute cache on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=145999
        <rdar://problem/21359252>

        Reviewed by Andreas Kling.

        Purge StyledElement's presentation attribute cache on memory pressure.

        * dom/StyledElement.cpp:
        (WebCore::presentationAttributeCache):
        (WebCore::presentationAttributeCacheCleaner):
        (WebCore::StyledElement::clearPresentationAttributeCache):
        * dom/StyledElement.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):

2015-06-15  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r175251, Mavericks Only): Playback may stall
        https://bugs.webkit.org/show_bug.cgi?id=145989
        <rdar://problem/21271919>

        Unreviewed post-review correction.

        Dave Kilzer pointed out that the macro around the waitForVideoOutputMediaDataWillChange
        call was incorrect. This patch corrects this error.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Correct the
        macro definition.

2015-06-15  Chris Fleizach  <cfleizach@apple.com>

        AX: Changing state of radio buttons causes VoiceOver to go busy for a short time.
        https://bugs.webkit.org/show_bug.cgi?id=145933

        Reviewed by Dean Jackson.

        When radio buttons animate the new focus selection state, the thread activity looks a lot like short burst of
        activity to draw, then wait on CoreAnimation to apply those changes.

        Since those periods of activity during animation are so short, VoiceOver is not able to query for all the
        attributes it needs, and gets stuck in the queue behind rendering.

        The fix here is to turn off button state animations while VoiceOver is running.

        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):

2015-06-15  Zalan Bujtas  <zalan@apple.com>

        RootInlineBox::m_lineBreakObj becomes invalid when a child renderer is removed and the line does not get marked dirty.
        https://bugs.webkit.org/show_bug.cgi?id=145988
        rdar://problem/20959137

        Reviewed by David Hyatt.

        This patch ensures that we find the right first inline box so that we can dirty the
        the appropriate line boxes.
        With marking the right line boxes dirty, now we can update RootInlineBox::m_lineBreakObj at the next layout.

        Test: fast/inline/crash-when-child-renderer-is-removed-and-line-stays-clean.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::setLineBreakInfo): Deleted. Remove misleading assert and comment.

2015-06-15  Matt Rajca  <mrajca@apple.com>

        Media Session: Improve the safety of playback toggling
        https://bugs.webkit.org/show_bug.cgi?id=145986

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::togglePlayback): Improved the safety of the loop so that we don't re-visit elements that
          may have been deleted underneath us.
        * Modules/mediasession/MediaSession.h: Added a pointer to the set of iterated active participating elements so
          we can remove any elements that are deleted from the underlying "real" set.

2015-06-15  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r175251, Mavericks Only): Playback may stall
        https://bugs.webkit.org/show_bug.cgi?id=145989
        <rdar://problem/21271919>

        Reviewed by Dean Jackson.

        Revert r175251 for Mavericks build targets.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):

2015-06-15  Darin Adler  <darin@apple.com>

        REGRESSION (r182215): Reproducible crash at drawsvg.org due to reentrant layout
        https://bugs.webkit.org/show_bug.cgi?id=145964

        Reviewed by Simon Fraser.

        Test: svg/as-object/mutate-on-load.html

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutParentViewIfNeeded): Don't do a synchronous layout here,
        because it can lead indirectly to unwanted layout reentrancy. Instead schedule a layout.

2015-06-15  Matt Rajca  <mrajca@apple.com>

        Media Session: Active participating elements can change while being iterated 
        https://bugs.webkit.org/show_bug.cgi?id=145978

        Reviewed by Alex Christensen.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::togglePlayback): Iterate through a copy of m_activeParticipatingElements since its contents
          can be modified in the loop.

2015-06-15  Chris Fleizach  <cfleizach@apple.com>

        AX: no accessibility support for details element
        https://bugs.webkit.org/show_bug.cgi?id=131111

        Reviewed by Darin Adler.

        Add accessibility support for Mac for details element by:
           1) Returning new subroles for <details> and <summary>
           2) Exposing isExpanded property for <details> element.

        Test: platform/mac/accessibility/details-summary.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAPressed):
        (WebCore::AccessibilityObject::supportsExpanded):
        (WebCore::AccessibilityObject::isExpanded):
        (WebCore::AccessibilityObject::supportsARIAExpanded): Deleted.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::canvasHasFallbackContent):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAExpanded]):
        (-[WebAccessibilityObjectWrapper accessibilityIsExpanded]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        * html/HTMLDetailsElement.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):

2015-06-15  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Limit number of rules.
        https://bugs.webkit.org/show_bug.cgi?id=145663

        Reviewed by Benjamin Poulain.

        Added an API test to make sure that parsing fails when there are too many rules.

        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadEncodedRules):
        Fail to parse a content extension with more than 50000 rules.

2015-06-12  Alexey Proskuryakov  <ap@apple.com>

        -[WKWebView evaluateJavaScript] provides a misleading error when the return cannot be serialized
        https://bugs.webkit.org/show_bug.cgi?id=145900

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings:

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Custom URI schemes don't work for requests containing a fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=145969

        Reviewed by Sergio Villar Senin.

        For URIs like foo:bar#baz, what the custom protocol manager
        receives in the UI process is foo:bar, so the user can't handle fragments.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupRequest): If the SoupRequest
        is a WebKitSoupRequestGeneric, call
        webkitSoupRequestGenericSetRequest with the ResourceRequest.
        * platform/network/soup/WebKitSoupRequestGeneric.cpp:
        (webkitSoupRequestGenericSetRequest):
        (webkitSoupRequestGenericGetRequest):
        * platform/network/soup/WebKitSoupRequestGeneric.h:

2015-06-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Move WebKitSoupRequestGeneric to platform layer
        https://bugs.webkit.org/show_bug.cgi?id=145968

        Reviewed by Sergio Villar Senin.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/network/soup/WebKitSoupRequestGeneric.cpp: Renamed from Source/WebKit2/WebProcess/soup/WebKitSoupRequestGeneric.cpp.
        (webkitSoupRequestGenericFinalize):
        (webkit_soup_request_generic_init):
        (webkitSoupRequestGenericSendAsync):
        (webkitSoupRequestGenericSendFinish):
        (webkitSoupRequestGenericGetContentLength):
        (webkitSoupRequestGenericGetContentType):
        (webkit_soup_request_generic_class_init):
        (webkitSoupRequestGenericSetContentLength):
        (webkitSoupRequestGenericSetContentType):
        * platform/network/soup/WebKitSoupRequestGeneric.h: Renamed from Source/WebKit2/WebProcess/soup/WebKitSoupRequestGeneric.h.
        * platform/network/soup/WebKitSoupRequestGenericClient.h: Renamed from Source/WebKit2/WebProcess/soup/WebKitSoupRequestGenericClient.h.

2015-06-13  Chris Dumez  <cdumez@apple.com>

        [WK2] API::Navigation objects are leaked on history navigation to HistoryItems in PageCache
        https://bugs.webkit.org/show_bug.cgi?id=145948

        Reviewed by Darin Adler.

        API::Navigation objects were leaked on history navigation to
        HistoryItems in PageCache. In such case, we would create 2 Navigation
        objects instead of 1 and the first one would be leaked. The reason
        we create the second one is because we fail to pass along the
        navigationID from the UIProcess to the WebProcess and then back to the
        UIProcess. On the IPC back to the UIProcess, the navigationID ends up
        being 0 so the UIProcess creates a new Navigation object, thinking that
        the load was triggered by the WebContent process.

        We now pass along the navigationID, even if the HistoryItem is in the
        PageCache and we end up reusing the cached DocumentLoader, instead of
        creating a new one. A new updateCachedDocumentLoader() delegate is
        added to the FrameLoaderClient, similarly to the pre-existing
        createDocumentLoader() but for the case where the DocumentLoader gets
        reused.

        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoaderClient.h:

2015-06-13  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableJSStream should handle promises returned by JS source start callback
        https://bugs.webkit.org/show_bug.cgi?id=145792

        Reviewed by Darin Adler.

        Covered by rebased tests.

        When calling start callback, the returned value is checked.
        If it is not a promise, we do as if it is a resolved promise.
        If it is a promise, we call its then() method with two resolve/reject JS functions.

        * Modules/streams/ReadableStream.cpp:
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::invoke): Returns a JSPromise* if any is returned by the JS source callback.
        (WebCore::thenPromise): Utility method to call the promise.
        (WebCore::createStartResultFulfilledFunction): The promise resolve callback.
        (WebCore::ReadableJSStream::doStart): Calls thenPromise if a JSPromise* is returned by invoke.
        (WebCore::ReadableJSStream::ReadableJSStream):
        * bindings/js/ReadableJSStream.h:

2015-06-13  Andres Gonzalez  <agonzalez334@nc.rr.com>

        AX: WebKit exposes all Ruby Text as Unknown (Japanese EPUB accessibility blocker)
        https://bugs.webkit.org/show_bug.cgi?id=141303

        Reviewed by Chris Fleizach.

        Test: accessibility/ruby-hierarchy-roles.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):

2015-06-12  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: after updating control, VoiceOver speaks aria-expanded states reversed (says "collapsed" when "expanded")
        https://bugs.webkit.org/show_bug.cgi?id=145943

        Reviewed by Darin Adler.

        iOS Accessibility platform needs to be notified of when aria expanded changes.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper postValueChangedNotification]):
        (-[WebAccessibilityObjectWrapper postExpandedChangedNotification]):
        (-[WebAccessibilityObjectWrapper postScrollStatusChangeNotification]):

2015-06-12  Chris Fleizach  <cfleizach@apple.com>

        AX:ARIA Toggle buttons aren't properly conveyed on iOS using VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=145949

        Reviewed by Darin Adler.

        Expose pressed state information to the iOS platform AX API.

        Test: Updated inspector-protocol/dom/getAccessibilityPropertiesForNode.html 
              There was a FIXME for this issue in that test: https://bugs.webkit.org/show_bug.cgi?id=129830

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isPressed):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::classList):
        (WebCore::AccessibilityObject::supportsARIAPressed):
        (WebCore::AccessibilityObject::supportsARIAExpanded):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityARIALiveRegionIsAtomic]):
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAPressed]):
        (-[WebAccessibilityObjectWrapper accessibilityIsPressed]):
        (-[WebAccessibilityObjectWrapper accessibilitySupportsARIAExpanded]):

2015-06-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in JavaScriptCore - 2
        https://bugs.webkit.org/show_bug.cgi?id=145834

        Reviewed by Darin Adler.

        Fix call sites depends on changing of JSC.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::getWebGLFloatArrayParameter):
        (WebCore::WebGLRenderingContextBase::getWebGLIntArrayParameter):

2015-06-12  Zalan Bujtas  <zalan@apple.com>

        Be more defensive at renderer type checking when initializing flow segments.
        https://bugs.webkit.org/show_bug.cgi?id=145942

        Reviewed by Simon Fraser.

        FlowContents::initializeSegments should ignore unsupported renderers so that when we miss
        a simple line layout path invalidation, we don't downcast the unsupported renderer to RenderText.

        I have not reproduced this issue (but related to rdar://problem/21312452)

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):

2015-06-12  Anders Carlsson  <andersca@apple.com>

        deleteEmptyDirectory should delete .DS_Store files on OS X
        https://bugs.webkit.org/show_bug.cgi?id=145944

        Reviewed by Dan Bernstein.

        deleteEmptyDirectory is often used when clearing website data, so we should
        take extra care to delete empty directories so the user won't think that clearing
        website data didn't do anything because it would leave directories with .DS_Store 
        files behind.

        * platform/mac/FileSystemMac.mm:
        (WebCore::deleteEmptyDirectory):
        * platform/posix/FileSystemPOSIX.cpp:

2015-06-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Fix grid-template-areas parsing to avoid spaces
        https://bugs.webkit.org/show_bug.cgi?id=145860

        Reviewed by Sergio Villar Senin.

        The spec doesn't require to have spaces between unnamed and named areas
        in grid-template-areas syntax. But spaces are currently required in our
        code.

        This was confirmed in the CSS WG mailing list:
        https://lists.w3.org/Archives/Public/www-style/2015May/0239.html

        This patch updates grid-template-areas parsing to allow the possibility
        of removing spaces between unnamed and named areas.

        Added new cases to fast/css-grid-layout/grid-template-areas-get-set.html.

        * css/CSSParser.cpp:
        (WebCore::parseGridTemplateAreasColumnNames): New helper method to
        determine the column names split by white spaces or dots.
        (WebCore::CSSParser::parseGridTemplateAreasRow): Use the new helper
        method to get the column names.
        (WebCore::containsOnlyDots): Deleted. Not needed anymore as
        parseGridTemplateAreasColumnNames() is using a single dot for unnamed
        grid areas (despite of being defined with 1 or more dots).

2015-06-12  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay menu button doesn't always show on page load
        https://bugs.webkit.org/show_bug.cgi?id=145936

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::mediaProducerStateString): New, return a string representing MediaStateFlags.
        (WebCore::WebMediaSessionManager::clientStateDidChange): Log the states as strings.
        (WebCore::WebMediaSessionManager::toString): New, return a string representing ConfigurationTasks.
        (WebCore::WebMediaSessionManager::scheduleDelayedTask): Add logging.
        (WebCore::WebMediaSessionManager::taskTimerFired): Add logging.
        * Modules/mediasession/WebMediaSessionManager.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: Override wirelessVideoPlaybackDisabled
          so it is possible to activate route monitoring for a movie loaded with this engine.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Ditto.

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Add the remaining missing override specifiers under Source/WebCore/
        https://bugs.webkit.org/show_bug.cgi?id=145907

        Reviewed by Darin Adler.

        Fix the remaining compiler warnings about missing override specifiers
        for overriding method declarations in classes under Source/WebCore/.

        Where the addition had to be performed on all virtual methods of the
        class, the virtual specifier was removed so now only the override
        specifier is in use.

        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/webdatabase/DatabaseServer.h:
        * bindings/js/ReadableJSStream.h:
        * editing/InsertTextCommand.h:
        * mathml/MathMLInlineContainerElement.h:
        * platform/audio/EqualPowerPanner.h:
        (WebCore::EqualPowerPanner::reset):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::load):
        (WebCore::NullMediaPlayerPrivate::cancelLoad):
        (WebCore::NullMediaPlayerPrivate::prepareToPlay):
        (WebCore::NullMediaPlayerPrivate::play):
        (WebCore::NullMediaPlayerPrivate::pause):
        (WebCore::NullMediaPlayerPrivate::platformMedia):
        (WebCore::NullMediaPlayerPrivate::platformLayer):
        (WebCore::NullMediaPlayerPrivate::naturalSize):
        (WebCore::NullMediaPlayerPrivate::hasVideo):
        (WebCore::NullMediaPlayerPrivate::hasAudio):
        (WebCore::NullMediaPlayerPrivate::setVisible):
        (WebCore::NullMediaPlayerPrivate::durationDouble):
        (WebCore::NullMediaPlayerPrivate::currentTimeDouble):
        (WebCore::NullMediaPlayerPrivate::seekDouble):
        (WebCore::NullMediaPlayerPrivate::seeking):
        (WebCore::NullMediaPlayerPrivate::setRateDouble):
        (WebCore::NullMediaPlayerPrivate::setPreservesPitch):
        (WebCore::NullMediaPlayerPrivate::paused):
        (WebCore::NullMediaPlayerPrivate::setVolumeDouble):
        (WebCore::NullMediaPlayerPrivate::supportsMuting):
        (WebCore::NullMediaPlayerPrivate::setMuted):
        (WebCore::NullMediaPlayerPrivate::hasClosedCaptions):
        (WebCore::NullMediaPlayerPrivate::setClosedCaptionsVisible):
        (WebCore::NullMediaPlayerPrivate::networkState):
        (WebCore::NullMediaPlayerPrivate::readyState):
        (WebCore::NullMediaPlayerPrivate::maxTimeSeekableDouble):
        (WebCore::NullMediaPlayerPrivate::minTimeSeekable):
        (WebCore::NullMediaPlayerPrivate::buffered):
        (WebCore::NullMediaPlayerPrivate::totalBytes):
        (WebCore::NullMediaPlayerPrivate::didLoadingProgress):
        (WebCore::NullMediaPlayerPrivate::setSize):
        (WebCore::NullMediaPlayerPrivate::canLoadPoster):
        (WebCore::NullMediaPlayerPrivate::setPoster):
        (WebCore::NullMediaPlayerPrivate::hasSingleSecurityOrigin):
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::determineAbsolutePaintRect):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::determineAbsolutePaintRect):
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::hasVideo):
        (WebCore::MediaPlayerPrivateGStreamer::hasAudio):
        (WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider):
        (WebCore::MediaPlayerPrivateGStreamer::engineDescription):
        (WebCore::MediaPlayerPrivateGStreamer::isLiveStream):
        (WebCore::MediaPlayerPrivateGStreamer::totalVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::totalFrameDelay):
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::isBackedByOpenGL):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
        * platform/mock/MockRealtimeMediaSourceCenter.h:

2015-06-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185512.
        https://bugs.webkit.org/show_bug.cgi?id=145932

        Many asserts on layout tests and on API tests (Requested by
        ap_ on #webkit).

        Reverted changeset:

        "Use modern for-loops in WebCore/rendering - 1"
        https://bugs.webkit.org/show_bug.cgi?id=145831
        http://trac.webkit.org/changeset/185512

2015-06-12  Simon Fraser  <simon.fraser@apple.com>

        OpenGLESSPI.h doesn't need to include UIKit.h
        https://bugs.webkit.org/show_bug.cgi?id=145931

        Reviewed by Darin Adler.

        No need to suck in all of UIKit from OpenGLESSPI.h.

        * platform/spi/ios/OpenGLESSPI.h:

2015-06-12  Matt Rajca  <mrajca@apple.com>

        Add barebones implementation of media session invocation algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=145847

        Reviewed by Darin Adler.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::invoke): Move the media session to an active state.
        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): Call the media session invocation algorithm as described in the
          Media Session spec.

2015-06-12  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/rendering - 1
        https://bugs.webkit.org/show_bug.cgi?id=145831

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::clearIntermediateResults):
        * rendering/FilterEffectRenderer.h:
        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        (WebCore::FloatingObjects::moveAllToFloatInfoMap):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::append):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::removeBlockFromDescendantAndContainerMaps):
        (WebCore::RenderBlock::addOverflowFromPositionedObjects):
        (WebCore::RenderBlock::dirtyForLayoutFromPercentageHeightDescendants):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::markPositionedObjectsForLayout):
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        (WebCore::RenderBlock::removePositionedObjects):
        (WebCore::RenderBlock::checkPositionedObjectsNeedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::moveFloatsTo):
        (WebCore::RenderBlockFlow::addOverflowFromFloats):
        (WebCore::RenderBlockFlow::repaintOverhangingFloats):
        (WebCore::RenderBlockFlow::paintFloats):
        (WebCore::RenderBlockFlow::clipOutFloatingObjects):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::lowestInitialLetterLogicalBottom):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::addIntrudingFloats):
        (WebCore::RenderBlockFlow::markSiblingsWithFloatsForLayout):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded):
        (WebCore::RenderBlockFlow::repaintDirtyFloats):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):
        (WebCore::RenderBlockFlow::determineStartPosition):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::updateCounters):
        (WebCore::RenderCounter::rendererStyleChanged):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::autoMarginOffsetInMainAxis):
        (WebCore::RenderFlexibleBox::freezeViolations):
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        (WebCore::RenderFlexibleBox::numberOfInFlowPositionedChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::alignChildren):
        (WebCore::RenderFlexibleBox::flipForWrapReverse):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::descendantLayerPaintsIntoAncestor):
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount):
        (RenderMenuList::updateOptionsWidth):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks):

2015-06-12  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused private field warning in ResourceHandleSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145910

        Reviewed by Darin Adler.

        * platform/network/soup/ResourceHandleSoup.cpp:

2015-06-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CRASH trying to inspect text that was removed/replaced
        https://bugs.webkit.org/show_bug.cgi?id=145898

        Reviewed by Darin Adler.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::focusNode):
        Ensure we only cause focusNode with a node to focus. If the original
        node that was provided is no longer in the document, then we won't
        actually find a node to inspect.

2015-06-12  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] canvas/philip/tests/toDataURL.jpeg.foo tests have been failed since r185417.
        https://bugs.webkit.org/show_bug.cgi?id=145878

        Reviewed by Gyuyoung Kim.

        Fix input buffer alignment issue.

        No new tests, canvas/philip/tests/toDataURL.jpeg.foo can be used.

        * platform/graphics/efl/ImageBufferEfl.cpp:
        (WebCore::encodeImagePNG):
        (WebCore::encodeImageJPEG):
        (WebCore::ImageBuffer::toDataURL):

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Add missing override specifiers under Source/WebCore/svg/
        https://bugs.webkit.org/show_bug.cgi?id=145841

        Reviewed by Darin Adler.

        Add missing override specifiers to virtual method overrides for classes
        under Source/WebCore/svg/, suppressing a bunch of warnings when compiling
        with Clang 3.6.

        Add the BEGIN_DECLARE_ANIMATED_PROPERTIES_BASE() macro that doesn't
        override the localAttributeToPropertyMap() method declaration, and
        have the BEGIN_DECLARE_ANIMATED_PROPERTIES() macro add the override
        specifier. The new macro is used in SVGElement.

        Change the DECLARE_ANIMATED_PROPERTY() to accept the optional override
        specifier as the fifth parameter. Current DECLARE_ANIMATED_*() macros
        are modified to just pass an empty argument, not adding any specifier.
        DECLARE_ANIMATED_BOOLEAN_OVERRIDE() and DECLARE_ANIMATED_STRING_OVERRIDE()
        macros are added to override the methods for the externalResourcesRequired
        and href animated properties, where required.

        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGURIReference.h: Add the hrefBaseValue() pure virtual method
        so it can be overridden by any class that also overrides the
        corresponding setHrefBaseValue() method.
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGMatrixTearOff.h:
        (WebCore::SVGMatrixTearOff::commitChange):

2015-06-12  Zan Dobersek  <zdobersek@igalia.com>

        [GLib] Move files under Source/WTF/wtf/gobject to Source/WTF/wtf/glib
        https://bugs.webkit.org/show_bug.cgi?id=145799

        Reviewed by Carlos Garcia Campos.

        Update header inclusions for headers that have been moved
        to Source/WTF/wtf/glib/.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        * bindings/gobject/DOMObjectCache.cpp:
        * bindings/gobject/GObjectEventListener.h:
        * bindings/gobject/GObjectNodeFilterCondition.h:
        * bindings/gobject/GObjectXPathNSResolver.h:
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        * platform/Pasteboard.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        * platform/audio/gtk/AudioBusGtk.cpp:
        * platform/geoclue/GeolocationProviderGeoclue.h:
        * platform/geoclue/GeolocationProviderGeoclue2.cpp:
        * platform/glib/BatteryProviderUPower.cpp:
        * platform/glib/BatteryProviderUPower.h:
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        * platform/graphics/gstreamer/GUniquePtrGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/gtk/ContextMenuGtk.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/DataObjectGtk.cpp:
        * platform/gtk/DataObjectGtk.h:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/gtk/GRefPtrGtk.h:
        * platform/gtk/GUniquePtrGtk.h:
        * platform/gtk/GamepadsGtk.cpp:
        * platform/gtk/GtkUtilities.cpp:
        * platform/gtk/LanguageGtk.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/gtk/PasteboardHelper.cpp:
        * platform/gtk/ScrollbarThemeGtk.cpp:
        * platform/gtk/SharedBufferGtk.cpp:
        * platform/gtk/SharedTimerGtk.cpp:
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/gtk/CredentialBackingStore.cpp:
        * platform/network/soup/CertificateInfo.h:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GRefPtrSoup.h:
        * platform/network/soup/GUniquePtrSoup.h:
        * platform/network/soup/ResourceError.h:
        * platform/network/soup/ResourceErrorSoup.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        * platform/network/soup/SoupNetworkSession.h:
        * platform/text/gtk/HyphenationLibHyphen.cpp:
        * rendering/RenderThemeGtk.cpp:

2015-06-12  Yoav Weiss  <yoav@yoav.ws>

        Fix the build when the PICTURE_SIZES flag is off
        https://bugs.webkit.org/show_bug.cgi?id=145926

        Reviewed by Csaba Osztrogonác.

        No new tests since there's no functionality change.

        * html/parser/HTMLPreloadScanner.cpp: Remove the guard around the definition of m_sizesAttribute.

2015-06-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185492.
        https://bugs.webkit.org/show_bug.cgi?id=145927

        Causes crashes on debug (Requested by rego on #webkit).

        Reverted changeset:

        "[CSS Grid Layout] Fix grid-template-areas parsing to avoid
        spaces"
        https://bugs.webkit.org/show_bug.cgi?id=145860
        http://trac.webkit.org/changeset/185492

2015-06-12  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Bindings generator should generate code for Promise-based APIs
        https://bugs.webkit.org/show_bug.cgi?id=145833

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/webaudio/AudioContext.idl: Removing custom binding for resume, suspend and close.
        * bindings/js/JSAudioContextCustom.cpp: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Refactoring to use IsReturningPromise.
        (GenerateImplementation): Disabling include for return type if it is a promise.
        (GenerateParametersCheck): Adding DeferredWrapper() as argument to the DOM method if JS method returns a promise.
        (GenerateImplementationFunctionCall): Added support for promise-returning API.
        (IsReturningPromise): Checking whether function is returning a promise.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_test_promise_function):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj testPromiseFunction]):
        * bindings/scripts/test/TestObj.idl: Adding promise returning function.


2015-06-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Fix grid-template-areas parsing to avoid spaces
        https://bugs.webkit.org/show_bug.cgi?id=145860

        Reviewed by Sergio Villar Senin.

        The spec doesn't require to have spaces between unnamed and named areas
        in grid-template-areas syntax. But spaces are currently required in our
        code.

        This was confirmed in the CSS WG mailing list:
        https://lists.w3.org/Archives/Public/www-style/2015May/0239.html

        This patch updates grid-template-areas parsing to allow the possibility
        of removing spaces between unnamed and named areas.

        Added new cases to fast/css-grid-layout/grid-template-areas-get-set.html.

        * css/CSSParser.cpp:
        (WebCore::parseGridTemplateAreasColumnNames): New helper method to
        determine the column names split by white spaces or dots.
        (WebCore::CSSParser::parseGridTemplateAreasRow): Use the new helper
        method to get the column names.
        (WebCore::containsOnlyDots): Deleted. Not needed anymore as
        parseGridTemplateAreasColumnNames() is using a single dot for unnamed
        grid areas (despite of being defined with 1 or more dots).

2015-06-11  Mark Lam  <mark.lam@apple.com>

        WebCore::reportException() needs to be able to accept a raw thrown value in addition to Exception objects.
        https://bugs.webkit.org/show_bug.cgi?id=145872

        Reviewed by Michael Saboff.

        API test added: WebKit1.ReportExceptionTest.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        - Added a version of reportException() that takes a JSValue instead of an Exception
          object.  This version will ensure that we have an Exception object before calling
          into the original reportException() as follows:

          1. If the JSValue is already an Exception object, we're good to go.

          2. Else, if VM::lastException() is available, use that as the exception.
             This is how the old code use to behave (in terms of where it gets the exception
             stack trace).  The assumption is that reportException() will be called in
             a timely manner before the exception stack trace has been purged.

          3. Else, create an Exception object with no stack trace.  This is the fall back
             in case the client did not call reportException() in a timely manner.

        - Also clear the last exception after we've reported it.  This is how the old code
          before r185259 behave (in terms of the lifecycle of the last exception stack
          trace).  We're restoring that behavior here.

        * bindings/js/JSDOMBinding.h:

2015-06-11  Zalan Bujtas  <zalan@apple.com>

        Do not crash when the descendant frame tree is destroyed during layout.
        https://bugs.webkit.org/show_bug.cgi?id=144540
        rdar://problem/20793184

        Reviewed by Andreas Kling.

        Widget::setFrameRect(), through WebHTMLView layout, could trigger a style recalc, which in turn
        could initiate an onBeforeLoad callback.
        If javascript happens to destroy the current iframe in the onBeforeLoad callback, we lose the descendant
        render tree, including the child FrameView (the iframe element's view). However the RenderIFrame
        object stays protected until after the layout is done. (see protectRenderWidgetUntilLayoutIsDone())

        Climbing back on the callstack, we need to make sure that
        1. the root widget of the descendant render tree (FrameView) stays valid as long as it is needed.
        2. RenderFrameBase::layoutWithFlattening() can handle the case when the associated widget (child FrameView) is set to nullptr.
        (see RenderWidget::willBeDestroyed() -> setWidget(nullptr))

        (and later, when layout is finished this (RenderIFrame) object gets destroyed too.)

        Covered by fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::updateEmbeddedObject):
        (WebCore::FrameView::updateWidgetPositions):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFrameRect):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFrameRect):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        (WebCore::RenderFrameBase::childRenderView):
        (WebCore::RenderFrameBase::peformLayoutWithFlattening):
        * rendering/RenderFrameBase.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:

2015-06-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185470.
        https://bugs.webkit.org/show_bug.cgi?id=145902

        Caused ASan violations (Requested by ap on #webkit).

        Reverted changeset:

        "Add an appearance keyword for wireless playback / airplay
        icon"
        https://bugs.webkit.org/show_bug.cgi?id=145892
        http://trac.webkit.org/changeset/185470

2015-06-11  Brady Eidson  <beidson@apple.com>

        IndexedDB onupgradeneeded event has incorrect value for oldVersion.
        <rdar://problem/18309792> and https://bugs.webkit.org/show_bug.cgi?id=136888

        Reviewed by Sam Weinig.

        Test: storage/indexeddb/version-change-event-basic.html

        "NoIntVersion" is an internal bookkeeping concept that we never should've been passing to Javascript.
        
        This cleans up things by:
        - Adjusting an old version of "NoIntVersion" to "0" before making the version change callback.
        - Removing the VersionNullness parameter from almost everywhere.
        - Removing the nullability of the newVersion parameter from the IDL.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::onVersionChange):
        * Modules/indexeddb/IDBDatabase.h:
        
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        
        * Modules/indexeddb/IDBDatabaseCallbacks.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
        (WebCore::IDBDatabaseCallbacksImpl::onVersionChange):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onBlocked):
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/IDBVersionChangeEvent.idl:

2015-06-11  Matt Rajca  <mrajca@apple.com>

        Media Session: Add plumbing for media control event delivery.
        https://bugs.webkit.org/show_bug.cgi?id=145859

        Reviewed by Anders Carlsson.

        * Modules/mediasession/MediaEventTypes.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::handleMediaEvent): Toggle media playback upon receiving the PlayPause event as described in the spec.
        * page/Page.h:

2015-06-11  Jon Lee  <jonlee@apple.com>

        Update media controls JS and CSS to use picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=145827
        <rdar://problem/21311576>

        Reviewed by Dean Jackson.

        * English.lproj/mediaControlsLocalizedStrings.js: Update localized strings.
        Add a string for the placeholder text, and for the aria-label of the
        placard.

        * Modules/mediacontrols/MediaControlsHost.idl: Remove uncalled functions.
        * Modules/mediacontrols/MediaControlsHost.h: Also remove optimizedFullscreenSupported(),
        which was never used.
        * Modules/mediacontrols/MediaControlsHost.cpp: Remove uncalled functions and media part IDs.
        (WebCore::MediaControlsHost::enterFullscreenOptimized): Deleted.
        (WebCore::MediaControlsHost::mediaUIImageData): Deleted.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-picture-in-picture-button): Update pseudo-element name.
        (audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
        * Modules/mediacontrols/mediaControlsApple.js: Update global variable name, and classes.
        (Controller.prototype.createControls): Update button name. Add aria-label to the placeholder.
        (Controller.prototype.updateFullscreenButtons):
        (Controller.prototype.updateLayoutForDisplayedWidth):
        (Controller.prototype.handlePictureInPictureButtonClicked): Update handler names.
        (Controller.prototype.handleOptimizedFullscreenButtonClicked): Deleted.

        * Modules/mediacontrols/mediaControlsiOS.css: Rename pseudo-element.
        (audio::-webkit-media-controls-picture-in-picture-button): Add mask images.
        (audio::-webkit-media-controls-picture-in-picture-button:active):
        (video::-webkit-media-controls-picture-in-picture-button):
        (video::-webkit-media-controls-picture-in-picture-button.return-from-picture-in-picture):
        (audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):
        (audio::-webkit-media-controls-wireless-playback-text-top.picture-in-picture):
        (audio::-webkit-media-controls-wireless-playback-text-bottom.picture-in-picture):
        (audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
        (audio::-webkit-media-controls-optimized-fullscreen-button:active): Deleted.
        (video::-webkit-media-controls-optimized-fullscreen-button): Deleted.
        (audio::-webkit-media-controls-wireless-playback-status.optimized): Deleted. The placard
        pseudo-element should be updated from wireless-playback-status to just playback-status
        since it serves both for pip and AirPlay.
        (audio::-webkit-media-controls-wireless-playback-text-top.optimized): Deleted.
        (audio::-webkit-media-controls-wireless-playback-text-bottom.optimized): Deleted.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Update button names.
        (ControllerIOS.prototype.configureInlineControls):
        (ControllerIOS.prototype.handlePictureInPictureButtonClicked): Update handler name.
        (ControllerIOS.prototype.handlePictureInPictureTouchStart):
        (ControllerIOS.prototype.handlePictureInPictureTouchEnd):
        (ControllerIOS.prototype.handlePictureInPictureTouchCancel):
        (ControllerIOS.prototype.handlePresentationModeChange): Remove changes to the inline bg
        image style, and rely on the CSS to fill those in. Use localized strings for the placard.
        Move the aria-label to createControls().
        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): Deleted.
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchStart): Deleted.
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd): Deleted.
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchCancel): Deleted.

        * html/HTMLMediaElement.cpp: Remove enterFullscreenOptimized since it is never called.
        (WebCore::HTMLMediaElement::enterFullscreenOptimized): Deleted.
        * html/HTMLMediaElement.h:
        * platform/ios/WebCoreSystemInterfaceIOS.h: Remove wkGetMediaUIImageData.
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Remove calls to wkGetMediaUIImageData.

2015-06-11  Dean Jackson  <dino@apple.com>

        Add an appearance keyword for wireless playback / airplay icon
        https://bugs.webkit.org/show_bug.cgi?id=145892
        <rdar://problem/21344872>

        Reviewed by Simon Fraser.

        Add a new "-webkit-appearance" value named "-apple-airplay"
        which will be used to render an icon. This change simply
        adds support for the value, and puts in hooks for drawing.

        At the moment this is only going to be used by Airplay, so
        the public-facing name is "-apple-airplay". However, the
        implementation in Theme has a more generic name, in case
        we hook it up for other ports later.

        Test: fast/css/appearance-airplay.html

        * css/CSSParser.cpp:
        (WebCore::cssValueKeywordID): This new keyword should not get
        translated into having a -webkit prefix.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): New mapping from
        the Theme to the CSS value.
        * css/CSSValueKeywords.in: Add "-apple-airplay".
        * platform/ThemeTypes.h: New ControlPart.
        * rendering/RenderTheme.cpp: Stub implementation of the rendering and
        style update for the new appearance.
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustWirelessPlaybackIconStyle):
        (WebCore::RenderTheme::paintWirelessPlaybackIcon):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustWirelessPlaybackIconStyle):
        (WebCore::RenderThemeMac::paintWirelessPlaybackIcon):

2015-06-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185464.
        https://bugs.webkit.org/show_bug.cgi?id=145894

        "This patch is breaking binding tests" (Requested by youenn on
        #webkit).

        Reverted changeset:

        "Bindings generator should generate code for Promise-based
        APIs"
        https://bugs.webkit.org/show_bug.cgi?id=145833
        http://trac.webkit.org/changeset/185464

2015-06-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185465.
        https://bugs.webkit.org/show_bug.cgi?id=145893

        "This patch is breaking 32bit mac build" (Requested by youenn
        on #webkit).

        Reverted changeset:

        "[Streams API] ReadableJSStream should handle promises
        returned by JS source start callback"
        https://bugs.webkit.org/show_bug.cgi?id=145792
        http://trac.webkit.org/changeset/185465

2015-06-11  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableJSStream should handle promises returned by JS source start callback
        https://bugs.webkit.org/show_bug.cgi?id=145792

        Reviewed by Darin Adler.

        Covered by rebased tests.

        When calling start callback, the returned value is checked.
        If it is not a promise, we do as if it is a resolved promise.
        If it is a promise, we call its then() method with two resolve/reject JS functions.

        * Modules/streams/ReadableStream.cpp:
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::invoke): Returns a JSPromise* if any is returned by the JS source callback.
        (WebCore::thenPromise): Utility method to call the promise.
        (WebCore::createStartResultFulfilledFunction): The promise resolve callback.
        (WebCore::ReadableJSStream::doStart): Calls thenPromise if a JSPromise* is returned by invoke.
        (WebCore::ReadableJSStream::ReadableJSStream):
        * bindings/js/ReadableJSStream.h:

2015-06-11  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Bindings generator should generate code for Promise-based APIs
        https://bugs.webkit.org/show_bug.cgi?id=145833

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/webaudio/AudioContext.idl: Removing custom binding for resume, suspend and close.
        * bindings/js/JSAudioContextCustom.cpp: Ditto.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Refactoring to use IsReturningPromise.
        (GenerateImplementation): Disabling include for return type if it is a promise.
        (GenerateParametersCheck): Adding DeferredWrapper() as argument to the DOM method if JS method returns a promise.
        (GenerateImplementationFunctionCall): Added support for promise-returning API.
        (IsReturningPromise): Checking whether function is returning a promise.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_test_promise_function):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj testPromiseFunction]):
        * bindings/scripts/test/TestObj.idl: Adding promise returning function.


2015-06-08  Simon Fraser  <simon.fraser@apple.com>

        Missing content in UIWebView snapshots sometimes
        https://bugs.webkit.org/show_bug.cgi?id=145779
        rdar://problem/20744708

        Reviewed by Darin Adler.
        
        When expanding collapsed parts of quoted text on iOS, sometimes the "concertina"
        images would be blank. This happened because we'd fail to create tiles for regions
        outside the LegacyTileCache's visibleRect.
        
        Fix by giving LegacyTileCache an optional override visibleRect, which is set
        and cleared during -renderInContext: using the context clip rect.

        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::visibleRectInLayer):
        (WebCore::LegacyTileCache::setOverrideVisibleRect):
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]):

2015-06-11  Daniel Bates  <dabates@apple.com>

        Simplify event handling logic for search cancel button
        https://bugs.webkit.org/show_bug.cgi?id=145780

        Reviewed by Darin Adler.

        Following the patch for <https://bugs.webkit.org/show_bug.cgi?id=145774> we can take advantage
        of the DOM click event to simplify the event handling logic for the search cancel button.
        It is sufficient to listen for mousedown and click events instead of listening for mousedown
        and mouseup events, capturing all events during drag, and using the hover state of the button
        on mouse release together with a instance variable set on mouse press to determine whether
        the cancel button was clicked.

        As a side effect of removing the requirement that the search cancel button be hovered (a
        workaround to ensure that the mouse was pressed and released on the button in absence of
        listening for an explicit DOM click event) we can remove the accessibility-specific class,
        AccessibilitySearchFieldCancelButton, that was primarily used to fake the hover state of
        the button so that the accessibility machinery could simulate a click on it. Instead we
        can add use the default accessibility machinery for clicking on an element.

        No new tests since no functionality was changed.

        * CMakeLists.txt: Remove reference to file AccessibilitySearchFieldButtons.cpp.
        * WebCore.vcxproj/WebCore.vcxproj: Remove reference to files AccessibilitySearchFieldButtons.{cpp, h}.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer): Remove special-purpose logic that instantiated
        AccessibilitySearchFieldCancelButton for the search cancel button. Instead we can make
        use of the existing accessibility machinery to handle this button.
        * accessibility/AccessibilityAllInOne.cpp: Remove #include of AccessibilitySearchFieldButtons.cpp
        since the file is no longer needed.
        * accessibility/AccessibilitySearchFieldButtons.cpp: Removed.
        * accessibility/AccessibilitySearchFieldButtons.h: Removed.
        * dom/Element.h:
        (WebCore::Element::isSearchFieldCancelButtonElement): Deleted.
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement): Set the ARIA role
        and label attributes so that the accessibility system identifies the search cancel button as
        a button and shows a description for the button, respectively.
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler): Simplify the event handling logic
        such that we clear the field when we receive a DOM click event (i.e. the mouse was pressed
        and released on the button). Remove unused variable, oldValue. Substitute emptyString() for the
        empty string literal in the call to HTMLInputElement::setValueForUser() to avoid an implicit
        conversion to String. Also remove out-of-date comment that repeated what the code does.
        (WebCore::SearchFieldCancelButtonElement::willDetachRenderers): Deleted. We no longer need to use
        custom style resolve callbacks to reset the state of the EventHandler since we no longer need to
        have the EventHandler dispatch all mouse events to us on mouse press.
        * html/shadow/TextControlInnerElements.h:

2015-06-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185453.
        https://bugs.webkit.org/show_bug.cgi?id=145881

        it broke the 32-bit build (Requested by clopez on #webkit).

        Reverted changeset:

        "[GTK] [Wayland] Should be possible to build with support for
        both X11 and Wayland."
        https://bugs.webkit.org/show_bug.cgi?id=145701
        http://trac.webkit.org/changeset/185453

2015-06-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Should be possible to build with support for both X11 and Wayland.
        https://bugs.webkit.org/show_bug.cgi?id=145701

        Reviewed by Žan Doberšek.

        No new tests, no behavior changes.

        When building both targets, we have to include the wayland-egl
        headers in order to build the Wayland target. This causes that
        EGLNativePixmapType and EGLNativeWindowType get defined as
        different types than when building only the X11 target.

        By type casting them to the ones that are expected, we are able
        to build both targets at the same time.

        I have done tests (building each target alone as also both targets
        at the same time), and everything seems to works as expected.

        Once built for both targets, if you try to launch the MiniBrowser
        from inside a Wayland compositor (Weston on top of X for example),
        it will trigger the X11 target if the DISPLAY environment variable
        is set and the environment variable GDK_BACKEND is not set to wayland,
        otherwise it will trigger the Wayland target.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow): Add type cast.
        * platform/graphics/egl/GLContextEGL.cpp: Add missing include when
        building both targets that is required for defining DefaultRootWindow().
        (WebCore::GLContextEGL::createPixmapContext): Add type cast.

2015-06-11  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix the debug build after r185417.
        https://bugs.webkit.org/show_bug.cgi?id=145876 

        Reviewed by Gyuyoung Kim.

        * platform/graphics/efl/ImageBufferEfl.cpp: added the missing "MIMETypeRegistry.h".

2015-06-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Tahoma isn't installed on iOS, so there is no need to blacklist it
        https://bugs.webkit.org/show_bug.cgi?id=145865

        Reviewed by Dan Bernstein.

        No new tests because I can't copy Tahoma into our open source repository.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::fontFamilyShouldNotBeUsedForArabic):

2015-06-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185442.
        https://bugs.webkit.org/show_bug.cgi?id=145871

        seems to have broken WTF.StringOperators test (Requested by
        alexchristensen on #webkit).

        Reverted changeset:

        "[Content Extensions] Limit number of rules."
        https://bugs.webkit.org/show_bug.cgi?id=145663
        http://trac.webkit.org/changeset/185442

2015-06-10  Jon Lee  <jonlee@apple.com>

        Update presentation mode JS API to using 'picture-in-picture'
        https://bugs.webkit.org/show_bug.cgi?id=145826
        rdar://problem/2131153

        Reviewed by Anders Carlsson.

        Update presentation modes to use 'picture-in-picture' in lieu of 'optimized'.

        * html/HTMLVideoElement.idl: Update to "picture-in-picture".
        * html/HTMLVideoElement.cpp:
        (WebCore::presentationModePictureInPicture): Rename static function returning string.
        (WebCore::presentationModeOptimized): Deleted.
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode): Use the new static function name.
        (WebCore::HTMLVideoElement::webkitSetPresentationMode): Ditto.
        (WebCore::HTMLVideoElement::webkitPresentationMode): Ditto.

        * Modules/mediacontrols/mediaControlsiOS.js: Update to 'picture-in-picture'.
        (ControllerIOS.prototype.configureInlineControls): 
        (ControllerIOS.prototype.isFullScreen):
        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked):
        (ControllerIOS.prototype.handlePresentationModeChange):
        (ControllerIOS.prototype.controlsAlwaysVisible):

2015-06-10  Boris Smus  <boris@smus.com>

        [Mobile Safari, WKWebView] increase DeviceOrientationEvent events emission frequency
        https://bugs.webkit.org/show_bug.cgi?id=145814

        Reviewed by Benjamin Poulain.

        Increased the sampling rate of DeviceOrientationEvent from 20 Hz to 60
        Hz to make good head tracking possible.

        * platform/ios/WebCoreMotionManager.h:

2015-06-10  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Limit number of rules.
        https://bugs.webkit.org/show_bug.cgi?id=145663
        rdar://problem/21242407

        Reviewed by Benjamin Poulain.

        Added an API test to make sure that parsing fails when there are too many rules.

        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadEncodedRules):
        Fail to parse a content extension with more than 50000 rules.

2015-06-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r184895): Vertical border elements ([-webkit]-border-image set to 'repeat') that used to render perfectly are now rendering incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=145801

        Reviewed by Simon Fraser.

        When using the tiling to draw the sides of an image-border, the image slice
        is repeated only in one direction. For top and bottom sides, the slice is
        repeated horizontally and for left and right sides, it's repeated vertically.
        The tile might be scaled in the other direction of the tiling if the border
        extent and the slice extent are different in this direction.
        
        The bug happens because we were scaling the tile in the tiling direction.

        Test: fast/borders/border-image-repeat-stretch.html

        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::scaleSlicesIfNeeded): Fix the type and the name
        of deviceScaleFactor.
        
        (WebCore::NinePieceImage::computeIntrinsicSideTileScale): Fix the scaling
        direction of the border image side tiling.
        
        * rendering/style/NinePieceImage.h:

2015-06-10  Chris Dumez  <cdumez@apple.com>

        ASSERT_WITH_SECURITY_IMPLICATION in WebCore::DocumentOrderedMap::getElementById
        https://bugs.webkit.org/show_bug.cgi?id=145857
        <rdar://problem/16798440>

        Reviewed by Darin Adler.

        Make sure Node::insertedInto() gets called on the inserted node and its
        descendants after its insertion into the tree but *before*
        ContainerNode::childrenChanged() is called on the parent node. This is
        needed so that the descendants know they've been inserted into the tree
        (and their InDocumentFlag flag gets set) before the parent node does
        anything with them in childrenChanged().

        In the case of <rdar://problem/16798440>, executing HTMLScriptElement's
        childrenChanged() after appending a child to a script element was causing
        the script to be executed. The script would call getElementBy() which
        would traverse the DOM tree and find a matching Element in the newly
        inserted subtree. However, the matching Element's InDocumentFlag flag was
        not set yet because the element's insertedInto() method has not been called
        yet at this point. This would cause us to hit an assertion as
        DocumentOrderedMap::getElementById() is only supposed to return elements
        that are in a Document.

        This patch is based on Blink r178976 by <esprehn@chromium.org>:
        https://src.chromium.org/viewvc/blink?view=rev&revision=178976

        Tests: fast/dom/script-getElementById-during-insertion.html
               fast/dom/script-remove-child-id-map.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::notifyChildInserted):
        (WebCore::ContainerNode::notifyChildRemoved):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserInsertBefore): Deleted.
        (WebCore::ContainerNode::removeChild): Deleted.
        (WebCore::ContainerNode::parserRemoveChild): Deleted.
        (WebCore::ContainerNode::parserAppendChild): Deleted.
        (WebCore::ContainerNode::childrenChanged): Deleted.
        (WebCore::ContainerNode::setAttributeEventListener): Deleted.
        (WebCore::ContainerNode::querySelector): Deleted.
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoTree):
        (WebCore::ChildNodeInsertionNotifier::notify):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):

2015-06-10  Alex Christensen  <achristensen@webkit.org>

        [Web Timing] Fix flaky test.
        https://bugs.webkit.org/show_bug.cgi?id=145846

        Reviewed by Alexey Proskuryakov.

        The timing data is gathered in ResourceHandle::getConnectionTimingData as 
        millisecond deltas from the fetch start time, not the navigation start time.
        The difference between navigation and fetch start time is usually so small that 
        it only caused one flaky test, but this should fix that flakiness. This patch 
        corrects how the millisecond deltas are used.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::secureConnectionStart):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::documentLoadTiming):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToFetchStart):
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute): Deleted.
        * page/PerformanceTiming.h:

2015-06-10  Beth Dakin  <bdakin@apple.com>

        Overriding the overlay scrollbar style on WKView doesn't take effect immediately
        https://bugs.webkit.org/show_bug.cgi?id=145855
        -and corresponding-
        rdar://problem/20948706

        Reviewed by Simon Fraser.

        Since we opt into layer-per-part scrollbars in order to move the knob on the 
        secondary thread, AppKit is creating its own layers for the knob and track. To 
        invalidate them, we need to call into the ScrollbarPainter’s setNeedsDisplay.

        New virtual function on ScrollAnimator to call into ScrollbarPainter’s 
        setNeedsDispay.
        * platform/ScrollAnimator.h:

        Call the new function when setting the overlay style.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollbarOverlayStyle):

        Add setNeedsDisplay to the list of ScrollbarPainter methods.
        * platform/mac/NSScrollerImpDetails.h:

        Implement invalidateScrollbarPartLayers.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::invalidateScrollbarPartLayers):

2015-06-10  Matt Rajca  <mrajca@apple.com>

        MediaRemoteControls should be marked JSGenerateToJSObject.
        https://bugs.webkit.org/show_bug.cgi?id=145849

        Reviewed by Eric Carlson.

        Since MediaRemoteControls has a parent interface, we need to add the JSGenerateToJSObject attribute so the
        toJS(...) function gets generated. This is required for event handling to work.

        * Modules/mediasession/MediaRemoteControls.idl:

2015-06-10  Dean Jackson  <dino@apple.com>

        User can not scroll on page when dragging inside video
        https://bugs.webkit.org/show_bug.cgi?id=145848
        <rdar://problem/20997158>

        Reviewed by Brent Fulgham.

        Revert the change made in http://trac.webkit.org/changeset/183797
        which breaks panning on pages if the touch starts inside the video.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleWrapperTouchStart): Do not return true, which stops
        the handleEvent call in the superclass from preventing the default action.

2015-06-10  Matt Rajca  <mrajca@apple.com>

        Explicitly keep track of active HTMLMediaElements in MediaSessions.
        https://bugs.webkit.org/show_bug.cgi?id=145829

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp: Add support for keeping track of active media elements.
        (WebCore::MediaSession::addActiveMediaElement):
        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): If the paused attribute is true and the readyState attribute has the
          value HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA, the media element becomes an active participating element of the
          media session.

2015-06-10  Chris Dumez  <cdumez@apple.com>

        Drop unused argument for Node::didNotifySubtreeInsertions()
        https://bugs.webkit.org/show_bug.cgi?id=145845

        Reviewed by Andreas Kling.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notify):
        * dom/Node.h:
        (WebCore::Node::didNotifySubtreeInsertions):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions):
        * html/HTMLFrameElementBase.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::didNotifySubtreeInsertions):
        * svg/SVGFEImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::didNotifySubtreeInsertions):
        * svg/SVGMPathElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::didNotifySubtreeInsertions):
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::didNotifySubtreeInsertions):
        * svg/SVGTextPathElement.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::didNotifySubtreeInsertions):
        * svg/animation/SVGSMILElement.h:

2015-06-10  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Jpeg image export implementation for Canvas.
        https://bugs.webkit.org/show_bug.cgi?id=145457

        Reviewed by Gyuyoung Kim.

        Add implementation of jpeg image export on Webkit EFL by using JPEGImageEncoder.

        No new tests, fast/canvas/toDataURL-supportedTypes.html can be reused.

        * PlatformEfl.cmake:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/efl/ImageBufferEfl.cpp: Added.
        (WebCore::writeFunction):
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):

2015-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move KeyBindingTranslator from platform to WebKit2 layer
        https://bugs.webkit.org/show_bug.cgi?id=145840

        Reviewed by Martin Robinson.

        It's currently used only by WebKit2 in the UI process and it's
        another file built twice because of the GTK2 plugin process.

        * PlatformGTK.cmake:

2015-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Get rid of GetEditorCommandsForKeyEvent sync message
        https://bugs.webkit.org/show_bug.cgi?id=145598

        Reviewed by Žan Doberšek.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::commands):
        * platform/gtk/KeyBindingTranslator.cpp: Use a single list of
        custom key bindings. We don't need to distinguish between key down and
        key press commands, since the web editor client already does that
        when executing the commands.
        (WebCore::KeyBindingTranslator::commandsForKeyEvent): This is
        getEditorCommandsForKeyEvent() renamed as commandsForKeyEvent(),
        since it now returns the list of commands to simplify the
        code. Also simplify the custom key bindings handling, by using the
        global list instead of moving it to a HashMap.
        (WebCore::KeyBindingTranslator::getEditorCommandsForKeyEvent): Deleted.
        * platform/gtk/KeyBindingTranslator.h:

2015-06-10  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Crash on exit when terminating egl
        https://bugs.webkit.org/show_bug.cgi?id=145832

        Reviewed by Carlos Garcia Campos.

        Avoid terminating egl on exit for WinCairo.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::~PlatformDisplay):

2015-06-10  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Refactor AudioContext implementation to enable automatic binding generation of promise-based methods
        https://bugs.webkit.org/show_bug.cgi?id=145223

        Reviewed by Darin Adler.

        Introducing DOMPromise as a typed wrapper above DeferredWrapper.
        This DOMPromise allows constraining Promise resolution/rejection to a single resolution type and rejection type. 
        This might be useful for typed callback usage of promise based APIs, like getUserMedia() or ReadableStreamReader.read().

        Applying DOMPromise to AudioContext close, suspend and resume.
        Changed binding code to represent what could be automatically generated by binding generator.
        Fixing unneeded copies of std::function callbacks.

        Disabling DOMPromise copy constructors to lower chances that resolution/rejection is done twice on the same object.

        Covered by existing tests.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::addReaction):
        (WebCore::AudioContext::setState):
        (WebCore::AudioContext::suspend):
        (WebCore::AudioContext::resume):
        (WebCore::AudioContext::close):
        * Modules/webaudio/AudioContext.h:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::suspend):
        (WebCore::JSAudioContext::resume):
        (WebCore::JSAudioContext::close):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::callFunction):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        (WebCore::DOMPromise::DOMPromise):
        (WebCore::DOMPromise::resolve):
        (WebCore::DOMPromise::reject):

2015-06-10  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Implement pulling of a source by a ReadableStream
        https://bugs.webkit.org/show_bug.cgi?id=145262

        Reviewed by Darin Adler

        Introduced abstract ReadableStream::doPull() which is overriden in ReadableJSStream.
        Added support to call the "pull" JS callback in ReadableJSStream::doPull().
        Added calls to pull as requested by the spec (when resolving a read callback, at start time...).

        Fixed issue in ReadableStreamReader::read() (use of successCallback(JSValue()) in lieu of endCallback())

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::start): calling pull() once start.
        (WebCore::ReadableStream::pull): calling doPull() if readableStream states requires to.
        (WebCore::ReadableStream::read): calling pull() after resolving a read callback.
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::read): fixed JSValue() bug.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::doPull): calling of JS callback.
        (WebCore::ReadableJSStream::storeException): catches exception and store them.
        (WebCore::ReadableJSStream::storeError): refactoring for checkForException.
        (WebCore::ReadableJSStream::enqueue):
        * bindings/js/ReadableJSStream.h:

2015-06-09  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        DeferredWrapper should clear its JS strong references once its promise is resolved/rejected
        https://bugs.webkit.org/show_bug.cgi?id=145753

        Reviewed by Darin Adler.

        Clear strong references at the end of DeferredWrapper::resolve and DeferredWrapper::reject.
        Added assertions to check that resolve or reject is called only once.

        Removed DeferredWrapper constructor that creates internally its promise.
        Reason is DeferredWrapper can be resolved synchronously and promise
        will be lost when returning it at the end of the binding promise function.
        Updated all custom bindings accordingly.

        Covered by existing tests.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::suspend): Updated DeferredWrapper constructor to properly return the promise.
        (WebCore::JSAudioContext::resume): Ditto.
        (WebCore::JSAudioContext::close): Ditto.
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::resolve): Cleared strong references after promise resolution.
        (WebCore::DeferredWrapper::reject): Cleared strong references after promise rejection.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve): Added ASSERT to check promise is not yet rejected/resolved.
        (WebCore::DeferredWrapper::reject): Ditto.
        (WebCore::DeferredWrapper::reject<ExceptionCode>): Ditto.
        (WebCore::DeferredWrapper::resolve<String>): Ditto.
        (WebCore::DeferredWrapper::resolve<bool>): Ditto.
        (WebCore::DeferredWrapper::resolve<JSC::JSValue>): Ditto.
        (WebCore::char>>):
        (WebCore::DeferredWrapper::reject<String>): Ditto.
        * bindings/js/JSMediaDevicesCustom.cpp:
        (WebCore::JSMediaDevices::getUserMedia): Updated DeferredWrapper constructor to properly return the promise.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::read): Ditto.
        (WebCore::JSReadableStreamReader::closed): Ditto.
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt): Ditto.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Ditto.
        (WebCore::JSSubtleCrypto::verify): Ditto.
        (WebCore::JSSubtleCrypto::digest): Ditto.
        (WebCore::JSSubtleCrypto::generateKey): Ditto.
        (WebCore::JSSubtleCrypto::importKey): Ditto.
        (WebCore::JSSubtleCrypto::exportKey): Ditto.
        (WebCore::JSSubtleCrypto::wrapKey): Ditto.
        (WebCore::JSSubtleCrypto::unwrapKey): Ditto.

2015-06-09  Zalan Bujtas  <zalan@apple.com>

        Protect FrameView from being destroyed in Document::recalcStyle()
        https://bugs.webkit.org/show_bug.cgi?id=143033
        rdar://problem/20326871

        Reviewed by Andreas Kling.

        This patch ensures that FrameView stays valid in Document::recalcStyle().
        It follows the defensive pattern we use to deal with the refcounted FrameView (see EventDispatcher::dispatchEvent)

        When the iframe destroys itself in the onBeforeLoad callback (as the result of
        PostResolutionCallbackDisabler -> HTMLObjectElement::updateWidget -> guardedDispatchBeforeLoadEvent),
        we detach the frame and release the FrameView. However Document::recalcStyle() expects
        the FrameView to stay valid.

        Covered by fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html.

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

2015-06-09  Daegyu Lee  <daegyu.lee@navercorp.com>

        3D-transformed video does not display on platforms without accelerated video rendering
        https://bugs.webkit.org/show_bug.cgi?id=144782

        Reviewed by Simon Fraser.

        Video element does not get GraphicsLayer when MediaPlayerPrivate::supportsAcceleratedRendering() returns false
        which means not using accelerated video decoding.
        Although the video element gets GraphicsLayer by changing the CSS style of video element by javascript,
        there is no way to set GraphicsLayer::setDrawsContent(true) for updating the video content.
        As a result, after changing the CSS style, the video content does not show.
        To avoid missing setDrawsContent(true), add conditions(!supportsAcceleratedRendering() && m_requiresOwnBackingStore).

        Test: media/video-transformed-by-javascript.html
              media/video-transformed-by-javascript-expected.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent):

2015-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r180867): Tabbing to login field on iCloud.com doesn't have highlight for text
        https://bugs.webkit.org/show_bug.cgi?id=145830

        Reviewed by Darin Adler.

        The bug was caused by setSelection not updating RenderView when there is a style recalc scheduled
        that doesn't trigger a layout. Fixed the bug by explicitly updating the selection in
        Document::recalcStyle in that case.

        Test: editing/selection/update-selection-by-style-change.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAppearanceAfterLayout): Renamed from didLayout.
        * editing/FrameSelection.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):

2015-06-09  Dean Jackson  <dino@apple.com>

        MediaControls: Reenable resize of controls on pinch zoom
        https://bugs.webkit.org/show_bug.cgi?id=145824
        <rdar://problem/21212778>

        Reviewed by Darin Adler.

        Reinstate the code that updated the scaling of the
        controls in response to changes in page scale.
        This time around we have to change both the controls
        panel, and its blurry background.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.set pageScaleFactor): Deleted a comment.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel-background): Set the background to pin
        to the bottom of its view.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.get pageScaleFactor): Basic getter, copied from mediaControlsApple.
        (ControllerIOS.prototype.set pageScaleFactor): The setter that reacts to the page scale
        and applies an inverse scaling on the control panel using a transform, and adjusts the
        height on the background similarly.

2015-06-09  Andreas Kling  <akling@apple.com>

        GraphicsContext state stack wasting lots of memory when empty.
        <https://webkit.org/b/145817>

        Reviewed by Geoffrey Garen.

        Give the GraphicsContextState stack an inline capacity of 1, and make sure
        to free any heap-allocated backing store when the stack goes empty.

        The 1 is because HTMLCanvasElement keeps one "save" on the underlying
        GraphicsContext at all times, and this prevents those canvases from always
        sitting on an empty stack with 16 capacity.

        This saves ~520 kB on cnet.com video pages.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::restore):
        * platform/graphics/GraphicsContext.h:

2015-06-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG Fragment is not rendered if it is the css background image of an HTML element
        https://bugs.webkit.org/show_bug.cgi?id=91790

        Reviewed by Darin Adler.

        To show an SVG fragment, the SVGImage has to scrollToFragment() using
        the resource url. The changes http://trac.webkit.org/changeset/164804
        and http://trac.webkit.org/changeset/164983 set the url of SVGImage to
        to be used later in SVGImage::draw(). The problem is the SVGImage url
        is only set when it is the src of an <img> tag. We did not do the same
        thing when the SVGImage is the css background image of an HTML element.
        
        The fix is to set the url of the SVGImage always when it's created by 
        the CachedImage. The CachedImage must have a valid url when the SVGImage
        is created.

        Test: svg/css/svg-resource-fragment-identifier-background.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load):
        (WebCore::CachedImage::checkShouldPaintBrokenImage):
        Replace the calls resourceRequest().url() and m_resourceRequest.url() by
        calling url() since they are all the same.
        
        (WebCore::CachedImage::createImage): Pass the resource url to SVGImage
        and change ImageObserver& by ImageObserver*, since null is not legal.
        
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        * svg/graphics/SVGImage.h: Add a url parameter to SVGImage constructor.
        
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::findImageForRenderer): Add a new helper function.
        
        (WebCore::SVGImageCache::imageSizeForRenderer):
        (WebCore::SVGImageCache::imageForRenderer): Code clean up.
        
        * svg/graphics/SVGImageCache.h: Make imageForRenderer() const.

        * svg/graphics/SVGImageForContainer.cpp: Remove unneeded header file.

2015-06-09  Matt Rajca  <mrajca@apple.com>

        Add support for toggling playback in MediaSessions and MediaSessionManagers.
        https://bugs.webkit.org/show_bug.cgi?id=145822

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp: Toggle playback of all active media elements.
        (WebCore::MediaSession::togglePlayback):
        * Modules/mediasession/MediaSession.h:
        * Modules/mediasession/MediaSessionManager.cpp: Toggle playback of all media sessions as described in the
          Media Session spec.
        (WebCore::MediaSessionManager::togglePlayback):
        * Modules/mediasession/MediaSessionManager.h:

2015-06-09  Darin Adler  <darin@apple.com>

        Takes two delete key presses to delete pasted emoji up-pointing index finger with skin tone
        https://bugs.webkit.org/show_bug.cgi?id=145823

        Reviewed by Anders Carlsson.

        Tests: editing/deleting/delete-emoji.html

        * rendering/RenderText.cpp:
        (WebCore::isHangulLVT): Use constants instead of macros. Also changed to take a UChar since
        the Hangul processing can work on UTF-16 code unit at a time and doesn't have to handle
        surrogate pairs.
        (WebCore::isMark): Use U_GC_M_MASK instead of writing the algorithm out another way.
        (WebCore::isInArmenianToLimbuRange): Added.
        (WebCore::RenderText::previousOffsetForBackwardDeletion): Refactored for clarity and to use
        the U16_PREV macro instead of doing what it does in a sloppier way. Added code to allow a
        variation selector before an emoji modifier to fix the bug. Changed Hangul logic to work a
        code unit at a time, since it can, to use an enum class, and to use constants rather than
        all capital macros. Also changed the "dumb" case to use a more appropriate ICU macro.

2015-06-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        feComposite filter does not clip the paint rect to its effect rect when the operator is 'in' or 'atop'
        https://bugs.webkit.org/show_bug.cgi?id=137856

        Reviewed by Darin Adler.

        There was bug in calculating the absolutePaintRect of the feComposite filter
        when the operator is equal to 'in' or 'atop'. The absolutePaintRect was set
        to the absolutePaintRect of the background FilterEffect which is correct.
        What was missing is clipping this rectangle to the maxEffectRect of the
        filter which we do for other operators.

        Tests: svg/filters/feComposite-background-rect-control-operators.svg

        * platform/graphics/IntRect.h:
        (WebCore::operator-=):
        (WebCore::operator-): Add new operators to IntRect.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::determineAbsolutePaintRect): Make sure the filter
        absolutePaintRect is clipped to maxEffectRect for all operators.
        
        (WebCore::FEComposite::platformApplySoftware): Code clean-up.
        
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::determineAbsolutePaintRect): Move the clipping
        part to a separate function.
        
        (WebCore::FilterEffect::clipAbsolutePaintRect): Clip the absolutePaintRect
        to the maxEffectRect of the filter.
        
        * platform/graphics/filters/FilterEffect.h:

2015-06-09  Matt Rajca  <mrajca@apple.com>

        Implement MediaSessionManager to keep track of all MediaSessions.
        https://bugs.webkit.org/show_bug.cgi?id=145806

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession): Add ourselves to the MediaSessionManager upon construction.
        (WebCore::MediaSession::~MediaSession): Remove ourselves from the MediaSessionManager before destruction.
        * Modules/mediasession/MediaSessionManager.cpp: Added to keep track of all living MediaSessions.
        (WebCore::MediaSessionManager::singleton):
        (WebCore::MediaSessionManager::addMediaSession):
        (WebCore::MediaSessionManager::removeMediaSession):
        * Modules/mediasession/MediaSessionManager.h: Added.
        * WebCore.xcodeproj/project.pbxproj: Added new MediaSessionManager sources.

2015-06-09  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Remove RefCounted from Tile
        https://bugs.webkit.org/show_bug.cgi?id=145788

        Reviewed by Darin Adler.

        Since r185140, Tile does not need to be RefCounted.

        No new tests, no behavior changes.

        * platform/graphics/texmap/coordinated/Tile.cpp:
        (WebCore::Tile::create): Deleted.
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::invalidate):
        (WebCore::TiledBackingStore::updateTileBuffers): Simplifies not to use unnecessary Vector.
        (WebCore::TiledBackingStore::coverageRatio):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::resizeEdgeTiles):
        (WebCore::TiledBackingStore::setKeepRect):
        (WebCore::TiledBackingStore::tileAt): Deleted one line wrapper.
        (WebCore::TiledBackingStore::setTile): Ditto.
        (WebCore::TiledBackingStore::removeTile): Ditto.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2015-06-09  Chris Dumez  <cdumez@apple.com>

        Allow one sync GC per gcTimer interval on critical memory pressure warning
        https://bugs.webkit.org/show_bug.cgi?id=145773

        Reviewed by Geoffrey Garen.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNowIfNotDoneRecently):

        Add new GCController::garbageCollectNowIfNotDoneRecently() API that
        allows one synchronous GC per full GC timer interval. If called more
        than once per interval, it becomes equivalent to garbageCollectSoon()
        and merely accelerates the next collection.

        * bindings/js/GCController.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

        Call the new GCController::garbageCollectNowIfNotDoneRecently() on
        critical memory pressure instead of garbageCollectionSoon() to try
        as do a synchronous GC if one wasn't already done recently.
        Also drop call to fullSweep() as GCController::garbageCollectNow*()
        already do a sweep after the collection.

2015-06-09  Darin Adler  <darin@apple.com>

        Follow-up fix for:
        JavaScript bindings are unnecessarily checking for impossible empty JSValue arguments
        https://bugs.webkit.org/show_bug.cgi?id=145811

        There was one unusual case in the bindings generator that was depending on this.

        * bindings/js/JSDOMBinding.h:
        (WebCore::argumentOrNull): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck): Stop using argumentOrNull.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Updated.
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated.

2015-06-09  Darin Adler  <darin@apple.com>

        JavaScript bindings are unnecessarily checking for impossible empty JSValue arguments
        https://bugs.webkit.org/show_bug.cgi?id=145811

        Reviewed by Antti Koivisto.

        At some point, someone who didn't understand JSValue very well added checks for
        isEmpty (and the function isEmpty itself) in JavaScript bindings. But the engine
        never would pass an empty JSValue to a binding; that's used only inside the
        engine itself. I think this was done by some Google V8 experts a while back, so
        it's not entirely surprising they didn't understand this. But we don't want to
        keep all that unneeded code.

        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind): Removed the isEmpty clause here. I presume this
        was copied and pasted from script-generated bindings. While I was at it, I used a
        slightly more efficient code path that avoids doing a ref/deref on the string by
        using auto&. That's trickier to do correctly for functions with more than one
        argument, so I didn't do it in the bindings generator yet.
        (WebCore::JSAudioTrack::setLanguage): Ditto.
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setKind): Ditto.
        (WebCore::JSTextTrack::setLanguage): Ditto.
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind): Ditto.
        (WebCore::JSVideoTrack::setLanguage): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Use "=" syntax instead of constructor style syntax for
        the argument processing. I think this is more readable.
        (GenerateParametersCheck): For the enum code path, did the more efficient auto&
        idiom to avoid ref/deref on a string. For the toExistingAtomicString path,
        restructured so we don't have to check the flag indicating that something is atomic.
        Later we could also avoid the ref/deref; added a FIXME about that.
        (GetNativeType): Use String, not const String, for local variables. Sure, the
        string is const, but so is every other local variable type we use! No need to be
        wordy about it.
        (JSValueToNative): Removed the uneeded calls to isEmpty. Since the call sites no
        longer use construction syntax, used initializer syntax style for a couple classes
        that are constructed with multiple arguments.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Updated.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.

2015-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused private field warning in GraphicsLayerUpdater.h
        https://bugs.webkit.org/show_bug.cgi?id=145757

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        * platform/graphics/GraphicsLayerUpdater.h:

2015-06-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        Crash when passing Symbol to NPAPI plugin objects
        https://bugs.webkit.org/show_bug.cgi?id=145798

        Reviewed by Darin Adler.

        Test: plugins/npruntime/script-object-with-symbols.html

        For C bridge APIs, we add guards for symbols.
        This is the same to the existing guards in Objective-C APIs.

        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        (JSC::Bindings::ObjcClass::fallbackObject):

2015-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix the style issues in cmake project files
        https://bugs.webkit.org/show_bug.cgi?id=145755

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:

2015-06-09  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableJSStream should handle JS source getters that throw
        https://bugs.webkit.org/show_bug.cgi?id=145600

        Reviewed by Darin Adler.

        Checking whether there is an exception when trying to access to a source method.
        If so, rethrowing it in case of "start".

        Refactoring of code to prepare pulling, cancelling and additional parameter handling in ReadableStream construtor.

        Fixed the case of ReadableStream constructor called with an undefined parameter.

        Covered by rebased test expectation.

        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::constructJSReadableStream): Refactoring to group all parameter check and exception handling in ReadableJSStream::create.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::getPropertyFromObject):
        (WebCore::callFunction):
        (WebCore::ReadableJSStream::invoke): Added method to be used also for pulling and cancelling.
        (WebCore::ReadableJSStream::doStart):
        (WebCore::ReadableJSStream::create):
        * bindings/js/ReadableJSStream.h:

2015-06-08  Dan Bernstein  <mitz@apple.com>

        Made MicroTask.h a project header.

        Rubber-stamped by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj: Demoted MicroTask.h from Public to Project. WebCore
        doesn’t have public headers, and this header isn’t used by WebKit.

2015-06-08  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=145750

        Reviewed by Darin Adler.

        As a step to purge PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr.

        No new tests, no behavior changes.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-06-08  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Clip-path does not work properly on subpixel positions.
        https://bugs.webkit.org/show_bug.cgi?id=145749
        rdar://problem/20824305

        Reviewed by Simon Fraser.

        This patch ensures that clip-path is device pixel snapped both for composited and
        non-composited content.

        Tests: compositing/masks/compositing-clip-path-on-subpixel-position.html
               fast/masking/clip-path-on-subpixel-position.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateMaskingLayerGeometry):

2015-06-08  Chris Dumez  <cdumez@apple.com>

        Access GCController instance via GCController::singleton() instead of a free function
        https://bugs.webkit.org/show_bug.cgi?id=145776

        Reviewed by Darin Adler.

        Access GCController instance via GCController::singleton() instead of a
        free function as per coding style and for consistency with other
        singleton classes in the codebase.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::singleton):
        (WebCore::gcController): Deleted.
        * bindings/js/GCController.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptController.cpp:
        (WebCore::collectGarbageAfterWindowShellDestruction):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-06-08  Daniel Bates  <dabates@apple.com>

        Mouse release on AutoFill button activates it; should only activate on click
        https://bugs.webkit.org/show_bug.cgi?id=145774
        <rdar://problem/21069245>

        Reviewed by Ryosuke Niwa.

        Fixes an issue where a click event was dispatched to a shadow tree node regardless of whether
        both the mouse press and mouse release were targeted at it. In particular, releasing the mouse
        on the AutoFill button activates it regardless of whether the mouse was pressed on it.

        Currently we always dispatch a click event to a node n where the mouse was released when n is
        in a shadow tree regardless of whether the mouse was pressed on n. Instead we should only
        dispatch a click event to n if the mouse was pressed and released on n. If n is a shadow tree
        descendant, the mouse was released on n, and n never received a mouse press then we should
        dispatch the click event at the shadow host element of n to preserve the illusion to web
        developers that the shadow host element is a single element.

        Test: fast/forms/auto-fill-button/mouse-down-input-mouse-release-auto-fill-button.html

        * page/EventHandler.cpp:
        (WebCore::targetNodeForClickEvent): Added; returns the target node for the DOM click event.
        (WebCore::EventHandler::handleMouseReleaseEvent): Modified to use dispatch the DOM click event
        at the node returned by targetNodeForClickEvent().
        (WebCore::mouseIsReleasedOnPressedElement): Deleted.

2015-06-08  Chris Dumez  <cdumez@apple.com>

        WebContent crash in WebCore::Page::sessionID() const + 0 (Page.cpp:1660)
        https://bugs.webkit.org/show_bug.cgi?id=145748
        <rdar://problem/21226577>

        Reviewed by Brady Eidson.

        We would sometimes crash when pruning the PageCache because it was
        possible for frames to still be loading while in the PageCache and
        we would try to stop the load when the CachedFrame is destroyed. This
        code path was not supposed to be exercised as we were not supposed to
        have pages still loading inside the PageCache.

        r185017 made sure we don't insert into the PageCache pages that are
        still loading. However, nothing was preventing content from starting
        new loads in their 'pagehide' event handlers, *after* the decision
        to put the page in the PageCache was made.

        This patch prevents content from starting loads from a 'pagehide'
        event handler so that we can no longer have content that is loading
        inside the PageCache. 'ping' image loads still go through though as
        these are specially handled and use PingLoaders.

        Tests: http/tests/navigation/image-load-in-pagehide-handler.html
               http/tests/navigation/subframe-pagehide-handler-starts-load.html
               http/tests/navigation/subframe-pagehide-handler-starts-load2.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::handleBeforeUnloadEvent):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::pageDismissalEventBeingDispatched):
        (WebCore::FrameLoader::PageDismissalEventType::PageDismissalEventType):
        (WebCore::FrameLoader::PageDismissalEventType::operator Page::DismissalType):

        Add wrapper class for m_pageDismissalEventBeingDispatched member type.
        The wrapper takes care of updating the m_dismissalEventBeingDispatched
        member on the Page every time the member on FrameLoader is updated. We
        now cache this information on the Page so that clients can cheaply
        query if a dismissal event is being dispatched in any of the Page's
        frame, without having to traverse the frame tree.

        * loader/ImageLoader.cpp:
        (WebCore::pageIsBeingDismissed):

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

        Abort the load early if we are currently dispatching a 'pagehide'
        event. We don't allow new loads at such point because we've already
        made the decision to add the Page to the PageCache.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):

        * page/Chrome.cpp:
        (WebCore::Chrome::runModal): Deleted.
        (WebCore::Chrome::setToolbarsVisible): Deleted.
        (WebCore::Chrome::toolbarsVisible): Deleted.
        (WebCore::Chrome::runJavaScriptConfirm): Deleted.
        (WebCore::Chrome::runJavaScriptPrompt): Deleted.
        (WebCore::Chrome::shouldInterruptJavaScript): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::canShowModalDialogNow):

        Drop ChromeClient::shouldRunModalDialogDuringPageDismissal() and code
        using it as it is unused and I did not think it was worth updating
        this code.

        * page/Page.h:
        (WebCore::Page::dismissalEventBeingDispatched):
        (WebCore::Page::setDismissalEventBeingDispatched):

        Add a m_dismissalEventBeingDispatched member to the Page so that we can
        easily query if a dismissal event is being dispatched in any of the
        frames, without having to traverse the frame tree. I suspect more call
        sites of FrameLoader::pageDismissalEventBeingDispatched() may actually
        want this but I did not make such change in this patch. It is important
        to check all the frames and not simply the current one because a frame's
        pagehide event handler may trigger a load in another frame.

2015-06-08  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replaced 0 with nullptr in WebCore/Modules.
        https://bugs.webkit.org/show_bug.cgi?id=145758

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::BatteryManager):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::CDM):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::MediaKeys):
        (WebCore::MediaKeys::~MediaKeys):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::continueFunction):
        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transactionFinished):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
        (WebCore::IDBDatabaseCallbacksImpl::IDBDatabaseCallbacksImpl):
        * Modules/indexeddb/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::count):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        (WebCore::IDBOpenDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::OpenCursorNotifier::cursorFinished):
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit):
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform):
        * Modules/indieui/UIRequestEvent.cpp:
        (WebCore::UIRequestEventInit::UIRequestEventInit):
        (WebCore::UIRequestEvent::UIRequestEvent):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::setReadyState):
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::~SourceBuffer):
        (WebCore::SourceBuffer::removedFromMediaSource):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::~MediaStream):
        * Modules/mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEventInit::MediaStreamEventInit):
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        (WebCore::MediaStreamTrackEventInit::MediaStreamTrackEventInit):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::stop):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::contextDestroyed):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * Modules/notifications/Notification.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::setPlatformSynthesizer):
        (WebCore::SpeechSynthesis::cancel):
        (WebCore::SpeechSynthesis::handleSpeakingCompleted):
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::~SpeechSynthesisUtterance):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::clearPannerNode):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::~MediaElementAudioSourceNode):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::setType):
        (WebCore::OscillatorNode::process):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker):
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::clearFailureDueToQuota):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::getNextStatement):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::releaseLock):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
        (WebCore::ThreadableWebSocketChannelClientWrapper::clearPeer):
        (WebCore::ThreadableWebSocketChannelClientWrapper::clearClient):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::stop):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didCloseSocketStream):
        * Modules/websockets/WebSocketFrame.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clearScriptExecutionContext):
        (WebCore::WebSocketHandshake::readStatusLine):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):

2015-06-08  Chris Fleizach  <cfleizach@apple.com>

        AX: improve list heuristics (presentational use versus actual lists)
       ​https://bugs.webkit.org/show_bug.cgi?id=134187

        Unreviewed. Rolling this change out temporarily.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isDescriptionList):
        (WebCore::AccessibilityList::determineAccessibilityRole):
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers): Deleted.
        * accessibility/AccessibilityList.h:

2015-06-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable AVFoundation by default when QTKit is disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=145760

        Reviewed by Alexey Proskuryakov.

        No new tests, this change makes existing tests pass.

        Settings::gAVFoundationEnabled defaults to true.

        * page/Settings.cpp:
        (WebCore::invalidateAfterGenericFamilyChange):

2015-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Explicitly dismiss correction panel when user types a new character
        https://bugs.webkit.org/show_bug.cgi?id=145732
        <rdar://problem/19596892>

        Reviewed by Darin Adler.

        Explicitly dismiss the correction panel when the user types a new character.
        This patch shouldn't change any behavior we're currently relying on AppKit to do the same.

        Manually ran tests in ManualTests/autocorrection.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToAppliedEditing):

2015-06-08  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Setting height on a grid item doesn't have any effect
        https://bugs.webkit.org/show_bug.cgi?id=145604

        Reviewed by Sergio Villar Senin.

        Box Alignment spec states that stretch is only possible when height is
        'auto' and no 'auto' margins are used.

        It might be the case that style changes so that stretching is not allowed,
        hence we need to detect it and clear the override height the stretching
        algorithm previously set. The new layout triggered by the style change
        will then set grid item's height according to the new style rules.

        Test: fast/css-grid-layout/grid-item-should-not-be-stretched-when-height-or-margin-change.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):

2015-06-08  Brady Eidson  <beidson@apple.com>

        Completely remove all IDB properties/constructors when it is disabled at runtime.
        rdar://problem/18429374 and https://bugs.webkit.org/show_bug.cgi?id=137034

        Reviewed by Geoffrey Garen.

        Test: storage/indexeddb/properties-disabled-at-runtime.html

        - Make constructors all runtime enabled.
        - Remove autogeneration of the window.(webkit)indexedDB accessors.
        - Add manual overrides for the (webkit)indexedDB accessors at runtime.
        
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/IDBAny.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBOpenDBRequest.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * page/DOMWindow.idl:

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowIndexedDB):
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2015-06-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Performs DNS prefetch when a proxy is configured (information leak)
        https://bugs.webkit.org/show_bug.cgi?id=145542

        Reviewed by Alexey Proskuryakov.

        No new tests, because it's hard to test whether a DNS request has been sent. We could do
        this by adding new API to modify the GProxyResolver and GResolver used by the SoupSession in
        the network process, but even if such API were desirable, it would be a big job. Tests
        should not be allowed to dictate our public API.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::add): Do not check whether the system is using a proxy, since
        this can't be determined for all ports here.
        (WebCore::DNSResolveQueue::timerFired): Do not check whether the system is using a proxy,
        since this can't be determined for all ports here.
        (WebCore::DNSResolveQueue::DNSResolveQueue): Remove member variables and member functions
        that are only needed by the CF backend. Rename platformResolve to
        platformMaybeResolveHost.
        (WebCore::DNSResolveQueue::isUsingProxy): Moved to DNSCFNet.cpp.
        * platform/network/DNSResolveQueue.h: Remove member variables that are only needed by the
        CF backend.
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::proxyIsEnabledInSystemPreferences): Renamed from
        platformProxyIsEnabledInSystemPreferences.
        (WebCore::isUsingProxy): Moved from DNSResolveQueue.cpp. The member variables removed from
        DNSResolveQueue are not static here. This is safe since it's a singleton.
        (WebCore::DNSResolveQueue::platformMaybeResolveHost): Renamed from platformResolve.
        Bail early from here if a proxy is configured.
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences): Renamed to
        proxyIsEnabledInSystemPreferences.
        (WebCore::DNSResolveQueue::platformResolve): Renamed to platformMaybeResolveHost.
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::gotProxySettingsCallback): Added. Call soup_session_prefetch_dns from here only
        if a proxy would not be used to resolve the host.
        (WebCore::DNSResolveQueue::platformMaybeResolveHost): Renamed from platformResolve.
        Look up proxy settings using g_proxy_resolver_lookup_async rather than calling
        soup_session_prefetch_dns directly.
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences): Deleted.
        (WebCore::DNSResolveQueue::platformResolve): Renamed to platformMaybeResolveHost.

2015-06-08  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/Modules - 2
        https://bugs.webkit.org/show_bug.cgi?id=145541

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * Modules/mediastream/RTCConfiguration.h:
        (WebCore::RTCConfiguration::iceServers):
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::processIceServer):
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::getStreamById):
        (WebCore::RTCPeerConnection::hasLocalStreamWithTrackId):
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::names):
        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::initProtocolHandlerWhitelist):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::getVoices):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::memoryCost):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::derefFinishedSourceNodes):
        (WebCore::AudioContext::derefUnfinishedSourceNodes):
        (WebCore::AudioContext::handleDeferredFinishDerefs):
        (WebCore::AudioContext::handleDirtyAudioSummingJunctions):
        (WebCore::AudioContext::handleDirtyAudioNodeOutputs):
        (WebCore::AudioContext::updateAutomaticPullNodes):
        (WebCore::AudioContext::processAutomaticPullNodes):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::updateChannelsForInputs):
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        (WebCore::AudioNode::pullInputs):
        (WebCore::AudioNode::inputsAreSilent):
        (WebCore::AudioNode::silenceOutputs):
        (WebCore::AudioNode::unsilenceOutputs):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        (WebCore::AudioNode::disableOutputsIfNecessary):
        (WebCore::AudioNode::finishDeref):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        (WebCore::AudioNodeInput::sumAllConnections):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::propagateChannelCount):
        (WebCore::AudioNodeOutput::disable):
        (WebCore::AudioNodeOutput::enable):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateFinalValues):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::insertEvent):
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::updateRenderingState):
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setOversample):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::handlePausedQueue):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::setDatabasesPaused):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::addProcessor):
        (WebCore::WebSocketExtensionDispatcher::appendAcceptedExtension):
        (WebCore::WebSocketExtensionDispatcher::processHeaderValue):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):

2015-06-07  Darin Adler  <darin@apple.com>

        REGRESSION (r181720): Unnecessary layout triggered any time animated GIF advances to a new frame
        https://bugs.webkit.org/show_bug.cgi?id=145733

        Reviewed by Andreas Kling.

        Test: fast/images/animated-gif-no-layout.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange): Correctly pass ImageSizeChangeNone in cases
        where we don't need to report a change in intrinsic size that happened outside the
        repaintOrMarkForLayout function.
        (WebCore::RenderImage::repaintOrMarkForLayout): Move work that should only be done
        when size changed inside the if statement.

        * testing/Internals.cpp:
        (WebCore::Internals::layoutCount): Added.
        * testing/Internals.h: Added layoutCount.
        * testing/Internals.idl: Ditto.

2015-06-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix strncpy use in WebCore::Text::formatForDebugger
        https://bugs.webkit.org/show_bug.cgi?id=145608

        Reviewed by Darin Adler.

        r185137 replaced a call to strncpy with a call to strlcpy, which broke the build on Linux
        since strlcpy does not exist there. r185148 reverted this to use strncpy again, but got the
        size argument off by one, "introducing" a buffer overrun. But this code has always been
        wrong, since it used strncpy without ensuring that the buffer is null-terminated after the
        call to strncpy. Fix this as well.

        * dom/Text.cpp:
        (WebCore::Text::formatForDebugger):

2015-06-07  Antti Koivisto  <antti@apple.com>

        CrashTracer: [USER] com.apple.WebKit.WebContent.Development at com.apple.WebCore: WebCore::FrameLoader::subresourceCachePolicy const + 11
        https://bugs.webkit.org/show_bug.cgi?id=145736
        rdar://problem/21246971

        Reviewed by David Kilzer.

        No repro, no test.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

            Null check frame. It may be null during frame teardown.

2015-06-06  Anders Carlsson  <andersca@apple.com>

        Remove support from getting plug-in information from Carbon resources
        https://bugs.webkit.org/show_bug.cgi?id=145730

        Reviewed by Dan Bernstein.

        Remove a now unused function.

        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource): Deleted.

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

        Unreviewed, rolling out r185284.
        https://bugs.webkit.org/show_bug.cgi?id=145723

        it needs some discussion before landing (Requested by dino on
        #webkit).

        Reverted changeset:

        "[iOS] Don't force compositing layers for no-op 3D transforms
        on low-memory devices."
        https://bugs.webkit.org/show_bug.cgi?id=145719
        http://trac.webkit.org/changeset/185284

2015-06-06  Ryosuke Niwa  <rniwa@webkit.org>

        Typing is slow in Gmail on iPads
        https://bugs.webkit.org/show_bug.cgi?id=145686

        Reviewed by Enrica Casucci.

        The bug was caused by nextCandidate and nextVisuallyDistinctCandidate traversing through each character
        in a text node without a renderer. Skip any node that doesn't have a renderer in both of those functions
        and corresponding previous* functions.

        It's fine to skip unrendered nodes in PositionIterator because only other clients of PositionIterator
        are Position::upstream and Position::downstream and they don't care about un-rendered nodes either.

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::increment):
        (WebCore::PositionIterator::decrement):
        * editing/htmlediting.cpp:
        (WebCore::nextVisuallyDistinctCandidate):
        (WebCore::previousVisuallyDistinctCandidate):

2015-06-06  Mark Lam  <mark.lam@apple.com>

        Returned Exception* values need to be initialized to nullptr when no exceptions are thrown.
        https://bugs.webkit.org/show_bug.cgi?id=145720

        Reviewed by Dan Bernstein.

        No new tests because this issue is already covered by the existing inspector-protocol tests.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):

2015-06-05  Andreas Kling  <akling@apple.com>

        [iOS] Don't force compositing layers for no-op 3D transforms on low-memory devices.
        <https://webkit.org/b/145719>
        <rdar://problem/19973042>

        Reviewed by Geoffrey Garen.

        We put elements with 3D identity transforms onto compositing layers because
        we anticipate that they will somehow animate in the future.

        This can get extremely expensive, especially on low-memory devices.
        This patch makes WebKit stop handing out compositing layers for this kinda thing:

            -webkit-transform: translate3d(0,0,0)

        ..on devices with 512MB or less. This dramatically improves stability on some
        web pages.

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

2015-06-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: "Other" time in the framerate table is often negative
        https://bugs.webkit.org/show_bug.cgi?id=145712

        Reviewed by Timothy Hatcher.

        The Inspector frontend flattens the timeline event tree it receives from the backend, which can contain nested
        paint records. The nested records represent a single paint event, but were being interpreted as two separate
        events for purposes of calculating total layout time. This caused the calculated "other" time to be less than
        it should be (and in some cases negative).

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        Paint records are no longer nested, we simply drop the child paint event.

2015-06-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed, speculative Windows build fix after r185273.

        * platform/VNodeTracker.h:

2015-06-05  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] Limit the number of vnodes used by the WebContent processes
        https://bugs.webkit.org/show_bug.cgi?id=145672
        <rdar://problem/21126637>

        Reviewed by Antti Koivisto.

        Limit the number of vnodes used by the WebContent processes to reduce
        the chance of getting killed due to the system running out of vnodes.
        We sometimes see the WebContent process use up to 50% of the system's
        vnode limit on some tests on iOS, which seems excessive. Most vnodes
        are due to CachedResources which are mmap'd from the WebKit disk cache
        and kept alive due to caches such as the Memory Cache / PageCache.

        This patch adds tracking for the number of SharedBuffer objects that are
        backed by a CFDataRef as this should track most of the vnodes used by
        the process. The WebContent process registers a vnode pressure handler
        upon initialization (likely it already does for memory pressure
        handling). This handler gets called when the process uses over 15% of
        of system's vnode limit and the "critical" flag is set if it uses over
        20% of the system limit. The vnode pressure handler currently calls the
        memory pressure handler as freeing our caches (especially PageCache,
        MemoryCache) and doing a JS GC frees up vnodes.

        On iPhone 6 Plus, the system limit is at 3000, which would lead to the
        following limits being used:
        soft: 450 / hard: 600

        However, on older hardware, the system limit can be as low as 2000,
        which would lead to the following limits being used:
        soft: 300 / hard: 400

        vnode tracking is currently only enabled on iOS because system vnode
        limits are usually much higher on Mac (e.g. 473695 on Mac Pro, 9984
        on a 2011 MacBook Air) and we normally don't get killed.

        * WebCore.xcodeproj/project.pbxproj:

        Add new files to the XCode project.

        * platform/SharedBuffer.h:

        Add a VNodeTracker::Token member next to the CFDataRef member that we
        initialize if the SharedBuffer is constructed from a CFDataRef.

        * platform/VNodeTracker.cpp: Added.
        (WebCore::VNodeTracker::singleton):
        (WebCore::VNodeTracker::VNodeTracker):
        (WebCore::VNodeTracker::checkPressureState):
        (WebCore::VNodeTracker::pressureWarningTimerFired):
        (WebCore::VNodeTracker::nextPressureWarningInterval):
        (WebCore::VNodeTracker::platformInitialize):
        * platform/VNodeTracker.h: Added.
        (WebCore::VNodeTracker::setPressureHandler):

        Add a new VNodeTracker singleton to keep track the number of vnodes
        used by the process since the system does not issue warnings before
        reaching its vnode limit. Call sites should request Tokens for
        every vnode they use for tracking purposes. Each process can then
        set a vnode pressure handler function that will be called when the
        process is over the designated limits.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):

        Take a VNodeToken from the VNodeTracker when constructing the
        SharedBuffer from a CFDataRef as these usually use mmap.

        * platform/cocoa/VNodeTrackerCocoa.cpp: Added.
        (WebCore::VNodeTracker::platformInitialize):

        Get the system's vnode limit and uses 15% of that value as soft
        limit for the process and 20% of that value as hard limit.

2015-06-05  Dean Jackson  <dino@apple.com>

        Lingering checkbox animations when rapidly switching between views on WK1
        https://bugs.webkit.org/show_bug.cgi?id=145715
        <rdar://problem/17381121>

        Reviewed by Simon Fraser.

        On WK1, the NSView we use for NSButtonCells is parented in the ScrollView.
        Our checkbox and radiobutton animations cause AppKit to create a CALayer which
        is parented into that view. As we render the animations, we see the CALayer getting
        drawn also.

        The fix was to use an unparented layer on WK1 when drawing these controls, the same
        way WK2 does. This technique may apply to all controls, but restricting it
        to just the buttons at the moment is less risky.

        This only happens during the swap between a checked and non-checked state,
        and we have no way to test it :(

        * platform/mac/ThemeMac.h: New optional parameter to ensuredView.
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton): If we're on Yosemite or highter, use an unparented view.
        (WebCore::ThemeMac::ensuredView): Return either a parented or unparented view.

2015-06-05  Matt Rajca  <mrajca@apple.com>

        MediaSessions should keep track of their participating media elements.
        https://bugs.webkit.org/show_bug.cgi?id=145703

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::addMediaElement): Add the given media element to the media session.
        (WebCore::MediaSession::removeMediaElement): Remove the given media element from the media session.
        (WebCore::MediaSession::activeParticipatingElements): Dynamically build a vector of actively-playing media
          elements.
        * Modules/mediasession/MediaSession.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Ensure the element is removed from its media session.
        (WebCore::HTMLMediaElement::setSession): Update sessions' references to their media elements.

2015-06-05  Chris Dumez  <cdumez@apple.com>

        Regression(r176212): Broke app switching on iCloud.com
        https://bugs.webkit.org/show_bug.cgi?id=145708
        <rdar://problem/21235277>

        Reviewed by Simon Fraser.

        Roll out r176212 and follow-up fixes for now, to fix iCloud.com.
        We can reconsider later how to do this in a safer way.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate): Deleted.
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames): Deleted.
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::~ElementRareData): Deleted.
        * dom/Node.cpp:
        (WebCore::Node::materializeRareData):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged): Deleted.
        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::scriptMadeNonUserObservableChanges): Deleted.
        (WebCore::DOMTimerFireState::scriptMadeUserObservableChanges): Deleted.
        (WebCore::NestedTimersMap::instanceForContext): Deleted.
        (WebCore::DOMTimer::install): Deleted.
        (WebCore::DOMTimer::fired): Deleted.
        (WebCore::DOMTimer::alignedFireTime): Deleted.
        (WebCore::DOMTimer::activeDOMObjectName): Deleted.
        * page/DOMTimer.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::reset): Deleted.
        (WebCore::FrameView::viewportContentsChanged): Deleted.
        (WebCore::FrameView::autoSizeIfEnabled): Deleted.
        * page/FrameView.h:

2015-06-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Emoji overlap preceeding lines
        https://bugs.webkit.org/show_bug.cgi?id=145678
        <rdar://problem/10684914>

        Reviewed by Enrica Casucci.

        In WebKit, we first lay out lines, and then we lay out text inside those lines. Text is vertically centered in
        its containing line. If the author has not specified a particular line-height, the height of a line comes from
        the font metrics for the primary font of the line.

        In iOS, we were specifically hardcoding the line height metric of Apple Color Emoji to be 0. This means that,
        if Apple Color Emoji is the primary font for a line, and an explicit line-height was not specified, the lines
        are laid out with 0 height. Then, when we vertically center the text inside the line, the top half of the text
        overlaps the preceeding line.

        I'm not sure exactly why were were hardcoding this value to 0, as it is surely wrong. I'm going to ask Enrica
        to review this patch; hopefully she knows the answer.

        Test: fast/text/emoji.html

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):

2015-06-05  Alex Christensen  <achristensen@webkit.org>

        [Web Timing] Use new SPI to enable data collection.
        https://bugs.webkit.org/show_bug.cgi?id=145650
        rdar://problem/21203358

        Reviewed by Chris Dumez.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        Gather web timing data on iOS.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::setCollectsTimingData):
        Gather web timing data on Mac.

2015-06-05  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStream should store callbacks as a Deque
        https://bugs.webkit.org/show_bug.cgi?id=145641

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::resolveReadCallback): Use of Deque.takeFirst
        * Modules/streams/ReadableStream.h: Using Deque in lieu of Vector for storing callbacks.

2015-06-05  Mark Lam  <mark.lam@apple.com>

        finally blocks should not set the exception stack trace when re-throwing the exception.
        https://bugs.webkit.org/show_bug.cgi?id=145525

        Reviewed by Geoffrey Garen.

        Update to use the new JSC::Exception object.

        Test: inspector/debugger/break-on-exceptions.html

        * ForwardingHeaders/runtime/Exception.h: Added.
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsArray):
        (WebCore::reportException):
        (WebCore::reportCurrentException):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::JSMainThreadExecState::didLeaveScriptContext):
        (WebCore::functionCallHandlerFromAnyThread):
        (WebCore::evaluateHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::currentState):
        (WebCore::JSMainThreadExecState::call):
        (WebCore::JSMainThreadExecState::evaluate):
        (WebCore::JSMainThreadExecState::runTask):

        * bindings/js/JSMediaDevicesCustom.cpp:
        (WebCore::JSMediaDevices::getUserMedia):
        - Fixed a bug where the exception was not cleared before entering the VM to
          call JS code.

        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::getPropertyFromObject):
        (WebCore::callFunction):
        (WebCore::ReadableJSStream::Source::start):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerGlobalScopeWrapper):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::runEventLoopWhilePaused):
        (WebCore::WorkerScriptDebugServer::reportException):
        * bindings/js/WorkerScriptDebugServer.h:
        * bindings/objc/WebScriptObject.mm:
        (WebCore::createJSWrapper):
        (WebCore::addExceptionToConsole):
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        - Changed to call a version of JSMainThreadExecState::evaluate() that provides
          a stub returnedException because evaluateWebScript: doesn't need the exception.

        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::isContentScript):
        (WebCore::PageScriptDebugServer::reportException):
        * inspector/PageScriptDebugServer.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):

2015-06-05  Eric Carlson  <eric.carlson@apple.com>

        Layout tests fullscreen/video-controls-drag.html and media/video-fullscreeen-only-controls.html
        fail on WK1 and WK2
        https://bugs.webkit.org/show_bug.cgi?id=145675

        Reviewed by Dean Jackson.

        No new tests, changes covered by existing tests.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateControls): Use shouldHaveControls() to test if controls should
          be visible.
        (Controller.prototype.handleWrapperMouseMove): Don't return early when in fullscreen.
        (Controller.prototype.updateFullscreenButtons): Drive-by fix: always show the (exit) fullscreen
          button when in fullscreen.
          

2015-06-04  David Hyatt  <hyatt@apple.com>

        Underlines too close in vertical Chinese text.
        https://bugs.webkit.org/show_bug.cgi?id=145651
        <rdar://problem/11105920>

        Reviewed by Simon Fraser.

        Added fast/text/decorations-vertical-underline.html

        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        Make sure the to map text-underline-position: auto to under when a line has an ideographic baseline.

2015-06-05  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] The MiniBrowser crashes inside Weston.
        https://bugs.webkit.org/show_bug.cgi?id=145645

        Reviewed by Žan Doberšek.

        No new tests, no behavior changes.

        The issue was caused because we were not properly initializing the
        Wayland display, and we were returning a nullptr in PlatformDisplayWayland::create(),
        therefore a crash was happening on WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:1136
        <http://trac.webkit.org/browser/trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp?rev=185245#L1136>

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create): When connecting to the Wayland
        server socket we should use the default value (NULL). This allows the value
        to be overwritten at run-time by the environment variables WAYLAND_DISPLAY or
        WAYLAND_SOCKET that the Wayland compositor should define. Also add a couple
        of warnings to get information about what is going wrong when we fail to
        initialize the display instead of just crashing without giving more information.
        * platform/graphics/wayland/PlatformDisplayWayland.h:
        (WebCore::PlatformDisplayWayland::isInitialized): Not longer check for m_webkitgtk
        to signal that the display is ready because the UIProcess embedded Wayland
        subcompositer is still not implemented. Added a FIXME note about it.

2015-06-05  Dean Jackson  <dino@apple.com>

        [Mac] Popup focus is cut off
        https://bugs.webkit.org/show_bug.cgi?id=145688
        <rdar://problem/18313375>

        Reviewed by Brent Fulgham.

        Yosemite increased the width of focus rings, causing
        some ugly clipping on Yosemite. The solution was to
        not set a clip (which was code introduced for Leopard).

        Test: fast/forms/select-element-focus-ring.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList): Don't clip on Yosemite.

2015-06-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Support dots sequences in grid-template-areas
        https://bugs.webkit.org/show_bug.cgi?id=145693

        Reviewed by Sergio Villar Senin.

        The CSS WG agreed to consider a sequence of "." characters a single null
        cell token for grid-template-areas. That way authors can match the
        number of dots to the width of the column.

        For more information see:
        https://lists.w3.org/Archives/Public/www-style/2015May/0175.html

        Added new test cases to check the new behavior.

        * css/CSSParser.cpp:
        (WebCore::containsOnlyDots): New helper function to check that the grid
        area name is composed by only dots.
        (WebCore::CSSParser::parseGridTemplateAreasRow): Use the new helper
        function to look for unnamed areas.

2015-06-04  Joonghun Park  <jh718.park@samsung.com>

        Purge PassRefPtr create() factory functions in WebCore/css
        https://bugs.webkit.org/show_bug.cgi?id=144905

        Reviewed by Darin Adler.

        Return Ref instead of PassRefPtr in create() factory functions in css,
        because the factory can't return null.

        No new tests, no new behaviours.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate):
        (WebCore::basicShapeRadiusToCSSValue):
        (WebCore::valueForBasicShape):
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::createCSS):
        (WebCore::CSSCalcValue::create):
        * css/CSSCalculationValue.h:
        * css/CSSCharsetRule.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImageSlice):
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::createPositionListForLayer):
        (WebCore::positionOffsetValue):
        (WebCore::percentageOrZoomAdjustedValue):
        (WebCore::autoOrZoomAdjustedValue):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::matrixTransformValue):
        (WebCore::computedTransform):
        (WebCore::adjustLengthForZoom):
        (WebCore::ComputedStyleExtractor::valueForShadow):
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::specifiedValueForGridTrackBreadth):
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::valueForGridTrackList):
        (WebCore::scrollSnapDestination):
        (WebCore::scrollSnapPoints):
        (WebCore::scrollSnapCoordinates):
        (WebCore::createAnimationTriggerValue):
        (WebCore::getAnimationTriggerValue):
        (WebCore::ComputedStyleExtractor::getFontSizeCSSValuePreferringKeyword):
        (WebCore::fillSizeToCSSValue):
        (WebCore::lineHeightFromStyle):
        (WebCore::fontSizeFromStyle):
        (WebCore::zoomAdjustedPaddingOrMarginPixelValue):
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::create):
        * css/CSSFontFaceLoadEvent.h:
        * css/CSSFontFaceRule.h:
        * css/CSSGrammar.y.in:
        * css/CSSGridLineNamesValue.cpp:
        (WebCore::CSSGridLineNamesValue::cloneForCSSOM):
        * css/CSSGridLineNamesValue.h:
        (WebCore::CSSGridLineNamesValue::create):
        * css/CSSImportRule.h:
        * css/CSSKeyframeRule.h:
        (WebCore::StyleKeyframe::create):
        * css/CSSKeyframesRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridLineNames):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseClipShape):
        (WebCore::CSSParser::parseBasicShape):
        (WebCore::BorderImageSliceParseContext::commitBorderImageSlice):
        (WebCore::BorderImageQuadParseContext::commitBorderImageQuad):
        * css/CSSParser.h:
        (WebCore::CSSParser::ValueWithCalculation::calculation):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::init):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSPropertySourceData.h:
        (WebCore::CSSStyleSourceData::create):
        (WebCore::CSSRuleSourceData::create):
        (WebCore::CSSRuleSourceData::createUnknown):
        * css/CSSRuleList.h:
        * css/CSSSegmentedFontFace.h:
        (WebCore::CSSSegmentedFontFace::create):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::createRareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::RareData::create):
        * css/CSSStyleRule.h:
        * css/CSSSupportsRule.h:
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue):
        * css/FontLoader.cpp:
        (WebCore::LoadFontCallback::create):
        * css/LengthRepeat.h:
        (WebCore::LengthRepeat::create):
        (WebCore::LengthRepeat::cloneForCSSOM):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::create):
        (WebCore::MediaQuerySet::createAllowingDescriptionSyntax):
        (WebCore::MediaList::create):
        * css/MediaQueryList.cpp:
        (WebCore::MediaQueryList::create):
        * css/MediaQueryList.h:
        * css/MediaQueryMatcher.h:
        (WebCore::MediaQueryMatcher::create):
        * css/Pair.h:
        (WebCore::Pair::create):
        * css/Rect.h:
        (WebCore::Rect::create):
        (WebCore::Rect::cloneForCSSOM):
        (WebCore::Quad::create):
        (WebCore::Quad::cloneForCSSOM):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::paintOrder):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleMedia.h:
        (WebCore::StyleMedia::create):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::create):
        * css/ViewportStyleResolver.h:
        (WebCore::ViewportStyleResolver::create):
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSViewportRule.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustFloatForAbsoluteZoom):
        * rendering/style/StyleInheritedData.h:

2015-06-04  Benjamin Poulain  <bpoulain@apple.com>

        The last 2 merged DFAs are not minimized by DFACombiner

        * contentextensions/DFACombiner.cpp:
        (WebCore::ContentExtensions::DFACombiner::combineDFAs):
        I introduced a bug when I made minimization conditional: the last merge
        does not minimize if we do not reach the minimum size.

2015-06-04  Brent Fulgham  <bfulgham@apple.com>

        Latching algorithm in findEnclosingOverflowScroll is broken
        https://bugs.webkit.org/show_bug.cgi?id=145642
        <rdar://problem/21242308>

        Reviewed by Simon Fraser.

        Test: platform/mac-wk2/tiled-drawing/scrolling/iframe_in_iframe.html

        * page/mac/EventHandlerMac.mm:
        (WebCore::scrollableAreaForBox): Added helper function.
        (WebCore::findEnclosingScrollableContainer): Renamed from findEnclosingOverflowScroll.
        Only identify something as our scroll element if it can be scrolled in either
        axis of the gesture's motion.
        (WebCore::scrollableAreaForContainerNode): Use new helper function.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Use new function
        name, and pass horizontal and vertical deltas.
        (WebCore::findEnclosingOverflowScroll): Deleted.

2015-06-04  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        REGRESSION(r185091): Crash happens on indexdb tests
        https://bugs.webkit.org/show_bug.cgi?id=145549

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::create): Revert Ref usage of IDBDatabaseError::create().

2015-06-04  Simon Fraser  <simon.fraser@apple.com>

        Crash in EventDispatcher::dispatchEvent entering a location on Google Maps
        https://bugs.webkit.org/show_bug.cgi?id=145677
        rdar://problem/20698280

        Reviewed by Dean Jackson.

        If a transition is running on a pseudo-element, and the host element is removed
        from the DOM just as the transition ends, and there is a transition event listener,
        then we'd crash with a null dereference in event dispatch code.
        
        AnimationController tries to clean up running animations when renderers are destroyed,
        but omitted to remove the element from two vectors that store element references.
        Elements are only added to these vectors briefly on animation end, before firing
        events, but failure to remove the vector entries could result in attempting
        to fire an event on a pseudo-element with no host element.
        
        Also convert EventDispatcher code to be more robust to potentially null event
        targets, since it's not clear that eventTargetRespectingTargetRules() can always
        manage to return a non-null node.
        
        Hard to make a test because this is timing sensitive.

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules):
        (WebCore::EventDispatcher::dispatchScopedEvent):
        (WebCore::EventDispatcher::dispatchEvent):
        (WebCore::EventPath::EventPath):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear):

2015-06-04  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replace 0 with nullptr in WebCore/Page.
        https://bugs.webkit.org/show_bug.cgi?id=145631

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController):
        (WebCore::AutoscrollController::stopAutoscrollTimer):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::parseSource):
        * page/ContentSecurityPolicy.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::clearContextMenu):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::clearTreeScope):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore::DOMWindow::localStorage):
        (WebCore::DOMWindow::focus):
        * page/DOMWindow.h:
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::reconnectFrameFromPageCache):
        (WebCore::DOMWindowExtension::willDestroyGlobalObjectInCachedFrame):
        * page/DOMWindowProperty.cpp:
        (WebCore::DOMWindowProperty::DOMWindowProperty):
        (WebCore::DOMWindowProperty::~DOMWindowProperty):
        (WebCore::DOMWindowProperty::disconnectFrameForPageCache):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame):
        (WebCore::DOMWindowProperty::willDestroyGlobalObjectInFrame):
        * page/DragController.cpp:
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::resizeLayerDestroyed):
        (WebCore::EventHandler::freeDataTransfer):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::willDetachPage):
        (WebCore::Frame::createView):
        * page/Frame.h:
        (WebCore::Frame::detachFromPage):
        * page/FrameDestructionObserver.cpp:
        (WebCore::FrameDestructionObserver::FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
        (WebCore::FrameDestructionObserver::frameDestroyed):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::~FrameTree):
        (WebCore::FrameTree::removeChild):
        * page/FrameTree.h:
        (WebCore::FrameTree::FrameTree):
        (WebCore::FrameTree::detachFromParent):
        * page/History.cpp:
        (WebCore::History::History):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::findStringMatchingRanges):
        * page/PageGroup.cpp:
        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::didLosePointerLock):
        (WebCore::PointerLockController::clearElement):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessDatabase):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::ScrollingTreeNode):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::willDestroyScrollableArea):

2015-06-04  Benjamin Poulain  <bpoulain@apple.com>

        Combine tiny DFAs into slightly larger ones
        https://bugs.webkit.org/show_bug.cgi?id=145572

        Reviewed by Alex Christensen.

        This patch changes the ContentExtensions compiler to combine tiny DFA
        until they reach a minimum size.

        The main tool introduced here is DFAMerger. It combines 2 DFAs into
        a single DFA that represent the union of the two machines.
        That is done by a simple subset construction on the "name" of the nodes
        in each DFAs.

        Since we only merge 2 machines, and they are both deterministic, we know that
        we can only be in one state of each machine, or a state in one machine without
        equivalent in the other machine.
        We exploit that to identify the mapping between nodes. To identify a node in
        the new machine from nodes in the original machines, we just concatenate the node
        IDs into a single 64 bits number. If there is no node in one of the machine, we
        use a special tag.

        The current algorithm does not have any subgraph pruning, machines grow very very
        quickly. Because of that, we only merge very small DFAs at the moment.

        Test: http/tests/contentextensions/filters-with-quantifiers-combined.html

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::graphSize):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/DFA.h:
        * contentextensions/DFACombiner.cpp: Added.
        (WebCore::ContentExtensions::DFAMerger::DFAMerger):
        (WebCore::ContentExtensions::DFAMerger::merge):
        (WebCore::ContentExtensions::DFAMerger::signatureForIndices):
        (WebCore::ContentExtensions::DFAMerger::extractIndexA):
        (WebCore::ContentExtensions::DFAMerger::extractIndexB):
        (WebCore::ContentExtensions::DFAMerger::getOrCreateCombinedNode):
        (WebCore::ContentExtensions::DFAMerger::setHalfSignature):
        (WebCore::ContentExtensions::DFAMerger::populateTransitions):
        (WebCore::ContentExtensions::DFAMerger::populateFromFallbackTransitions):
        (WebCore::ContentExtensions::DFAMerger::createTransitions):
        (WebCore::ContentExtensions::DFAMerger::createFallbackTransitionIfNeeded):
        (WebCore::ContentExtensions::DFACombiner::combineDFAs):
        * contentextensions/DFACombiner.h: Copied from Source/WebCore/contentextensions/DFA.h.
        (WebCore::ContentExtensions::DFACombiner::addDFA):

2015-06-04  Matt Rajca  <mrajca@apple.com>

        Rename MediaSessionManager to PlatformMediaSessionManager for consistency with PlatformMediaSession.
        https://bugs.webkit.org/show_bug.cgi?id=145648

        Reviewed by Eric Carlson.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::effectivePreloadForElement):
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::PlatformMediaSession::~PlatformMediaSession):
        (WebCore::PlatformMediaSession::clientWillBeginPlayback):
        (WebCore::PlatformMediaSession::clientWillPausePlayback):
        (WebCore::PlatformMediaSession::clientDataBufferingTimerFired):
        (WebCore::PlatformMediaSession::updateClientDataBuffering):
        * platform/audio/PlatformMediaSessionManager.cpp: Renamed from Source/WebCore/platform/audio/MediaSessionManager.cpp.
        (WebCore::PlatformMediaSessionManager::sharedManager):
        (WebCore::PlatformMediaSessionManager::PlatformMediaSessionManager):
        (WebCore::PlatformMediaSessionManager::resetRestrictions):
        (WebCore::PlatformMediaSessionManager::has):
        (WebCore::PlatformMediaSessionManager::activeAudioSessionRequired):
        (WebCore::PlatformMediaSessionManager::count):
        (WebCore::PlatformMediaSessionManager::beginInterruption):
        (WebCore::PlatformMediaSessionManager::endInterruption):
        (WebCore::PlatformMediaSessionManager::addSession):
        (WebCore::PlatformMediaSessionManager::removeSession):
        (WebCore::PlatformMediaSessionManager::addRestriction):
        (WebCore::PlatformMediaSessionManager::removeRestriction):
        (WebCore::PlatformMediaSessionManager::restrictions):
        (WebCore::PlatformMediaSessionManager::sessionWillBeginPlayback):
        (WebCore::PlatformMediaSessionManager::sessionWillEndPlayback):
        (WebCore::PlatformMediaSessionManager::setCurrentSession):
        (WebCore::PlatformMediaSessionManager::currentSession):
        (WebCore::PlatformMediaSessionManager::sessionRestrictsInlineVideoPlayback):
        (WebCore::PlatformMediaSessionManager::sessionCanLoadMedia):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterBackground):
        (WebCore::PlatformMediaSessionManager::applicationWillEnterForeground):
        (WebCore::PlatformMediaSessionManager::updateSessionState):
        (WebCore::PlatformMediaSessionManager::didReceiveRemoteControlCommand):
        (WebCore::PlatformMediaSessionManager::systemWillSleep):
        (WebCore::PlatformMediaSessionManager::systemDidWake):
        (WebCore::PlatformMediaSessionManager::audioOutputDeviceChanged):
        * platform/audio/PlatformMediaSessionManager.h: Renamed from Source/WebCore/platform/audio/MediaSessionManager.h.
        (WebCore::PlatformMediaSessionManager::~PlatformMediaSessionManager):
        (WebCore::PlatformMediaSessionManager::configureWireLessTargetMonitoring):
        (WebCore::PlatformMediaSessionManager::hasWirelessTargetsAvailable):
        (WebCore::PlatformMediaSessionManager::sessions):
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (PlatformMediaSessionManager::updateSessionState):
        (MediaSessionManager::updateSessionState): Deleted.
        * testing/Internals.cpp:

2015-06-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Don't show default controls after playing to wireless target, again
        https://bugs.webkit.org/show_bug.cgi?id=145620
        <rdar://problem/21145806>

        Reviewed by Dean Jackson.

        Follow up to fix two tests broken by r185207.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateControls): Always show controls when the video element
          is the fullscreen element because custom controls aren't possible.

2015-06-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Add ASSERT to FontPlatformData::ctFont()
        https://bugs.webkit.org/show_bug.cgi?id=145659

        Reviewed by Dean Jackson.

        The new ASSERT needs to be guarded with CORETEXT_WEB_FONTS, which is defined in FontCustomPlatformData.h,
        and is not accessible to FontPlatformData. Therefore, I've moved the definition into TextFlags.h, which
        both files include.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont): Add the ASSERT.
        * platform/graphics/mac/FontCustomPlatformData.h: Move the CORETEXT_WEB_FONTS preprocessor
        macro from here ...
        * platform/text/TextFlags.h: ... to here.

2015-06-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r185208.
        https://bugs.webkit.org/show_bug.cgi?id=145655

        platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-
        latched-select.html (Requested by shallawa on #webkit).

        Reverted changeset:

        "Latching algorithm in findEnclosingOverflowScroll is broken"
        https://bugs.webkit.org/show_bug.cgi?id=145642
        http://trac.webkit.org/changeset/185208

2015-06-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Remove unnecessary code from FontPlatformData::ctFont()
        https://bugs.webkit.org/show_bug.cgi?id=145652

        Hoefler Text Italic no longer has initial and final swashes by default, so there
        is no reason to explicitly disable them.

        Reviewed by Andreas Kling.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFont):
        (WebCore::createFeatureSettingDictionary): Deleted.
        (WebCore::cascadeToLastResortAndDisableSwashesFontDescriptor): Deleted.

2015-06-04  Brent Fulgham  <bfulgham@apple.com>

        Latching algorithm in findEnclosingOverflowScroll is broken
        https://bugs.webkit.org/show_bug.cgi?id=145642
        <rdar://problem/21242308>

        Reviewed by Simon Fraser.

        Test: platform/mac-wk2/tiled-drawing/scrolling/iframe_in_iframe.html

        * page/mac/EventHandlerMac.mm:
        (WebCore::findEnclosingOverflowScrollForDominantDirection): Renamed from
        'findEnclosingOverflowScroll'. Only identify element as our overflow
        scroll element if it can be scrolled in either axis of the gesture's
        motion.
        (WebCore::scrolledToEdgeInDominantDirection): Renamed.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Use new function
        name, and pass horizontal and vertical deltas.
        (WebCore::findEnclosingOverflowScroll): Deleted.

2015-06-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Don't show default controls after playing to wireless target, again
        https://bugs.webkit.org/show_bug.cgi?id=145620
        <rdar://problem/21145806>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateControls): Show or hide the panel as appropriate.
        (Controller.prototype.handleWrapperMouseMove): Early return if !video.controls.
        (Controller.prototype.addControls): Call updateControls instead of this.setNeedsTimelineMetricsUpdate
          so all needed setup is done.
        (Controller.prototype.resetHideControlsTimer): Only start the hide timer if playing.

2015-06-04  Chris Dumez  <cdumez@apple.com>

        [WK2] Prune more resources from the MemoryCache before process suspension
        https://bugs.webkit.org/show_bug.cgi?id=145633

        Reviewed by Andreas Kling.

        Prune more resources from the MemoryCache before process suspension or
        on simulated memory warning by doing a synchronous JS garbage collection
        and sweep *before* pruning dead resources from the memory cache.
        Previously, we would do the garbage collection after pruning the
        MemoryCache which meant that a lot of resources became dead after we
        tried to prune them.

        At the end a basic browsing on apple.com, we are able to remove ~17%
        more resources from the MemoryCache on simulated memory warning with this
        change.

        Pruning as much as we can from the memory cache on critical memory
        pressure or before process suspension is not only useful to free up
        memory but also to make room in the vnode table as a lot of
        CachedResources are mmmap'd from the network disk cache.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

        - Pass 'synchronous' argument so that we know if we need to do a
          synchronous JS garbage collection.
        - Move here code from in the Cocoa handler that is doing a JS garbage
          collection as well as a sweep, and make this code cross-platform.
          This code used to be iOS specific but I see no reason we shouldn't
          do this on Mac.

        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/MemoryPressureHandler.h:

        Use enum class arguments for critical / synchronous. The 'synchronous'
        argument is new so that the call site can let us know if memory needs
        to be freed synchronously (e.g. in case of imminent process suspension).

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

        Remove iOS-specific code that was doing a JS garbage collection and
        sweep as this code is now in the generic memory pressure handler.

        (WebCore::MemoryPressureHandler::install):

        On simulated memory pressure, set 'synchronous' argument to Yes so that
        a synchronous GC is done by the generic memory pressure handler. This
        way, we no longer need to do a sync GC after calling the memory pressure
        handler. This avoids code duplication and makes sure the GC is done
        before pruning the memory cache.


2015-06-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Clean up m_isEmoji in FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=145644

        Reviewed by Andreas Kling.

        m_isEmoji used to be a public member variable only defined on iOS. This
        means that, whenever it was consulted, the sites were surrounded by
        PLATFORM(IOS) guards. A cleaner design is to use a getter and setter,
        which on non-iOS platforms, always return false / do nothing. Then, the
        use sites can just use these functions without having ugly guards.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hash): Simplify isEmoji use site.
        (WebCore::FontPlatformData::isEmoji): Getter. Returns false on Mac.
        (WebCore::FontPlatformData::setIsEmoji): Setter. Does nothing on Mac.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::pointAdjustedForEmoji): Simplify isEmoji use site.
        (WebCore::FontCascade::drawGlyphs): Ditto.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Ditto.
        (WebCore::canUseFastGlyphAdvanceGetter): Ditto.
        (WebCore::isEmoji): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::platformDataInit): Simplify isEmoji use
        site.
        (WebCore::FontPlatformData::platformDataAssign): Ditto.
        (WebCore::FontPlatformData::platformIsEqual): Ditto.
        (WebCore::FontPlatformData::ctFontSize): Ditto.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters): Ditto.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Ditto.

2015-06-03  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r181879): Scrolling order on pages with focused iframe is broken.
        https://bugs.webkit.org/show_bug.cgi?id=145637
        <rdar://problem/20635581>

        Reviewed by Zalan Bujtas.

        Test: platform/mac-wk2/tiled-drawing/scrolling/iframe_in_iframe.html

        This page revealed a bug in our RenderBox code caused by the mismatch between
        our scrolling units, which are all integrally snapped, with our client height
        and widths, which are not snapped at all. 
        
        In certain cases, the client height would have a small subpixel difference compared
        to the scroll height, which would cause WebKit to believe it was scrollable. When
        this happened, it would get stuck latched to this element and block scrolling events. 

        * page/Frame.cpp:
        (WebCore::Frame::scrollOverflowLayer): Use roundToInt for clientWidth and clientHeight,
        rather than integer truncation.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea): Need to round clientWidth
        and clientHeight to compare with scrollWidth/scrollHeight.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasScrollableOverflowX): Ditto.
        (WebCore::RenderBox::hasScrollableOverflowY): Ditto.
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition): Use roundToInt for clientWidth and
        clientHeight, rather than integer truncation.

2015-06-04  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Clean up m_font inside FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=145634

        Reviewed by Andreas Kling.

        FontPlatformDatas are used as keys in a HashMap. This means that they need
        to be able to represent a "deleted" value. Previously, this "deleted" value
        was represented as setting the pointer value of m_font to -1, and guarding
        all uses of m_font to make sure it wasn't -1 before dereferencing it.

        This patch simplifies FontPlatformData to represent a "deleted" value using
        a separate boolean member variable. This class is already big enough that
        the increased space is negligable (the class already contains two CoreText
        fonts in addition to a CoreGraphics font). Because of this simplification,
        m_font can now be a RetainPtr, instead of being manually retained and
        released.

        There is still a long way to go before FontPlatformData is acceptably
        clean and understandable. This patch improves one aspect of it, and more
        improvements will eventually follow.

        No new tests because there is no behavior change.

        * platform/graphics/FontCache.cpp: Remove unused variable.
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Clean up all the PLATFORM
        macros in favor of a single bool. Also, update to include new state.
        (WebCore::FontPlatformData::operator=): Update to include new state.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::font): Update to account for RetainPtr.
        (WebCore::FontPlatformData::nsFont): Ditto.
        (WebCore::FontPlatformData::setNSFont): Ditto.
        (WebCore::FontPlatformData::hash): Update to include new state.
        (WebCore::FontPlatformData::operator==): Ditto.
        (WebCore::FontPlatformData::isHashTableDeletedValue): Use new state.
        (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
        (WebCore::FontPlatformData::isValidCTFontRef): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::platformDataInit): No need for manual retain
        and release.
        (WebCore::FontPlatformData::platformDataAssign): Ditto.
        (WebCore::FontPlatformData::platformIsEqual): Update to account for
        RetanPtr.
        (WebCore::FontPlatformData::setFont): No need for manual retain and
        release.
        (WebCore::FontPlatformData::FontPlatformData): Deleted.
        (WebCore::FontPlatformData::~FontPlatformData): Deleted.
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::~FontPlatformData): m_scaledFont is always
        valid.
        (WebCore::FontPlatformData::platformDataAssign): Ditto.

2015-06-03  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] [Wayland] Build is broken on trunk
        https://bugs.webkit.org/show_bug.cgi?id=142879

        Reviewed by Carlos Garcia Campos.

        No new tests, no behavior changes.

        Patch on GLContext.h picked from bug 136831 by
        Iago Toral <itoral@igalia.com> and Zan Dobersek <zdobersek@igalia.com>

        * platform/graphics/GLContext.h: Include wayland-egl.h before eglplatform.h
        to use the Wayland platform when building for Wayland.
        * platform/graphics/PlatformDisplay.cpp: Fix the include of GDK
        headers for the different targets.
        * platform/graphics/wayland/WaylandSurface.cpp: Fix build after r183731.
        (WebCore::WaylandSurface::~WaylandSurface):

2015-06-04  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStreamController enqueue
        https://bugs.webkit.org/show_bug.cgi?id=145210

        Reviewed by Darin Adler.

        Added possibility to enqueue any JSValue within ReadableJSStream.
        They are stored in a Vector of strongified JSValue.

        Added support for streams that contain data but are asked to close.
        This is done through m_closeRequested boolean and splitting actual closing of the stream from changeStateToClosed().

        Chunk size and backpressure mechanism is not yet implemented.
        Neither is pulling once enqueued data is processed.

        Covered by rebased tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToClosed): Split method with newly added close().
        (WebCore::ReadableStream::close): Does the actual closing of stream once stream has no more values.
        (WebCore::ReadableStream::read): Close the stream when stream is emptied and close is requested.
        (WebCore::ReadableStream::resolveReadCallback): Added to enable ReadableJSStream to resolve read callbacks immediatly at enqueue time.
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::isErrored): Getter added for the custom binding code.
        (WebCore::ReadableStream::isCloseRequested): Ditto.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::enqueue): binding code for enqueue, taking care of raising exception if readable stream cannot enqueue.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::hasValue):
        (WebCore::ReadableJSStream::read):
        (WebCore::ReadableJSStream::enqueue):
        * bindings/js/ReadableJSStream.h:

2015-06-04  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableJSStream does not need a ReadableStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=145601

        Reviewed by Darin Adler.

        Covered by existing tests.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::ReadableStream): Remoed m_source.
        * Modules/streams/ReadableStream.h: Ditto
        * Modules/streams/ReadableStreamSource.h: Deleted.
        * WebCore.vcxproj/WebCore.vcxproj: Removing Modules/streams/ReadableStreamSource.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::globalObject):
        (WebCore::ReadableJSStream::doStart): Equivalent of ReadableJSStream::Source::start().
        (WebCore::ReadableJSStream::create): Updated according new constructor.
        (WebCore::ReadableJSStream::ReadableJSStream):
        (WebCore::startReadableStreamAsync): Deleted.
        (WebCore::ReadableJSStream::jsController): Deleted.
        (WebCore::ReadableJSStream::storeError): Deleted.
        * bindings/js/ReadableJSStream.h: Added m_source member to store the JS source as a JS object.

2015-06-04  Zan Dobersek  <zdobersek@igalia.com>

        Shrink the ArabicCharShapingMode enum in SVGGlyph.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145564

        Reviewed by Darin Adler.

        Shrink the ArabicCharShapingMode enum to just one byte.
        This drops the size of the static s_arabicCharShapingMode
        array of  ArabicCharShapingMode values from 888 bytes to 222.

        * platform/graphics/SVGGlyph.cpp:
        (WebCore::processArabicFormDetection):

2015-06-03  Zalan Bujtas  <zalan@apple.com>

        Use borderBoxRect instead of contentBoxRect for backdrop filter.
        https://bugs.webkit.org/show_bug.cgi?id=145606

        Reviewed by Simon Fraser.

        Backdrop filter should use border box rect. It also needs to take css clip into account.

        Tests: css3/filters/backdrop/backdrop-filter-with-cliprect.html
               css3/filters/backdrop/backdrop-filter-with-mask.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):

2015-06-03  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        MediaDevices.getUserMedia should put promises in resolve/reject state synchronously
        https://bugs.webkit.org/show_bug.cgi?id=145308

        Reviewed by Darin Adler.

        Removed the calls to callToMainThread in which were resolved and rejected promises.
        Cleaned up the code to remove unneeded callback copies.

        Covered by existing tests.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError):
        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError):
        * Modules/mediastream/UserMediaRequest.h:

2015-06-03  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r184968): missing media player buttons (control bar exists, but no buttons)
        https://bugs.webkit.org/show_bug.cgi?id=145630

        Reviewed by Zalan Bujtas.

        r184968 changed the initial value of m_intersectsCoverageRect to false. However,
        this triggered a bug with mask layers, whose value of m_intersectsCoverageRect was never
        updated.

        Fix by copying the value of m_intersectsCoverageRect from the main layer to its
        mask layer, just as we do for m_visibleRect and m_coverageRect.

        Test: compositing/visible-rect/mask-layer-coverage.html

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

2015-06-03  Simon Fraser  <simon.fraser@apple.com>

        Layer tree dumps should include mask layers
        https://bugs.webkit.org/show_bug.cgi?id=145629

        Reviewed by Zalan Bujtas.

        Dumping the layer tree omitted to dump the mask layer, so fix 
        GraphicsLayer::dumpProperties() to dump this layer.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2015-06-03  Greg Hughes  <ghughes@apple.com>

        AX: Expose field sets to accessibility clients
        https://bugs.webkit.org/show_bug.cgi?id=145585
   
        Expose fieldsets to the accessibility API via a subrole of AXFieldset.

        Reviewed by Chris Fleizach.

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

2015-06-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove dead code FontPlatformData::roundsGlyphAdvances()
        https://bugs.webkit.org/show_bug.cgi?id=145628

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.order:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::roundsGlyphAdvances): Deleted.

2015-06-03  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Merge CoordinatedTile into Tile
        https://bugs.webkit.org/show_bug.cgi?id=145602

        Reviewed by Darin Adler.

        CoordinatedTile only implements Tile since Qt and WebKit1/Efl were dropped.
        So, there is no reason that CoordinatedTile inherits Tile interface.

        No new tests, no behavior changes.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp: Renamed to Tile.cpp
        * platform/graphics/texmap/coordinated/CoordinatedTile.h: Merged into Tile.h
        (WebCore::CoordinatedTile::coordinate): Deleted.
        (WebCore::CoordinatedTile::rect): Deleted.
        * platform/graphics/texmap/coordinated/Tile.cpp: Renamed from CoordinatedTile.cpp.
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2015-06-03  Matt Rajca  <mrajca@apple.com>

        Add basic Media Session support to HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=145581

        Reviewed by Eric Carlson.

        HTMLMediaElements now have:

        - a 'kind' attribute representing the intrinsic media category
        - a 'session' attribute representing the current media session, if any

        * CMakeLists.txt: Include the new HTMLMediaElementMediaSession sources.
        * DerivedSources.make: Include the new IDL file.
        * Modules/mediasession/HTMLMediaElementMediaSession.cpp: Added.
        (WebCore::HTMLMediaElementMediaSession::session):
        * Modules/mediasession/HTMLMediaElementMediaSession.h: Added basic translation of the IDL file.
        (WebCore::HTMLMediaElementMediaSession::kind):
        (WebCore::HTMLMediaElementMediaSession::setKind):
        (WebCore::HTMLMediaElementMediaSession::setSession):
        * Modules/mediasession/HTMLMediaElementMediaSession.idl: Added from the Media Session spec.
        * PlatformMac.cmake: Include DOMHTMLMediaElementMediaSession.cpp.
        * WebCore.xcodeproj/project.pbxproj: Include the new HTMLMediaElementMediaSession sources.
        * html/HTMLMediaElement.h: Added accessors for 'kind' and 'session'.
        (WebCore::HTMLMediaElement::kind):
        (WebCore::HTMLMediaElement::setKind):
        (WebCore::HTMLMediaElement::session):
        (WebCore::HTMLMediaElement::setSession):

2015-06-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Cleanup after r185175.
        https://bugs.webkit.org/show_bug.cgi?id=145569
        <rdar://problem/20671711>

        Unreviewed.

        No new tests because there is no behavior change.

        * platform/graphics/WidthIterator.h:

2015-06-02  Myles C. Maxfield  <mmaxfield@apple.com>

        SoftBank Emoji are not transformed by shaping when in a run of their own
        https://bugs.webkit.org/show_bug.cgi?id=145569
        <rdar://problem/20671711>

        Reviewed by Dean Jackson.

        Normally, we don't perform shaping on single glyphs. However, these particular codepoints
        need to have shaping run on them, even if they are alone.

        Test: fast/text/softbank-emoji.html Note that this test may fail in different locales on
        different platforms. This patch disables the test on iOS.

        * Source/WebCore/platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms): Move the length-of-1 check into shouldApplyFontTransforms()
        (WebCore::shouldApplyFontTransforms): Return true if we have one of these emoji characters in
        a run of its own
        (WebCore::advanceInternal): Keep track of the previous character, and use it to call
        shouldApplyFontTransforms. 
        * Source/WebCore/platform/graphics/WidthIterator.h: shouldApplyFontTransforms() needs
        some more information to perform its duties.

2015-06-03  Daniel Bates  <dabates@apple.com>

        Caps lock indicator should not be shown in read-only or disabled field
        https://bugs.webkit.org/show_bug.cgi?id=145612
        <rdar://problem/21227454>

        Reviewed by Darin Adler.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::disabledAttributeChanged): Update caps lock indicator state.
        (WebCore::TextFieldInputType::readonlyAttributeChanged): Ditto.
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator): Do not draw the caps lock indicator
        when the field is read-only or disabled.

2015-06-03  Dean Jackson  <dino@apple.com>

        Crash in GraphicsContext3D::getInternalFramebufferSize
        https://bugs.webkit.org/show_bug.cgi?id=145479
        <rdar://problem/16461048>

        Reviewed by Eric Carlson.

        If we are in an unitialized or lost state, don't try to access the context.

        In order to test this, I added an Internal setting that always
        forces WebGL into a pending state.

        Test: fast/canvas/webgl/useWhilePending.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create): Check internal settings for
        a forced pending state.
        (WebCore::WebGLRenderingContextBase::drawingBufferWidth): Guard against a pending state.
        (WebCore::WebGLRenderingContextBase::drawingBufferHeight): Ditto.
        * page/Settings.cpp: New Internal setting for forcing a pending policy.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setForcePendingWebGLPolicy):
        * page/Settings.h:
        (WebCore::Settings::isForcePendingWebGLPolicy):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setForcePendingWebGLPolicy):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2015-06-03  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/page.
        https://bugs.webkit.org/show_bug.cgi?id=145455

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * page/Chrome.cpp:
        (WebCore::Chrome::notifyPopupOpeningObservers):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::matches):
        (WebCore::CSPDirectiveList::gatherReportURIs):
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::isAllowedByAll):
        (WebCore::isAllowedByAllWithState):
        (WebCore::isAllowedByAllWithContext):
        (WebCore::isAllowedByAllWithURL):
        (WebCore::ContentSecurityPolicy::evalDisabledErrorMessage):
        (WebCore::ContentSecurityPolicy::allowPluginType):
        (WebCore::ContentSecurityPolicy::reflectedXSSDisposition):
        (WebCore::ContentSecurityPolicy::gatherReportURIs):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::willDestroyCachedFrame):
        (WebCore::DOMWindow::willDestroyDocumentInFrame):
        (WebCore::DOMWindow::willDetachDocumentFromFrame):
        (WebCore::DOMWindow::disconnectDOMWindowProperties):
        (WebCore::DOMWindow::reconnectDOMWindowProperties):
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::handleTouchEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::setIsVisibleAndActiveInternal):
        * page/Frame.cpp:
        (WebCore::Frame::orientationChanged):
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::serviceScriptedAnimations):
        (WebCore::FrameView::trackedRepaintRectsAsText):
        (WebCore::FrameView::updateWidgetPositions):
        (WebCore::FrameView::notifyWidgets):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        (WebCore::Page::stringToViewMode):
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment):
        (WebCore::Page::refreshPlugins):
        (WebCore::Page::lockAllOverlayScrollbarsToHidden):
        (WebCore::Page::pluginViews):
        (WebCore::Page::storageBlockingStateChanged):
        (WebCore::Page::setIsVisibleInternal):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):
        * page/PerformanceUserTiming.cpp:
        (WebCore::convertToEntrySequence):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::isAccessWhiteListed):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::parseDialogFeatures):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimations):
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::numberOfActiveAnimations):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::ShorthandPropertyWrapper::equals):
        (WebCore::ShorthandPropertyWrapper::blend):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::setStateScrollingNodeSnapOffsetsAsFloat):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteNonFastScrollableRegionForFrame):
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):

2015-06-03  Daniel Bates  <dabates@apple.com>

        AutoFill button should not be shown in read-only or disabled field
        https://bugs.webkit.org/show_bug.cgi?id=145579
        <rdar://problem/21212494>

        Reviewed by Darin Adler.

        Fixes an issue where the AutoFill button is shown in a read-only or disabled
        field. We should not show the AutoFill button in such cases.

        Tests: fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-disabled.html
               fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html
               fast/forms/auto-fill-button/input-auto-fill-button.html
               fast/forms/auto-fill-button/input-disabled-auto-fill-button.html
               fast/forms/auto-fill-button/input-readonly-auto-fill-button.html
               fast/forms/auto-fill-button/input-readonly-non-empty-auto-fill-button.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::disabledAttributeChanged): Update AutoFill button state.
        (WebCore::TextFieldInputType::readonlyAttributeChanged): Ditto.
        (WebCore::TextFieldInputType::shouldDrawAutoFillButton): Do not draw AutoFill button
        when the field is disabled or read-only.

2015-06-03  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION: (r181879): Scrolling in select/option region in iFrame scrolls both select and iframe
        https://bugs.webkit.org/show_bug.cgi?id=145574
        <rdar://problem/20966828>

        Reviewed by Simon Fraser.

        Tested by platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-iframe-latched-select.html

        When the scroll gesture is started when the latched scrollable container is not at the limit of its
        scroll region, we are NOT supposed to propagate the scroll event to the enclosing region. However,
        we were doing two things wrong:
        (1) When we recognized we were latching, we were using the right wheel event target, but not using
            the latched scrollable container.
        (2) Likewise, we were not using latched ScrollableArea when handling wheel events.

        Instead, we were using the current scrollable container and ScrollableArea under the mouse pointer,
        which could be different from the point we started latching as the content scrolled.
        
        The fix was to properly track the scrollable container and scrollable area during latching.

        I attempted to store the latched ScrollableArea in the latchingState object, like we already do for the
        scrollable container, but found that this did not work properly. I think the life cycle of the
        ScrollableArea may not match the scrollable container, and since they are not reference counted I
        simply retrieve the ScrollableArea when needed.

        * page/mac/EventHandlerMac.mm:
        (WebCore::scrollableAreaForContainerNode): Helper function to return the correct ScrollableArea
        for the two types of RenderBox elements.
        (WebCore::latchedToFrameOrBody): Helper predicate to identify Frame and Body elements.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Use the correct ScrollableArea for the given
        ContainerNode. When latching, make sure to use the ScrollableArea that is related to the latched scrollable
        container, not the area currently underneath the mouse pointer.

2015-06-03  Brady Eidson  <beidson@apple.com>

        REGRESSION (r183498): Certain types of frame loads in iframes with <base target="_blank"> can open urls in new window/tabs
        https://bugs.webkit.org/show_bug.cgi?id=145580

        Reviewed by Mark Lam.

        Tests: fast/loader/fragment-navigation-base-blank.html
               fast/loader/iframe-meta-refresh-base-blank.html
               fast/loader/iframe-set-location-base-blank.html
               fast/loader/refresh-iframe-base-blank.html

        Before 183498, callers of FrameLoader::changeLocation() got automatically assigned a frame name of "_self".
        After 183498, many remained without a frame name.
        
        Later on, FrameLoader applies the <base> target as their frame name if they don't already have one. 
        
        When the <base> target is "_blank", that causes a new window/tab.
        
        Restoring "_self" to these call sites fixes this.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2015-06-03  Alexey Proskuryakov  <ap@apple.com>

        More iOS build fixing.

        * platform/spi/mac/AVFoundationSPI.h:

2015-06-03  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Composited layer with subpixel gap does not get painted properly when its position changes.
        https://bugs.webkit.org/show_bug.cgi?id=145587

        Reviewed by Simon Fraser.

        The composited layer always snaps to an enclosing device pixel (floors) while the renderer rounds.
        At certain positions (for example 0.5px on a 1x display), a gap is formed between the layer(0px) and its renderer(1px).
        In such cases, when the the renderer moves to a position (1.1px) where the gap is closed, we need to issue repaint on the layer
        in order to get the renderering right.

        Test: compositing/child-layer-with-subpixel-gap-needs-repaint-when-parent-moves.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::devicePixelFractionGapFromRendererChanged):
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:

2015-06-03  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStreamReader::closed() should be called once by binding code
        https://bugs.webkit.org/show_bug.cgi?id=145551

        Reviewed by Darin Adler.

        Covered by existing tests.

        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed): Calling ReadableStreamReader::closed only at creation of the promise.

2015-06-02  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        [EFL][GTK] Fix build error since r185137
        https://bugs.webkit.org/show_bug.cgi?id=145596

        Unreviewed, fix build break on EFL and GTK port.

        * dom/Text.cpp:
        (WebCore::Text::formatForDebugger): Use strncpy() instead of strlcpy().

2015-06-02  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Switch from parenthesis to brackets for grid line names
        https://bugs.webkit.org/show_bug.cgi?id=144996

        Reviewed by Darin Adler.

        Grid line names are now enclosed by brackets instead of parentheses
        as mentioned in the latest version of the spec. Appartently the CSS
        code is now more readable and avoids issues with tools like SASS.

        * css/CSSGrammar.y.in:
        * css/CSSGridLineNamesValue.cpp:
        (WebCore::CSSGridLineNamesValue::customCSSText):

2015-06-02  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix

        * platform/spi/mac/AVFoundationSPI.h:

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

        Unreviewed, rolling out r185128 and r185132.
        https://bugs.webkit.org/show_bug.cgi?id=145597

        The new test hits a bad assertion (Requested by ap on
        #webkit).

        Reverted changesets:

        "Crash in GraphicsContext3D::getInternalFramebufferSize"
        https://bugs.webkit.org/show_bug.cgi?id=145479
        http://trac.webkit.org/changeset/185128

        "Skip webgl/useWhilePending.html on WebKit 1."
        http://trac.webkit.org/changeset/185132

2015-06-02  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Refactor TiledBackingStoreClient
        https://bugs.webkit.org/show_bug.cgi?id=145577

        Reviewed by Gyuyoung Kim.

        This patch removes and simplifies unnecessary virtual methods of TiledBackingStoreClient.

        No new tests, no behavior changes.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didUpdateTileBuffers): Renamed from tiledBackingStorePaintEnd.
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintBegin): Deleted.
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintEnd): Deleted.
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreBackgroundColor):
        Deleted because tiledBackingStoreBackgroundColor() is not used anywhere.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp:
        (WebCore::CoordinatedTile::updateBackBuffer):
        Simplified not to call unnecessary methods. In addition, used modern for loop.
        (WebCore::CoordinatedTile::swapBackBufferToFront): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:

2015-06-02  Doug Russell  <d_russell@apple.com>

        AX: debugging attributes for text markers
        https://bugs.webkit.org/show_bug.cgi?id=145283

        Reviewed by Chris Fleizach.

        AXTextMarkerDebugDescription: returns the result of
        VisiblePosition::formatForDebugger() for the visible position that a text marker
        represents.
        AXTextMarkerNodeDebugDescription: calls Node::showNode() and
        Node::showNodePathForThis() for the visible position that a text marker
        represents.
        AXTextMarkerNodeTreeDebugDescription: calls Node::showTreeForThis() for the
        visible position that a text marker represents.
        AXTextMarkerRangeDebugDescription: returns the result of
        formatForDebugger(VisiblePositionRange) for the visible position range that a text
        marker range represents.

        This is debug only tooling. Tests would be flakey and not very helpful.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper debugDescriptionForTextMarker:]):
        (-[WebAccessibilityObjectWrapper debugDescriptionForTextMarkerRange:]):
        (-[WebAccessibilityObjectWrapper showNodeForTextMarker:]):
        (-[WebAccessibilityObjectWrapper showNodeTreeForTextMarker:]):
        (formatForDebugger):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * dom/Text.cpp:
        (WebCore::Text::formatForDebugger):

2015-06-02  Matt Rajca  <mrajca@apple.com>

        MediaSessions should keep track of their current state.
        https://bugs.webkit.org/show_bug.cgi?id=145575

        Reviewed by Alex Christensen.

        * Modules/mediasession/MediaSession.h: Per the Media Session spec, the state can be 'Idle', 'Active', or
          'Interrupted'. Sessions are created in an 'Idle' state.

2015-06-02  Jon Lee  <jonlee@apple.com>

        Build fix when building with internal SDKs
        https://bugs.webkit.org/show_bug.cgi?id=145576
        rdar://problem/21089476

        Reviewed by Alexey Proskuryakov.

        * platform/spi/mac/AVFoundationSPI.h: Include the right header.

2015-06-02  Dean Jackson  <dino@apple.com>

        No need to guard the sizes attribute against PICTURE_SIZES in preload scanner.
        https://bugs.webkit.org/show_bug.cgi?id=145573
        <rdar://problem/21210038>

        Reviewed by Myles Maxfield.

        The PICTURE_SIZES feature flag doesn't need to be used to
        guard preloading of the sizes attribute.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): Deleted.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Deleted.

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

        Use UUIDs for WebSQL database filenames instead of a sequential number
        https://bugs.webkit.org/show_bug.cgi?id=145571

        Reviewed by Dan Bernstein.

        This is a first step towards getting rid of the iOS specific code path where we truncate
        database files instead of deleting them (in order to avoid file corruption).

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::generateDatabaseFileName):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::getFileNameForNewDatabase): Deleted.
        * platform/sql/SQLiteFileSystem.h:

2015-06-02  Dean Jackson  <dino@apple.com>

        Crash in GraphicsContext3D::getInternalFramebufferSize
        https://bugs.webkit.org/show_bug.cgi?id=145479
        <rdar://problem/16461048>

        Reviewed by Eric Carlson.

        If we are in an unitialized or lost state, don't try to access the context.

        In order to test this, I added an Internal setting that always
        forces WebGL into a pending state.

        Test: fast/canvas/webgl/useWhilePending.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create): Check internal settings for
        a forced pending state.
        (WebCore::WebGLRenderingContextBase::drawingBufferWidth): Guard against a pending state.
        (WebCore::WebGLRenderingContextBase::drawingBufferHeight): Ditto.
        * page/Settings.cpp: New Internal setting for forcing a pending policy.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setForcePendingWebGLPolicy):
        * page/Settings.h:
        (WebCore::Settings::isForcePendingWebGLPolicy):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setForcePendingWebGLPolicy):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2015-06-02  Matt Rajca  <mrajca@apple.com>

        Added a stub implementation of MediaSession, part of the Media Session spec.
        https://bugs.webkit.org/show_bug.cgi?id=145530

        Reviewed by Eric Carlson.

        * CMakeLists.txt: Added new MediaSession sources.
        * DerivedSources.make:
        * Modules/mediasession/MediaSession.cpp: Added stub implementation.
        (WebCore::MediaSession::MediaSession): Per the Media Session spec, a Media Remote Controls object should only be
          set for 'content' sessions; it is null otherwise.
        (WebCore::MediaSession::~MediaSession):
        (WebCore::MediaSession::controls):
        (WebCore::MediaSession::releaseSession):
        * Modules/mediasession/MediaSession.h: Added basic translation of IDL file.
        * Modules/mediasession/MediaSession.idl: Added from the Media Session spec.
        * WebCore.xcodeproj/project.pbxproj: Added new MediaSession sources.

2015-06-02  Zalan Bujtas  <zalan@apple.com>

        Backdrop filter is pulling in content from behind the window.
        https://bugs.webkit.org/show_bug.cgi?id=145561
        rdar://problem/20909309

        Reviewed by Simon Fraser.

        This patch ensures that the backdrop filter layer is positioned and sized properly.

        The backdrop filter layer should take its size and position from its renderer and not
        directly from the composited layer.
        In certain cases the composited layer's size is expanded to cover items like box shadow or an absolute positioned descendant.
        In such cases, we ended up applying the backdrop filter to those areas as well.

        Tests: css3/filters/backdrop/backdrop-filter-does-not-size-properly-absolute.html
               css3/filters/backdrop/backdrop-filter-does-not-size-properly-border-and-padding.html

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setBackdropFiltersRect):
        (WebCore::GraphicsLayer::backdropFiltersRect):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setBackdropFiltersRect):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        (WebCore::GraphicsLayerCA::updateBackdropFiltersRect):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::updateGeometry): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:

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

        [Mac] occasional crash in Document::playbackTargetAvailabilityDidChange
        https://bugs.webkit.org/show_bug.cgi?id=145559

        Reviewed by Darin Adler.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Pass document to m_mediaSession->registerWithDocument.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Pass document to m_mediaSession->unRegisterWithDocument.
        (WebCore::HTMLMediaElement::documentWillSuspendForPageCache): Ditto.
        (WebCore::HTMLMediaElement::documentDidResumeFromPageCache): Ditto.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::registerWithDocument): Take a document.
        (WebCore::MediaElementSession::unregisterWithDocument): Ditto.
        * html/MediaElementSession.h:

2015-06-02  Chris Dumez  <cdumez@apple.com>

        Calling FrameView::viewportContentsChanged() after style recalcs is too expensive
        https://bugs.webkit.org/show_bug.cgi?id=145554
        <rdar://problem/21189478>

        Reviewed by Darin Adler and Simon Fraser.

        Only call FrameView::viewportContentsChanged() after a style recalc if
        composited layers have been updated (and there is no pending layout).

        We already viewportContentsChanged() after layout so we only need to
        call viewportContentsChanged() after a style recalc if it did not cause
        a layout but may have caused an element to become visible. In
        particular, this can happen in the case of composited animations (e.g.
        using -webkit-transform to move an element inside the viewport).
        Therefore, we now only call viewportContentsChanged() after a style
        recalc if it caused composited layers to be updated. This avoids a lot
        of unnecessary calls to viewportContentsChanged(), which is expensive.

        No new tests, already covered by:
        fast/images/animated-gif-webkit-transform.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        * page/FrameView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:

2015-06-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove use of CTFontSetRenderingParameters()
        https://bugs.webkit.org/show_bug.cgi?id=145560

        Reviewed by Simon Fraser.

        Instead, always use CTFontSetRenderingStyle().

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::RenderingStyleSaver::RenderingStyleSaver): Deleted.
        (WebCore::RenderingStyleSaver::~RenderingStyleSaver): Deleted.

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

        Move WKFontAntialiasingStateSaver to its own file
        https://bugs.webkit.org/show_bug.cgi?id=145557
        rdar://problem/21134776

        Reviewed by Dan Bernstein.

        Also rename it to FontAntialiasingStateSaver. Also, change it to use the CoreGraphicsSPI.h header for its
        CGFontAntialiasingStyle definition instead of using an explicit typedef.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/graphics/ios/FontAntialiasingStateSaver.h: Copied from Source/WebCore/platform/ios/wak/WKGraphics.h.
        (WebCore::FontAntialiasingStateSaver::FontAntialiasingStateSaver):
        (WebCore::FontAntialiasingStateSaver::setup):
        (WebCore::FontAntialiasingStateSaver::restore):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::drawWindowContent):
        * platform/ios/wak/WKGraphics.h:
        (WKFontAntialiasingStateSaver::WKFontAntialiasingStateSaver): Deleted.
        * platform/ios/wak/WKGraphics.mm:
        (WKFontAntialiasingStateSaver::setup): Deleted.
        (WKFontAntialiasingStateSaver::restore): Deleted.

2015-06-02  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStreamReader read method in closed and errored state
        https://bugs.webkit.org/show_bug.cgi?id=144790

        Reviewed by Darin Adler.

        Reader delegates read() promise handling to its stream except if reader is no longer locking the stream and stream is readable.
        Storing of reader read() promise callbacks as a Vector in ReadableStream.
        Added resolution/rejection of read() promises in case of errored/closed streams.

        Test: streams/readable-stream-reader-read.html

        * ForwardingHeaders/runtime/IteratorOperations.h: Added.
        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::cleanCallbacks): Clean the read requests.
        (WebCore::ReadableStream::changeStateToClosed): Run success callbacks with undefined for read requests.
        (WebCore::ReadableStream::changeStateToErrored): Run failure callbacks with the errors for read requests.
        (WebCore::ReadableStream::closed): Parameter name changed.
        (WebCore::ReadableStream::read): Added. Succeeds with empty when closed, fails with error when errored, reads a
        value if there is one and pushes the callbacks to the queue otherwise.
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::ReadCallbacks::ReadCallbacks): Struct containing success and failure callbacks.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::closed): Parameter name changed.
        (WebCore::ReadableStreamReader::read): Invoke success with empty if we streams if we don't have the right reader
        and call the stream otherwise to read.
        * Modules/streams/ReadableStreamReader.h:
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::read): Create the callback lambdas and invoke read. Failure rejects the
        promise and success creates the result from the read value.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::hasValue):
        (WebCore::ReadableJSStream::read): Not implemented yet.
        * bindings/js/ReadableJSStream.h:

2015-06-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] FontPlatformData's equality check should always use reference URLs
        https://bugs.webkit.org/show_bug.cgi?id=144168

        Reviewed by Tim Horton.

        <rdar://problem/18985642> is not fixed, so we need to continue using the older
        objectForEqualityCheck().

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::objectForEqualityCheck):

2015-06-02  Andy Estes  <aestes@apple.com>

        [Mac] REGRESSION (r175941): Max.app crashes when adding a sound file to a patch due to removing cursor resources from WebCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=145555

        Reviewed by Darin Adler.

        Re-added the cursor resources used by Max.app and ran sort-Xcode-project-file.

        * Resources/copyCursor.png: Added.
        * Resources/moveCursor.png: Added.
        * Resources/northEastSouthWestResizeCursor.png: Added.
        * Resources/northSouthResizeCursor.png: Added.
        * Resources/northWestSouthEastResizeCursor.png: Added.
        * WebCore.xcodeproj/project.pbxproj:

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

        WebKit policy delegate should suggest if a navigation should be allowed to open URLs externally.
        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145280

        Reviewed by Alex Christensen.

        Tests: loader/navigation-policy/should-open-external-urls/main-frame-click.html
               loader/navigation-policy/should-open-external-urls/main-frame-navigated-programatically-by-subframe.html
               loader/navigation-policy/should-open-external-urls/main-frame-with-flag-progamatic.html
               loader/navigation-policy/should-open-external-urls/main-frame-without-flag-programatic.html
               loader/navigation-policy/should-open-external-urls/subframe-click-target-self.html
               loader/navigation-policy/should-open-external-urls/subframe-click-target-top.html
               loader/navigation-policy/should-open-external-urls/user-gesture-target-blank-with-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/user-gesture-target-blank-with-flag.html
               loader/navigation-policy/should-open-external-urls/user-gesture-target-blank-without-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/user-gesture-target-blank-without-flag.html
               loader/navigation-policy/should-open-external-urls/user-gesture-window-open-with-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/user-gesture-window-open-with-flag.html
               loader/navigation-policy/should-open-external-urls/user-gesture-window-open-without-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/user-gesture-window-open-without-flag.html
               loader/navigation-policy/should-open-external-urls/window-open-with-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/window-open-with-flag.html
               loader/navigation-policy/should-open-external-urls/window-open-without-flag-from-subframe.html
               loader/navigation-policy/should-open-external-urls/window-open-without-flag.html

        The "should open external URLs" flag is only for main frames.
        It doesn't enforce any sort of policy internal to WebKit, but rather is for notifications to the policy delegate.
        
        It is set from one of two places:
        1 - A main frame is navigated by any frame as the result of a user gesture.
        2 - WebKit2 API explicitly states the flag is true.
        
        The flag value propagates when:
        1 - When a main frame document is navigated to a new main frame document.
        2 - When a new window is opened from a page whose main frame had the flag set.
        3 - When a new window is opened as the result of a user gesture.
        
        The flag resets to false when:
        1 - A subframe navigates a main frame without a user gesture.
        
        This patch is large, but does little more than the following:
        1 - Adds a ShouldOpenExternalURLs flag to both FrameLoadRequest and NavigationAction.
        2 - Makes sure anybody who creates either of those objects sets a sensible for that flag.
        3 - When FrameLoader creates a new DocumentLoader, it sets its flag based on whether or not the load is in a main frame,
            whether or not the load is from a user gesture, and based on the initiator's value of the flag. 
            
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::shouldOpenExternalURLsPolicyToPropagate):
        * dom/Document.h:
        
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::handleClick):
        
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTriggeringAction):
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicyToPropagate):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicy): Deleted.
        
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::applyShouldOpenExternalURLsPolicyToNewDocumentLoader):
        * loader/FrameLoader.h:
        
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction):
        (WebCore::NavigationAction::copyWithShouldOpenExternalURLsPolicy):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::setShouldOpenExternalURLsPolicy): Deleted.
        
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleRefresh):
        * loader/NavigationScheduler.h:
        
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):
        
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        
        * page/Location.cpp:
        (WebCore::Location::reload):
        
        * replay/ReplayInputDispatchMethods.cpp:
        (WebCore::InitialNavigation::dispatch):
        
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2015-06-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Heap-use-after-free read of size 4 in JavaScriptCore: WTF::StringImpl::isSymbol() (StringImpl.h:496)
        https://bugs.webkit.org/show_bug.cgi?id=145532

        Reviewed by Geoffrey Garen.

        Hold the ownership of AtomicStringImpl*.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getElementById):

2015-06-02  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        SharedBuffer::copy should return a Ref<SharedBuffer>
        https://bugs.webkit.org/show_bug.cgi?id=145499

        Reviewed by Andreas Kling.

        Changing SharedBuffer::copy to return a Ref<> and adapting some code accordingly.

        Covered by existing tests.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::deliver):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::copy):
        * platform/SharedBuffer.h:

2015-06-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/Modules - 1
        https://bugs.webkit.org/show_bug.cgi?id=145507

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::~BatteryController):
        (WebCore::BatteryController::updateBatteryStatus):
        (WebCore::BatteryController::didChangeBatteryStatus):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDMFactoryForKeySystem):
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::~MediaKeys):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::resumeTimerFired):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::stopTimer):
        (WebCore::Geolocation::cancelRequests):
        (WebCore::Geolocation::extractNotifiersWithCachedPosition):
        (WebCore::Geolocation::copyToSet):
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::forceClose):
        (WebCore::IDBDatabase::closeConnection):
        (WebCore::IDBDatabase::findObjectStoreId):
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        (WebCore::IDBDatabaseBackend::close):
        * Modules/indexeddb/IDBDatabaseMetadata.cpp:
        (WebCore::IDBDatabaseMetadata::isolatedCopy):
        (WebCore::IDBObjectStoreMetadata::isolatedCopy):
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::isValid):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::createMultiEntryArray):
        (WebCore::IDBKey::createArray):
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::IDBKeyPath):
        (WebCore::IDBKeyPath::isValid):
        (WebCore::IDBKeyPath::isolatedCopy):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::put):
        Rename the two 'i's to 'keyData' and 'indexKeyData'.
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::findIndexId):
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        (WebCore::IDBPendingTransactionMonitor::deactivateNewTransactions):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::abort):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::closeOpenCursors):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::create):
        (WebCore::IDBTransactionBackend::closeOpenCursors):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::onReadyStateChange):
        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::initialize):
        (WebCore::MediaConstraintsImpl::getMandatoryConstraints):
        (WebCore::MediaConstraintsImpl::getOptionalConstraintValue):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::getTracks):
        (WebCore::MediaStream::trackDidEnd):
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStreamCapabilities.cpp:
        (WebCore::MediaStreamCapabilities::sourceType):
        (WebCore::MediaStreamCapabilities::sourceId):
        (WebCore::MediaStreamCapabilities::facingMode):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::trackDidEnd):
        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
        (WebCore::MediaStreamTrackSourcesRequest::didCompleteRequest):

2015-06-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Remove unnecessary hacks
        https://bugs.webkit.org/show_bug.cgi?id=145088

        Reviewed by Simon Fraser.

        Not needed anymore.

        Test: svg/text/offset-square-svg-font.html

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendKERNTable):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2015-06-01  Andreas Kling  <akling@apple.com>

        CSS animations in filling-forwards state shouldn't force compositing.
        <https://webkit.org/b/145389>
        <rdar://problem/17923642>

        Reviewed by Simon Fraser.

        Stop checking if a CSS animation is filling forwards when computing
        compositing requirements.

        This prevents finished animations from pinning elements in composited
        state, and frees up a bunch of IOSurface memory on some content.

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isAnimatingProperty): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

2015-06-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Out of bounds read in WebCore::ComplexTextController::adjustGlyphsAndAdvances
        https://bugs.webkit.org/show_bug.cgi?id=145537
        <rdar://problem/20959267>

        Reviewed by Darin Adler.

        U16_IS_SURROGATE_LEAD(ch) assumes U16_IS_SURROGATE(ch). In this case, that isn't true.

        Test: fast/text/crash-complex-text-surrogate.html

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

2015-05-30  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (179771): zooming on facebook images covers image
        https://bugs.webkit.org/show_bug.cgi?id=145485

        Reviewed by Simon Fraser.

        Scaling an infinite rect should always produce an infinite rect.
        (Based on Simon Fraser's patch)

        Test: compositing/layer-creation/zoomed-clip-intersection.html

        * platform/graphics/LayoutRect.cpp:
        (WebCore::LayoutRect::scale):

2015-06-01  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in WebCore/Modules - 3
        https://bugs.webkit.org/show_bug.cgi?id=145508

        Reviewed by Darin Adler.

        As a step to purge PassRefPtr, this patch removes PassRefPtr, then use Ref or RefPtr.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::create):
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::create):
        (WebCore::CursorAdvanceOperation::create):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::create):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.cpp:
        (WebCore::IDBDatabaseCallbacksImpl::create):
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::create):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::create):
        * Modules/indexeddb/IDBKey.h:
        (WebCore::IDBKey::createInvalid):
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createString):
        (WebCore::IDBKey::createDate):
        (WebCore::IDBKey::createArray):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::create):
        * Modules/indexeddb/IDBKeyRange.h:
        (WebCore::IDBKeyRange::create):
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        (WebCore::IDBObjectStore::create):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::create):
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRecordIdentifier.h:
        (WebCore::IDBRecordIdentifier::create):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::getResultCursor):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::create):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeAbortOperation::create):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::GetOperation::create):
        (WebCore::PutOperation::create):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::OpenCursorOperation::create):
        (WebCore::CountOperation::create):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::ClearObjectStoreOperation::create):
        * Modules/mediasource/VideoPlaybackQuality.cpp:
        (WebCore::VideoPlaybackQuality::create):
        * Modules/mediasource/VideoPlaybackQuality.h:
        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::create):
        * Modules/mediastream/MediaConstraintsImpl.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::create):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCOfferAnswerOptions.cpp:
        (WebCore::RTCOfferAnswerOptions::create):
        (WebCore::RTCOfferOptions::create):
        * Modules/mediastream/RTCOfferAnswerOptions.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::parseConfiguration):
        (WebCore::RTCPeerConnection::create):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/DOMWindowWebDatabase.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::databaseContextFor):
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseServer.h:

2015-06-01  Daniel Bates  <dabates@apple.com>

        Notify client that we began editing when text field is focused
        https://bugs.webkit.org/show_bug.cgi?id=145439
        <rdar://problem/21142108>

        Reviewed by Anders Carlsson.

        Inform the editor client that we began editing when a text field is focused either
        by being explicitly focused (programmatically or by user interaction) or implicitly
        focused when the window became active.

        Currently we only notify the editor client that we began editing a text field when
        when a person actually changes the value of the field. And we always notify the
        client that we ended editing when a text field is defocused regardless of whether
        we executed a began editing callback. Moreover we notify a client that we
        ended editing when the field is defocused (either explicitly or implicitly when the
        window becomes inactive). Instead we should always notify the client that we began
        editing when the field is focused so that this callback is symmetric with the end
        editing callback.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::didSetValueByUserEdit): Remove parameter for ValueChangeState,
        which was used to determine whether we should notify the client that we began editing, because
        we we will notify the client that editing began when the text field is focused as opposed to
        when the value of text field first changes.
        * html/SearchInputType.h: Ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent): Notify the client that we began editing when
        the text field is focused.
        (WebCore::TextFieldInputType::subtreeHasChanged): Update call site of didSetValueByUserEdit()
        following the removal of its parameter.
        (WebCore::TextFieldInputType::didSetValueByUserEdit): Ditto.
        * html/TextFieldInputType.h:

2015-06-01  Anders Carlsson  <andersca@apple.com>

        WAKScrollView.h cannot be imported standalone
        https://bugs.webkit.org/show_bug.cgi?id=145529

        Reviewed by Dan Bernstein.

        * page/mac/WebCoreFrameView.h:
        Remove the __cplusplus #ifdefs since WebCoreFrameView.h is only used by Objective-C++ code.
        (The different non-C++ method declarations were wrong anyway!)

        * platform/ScrollTypes.h:
        Remove the #ifdef __cplusplus surrounding the code, add header includes to make the file self-contained,
        and reformat the enum definitions.

2015-06-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] resource-type and load-type should be independent.
        https://bugs.webkit.org/show_bug.cgi?id=145528
        rdar://problem/21190765

        Reviewed by Benjamin Poulain.

        Covered by existing tests and a new API test.
        
        Right now we use the same uint16_t to store all the load-type and resource-type flags,
        then we just do a bitwise and to check both at the same time. This results in a trigger
        with load-type and resource-type firing if either condition is met, not both conditions.
        A trigger with both resource-type and load-type conditions should only fire if both conditions are met.

        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        Check and correctly handle rules with both resource-type and load-type flags.
        * loader/ResourceLoadInfo.h:
        Add masks to separate flags from resource-type and load-type.

2015-06-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Reduce DFA memory usage.
        https://bugs.webkit.org/show_bug.cgi?id=145526

        Reviewed by Benjamin Poulain.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::memoryUsed):
        (WebCore::ContentExtensions::DFANode::transitions):
        (WebCore::ContentExtensions::DFANode::fallbackTransitionDestination):
        (WebCore::ContentExtensions::DFANode::changeFallbackTransition):
        (WebCore::ContentExtensions::DFANode::addFallbackTransition):
        (WebCore::ContentExtensions::DFANode::containsTransition):
        (WebCore::ContentExtensions::DFANode::kill):
        * contentextensions/DFA.h:
        * contentextensions/DFAMinimizer.cpp:
        (WebCore::ContentExtensions::DFAMinimizer::minimize):
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NFAToDFA::convert):
        Use separate Vectors for the transition characters and destinations to avoid wasting memory to padding a std::pair.

2015-06-01  Matt Rajca  <mrajca@apple.com>

        Implemented the `eventTargetInterface` and `scriptExecutionContext` methods required by EventTarget, as well as
        some required infrastructure.
        https://bugs.webkit.org/show_bug.cgi?id=145523

        Reviewed by Eric Carlson.

        * Modules/mediasession/MediaRemoteControls.cpp:
        (WebCore::MediaRemoteControls::MediaRemoteControls): Initialize all instance variables.
        * Modules/mediasession/MediaRemoteControls.h: MediaRemoteControl's constructor now takes a script execution
          context, which we provide to EventTarget. The required eventTargetInterface method has also been implemented.
        (WebCore::MediaRemoteControls::create):
        * Modules/mediasession/MediaRemoteControls.idl: Indicate MediaRemoteControls now takes a constructor that is
          passed in a script execution context. To prevent build errors, event handlers have been removed until they are
          implemented.
        * WebCore.xcodeproj/project.pbxproj: We should be building the derived JSMediaRemoteControls class with WebCore.
        * dom/EventTargetFactory.in: Ensure a MediaRemoteControlsEventTargetInterfaceType is generated.

2015-06-01  Benjamin Poulain  <bpoulain@apple.com>

        [CSS JIT] Fail to compile when we are out of executable memory
        https://bugs.webkit.org/show_bug.cgi?id=145483
        rdar://problem/21166612

        Reviewed by Andreas Kling.

        We should use a soft failure when the Linker fails to allocate
        executable memory for the CSS JIT. We will just fallback to slow
        code when that happen, better slow CSS than crashing.

        Credit to Chris for finding this problem.

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

2015-06-01  Chris Dumez  <cdumez@apple.com>

        ASSERT(revalidatingResource.inCache()) in MemoryCache when reloading tumblr.com
        https://bugs.webkit.org/show_bug.cgi?id=145518
        <rdar://problem/21168573>

        Reviewed by Darin Adler.

        There was an assertion in MemoryCache::revalidationSucceeded() making
        sure that the resource that was revalidated is still in the memory
        cache. However, nothing prevents this resource from being pruned while
        it is being revalidated. We do make sure that the resource in question
        cannot be destroyed though (see CachedResource::canDelete()).

        This patch gets rid of this assertion as it is incorrect. Also, the
        fact that the resource is no longer in the memory cache is not an
        issue. We are merely going to call MemoryCache::remove() to remove
        it from the memory cache before re-adding it and updating its
        HTTP response. The call to MemoryCache::remove() will simply be a
        no-op in this case and we will not have any problem adding the
        resource back to the memory cache because the resource is kept alive.

        Test: http/tests/cache/memory-cache-pruning-during-revalidation.html

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::revalidationSucceeded): Deleted.

2015-06-01  Matt Rajca  <mrajca@apple.com>

        Add stub implementation of MediaRemoteControls, part of the Media Session spec.
        https://bugs.webkit.org/show_bug.cgi?id=145462

        Reviewed by Eric Carlson.

        * CMakeLists.txt: Added IDL file as well as the corresponding implementation file.
        * DerivedSources.make: Included the new IDL file.
        * Modules/mediasession/MediaRemoteControls.cpp: Added an empty implementation file.
        (MediaRemoteControls::~MediaRemoteControls):
        * Modules/mediasession/MediaRemoteControls.h: Added a stubbed header file with accessors for the four attributes declared in the IDL file.
        (WebCore::MediaRemoteControls::previousTrackEnabled):
        (WebCore::MediaRemoteControls::setPreviousTrackEnabled):
        (WebCore::MediaRemoteControls::nextTrackEnabled):
        (WebCore::MediaRemoteControls::setNextTrackEnabled):
        (WebCore::MediaRemoteControls::seekForwardEnabled):
        (WebCore::MediaRemoteControls::setSeekForwardEnabled):
        (WebCore::MediaRemoteControls::seekBackwardEnabled):
        (WebCore::MediaRemoteControls::setSeekBackwardEnabled):
        * Modules/mediasession/MediaRemoteControls.idl: Added from the Media Session spec.
        * WebCore.xcodeproj/project.pbxproj: Included the new IDL file and MediaRemoteControls.cpp/.h sources.

2015-06-01  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Simplify the interface of GridResolvedPosition
        https://bugs.webkit.org/show_bug.cgi?id=139077

        Reviewed by Darin Adler.

        The interface of GridResolvedPosition is full of static methods
        that are used only internally, we should not expose them.

        Apart from that resolveGridPositionsFromStyle() do always return
        a valid GridSpan from now on meaning that the caller has to ensure
        that the resolution does not require running the auto-placement
        algorithm. A new class called GridUnresolvedSpan was added for
        that purpose.

        No new tests as this is a refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        * rendering/style/GridPosition.h:
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::gridLinesForSide):
        (WebCore::implicitNamedGridLineForSide):
        (WebCore::isNonExistentNamedLineOrArea):
        (WebCore::GridUnresolvedSpan::requiresAutoPlacement):
        (WebCore::GridUnresolvedSpan::adjustGridPositionsFromStyle):
        (WebCore::adjustGridPositionForRowEndColumnEndSide):
        (WebCore::adjustGridPositionForSide):
        (WebCore::resolveNamedGridLinePositionFromStyle):
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        (WebCore::resolveNamedGridLinePositionAgainstOppositePosition):
        (WebCore::resolveGridPositionAgainstOppositePosition):
        (WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):
        (WebCore::resolveGridPositionFromStyle):
        (WebCore::GridResolvedPosition::GridResolvedPosition):
        (WebCore::GridResolvedPosition::unresolvedSpanFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle):
        (WebCore::GridResolvedPosition::adjustGridPositionsFromStyle): Deleted.
        (WebCore::GridResolvedPosition::resolveNamedGridLinePositionFromStyle): Deleted.
        (WebCore::GridResolvedPosition::resolveGridPositionFromStyle): Deleted.
        (WebCore::GridResolvedPosition::resolveGridPositionAgainstOppositePosition): Deleted.
        (WebCore::GridResolvedPosition::resolveNamedGridLinePositionAgainstOppositePosition): Deleted.
        (WebCore::GridResolvedPosition::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition): Deleted.
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition): Deleted.
        * rendering/style/GridResolvedPosition.h:
        (WebCore::GridUnresolvedSpan::GridUnresolvedSpan): New class.
        (WebCore::GridUnresolvedSpan::initialPosition):
        (WebCore::GridUnresolvedSpan::finalPosition):
        (WebCore::GridUnresolvedSpan::initialPositionSide):
        (WebCore::GridUnresolvedSpan::finalPositionSide):
        (WebCore::GridResolvedPosition::adjustGridPositionForRowEndColumnEndSide): Deleted.
        (WebCore::GridResolvedPosition::adjustGridPositionForSide): Deleted.
        (WebCore::GridResolvedPosition::GridResolvedPosition): Deleted.

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO_TRACK) build after r184799
        https://bugs.webkit.org/show_bug.cgi?id=145510

        Reviewed by Eric Carlson.

        * testing/Internals.cpp:
        (WebCore::Internals::userPreferredAudioCharacteristics):
        (WebCore::Internals::setUserPreferredAudioCharacteristic):

2015-06-01  Csaba Osztrogonác  <ossy@webkit.org>

        Fix logical-not-parentheses warning in CachedScript.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145254

        Reviewed by Sam Weinig.

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::mimeTypeAllowedByNosniff): "!X==Y" should be "X!=Y" here.

2015-05-31  Dan Bernstein  <mitz@apple.com>

        Remove Panther support
        https://bugs.webkit.org/show_bug.cgi?id=145506

        Reviewed by Sam Weinig.

        * platform/ios/wak/WAKAppKitStubs.h: Don't check for pre-Tiger SDKs.

2015-05-31  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Remove unused variable kZoomTicks.
        https://bugs.webkit.org/show_bug.cgi?id=145504

        Reviewed by Sam Weinig.

        No new tests, no behavior changes.

        * platform/ScrollAnimatorNone.cpp:

2015-05-31  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Async XMLHttpRequest should get access to AppCache resources stored as flat files
        https://bugs.webkit.org/show_bug.cgi?id=138506

        Reviewed by Darin Adler.

        This patch reads flat file data when DocumentLoader substituteResource delivery timer is fired.
        Refactoring to remove ApplicationCacheHost/DocumentLoader friend link.
        Added ResourceLoader::deliverResponseAndData helper function, taking a SharedBuffer as input to remove an unneeded copy for flat files (no change for other files). 

        Test: http/tests/appcache/simple-video-async.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        (WebCore::DocumentLoader::scheduleArchiveLoad):
        (WebCore::DocumentLoader::scheduleSubstituteResourceLoad): Helper function to remove ApplicationCacheHost friend link.
        * loader/DocumentLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::deliverResponseAndData): Helper function, code mostly moved from DocumentLoader::substituteResourceDeliveryTimerFired.
        * loader/ResourceLoader.h:
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::deliver): Introduced to be overriden by ApplicationCacheResource to take care of flat file case.
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::deliver): Use SharedBuffer::createWithContentsOfFile to load data stored in flat file.
        * loader/appcache/ApplicationCacheResource.h:

2015-05-31  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStreamController constructor
        https://bugs.webkit.org/show_bug.cgi?id=143752

        Reviewed by Darin Adler.

        Covered by rebased test and expectation.

        * Modules/streams/ReadableStreamController.idl: Adding CustomConstructor.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::constructJSReadableStreamController): Throws an exception whenever called.

2015-05-30  Brady Eidson  <beidson@apple.com>

        Make FrameLoader methods that take PassRefPtr<Event> take raw pointers instead.
        https://bugs.webkit.org/show_bug.cgi?id=145495

        Reviewed by Alexey Proskuryakov.

        No new tests (No change in behavior).

        In most cases ownership of the Event is not actually being transferred, and these functions are all rarely called anyways.
        
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::handleClick):
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:

2015-05-30  Andreas Kling  <akling@apple.com>

        [iOS] Tiling coverage sometimes inflated by outdated scale factor.
        <https://webkit.org/b/145494>
        <rdar://problem/20989389>

        Reviewed by Benjamin Poulain.

        Have GraphicsLayerCA plumb the current contents scale through to TileController::adjustCoverageRect()
        instead of TileController getting it from TileGrid.

        This avoids a situation where adjustCoverageRect() could cause temporarily oversized tiling coverage
        if called while TileGrid's content scale is outdated, and we're neither zooming or pinching, following
        a pinch zoom that increased the scale factor.

        Specifically, if all the velocity data is zero, we pad the coverage rect by a horizontal and vertical
        margin computed like so:

            margin = defaultTileSize / tileGrid.scale

        If the actual scale is 5, but the TileGrid's outdated scale is e.g 0.8, you'll get a much larger
        margin than you really wanted. Then the whole thing gets scaled up by 5x later on, and we explode
        in a fiery feast of IOSurface allocations.

        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::adjustCoverageRect):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::computeTileCoverageRect):
        * platform/graphics/ca/TileController.h:

2015-05-30  Brady Eidson  <beidson@apple.com>

        Fix Windows tests broken by r185007.
        https://bugs.webkit.org/show_bug.cgi?id=145472

        Unreviewed. Discussed with Alexey Proskuryakov.

        No new tests (Fixing the four broken ones should suffice).

        The bug was that evaluating arguments in a method/constructor call has no guaranteed sequencing.
        
        Clang seems to always do LTR, allowing the PassRefPtr to be evaluated as a bool in the call to
        navigationType() before it is "consumed" by the PassRefPtr argument.
        
        In Visual Studio the PassRefPtr consumption happened before the bool evaluation, meaning `false`
        was always passed in to navigationType(), breaking the four tests.
        
        The fix? Using PassRefPtr here was silly in the first place.
        No ownership is being transferred.
        Raw pointers it is.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/NavigationAction.cpp:

        (WebCore::NavigationAction::NavigationAction):
        * loader/NavigationAction.h: Nobody is actually transferring ownership of these Events.
          Raw pointers will work just fine, thanks.

2015-05-29  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed bindings test rebaseline after r185023.

        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::isObservable): Deleted.
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots): Deleted.

2015-05-29  Andreas Kling  <akling@apple.com>

        [iOS] Reduce tiling coverage when doing a pure pinch zoom with no panning.
        <https://webkit.org/b/145481>
        <rdar://problem/20989389>

        Reviewed by Benjamin Poulain.

        When we're zooming in with a pinch gesture but not panning the page
        at the same time, make the coverage rect be the visible rect.

        This reduces memory pressure during zooming, especially on slower
        devices that struggle to keep up with the current viewport.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::computeTileCoverageRect):

2015-05-29  Keith Miller  <keith_miller@apple.com>

        WeakMap reference w/ DOM element as key does not survive long enough.
        https://bugs.webkit.org/show_bug.cgi?id=137651

        Reviewed by Geoffrey Garen.

        Remove isObservable functions as an "unobservable wrappers"
        optimization is invalid with WeakMaps. Performance testing
        will be done after the code is commited. If major
        performance issues occur the patch will be rolled out.

        Test: js/dom/weakmap-gc-unobservable-dom-nodes.html

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNode::insertBefore):
        (WebCore::isObservable): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2015-05-29  Anders Carlsson  <andersca@apple.com>

        Get rid of WAKViewPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=145482
        rdar://problem/21162149

        Reviewed by Dan Bernstein.

        Merge WAKViewPrivate.h into WAKViewInternal.h and move the NSView sizing enum
        to WAKView.h since that was the only thing WebKit used (indirectly) from WAKViewPrivate.h.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/WAKViewInternal.h:
        (WAKViewForWKViewRef):
        * platform/ios/ScrollViewIOS.mm:
        * platform/ios/wak/WAKResponder.m:
        * platform/ios/wak/WAKView.h:
        * platform/ios/wak/WAKView.mm:
        * platform/ios/wak/WAKViewPrivate.h: Removed.
        (WAKViewForWKViewRef): Deleted.
        * platform/ios/wak/WAKWindow.mm:
        * platform/ios/wak/WKView.h:
        * platform/ios/wak/WKView.mm:

2015-05-29  Daniel Bates  <dabates@apple.com>

        Clean up logic for updating caps lock indicator state
        https://bugs.webkit.org/show_bug.cgi?id=145329

        Reviewed by Sam Weinig.

        Remove logic to explicitly update the state of the caps lock indicator, which was used
        when the caps logic indicator was implemented as part of RenderTextControl. Currently,
        the caps logic indicator is implemented as part of a shadow DOM and we have existing
        logic to forward DOM focus and blur events to it so that it may update its state.

        No change in behavior.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged): Deleted.
        * editing/FrameSelection.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent): Inline the code from EventHandler::capsLockStateMayHaveChanged()
        into this function because it is the only caller of EventHandler::capsLockStateMayHaveChanged() after
        we removed the call site in FrameSelection::focusedOrActiveStateChanged().
        (WebCore::EventHandler::capsLockStateMayHaveChanged): Deleted.
        * page/EventHandler.h:

2015-05-29  Zalan Bujtas  <zalan@apple.com>

        Text disappears shortly after page load on Nexus 7 site.
        https://bugs.webkit.org/show_bug.cgi?id=145467
        rdar://problem/18327239

        Reviewed by Simon Fraser.

        This patch ensures that overlap testing for composited layers works properly when the sibling
        layer gets composited through its child.

        When a layer gets composited through its child content, the recursive overlap testing should build up the
        overlapmap stack so that sibling content is intersected both against the child and its parent bounds.

        Tests: compositing/sibling-layer-does-not-get-composited-overflow-hidden-case.html
               compositing/sibling-layer-does-not-get-composited-transform-case.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::OverlapMap::contains): Deleted.

2015-05-29  Brady Eidson  <beidson@apple.com>

        Review feedback followup for r185003.
        https://bugs.webkit.org/show_bug.cgi?id=145463

        Reviewed by Darin Adler.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::overrideUnauthorizedFunctions): `static const` one thing, c++-style cast another.

2015-05-29  Chris Dumez  <cdumez@apple.com>

        WebContent crash in WebCore::Page::sessionID() const + 0 (Page.cpp:1660)
        https://bugs.webkit.org/show_bug.cgi?id=145422
        <rdar://problem/20613631>

        Reviewed by Brady Eidson.

        We sometimes crash when destroying a PageCache CachedFrame because its
        DocumentLoader is still loading. This should never happen as we are not
        supposed to let pages are still have pending loads into the PageCache.

        However, we were using DocumentLoader::isLoadingInAPISense() as check
        in PageCache::canCachePageContainingThisFrame() which is not exactly
        what we want. isLoadingInAPISense() no longer considers subresource
        loads once the frame as loaded. This means if the JS triggers a new
        load in a subframe after it has been loaded, then isLoadingInAPISense()
        will return false, despite the pending load.

        This patch replaces the isLoadingInAPISense() check with isLoading()
        as this will consider all pending loads, even after the frame is
        loaded.

        In most cases, using isLoadingInAPISense() was not an issue because
        we call DocumentLoader::stopLoading() in all subframes before starting
        a provisional load. However, nothing seems to prevent JS from
        triggering a new load after that and before the new load gets committed
        (which is when we save the page into PageCache).

        No new test as we don't have a reliable reproduction case and the
        issue is timing related.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::isLoading):
        (WebCore::DiagnosticLoggingKeys::loadingAPISenseKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2015-05-29  Chris Dumez  <cdumez@apple.com>

        Consider throttling DOM timers in iframes outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=145465
        <rdar://problem/20768957>

        Reviewed by Darin Adler.

        Throttle DOM timers in iframes that are outside the viewport to decrease
        CPU usage, improve performance and reduce power use.

        The approach is similar to what we already did for requestAnimationFrame
        in r183998.

        We already has support for throttling DOM timers at:
        - Page level: for backgound pages
        - DOM timer level: for timers changing the style of an element outside
          the viewport or drawing on a canvas outside the viewport.

        This patch adds support for throttling DOM timers at Document level so
        we can throttle all timers inside a specific iframe / Document. It relies
        on the same timerAlignmentInterval that is used for throttling at Page
        level with tweaks so that different Documents inside the same Page can
        have a different timerAlignmentInterval.

        Test: fast/dom/timer-throttling-subframe.html

        * dom/Document.cpp:
        (WebCore::Document::setTimerThrottlingEnabled):
        (WebCore::Document::timerAlignmentInterval):
        * dom/Document.h:
        (WebCore::Document::isTimerThrottlingEnabled):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::alignedFireTime):
        The previous code was not throttling the timer if its fireTime was in
        the past. This was causing some aggressive timers on mashable.com to
        not be throttled so I got rid of this behavior. I don't see any reason
        why we would not throttle a timer simply because it is supposed to have
        fired already.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        (WebCore::FrameView::updateScriptedAnimationsAndTimersThrottlingState):
        * page/FrameView.h:

        * testing/Internals.cpp:
        (WebCore::Internals::areTimersThrottled):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add API to facilitate layout testing of this functionality.

2015-05-29  Brady Eidson  <beidson@apple.com>

        NavigationAction constructor cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=145472

        Reviewed by Alex Christensen.

        No new tests (Refactor, no change in behavior).

        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction): Delegate many of the various constructors
          to a single full-featured constructor.
        * loader/NavigationAction.h:

2015-05-29  Matt Rajca  <mrajca@apple.com>

        Rename MediaSession and MediaSessionClient to PlatformMediaSession and PlatformMediaSessionClient so we can use MediaSession for the formal implementation of the Media Session spec.
        https://bugs.webkit.org/show_bug.cgi?id=145447

        Reviewed by Eric Carlson.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::suspendPlayback):
        * Modules/webaudio/AudioContext.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLAudioElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pausedForUserInteraction):
        (WebCore::HTMLMediaElement::mediaType):
        (WebCore::HTMLMediaElement::presentationType):
        (WebCore::HTMLMediaElement::displayType):
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession):
        (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback):
        * html/HTMLMediaSession.h:
        * html/HTMLVideoElement.h:
        * platform/RemoteCommandListener.h:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::resetRestrictions):
        (WebCore::MediaSessionManager::has):
        (WebCore::MediaSessionManager::activeAudioSessionRequired):
        (WebCore::MediaSessionManager::count):
        (WebCore::MediaSessionManager::beginInterruption):
        (WebCore::MediaSessionManager::endInterruption):
        (WebCore::MediaSessionManager::addSession):
        (WebCore::MediaSessionManager::removeSession):
        (WebCore::MediaSessionManager::addRestriction):
        (WebCore::MediaSessionManager::removeRestriction):
        (WebCore::MediaSessionManager::restrictions):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        (WebCore::MediaSessionManager::sessionWillEndPlayback):
        (WebCore::MediaSessionManager::setCurrentSession):
        (WebCore::MediaSessionManager::currentSession):
        (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback):
        (WebCore::MediaSessionManager::sessionCanLoadMedia):
        (WebCore::MediaSessionManager::applicationWillEnterBackground):
        (WebCore::MediaSessionManager::applicationWillEnterForeground):
        (WebCore::MediaSessionManager::didReceiveRemoteControlCommand):
        (WebCore::MediaSessionManager::systemWillSleep):
        (WebCore::MediaSessionManager::systemDidWake):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::sessions):
        * platform/audio/PlatformMediaSession.cpp: Renamed from Source/WebCore/platform/audio/MediaSession.cpp.
        (WebCore::stateName):
        (WebCore::PlatformMediaSession::create):
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::PlatformMediaSession::~PlatformMediaSession):
        (WebCore::PlatformMediaSession::setState):
        (WebCore::PlatformMediaSession::beginInterruption):
        (WebCore::PlatformMediaSession::endInterruption):
        (WebCore::PlatformMediaSession::clientWillBeginPlayback):
        (WebCore::PlatformMediaSession::clientWillPausePlayback):
        (WebCore::PlatformMediaSession::pauseSession):
        (WebCore::PlatformMediaSession::mediaType):
        (WebCore::PlatformMediaSession::presentationType):
        (WebCore::PlatformMediaSession::title):
        (WebCore::PlatformMediaSession::duration):
        (WebCore::PlatformMediaSession::currentTime):
        (WebCore::PlatformMediaSession::canReceiveRemoteControlCommands):
        (WebCore::PlatformMediaSession::didReceiveRemoteControlCommand):
        (WebCore::PlatformMediaSession::visibilityChanged):
        (WebCore::PlatformMediaSession::clientDataBufferingTimerFired):
        (WebCore::PlatformMediaSession::updateClientDataBuffering):
        (WebCore::PlatformMediaSession::isHidden):
        (WebCore::PlatformMediaSession::displayType):
        (WebCore::PlatformMediaSessionClient::mediaSessionTitle):
        (WebCore::PlatformMediaSessionClient::mediaSessionDuration):
        (WebCore::PlatformMediaSessionClient::mediaSessionCurrentTime):
        * platform/audio/PlatformMediaSession.h: Renamed from Source/WebCore/platform/audio/MediaSession.h.
        (WebCore::PlatformMediaSession::state):
        (WebCore::PlatformMediaSession::canPlayToWirelessPlaybackTarget):
        (WebCore::PlatformMediaSession::isPlayingToWirelessPlaybackTarget):
        (WebCore::PlatformMediaSession::requiresPlaybackTargetRouteMonitoring):
        (WebCore::PlatformMediaSession::client):
        (WebCore::PlatformMediaSessionClient::PlatformMediaSessionClient):
        (WebCore::PlatformMediaSessionClient::displayType):
        (WebCore::PlatformMediaSessionClient::setShouldBufferData):
        (WebCore::PlatformMediaSessionClient::elementIsHidden):
        (WebCore::PlatformMediaSessionClient::wirelessRoutesAvailableDidChange):
        (WebCore::PlatformMediaSessionClient::setWirelessPlaybackTarget):
        (WebCore::PlatformMediaSessionClient::canPlayToWirelessPlaybackTarget):
        (WebCore::PlatformMediaSessionClient::isPlayingToWirelessPlaybackTarget):
        (WebCore::PlatformMediaSessionClient::setShouldPlayToPlaybackTarget):
        (WebCore::PlatformMediaSessionClient::~PlatformMediaSessionClient):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback):
        (WebCore::MediaSessionManageriOS::sessionWillEndPlayback):
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
        (WebCore::MediaSessionManageriOS::sessionCanLoadMedia):
        (-[WebMediaSessionHelper interruption:]):
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::handlePlaybackCommand):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerHandlePlaybackCommand):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS):
        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption):
        (WebCore::Internals::endMediaSessionInterruption):
        (WebCore::Internals::setMediaSessionRestrictions):
        (WebCore::Internals::postRemoteControlCommand):

2015-05-29  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Decrease maxNFASize
        https://bugs.webkit.org/show_bug.cgi?id=145461

        Reviewed by Gavin Barraclough.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Decrease maxNFASize based on analysis of memory usage and compiling and interpreting time.

2015-05-29  Brady Eidson  <beidson@apple.com>

        WebSQL default functions can bypass authorizer.
        <rdar://problem/21048994> and https://bugs.webkit.org/show_bug.cgi?id=145463

        Reviewed by Sam Weinig and Alexey Proskuryakov.

        No new tests yet.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::unauthorizedSQLFunction): Function to install into SQLite to override some built-in functions.
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::overrideUnauthorizedFunctions): Install function overrides for functions that
           take arbitrary input that are also meant to be disabled by virtue of them not being whitelisted.
        * platform/sql/SQLiteDatabase.h:

2015-05-29  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Shift fullscreen controls down 20px.
        <rdar://problem/21161523>

        * Modules/mediacontrols/mediaControlsApple.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        Fullscreen control panel is too high and overlaps with caption menu.
        Shift it down 20px.

2015-05-28  Simon Fraser  <simon.fraser@apple.com>

        Some assertion failures in compositing code after r183820
        https://bugs.webkit.org/show_bug.cgi?id=144630

        Reviewed by Alexey Proskuryakov.

        Reinstate the assertion commented out in r183843. Fixed by having blending no longer
        escape the media elements, which was fixed via bug 145420.

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

2015-05-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/plugins, storage, style, testing and workers.
        https://bugs.webkit.org/show_bug.cgi?id=145425

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::canGetItemsForName):
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::canGetItemsForName):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::canGetItemsForName):
        * plugins/PluginData.cpp:
        (WebCore::PluginData::getWebVisibleMimesAndPluginIndices):
        * plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCalls):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItems):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::pseudoStyleCacheIsInvalid):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):
        * workers/Worker.cpp:
        (WebCore::networkStateChanged):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):

2015-05-29  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix when using content extensions debugging.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Update variable name.

2015-05-29  Brady Eidson  <beidson@apple.com>

        Typo followup to r184987

        Unreviewed.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Misplaced brace.

2015-05-29  Brady Eidson  <beidson@apple.com>

        Small FrameLoader refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=145459

        Reviewed by Alex Christensen.

        No new tests (No behavior change).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:

2015-05-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        MediaDevices.getUserMedia should reject promise instead of throwing exceptions
        https://bugs.webkit.org/show_bug.cgi?id=145282

        Reviewed by Darin Adler.

        Ensuring at the custom binding level that all potential errors are used to reject promise.
        Cleaned up the wrappers by removing unneeded RefPtr.

        Covered by modified test.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::getUserMedia):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        * bindings/js/JSMediaDevicesCustom.cpp:
        (WebCore::JSMediaDevices::getUserMedia):

2015-05-28  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replaced 0 with nullptr in WebCore/accessibility.
        https://bugs.webkit.org/show_bug.cgi?id=145309

        Reviewed by Chris Fleizach.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathPrescripts):
        (WebCore::AccessibilityRenderObject::mathPostscripts):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::scrollBar):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkInit):
        * accessibility/atk/WebKitAccessibleInterfaceDocument.cpp:
        (webkitAccessibleDocumentGetAttributes):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        (attributeSetDifference):
        * accessibility/atk/WebKitAccessibleUtil.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleRefChild):
        (webkitAccessibleGetAttributes):
        (webkitAccessibleGetObjectLocale):
        (getInterfaceMaskFromObject):
        (objectFocusedAndCaretOffsetUnignored):
        (cacheAndReturnAtkProperty):

2015-05-28  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pixel crack in text selection of simple text in <textarea>.
        https://bugs.webkit.org/show_bug.cgi?id=145393
        rdar://problem/19918941

        Reviewed by Darin Adler.

        Float to LayoutUnit conversion is lossy. To ensure that selection
        painting always lines up (snaps) properly, the calculated width needs to
        be adjusted by ceiling the float to the next LayoutUnit value.

        Test: fast/text/hidpi-text-selection-gap-between-words.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::adjustSelectionRectForSimpleText):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::adjustSelectionRectForComplexText):

2015-05-28  Andreas Kling  <akling@apple.com>

        GraphicsLayerCA should start out with m_intersectsCoverageRect=false
        <https://webkit.org/b/145443>
        <rdar://problem/19685798>

        Reviewed by Simon Fraser.

        Since the coverage rect of a newly-constructed GraphicsLayerCA is always empty,
        there's no way that the layer's own bounding box can intersect with it.
        Hence the m_intersectsCoverageRect flag should be false after construction.

        This fixes an issue where compositing layers in subframes would be marked as
        non-volatile, despite being far outside the viewport and coverage rect.

        Test: compositing/visible-rect/iframe-with-layers-outside-viewport.html

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

2015-05-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184796 and r184832.
        https://bugs.webkit.org/show_bug.cgi?id=145449

        2% performance regression (Requested by litherum on #webkit).

        Reverted changesets:

        "[Cocoa] Use CTFontDrawGlyphs() instead of
        CGContextShowGlyphsWithAdvances()/CGContextShowGlyphsAtPositions()"
        https://bugs.webkit.org/show_bug.cgi?id=145234
        http://trac.webkit.org/changeset/184796

        "Cleanup after r184796"
        https://bugs.webkit.org/show_bug.cgi?id=145333
        http://trac.webkit.org/changeset/184832

2015-05-28  Matt Rajca  <mrajca@apple.com>

        Rename HTMLMediaSession to MediaElementSession to reserve "media session" for the Media Session API.
        https://bugs.webkit.org/show_bug.cgi?id=145440

        Reviewed by Eric Carlson.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::loadInternal):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture):
        (WebCore::HTMLMediaElement::mediaState):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaSession):
        * html/MediaElementSession.cpp: Renamed from Source/WebCore/html/HTMLMediaSession.cpp.
        (WebCore::restrictionName):
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::registerWithDocument):
        (WebCore::MediaElementSession::unregisterWithDocument):
        (WebCore::MediaElementSession::addBehaviorRestriction):
        (WebCore::MediaElementSession::removeBehaviorRestriction):
        (WebCore::MediaElementSession::playbackPermitted):
        (WebCore::MediaElementSession::dataLoadingPermitted):
        (WebCore::MediaElementSession::fullscreenPermitted):
        (WebCore::MediaElementSession::pageAllowsDataLoading):
        (WebCore::MediaElementSession::pageAllowsPlaybackAfterResuming):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):
        (WebCore::MediaElementSession::hasWirelessPlaybackTargets):
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled):
        (WebCore::MediaElementSession::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaElementSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaElementSession::setPlaybackTarget):
        (WebCore::MediaElementSession::targetAvailabilityChangedTimerFired):
        (WebCore::MediaElementSession::externalOutputDeviceAvailableDidChange):
        (WebCore::MediaElementSession::canPlayToWirelessPlaybackTarget):
        (WebCore::MediaElementSession::isPlayingToWirelessPlaybackTarget):
        (WebCore::MediaElementSession::setShouldPlayToPlaybackTarget):
        (WebCore::MediaElementSession::mediaStateDidChange):
        (WebCore::MediaElementSession::effectivePreloadForElement):
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback):
        (WebCore::MediaElementSession::mediaEngineUpdated):
        (WebCore::MediaElementSession::allowsAlternateFullscreen):
        (WebCore::MediaElementSession::maximumMediaSourceBufferSize):
        * html/MediaElementSession.h: Renamed from Source/WebCore/html/HTMLMediaSession.h.
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementRestrictions):
        (WebCore::Internals::setAudioContextRestrictions):

2015-05-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash under ICU with ASAN during editing/selection/move-by-word-visually-crash-test-5.html
        https://bugs.webkit.org/show_bug.cgi?id=145429
        <rdar://problem/20992218>

        Reviewed by Alexey Proskuryakov.

        WebKit uses some strings which contain the lower 8-bits of UTF-16 (thereby saving space). However,
        ICU doesn't understand this encoding. When we want to use ICU functions with strings in this encoding,
        we create a UTextProvider which converts our encoded strings to UTF-16 for ICU, one chunk at a time.
        This object contains a vtable which we populate to perform the conversion.

        The WebKit function which actually returns the UTF-16 chunks has two relevant arguments: an index into
        the encoded string which ICU is requesting, and a direction from that index which ICU is interested
        in. This function populates a "chunk" which is characterized by a pointer to a buffer, the length of
        the populated data in the buffer, and an offset into the chunk which represents the index that the
        requested character was put into.

        When ICU requests data going backward, we fill in the chunk accordingly, with the requested character
        all the way at the end. We then set the offset equal to the length of the buffer. However, this length
        value is stale from the previous time the function ran. Therefore, ICU was reading the wrong index in
        the chunk when expecting the requested character.

        Covered by editing/selection/move-by-word-visually-crash-test-5.html.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Access):

2015-05-28  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Fix controls bug caused by r184794
        https://bugs.webkit.org/show_bug.cgi?id=145445

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.showControls): Check video.controls instead of trying to call
        showInlinePlaybackPlaceholderOnly, which doesn't exist.

2015-05-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Code clean up for extracting information from the mix of WritingMode and TextDirection
        https://bugs.webkit.org/show_bug.cgi?id=143399

        Reviewed by Darin Adler.
        
        There should be eight TextFlows. A TextFlow consists of two directions.
        The first one controls the inline growing direction and the second one
        controls the block growing direction. We are going to use the cardinal
        directions to define these combinations.

        We need to extract the following information easily from the TextFlow

        -- isTextFlowReversed() // RTL
        -- isTextFlowFlipped()  // the opposite direction to normal
        -- isTextFlowVertical() // The line grows vertically
        
        Mixing WritingMode and TextDirection into TextFlow and choosing their values
        carefully to ease implementing the above functions can make things clearer.

        * Modules/notifications/Notification.h:
        * platform/graphics/TextRun.h:
        * platform/ios/SelectionRect.h:
        * platform/text/BidiResolver.h:
        * platform/text/StringWithDirection.h:
        * platform/text/TextFlags.h:
        (WebCore::isLeftToRightDirection): Deleted.
        enum TextDirection is moved from TextFlags.h to WritingMode.h. So include
        WritingMode.h instead of including TextFlags.h.
        
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty): Instead of handling the eight possible
        cases of the text flows one by one, we can map from a LogicalSide to a
        PhysicalSide using the TextFlow value.
        
        * platform/LengthBox.h:
        (WebCore::BoxExtent::before):
        (WebCore::BoxExtent::after):
        (WebCore::BoxExtent::start):
        (WebCore::BoxExtent::end):
        Use mapLogicalSideToPhysicalSide() to convert from a LogicalSide to a PhysicalSide.
        
        * platform/text/WritingMode.h:
        (WebCore::isLeftToRightDirection): Usually the default enum is defined
        first. And usually the default value is equal to zero. Since LTR is the
        default for the text direction, it should be defined before RTL.
        
        (WebCore::makeTextFlow): Returns a TextFlow given a WritingMode and a
        TextDirection.
        
        (WebCore::isReversedTextFlow): Returns true if the text direction is RTL.
        
        (WebCore::isFlippedTextFlow):
        (WebCore::isFlippedWritingMode): Returns true if the block growing direction
        is in the opposite direction of normal.
        
        (WebCore::isVerticalTextFlow):
        (WebCore::isVerticalWritingMode): Returns true if the line grows vertically.
               
        (WebCore::isHorizontalWritingMode):
        (WebCore::isFlippedLinesWritingMode): Use isVerticalWritingMode() and 
        isFlippedWritingMode() to answer these questions.
        
        (WebCore::isHorizontalPhysicalSide): 
        (WebCore::mirrorPhysicalSide): top <-> bottom and left <-> right conversion.
        (WebCore::rotatePhysicalSide): top <-> left and right <-> bottom conversion.
        
        (WebCore::mapLogicalSideToPhysicalSide): Maps a LogicalSide to a PhysicalSide
        using either the TextFlow or the WritingMode.
        
        (WebCore::isFlippedBlocksWritingMode): Deleted.
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset):
        * rendering/shapes/Shape.cpp:
        (WebCore::physicalRectToLogical):
        (WebCore::physicalPointToLogical):
        * rendering/style/RenderStyle.h:
        Rename isFlippedBlocksWritingMode() to be isFlippedWritingMode() so we can
        be consistent with other WritingMode query functions.

2015-05-28  Matt Rajca  <mrajca@apple.com>

        Add ENABLE_MEDIA_SESSION feature flag (which is off by default).
        https://bugs.webkit.org/show_bug.cgi?id=145415

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2015-05-28  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStreamReader should not be exposed
        https://bugs.webkit.org/show_bug.cgi?id=143564

        Reviewed by Darin Adler.

        Covered by rebased tests.

        * Modules/streams/ReadableStreamReader.idl: Adding NoInterfaceObject to ReadableStreamReader.idl.

2015-05-28  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake] Improve detection and usage of GL/GLES/EGL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=145408

        Reviewed by Carlos Garcia Campos.

        No new tests, no behavior changes.

        * CMakeLists.txt: Ensure that we include the libraries and includes
        for the GL/GLESv2/EGL libraries before including the ANGLE directories.
        Define also any CFLAG that the system GL/GLESv2/EGL libraries may need.
        * PlatformEfl.cmake: Remove some includes that are now unneeded,
        because we are including now the EGL libraries on CMakeLists.txt
        * PlatformGTK.cmake: Remove unneeded include (We are including the EGL
        libraries now on CMakeLists.txt)

2015-05-28  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should support interfaces with CustomConstructor and NoInterfaceObject
        https://bugs.webkit.org/show_bug.cgi?id=145016

        Reviewed by Darin Adler.

        Updated code generator to generate the necessary declarations (constructor property in the prototype, the constructor class).
        In the case of CustomConstructor with NoInterfaceObject, the implementation of the constructor property related JS function is changed as follow:
        It creates a constructor object and shadows the constructor property JS function with this object.
        This ensures that only one constructor object is created per prototype.
        The constructor is not exposed as it is not added to the global object constructor map.

        NoInterfaceObject is asking to not make the interface visible, which is contradictory with having a visible constructor of the interface.
        The case for having NoInterfaceObject and CustomConstructor is the following:
        We do not want to expose the interface but we still want to have a constructor property on the prototype of objects implementing the interface.
        One such case is https://streams.spec.whatwg.org/#globals

        Added TestCustomConstructorWithNoInterfaceObject.idl to check that case.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        (HasConstructorProperty):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObject.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCustomConstructorWithNoInterfaceObject):
        (webkit_dom_test_custom_constructor_with_no_interface_object_finalize):
        (webkit_dom_test_custom_constructor_with_no_interface_object_constructor):
        (webkit_dom_test_custom_constructor_with_no_interface_object_class_init):
        (webkit_dom_test_custom_constructor_with_no_interface_object_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObject.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObjectPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp: Added.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::createStructure):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::JSTestCustomConstructorWithNoInterfaceObjectPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::createStructure):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::JSTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::getConstructData):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::createPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::destroy):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::finalize):
        (WebCore::toJS):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h: Added.
        (WebCore::wrapperOwner):
        (WebCore::toJS):
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObject.h: Added.
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObject.mm: Added.
        (-[DOMTestCustomConstructorWithNoInterfaceObject dealloc]):
        (-[DOMTestCustomConstructorWithNoInterfaceObject finalize]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObjectInternal.h: Added.
        * bindings/scripts/test/TestCustomConstructor.idl: Added.

2015-05-19  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] When viewing an MJPEG stream as the main resource, only the first
        frame paints

        <https://bugs.webkit.org/show_bug.cgi?id=145185>
        <rdar://problem/20124694>

        This bug is caused by state not being restored between successive loads
        of multipart/x-mixed-replace content. Each part of the stream is not
        treated as a wholly new load, so if state is cleared as part of the
        previous page being destroyed, it may not be restored when loading
        the next stream part.

        On WK1, tile cache updates are disabled in FrameView::clear(), which is
        called as the previous page is destroyed, but were not being
        reenabled when loading new replacement content from the stream.

        On WK2, the exposed content rect was being reset to an empty rect as
        the previous page was destroyed, but it was not being reset by loading
        replacement content.

        To fix these issues, I added two WebFrameLoaderClient callbacks;
        willReplaceMultipartContent() and didReplaceMultipartContent(). These
        are used to save and restore state between successive loads.

        Reviewed by Darin Adler.

        * loader/DocumentLoader.cpp:
        Call the new client callbacks.
        (WebCore::DocumentLoader::commitLoad):
        If replacing content in a multipart/x-mixed-replace stream, call the
        WebFrameLoaderClient's didReplaceMultipartContent().

        (WebCore::DocumentLoader::setupForReplace):
        Call the WebFrameLoaderClient's willReplaceMultipartContent().

        * loader/EmptyClients.h:

        * loader/FrameLoaderClient.h:

        * page/FrameView.cpp:
        (WebCore::FrameView::didReplaceMultipartContent):
        Re-enable tile cache updates that were disabled in FrameView::clear().
        This fixes the issue for WK1.

        * page/FrameView.h:
        Declare an exported function, didReplaceMultipartContent(), that WebKit
        can call.

2015-05-27  Brady Eidson  <beidson@apple.com>

        Remove unused ResourceRequest "user initiated" flag.
        https://bugs.webkit.org/show_bug.cgi?id=145428

        Reviewed by Alexey Proskuryakov.

        No new tests (No change in behavior).

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::initiatedByUserGesture): Deleted.
        (WebCore::ResourceRequestBase::setInitiatedByUserGesture): Deleted.
        (WebCore::ResourceRequestBase::encodeWithoutPlatformData): Deleted.
        (WebCore::ResourceRequestBase::decodeWithoutPlatformData): Deleted.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Deleted.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Deleted.

        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Deleted.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Deleted.

2015-05-27  Brady Eidson  <beidson@apple.com>

        Add a "should open urls externally" flag to DocumentLoader.
        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145417

        Reviewed by Geoff Garen.

        No new tests (No change in behavior, testable at API level with a followup patch)

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTriggeringAction): Apply the current flag value to the 
          new NavigationAction so it can be used later.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setShouldOpenExternalURLsPolicy):
        (WebCore::DocumentLoader::shouldOpenExternalURLsPolicy):
        (WebCore::DocumentLoader::setTriggeringAction): Deleted.

        FrameLoadRequest should hold the new flag to pass into FrameLoader machinery:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldOpenExternalURLsPolicy):
        (WebCore::FrameLoadRequest::shouldOpenExternalURLsPolicy):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load): Set the flag on the newly created DocumentLoader but
          only if it is for the main frame.

        * loader/FrameLoaderTypes.h: Add a new enum for the flag.

        Navigation action should hold the new flag to pass to the policy delegate:
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::NavigationAction):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::shouldOpenExternalURLsPolicy):
        (WebCore::NavigationAction::setShouldOpenExternalURLsPolicy):

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Include the flag from the DocumentLoader
          in the NavigationAction.

2015-05-27  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in WebCore/Modules - 2
        https://bugs.webkit.org/show_bug.cgi?id=145304

        Reviewed by Darin Adler.

        As a step to remove PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr.

        No new tests, no behavior changes

        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AllAudioCapabilities.h:
        (WebCore::AllAudioCapabilities::create):
        * Modules/mediastream/AllVideoCapabilities.h:
        (WebCore::AllVideoCapabilities::create):
        * Modules/mediastream/CapabilityRange.cpp:
        (WebCore::CapabilityRange::create):
        * Modules/mediastream/CapabilityRange.h:
        * Modules/mediastream/MediaSourceStates.cpp:
        (WebCore::MediaSourceStates::create):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::create):
        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
        (WebCore::MediaStreamTrackSourcesRequest::create):
        * Modules/mediastream/MediaTrackConstraint.cpp:
        (WebCore::MediaTrackConstraint::create):
        * Modules/mediastream/MediaTrackConstraint.h:
        * Modules/mediastream/RTCConfiguration.h:
        (WebCore::RTCConfiguration::create):
        * Modules/mediastream/RTCIceServer.h:
        (WebCore::RTCIceServer::create):
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        * Modules/mediastream/RTCSessionDescription.h:
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp:
        (WebCore::RTCSessionDescriptionRequestImpl::create):
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::create):
        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::create):
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::create):
        * Modules/mediastream/RTCStatsResponse.h:
        * Modules/mediastream/RTCVoidRequestImpl.cpp:
        (WebCore::RTCVoidRequestImpl::create):
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/mediastream/SourceInfo.cpp:
        (WebCore::SourceInfo::create):
        * Modules/mediastream/SourceInfo.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/quota/StorageInfo.h:
        (WebCore::StorageInfo::create):
        * Modules/quota/StorageQuota.h:
        (WebCore::StorageQuota::create):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::create):
        * Modules/speech/SpeechSynthesis.h:
        * Modules/speech/SpeechSynthesisUtterance.cpp:
        (WebCore::SpeechSynthesisUtterance::create):
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/speech/SpeechSynthesisVoice.cpp:
        (WebCore::SpeechSynthesisVoice::create):
        * Modules/speech/SpeechSynthesisVoice.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        (WebCore::DefaultAudioDestinationNode::create):
        * Modules/webaudio/GainNode.h:
        (WebCore::GainNode::create):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::create):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::create):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::create):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::setType):
        * Modules/webaudio/PannerNode.h:
        (WebCore::PannerNode::create):
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::create):
        (WebCore::PeriodicWave::createSine):
        (WebCore::PeriodicWave::createSquare):
        (WebCore::PeriodicWave::createSawtooth):
        (WebCore::PeriodicWave::createTriangle):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperNode.h:
        (WebCore::WaveShaperNode::create):

2015-05-27  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r183820): webkit.org/blog/ background painting issue on reload, when the page contains videos
        https://bugs.webkit.org/show_bug.cgi?id=145420

        Reviewed by Dean Jackson.

        After r183820, the media controls no longer had a wrapper that created CSS stacking context.
        The media controls on Mac use mix-blend-mode, which causes the compositing code to look for
        a stacking context ancestor and make it composited. After this change, it would walk up
        to a layer outside of the media element (e.g. the document element's layer), and make
        that composited. This triggered bugs with root background painting.

        Prevent mix-blend-mode affecting content outside the media elements by having the media element's
        layer act as a stacking context.

        Test: media/controls-layers.html

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

2015-05-27  Andreas Kling  <akling@apple.com>

        [WK2] Local storage areas should get torn down when they have no remaining references.
        <https://webkit.org/b/143339>
        <rdar://problem/20156436>

        Reviewed by Darin Adler.

        Add StorageArea::securityOrigin() implementations.

        * loader/EmptyClients.cpp:
        * storage/StorageArea.h:

2015-05-27  Dean Jackson  <dino@apple.com>

        img.currentSrc problem in strict mode with old picturefill
        https://bugs.webkit.org/show_bug.cgi?id=144095
        <rdar://problem/21087013>

        Reviewed by Simon Fraser.

        Add a PICTURE_SIZES flag. This allows us to easily remove the currentSrc
        attribute on HTMLImageElement, which is causing some issues with
        <picture> polyfills.

        * Configurations/FeatureDefines.xcconfig:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate): Add guard around use of m_currentSrc.
        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl: Guard the currentSrc attribute.
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):

2015-05-27  Daniel Bates  <dabates@apple.com>

        Attempt to fix internal build following <http://trac.webkit.org/changeset/184760>
        (https://bugs.webkit.org/show_bug.cgi?id=145289)

        Reviewed by Jer Noble.

        * platform/spi/mac/AVFoundationSPI.h:

2015-05-27  Jeremy Jones  <jeremyj@apple.com>

        Refactor WebKit1 specific threading code out of WebVideoFullscreen code that is shared with WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=143954

        Reviewed by Darin Adler.

        WebVideoFullscreenInterfaceAVKit is used in both WebKit1 and WebKit2. In WebKit1, the model runs in the WebThread, while
        the interface is on the main thread. So there is code to dispatch between these two thread when communicating between the
        interface and the model. In WebKit2, this is handled automatically by the IPC mechanism. As a result, the threading code
        in WebVideoFullscreenbInterfaceAVKit and in WebVideoFullscreenModelVideoElement is redundant in WebKit2 and relies on
        WebThreadRun being a no-op in WebKit2.

        This change clarifies this and simplifies the WebKit2 path by moving the WebKit1 specific threading code into
        WebVideoFullscreenControllerContext, which is the WebKit1 specific controller.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (WebVideoFullscreenControllerContext::WebVideoFullscreenControllerContext):
        (WebVideoFullscreenControllerContext::setController):
        (WebVideoFullscreenControllerContext::didSetupFullscreen):
        (WebVideoFullscreenControllerContext::didExitFullscreen):
        (WebVideoFullscreenControllerContext::didCleanupFullscreen):
        (WebVideoFullscreenControllerContext::fullscreenMayReturnToInline):
        (WebVideoFullscreenControllerContext::resetMediaState):
        (WebVideoFullscreenControllerContext::setDuration):
        (WebVideoFullscreenControllerContext::setCurrentTime):
        (WebVideoFullscreenControllerContext::setBufferedTime):
        (WebVideoFullscreenControllerContext::setRate):
        (WebVideoFullscreenControllerContext::setVideoDimensions):
        (WebVideoFullscreenControllerContext::setSeekableRanges):
        (WebVideoFullscreenControllerContext::setCanPlayFastReverse):
        (WebVideoFullscreenControllerContext::setAudioMediaSelectionOptions):
        (WebVideoFullscreenControllerContext::setLegibleMediaSelectionOptions):
        (WebVideoFullscreenControllerContext::setExternalPlayback):
        (WebVideoFullscreenControllerContext::play):
        (WebVideoFullscreenControllerContext::pause):
        (WebVideoFullscreenControllerContext::togglePlayState):
        (WebVideoFullscreenControllerContext::beginScrubbing):
        (WebVideoFullscreenControllerContext::endScrubbing):
        (WebVideoFullscreenControllerContext::seekToTime):
        (WebVideoFullscreenControllerContext::fastSeek):
        (WebVideoFullscreenControllerContext::beginScanningForward):
        (WebVideoFullscreenControllerContext::beginScanningBackward):
        (WebVideoFullscreenControllerContext::endScanning):
        (WebVideoFullscreenControllerContext::requestExitFullscreen):
        (WebVideoFullscreenControllerContext::setVideoLayerFrame):
        (WebVideoFullscreenControllerContext::setVideoLayerGravity):
        (WebVideoFullscreenControllerContext::selectAudioMediaOption):
        (WebVideoFullscreenControllerContext::selectLegibleMediaOption):
        (WebVideoFullscreenControllerContext::fullscreenModeChanged):
        (WebVideoFullscreenControllerContext::setupFullscreen):
        (WebVideoFullscreenControllerContext::exitFullscreen):
        (WebVideoFullscreenControllerContext::requestHideAndExitFullscreen):
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController enterFullscreen:mode:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        (-[WebVideoFullscreenController requestHideAndExitFullscreen]):
        (-[WebVideoFullscreenController didFinishFullscreen:]):
        (WebVideoFullscreenControllerChangeObserver::setTarget): Deleted.
        (-[WebVideoFullscreenController didSetupFullscreen]): Deleted.
        (-[WebVideoFullscreenController didEnterFullscreen]): Deleted.
        (-[WebVideoFullscreenController didExitFullscreen]): Deleted.
        (-[WebVideoFullscreenController didCleanupFullscreen]): Deleted.
        (-[WebVideoFullscreenController fullscreenMayReturnToInline]): Deleted.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer setBounds:]):
        (-[WebAVVideoLayer resolveBounds]):
        (WebVideoFullscreenInterfaceAVKit::resetMediaState):
        (WebVideoFullscreenInterfaceAVKit::setDuration):
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime):
        (WebVideoFullscreenInterfaceAVKit::setBufferedTime):
        (WebVideoFullscreenInterfaceAVKit::setRate):
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions):
        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges):
        (WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse):
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions):
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions):
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal):
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal):
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen):
        (WebVideoFullscreenInterfaceAVKit::setVideoLayerFrame):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Deleted.
        * platform/ios/WebVideoFullscreenModel.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoFullscreenLayer):
        (WebVideoFullscreenModelVideoElement::play):
        (WebVideoFullscreenModelVideoElement::pause):
        (WebVideoFullscreenModelVideoElement::togglePlayState):
        (WebVideoFullscreenModelVideoElement::beginScrubbing):
        (WebVideoFullscreenModelVideoElement::endScrubbing):
        (WebVideoFullscreenModelVideoElement::seekToTime):
        (WebVideoFullscreenModelVideoElement::fastSeek):
        (WebVideoFullscreenModelVideoElement::beginScanningForward):
        (WebVideoFullscreenModelVideoElement::beginScanningBackward):
        (WebVideoFullscreenModelVideoElement::endScanning):
        (WebVideoFullscreenModelVideoElement::requestExitFullscreen):
        (WebVideoFullscreenModelVideoElement::fullscreenModeChanged):
        (WebVideoFullscreenModelVideoElement::videoLayerFrame): Deleted.
        (WebVideoFullscreenModelVideoElement::videoLayerGravity): Deleted.

2015-05-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] short-circuit MIME type lookup when possible
        https://bugs.webkit.org/show_bug.cgi?id=145362

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::isUnsupportedMIMEType): Renamed from unsupportedMIMEType. Convert type to lower case
        once instead of calling equalIgnoringCase many times.
        (WebCore::staticMIMETypeList): Renamed from staticMimeTypeCache. Initialize static set in a lambda,
        using an array of C strings in a loop.
        (WebCore::avfMIMETypes): Renamed from avfMimeTypeCache. Initialize static set in a lambda.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getSupportedTypes): avfMimeTypeCache -> avfMIMETypes.
        (WebCore::keySystemIsSupported): equalIgnoringCase -> equalIgnoringASCIICase.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem): unsupportedMIMEType -> 
        isUnsupportedMIMEType, equalIgnoringCase -> equalIgnoringASCIICase, staticMimeTypeCache -> 
        staticMIMETypeList, avfMimeTypeCache -> avfMIMETypes.
        (WebCore::unsupportedMIMEType): Deleted.
        (WebCore::staticMimeTypeCache): Deleted.
        (WebCore::avfMimeTypeCache): Deleted.

2015-05-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] short-circuit MIME type lookup when possible
        https://bugs.webkit.org/show_bug.cgi?id=145362

        Reviewed by Dean Jackson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::unsupportedMIMEType): New, reject types known to not be supported.
        (WebCore::staticMimeTypeCache): Accept MIME types known to be supported.
        (WebCore::avfMimeTypeCache): Renamed from mimeTypeCache.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::getSupportedTypes): mimeTypeCache -> staticMimeTypeCache.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Return immediately if
        unsupportedMIMEType returns true, don't call AVFoundation if staticMimeTypeCache returns true.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem): Ditto.
        (WebCore::mimeTypeCache): Deleted.

2015-05-27  Eric Carlson  <eric.carlson@apple.com>

        [Mac] occasional crash in MediaPlayerPrivateAVFoundationObjC::didStopLoadingRequest
        https://bugs.webkit.org/show_bug.cgi?id=145409

        Reviewed by Dean Jackson.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::stopLoading): NULL-check m_avRequest.

2015-05-26  Dean Jackson  <dino@apple.com>

        Backdrop filters don't animate
        https://bugs.webkit.org/show_bug.cgi?id=145386
        <rdar://problem/21110037>

        Reviewed by Simon Fraser.

        Add support for animation of backdrop filters.

        Note that, at the moment, we can only animate/transition
        backdrop-filter if it is already present on the element. See
        https://bugs.webkit.org/show_bug.cgi?id=145107

        Test: css3/filters/backdrop/animation.html

        * page/animation/AnimationBase.h: Add m_backdropFilterFunctionListsMatch and backdropFilterFunctionListsMatch.
        (WebCore::AnimationBase::backdropFilterFunctionListsMatch):

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): backdrop-filter is also supported.
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::PropertyWrapperAcceleratedBackdropFilter): Added. Works
        similarly to the PropertyWrapperAcceleratedFilter.
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::animationIsAccelerated):
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::blend):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Construct the
        PropertyWrapperAcceleratedBackdropFilter.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset): Call checkForMatchingBackdropFilterFunctionLists.
        (WebCore::ImplicitAnimation::validateTransformFunctionList): Fix typo.
        (WebCore::ImplicitAnimation::checkForMatchingFilterFunctionLists): Remove whitespace.
        (WebCore::ImplicitAnimation::checkForMatchingBackdropFilterFunctionLists): New method that
        checks if the individual filters in a filter list match.
        * page/animation/ImplicitAnimation.h: Add checkForMatchingBackdropFilterFunctionLists.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation): Call checkForMatchingBackdropFilterFunctionLists.
        (WebCore::KeyframeAnimation::checkForMatchingBackdropFilterFunctionLists): Copied from
        checkForMatchingFilterFunctionLists, but calls backdropFilter() instead of filter().
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists): This was accidentally checking
        for backdrop filters as well, but it wouldn't have worked.
        * page/animation/KeyframeAnimation.h: Add checkForMatchingBackdropFilterFunctionLists.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateFilterOperations): Modify the ASSERT to allow AnimatedPropertyWebkitBackdropFilter.
        * platform/graphics/GraphicsLayerClient.h: Add AnimatedPropertyWebkitBackdropFilter to the enum.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString): Support new enum.
        (WebCore::GraphicsLayerCA::addAnimation): Support AnimatedPropertyWebkitBackdropFilter.
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes): Ditto.
        (WebCore::GraphicsLayerCA::animatedLayer): Use a switch statement now that we have more than
        two options, and handle AnimatedPropertyWebkitBackdropFilter.
        (WebCore::GraphicsLayerCA::updateAnimations): Deleted a blank line.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation): Support animation of backdrop-filter.
        (WebCore::RenderLayerBacking::startTransition): Ditto. Copied the code from the filter transition.
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

2015-05-27  Jeremy Jones  <jeremyj@apple.com>

        Handle case where -startOptimizedFullscreen fails.
        https://bugs.webkit.org/show_bug.cgi?id=145340

        Reviewed by Eric Carlson.

        Add new AVPlayerViewController delegate methods and remove old ones.
        -startOptimizedFullscreen can either fail silently because it is not allowed or it will call a delegate.
        We prevent silent failure by testing preconditions in enterFullscreenOptimized, and add the 
        delegate -playerViewControllerFailedToStartOptimizedFullscreen to handle explicitly failure.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: added/removed method declarations.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 
        (-[WebAVPlayerController playerViewControllerFailedToStartOptimizedFullscreen:withError:]): Added.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized): Handle silent failure.
        (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen): Hide window on main thread.
        (WebVideoFullscreenInterfaceAVKit::failedToStartOptimizedFullscreen): Added
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscreen:]): Deleted.
        (-[WebAVPlayerController playerViewControllerDidCancelOptimizedFullscreen:]): Deleted.
        (WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen): Deleted.
        (WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen): Deleted.
        * platform/spi/cocoa/AVKitSPI.h: Remove dead SPI. Add isOptimizedFullscreenPossible.

2015-05-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Arabic ligatures are broken in Google Maps
        https://bugs.webkit.org/show_bug.cgi?id=145336
        <rdar://problem/20689607>

        Reviewed by Darin Adler.

        When we fall off the end of the font fallback list, we ask the platform for which particular font we should use
        to display a particular codepoint. When we do this, we supply the font which is first in the fallback list so
        that the platform can try to match it as best it can. However, web fonts' FontPlatformData have a null m_font
        property, which means that we were passing nullptr to this platform fallback function.

        The solution is something I've wanted to do for a while, which is migrate webfonts from using
        CGDataProviderCreateWithCFData() to using CTFontManagerCreateFontDescriptorFromData(). This call creates a
        CoreText font for an in-memory buffer (the old call was creating a CoreGraphics front from the same thing).
        This means that we can use the FontPlatformData constructor which accepts a CoreText font, thereby making web
        fonts not have a null m_font property. Note that not all platforms can use this call, which means that this
        new codepath is gated to only certain OSes (which is okay because only certain OSes use the
        CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage() call inside FontCache). Because web fonts are the
        only user of the constructor which just takes a CG font, we can make the constructor private to the
        FontPlatformData class (as soon as all platforms can use this new codepath).

        Test: platform/ios-simulator/fast/text/arabic-with-no-supporting-webfont.html

        * platform/graphics/FontPlatformData.h: Make the FontPlatformData constructor which takes a CGFontRef private.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Use the CoreText type instead of the CoreGraphics type.
        (WebCore::createFontCustomPlatformData): Migrate to CTFontManagerCreateFontDescriptorFromData().
        * platform/graphics/mac/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Store a CTFontDescriptorRef instead of a CGFontRef.

2015-05-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        An SVG with no intrinsic size does not draw correct slices when used as a border-image for an HTML element.
        https://bugs.webkit.org/show_bug.cgi?id=139405

        Reviewed by Darin Adler.
        
        When using a non-intrinsic-sized image as an image-border, all the source
        slices have to be extracted from the top-left corner of the source image.
        This is because the right and bottom sides of the image can not be known.
        Also all the slices should not be stretched. In other words, the sizes of
        source slices for a non-intrinsic-sized image should be equal to the sizes
        of the destination container slices.

        This is not compliant with the css3 w3c specs. I think the specs makes it
        harder to predict what exactly will be drawn for the image-border in this
        case. See http://www.w3.org/TR/css3-background/#border-image-slice. This
        approach is implemented by FireFox. And I think it gives a more predictable 
        rendering for image-border in the case of non-intrinsic-sized images.
        
        Test: fast/borders/border-image-fill-no-intrinsic-size.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/LengthBox.cpp: Removed.
        * platform/graphics/LayoutBoxExtent.cpp: Removed.
        * platform/graphics/LayoutBoxExtent.h: Removed.
        * platform/graphics/LayoutRect.h:
        Delete LengthBox.cpp and move all the functionalities to LengthBox.h.
        Delete LayoutBoxExtent.cpp since it is the same class as LengthBox.
        
        * css/CSSProperty.cpp:
        * platform/text/WritingMode.h:
        Move the enums LogicalBoxSide and PhysicalBoxSide
        from CSSProperty.cpp to WritingMode.h so it can be used by other classes.
        
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapNinePieceImageSlice):
        (WebCore::CSSToStyleMap::mapNinePieceImageQuad):
        * css/CSSToStyleMap.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::marginLogicalLeft):
        (WebCore::RenderBox::marginLogicalRight):
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setClip):
        (WebCore::RenderStyle::noneDashboardRegions):
        * rendering/style/RenderStyle.h:
        Use the new BoxExtent access methods for getting and settings the sides of
        LengthBox and LayoutBoxExtent.
        
        * platform/LengthBox.h:
        (WebCore::BoxExtent::BoxExtent):
        (WebCore::BoxExtent::at):
        (WebCore::BoxExtent::top):
        (WebCore::BoxExtent::right):
        (WebCore::BoxExtent::bottom):
        (WebCore::BoxExtent::left):
        (WebCore::BoxExtent::setAt):
        (WebCore::BoxExtent::setTop):
        (WebCore::BoxExtent::setRight):
        (WebCore::BoxExtent::setBottom):
        (WebCore::BoxExtent::setLeft):
        (WebCore::BoxExtent::before):
        (WebCore::BoxExtent::end):
        (WebCore::BoxExtent::after):
        (WebCore::BoxExtent::start):
        (WebCore::BoxExtent::setBefore):
        (WebCore::BoxExtent::setEnd):
        (WebCore::BoxExtent::setAfter):
        (WebCore::BoxExtent::setStart):
        (WebCore::BoxExtent::operator==):
        (WebCore::BoxExtent::operator!=):
        (WebCore::LengthBox::LengthBox):
        (WebCore::LengthBox::isZero):
        (WebCore::LengthBox::left): Deleted.
        (WebCore::LengthBox::right): Deleted.
        (WebCore::LengthBox::top): Deleted.
        (WebCore::LengthBox::bottom): Deleted.
        (WebCore::LengthBox::operator==): Deleted.
        (WebCore::LengthBox::operator!=): Deleted.
        (WebCore::LengthBox::nonZero): Deleted.
        Define a new template class for 'BoxExtent'. A 'BoxExtent' represents the
        extent of four sides of a box. Use this class template to define the exiting 
        classes 'LengthBox' and 'LayoutBoxExtent'. Use it also to and define the
        new class FloatBoxExtent
            
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::updateContent):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage):
        Change the return value of calculateImageIntrinsicDimensions() to be a
        bool which indicates whether the image has an intrinsic size or not. Add
        a new reference argument to this function receive the resolved image size.
        
        (WebCore::RenderBoxModelObject::paintNinePieceImage): Move all the painting
        code of this function to NinePieceImage::paint()
        
        (WebCore::computeBorderImageSide): Deleted.
        Renamed to be NinePieceImage::computeSlice().
        
        * rendering/style/BorderData.h:
        (WebCore::BorderData::borderWidth): Add a new method to return the extents
        of the border in a FloatBoxExtent.
        
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::computeSlice): Moved from NinePieceImage::computeSlice().
        
        (WebCore::NinePieceImage::computeSlices): The first version of this function
        computes the slices given their lengths. The slices have to be clamped to
        the container size. The second version of this function computes the slices
        given their lengths, their actual extents and their source slices.
        
        (WebCore::NinePieceImage::scaleSlicesIfNeeded):  Reduce the slices if they
        are too large.
        
        (WebCore::NinePieceImage::isEmptyPieceRect): Returns true if an ImagePiece
        should not be drawn.
        
        (WebCore::NinePieceImage::horizontalTileRules):
        (WebCore::NinePieceImage::verticalTileRules):
        Fill vectors of tiling rules to be passed to GraphicsContext::drawTiledImage()
        
        (WebCore::NinePieceImage::computeIntrinsicRects): Computes the nine pieces
        rectangles for an intrinsic-sized container.
        
        (WebCore::NinePieceImage::computeNonIntrinsicRects): Computes the nine
        pieces rectangles for an non-intrinsic-sized source image. The computed
        rectangles have to start at (0, 0) and their sizes should be equal to
        the sizes of the nine pieces rectangles of the destination container.
        
        (WebCore::NinePieceImage::computeIntrinsicSideTileScale):
        (WebCore::NinePieceImage::computeIntrinsicMiddleTileScale):
        (WebCore::NinePieceImage::computeIntrinsicTileScales):
        (WebCore::NinePieceImage::computeNonIntrinsicTileScales):
        Computes the scaling factors for drawing the tiles. For non-intrinsic source
        images, there should not be any scaling factors. 
        
        (WebCore::NinePieceImage::paint): Moved from RenderBoxModelObject::paintNinePieceImage()
        but simplified and restructured.
        
        (WebCore::NinePieceImageData::NinePieceImageData): Use nullptr instead of 0.
        
        * rendering/style/NinePieceImage.h:
        (WebCore::operator++):
        (WebCore::isCornerPiece): 
        (WebCore::isMiddlePiece):
        (WebCore::imagePieceHorizontalSide):
        (WebCore::imagePieceVerticalSide):
        Add helper functions for the enum ImagePiece.

2015-05-26  Andreas Kling  <akling@apple.com>

        <font face> doesn't support plus character in font family names.
        <https://webkit.org/b/145400>
        <rdar://problem/21097484>

        Reviewed by Darin Adler.

        Turn CSSParser::parseFontFaceValue() into a fast-path parser for
        <font face> attributes.
        Going through the full CSS parser was hurting us here, as it would
        misunderstand unquoted family names and choke on e.g '+'.

        Test: fast/dom/HTMLFontElement/face-attribute.html

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

2015-05-26  Chris Fleizach  <cfleizach@apple.com>

        AX: display:none content exposed to accessibility when aria-hidden is toggled on ancestor element
        https://bugs.webkit.org/show_bug.cgi?id=139142

        Reviewed by Darin Adler.
     
        Amend the code that determines when an invisible, but aria-hidden=false, element is exposed to accessibility.

        The new guideline is that you must have aria-hidden=false on every node that is not rendered (except text which inherits)
        otherwise the element will not be visible.

        Modified existing test: accessibility/aria-hidden-false-works-in-subtrees.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::isNodeAriaVisible):
        (WebCore::AXObjectCache::rootWebArea):

2015-05-26  Roger Fong  <roger_fong@apple.com>

        Enable element unsigned index in WebGL2 again.
        https://bugs.webkit.org/show_bug.cgi?id=145392
        <rdar://problem/21112585>.

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateDrawElements):
        Fix some incorrect logic that disables the feature for WebGL2.

2015-05-26  Chris Dumez  <cdumez@apple.com>

        Add assertions to make sure pages in the PageCache are not loading
        https://bugs.webkit.org/show_bug.cgi?id=145397
        <rdar://problem/20613631>

        Reviewed by Antti Koivisto.

        Add assertions to make sure pages in the PageCache are not loading.
        These will hopefully help track down why PacheCache entries sometimes
        have pending subresource loads when being destroyed.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoadingSubresources):
        (WebCore::DocumentLoader::addSubresourceLoader):

2015-05-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184872.
        https://bugs.webkit.org/show_bug.cgi?id=145396

        Bindings tests broken on the bots. (Requested by dethbakin on
        #webkit).

        Reverted changeset:

        "Binding generator should support interfaces with
        CustomConstructor and NoInterfaceObject"
        https://bugs.webkit.org/show_bug.cgi?id=145016
        http://trac.webkit.org/changeset/184872

2015-05-26  Zalan Bujtas  <zalan@apple.com>

        Overhanging float sets are not cleaned up properly when floating renderer is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=145323
        rdar://problem/20980628

        Reviewed by Dave Hyatt.

        This patch ensures when an overhanging float renderer is destroyed,
        all the sibling containers' floating object set(m_floatingObjects) gets properly cleaned up.

        When an overhanging float is present, we cache the renderer on the parent and on the affected
        sibling containers too. (RenderBlockFlow::m_floatingObjects) These caches(sets) get cleared and repopulated
        during ::layout(). In order to have a float renderer removed from a set, a layout needs to be initiated on the container.
        This is normally done through RenderBlockFlow::markSiblingsWithFloatsForLayout() and RenderBlockFlow::markAllDescendantsWithFloatsForLayout().
        However, when the float container's parent's writing direction changes (and we promote the children containers to new formatting contexts),
        the layout propagation through siblings does not work anymore.

        The avoidsFloats() check in RenderBlockFlow::markSiblingsWithFloatsForLayout() has very little performance gain, but it prevents us
        from propagating layout to siblings when certain properties of the parent container changes.

        Test: fast/block/float/crash-when-floating-object-is-removed.xhtml

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::markSiblingsWithFloatsForLayout):
        * rendering/RenderBox.cpp:
        (WebCore::outermostBlockContainingFloatingObject):
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):
        (WebCore::RenderBox::outermostBlockContainingFloatingObject): Deleted.
        * rendering/RenderBox.h:

2015-05-26  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL][CoordinatedGraphics] Remove CoordinatedTileClient and CoordinatedTileBackend
        https://bugs.webkit.org/show_bug.cgi?id=133337

        Reviewed by Darin Adler.

        This patch simplifies relationship between CoordinatedGraphicsLayer and TiledBackingStore
        by removing TiledBackingStoreBackend because TiledBackingStore only support
        CoordinatedTileBackend.
        And it also moves CoordinatedTileClient interface to TiledBackingStoreClient.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp:
        (WebCore::CoordinatedTile::create):
        (WebCore::CoordinatedTile::CoordinatedTile):
        (WebCore::CoordinatedTile::~CoordinatedTile):
        (WebCore::CoordinatedTile::updateBackBuffer):
        (WebCore::CoordinatedTileBackend::CoordinatedTileBackend): Deleted.
        (WebCore::CoordinatedTileBackend::createTile): Deleted.
        (WebCore::CoordinatedTileBackend::paintCheckerPattern): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        (WebCore::CoordinatedTile::create): Deleted.
        (WebCore::CoordinatedTileClient::~CoordinatedTileClient): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        * platform/graphics/texmap/coordinated/TiledBackingStoreBackend.h: Removed.
        (WebCore::TiledBackingStoreBackend::~TiledBackingStoreBackend): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h:

2015-05-26  Daegyu Lee  <daegyu.lee@navercorp.com>

        Fullscreen video does not display on platforms without accelerated video rendering
        https://bugs.webkit.org/show_bug.cgi?id=145118

        In order to paint video contents in fullscreen mode, add supportsAcceleratedRendering condition. 

        Reviewed by Simon Fraser.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

2015-05-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG fragment identifier rendering issue
        https://bugs.webkit.org/show_bug.cgi?id=137328

        Reviewed by Darin Adler.

        This is a follow up for http://trac.webkit.org/changeset/164983. In this
        changeset, scrolling to the fragment should have been added before the
        the paint to guarantee setting the proper display position for the SVG
        fragment.

        Test: svg/css/svg-resource-fragment-identifier-order.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Move view->scrollToFragment() before calling 
        view->paint().

2015-05-26  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Binding generator should support interfaces with CustomConstructor and NoInterfaceObject
        https://bugs.webkit.org/show_bug.cgi?id=145016

        Reviewed by Darin Adler.

        Updated code generator to generate the necessary declarations (constructor property in the prototype, the constructor class).
        In the case of CustomConstructor with NoInterfaceObject, the implementation of the constructor property related JS function is changed as follow:
        It creates a constructor object and shadows the constructor property JS function with this object.
        This ensures that only one constructor object is created per prototype.
        The constructor is not exposed as it is not added to the global object constructor map.

        NoInterfaceObject is asking to not make the interface visible, which is contradictory with having a visible constructor of the interface.
        The case for having NoInterfaceObject and CustomConstructor is the following:
        We do not want to expose the interface but we still want to have a constructor property on the prototype of objects implementing the interface.
        One such case is https://streams.spec.whatwg.org/#globals

        Added TestCustomConstructorWithNoInterfaceObject.idl to check that case.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        (HasConstructorProperty):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObject.cpp: Added.
        (WebKit::kit):
        (WebKit::core):
        (WebKit::wrapTestCustomConstructorWithNoInterfaceObject):
        (webkit_dom_test_custom_constructor_with_no_interface_object_finalize):
        (webkit_dom_test_custom_constructor_with_no_interface_object_constructor):
        (webkit_dom_test_custom_constructor_with_no_interface_object_class_init):
        (webkit_dom_test_custom_constructor_with_no_interface_object_init):
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObject.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestCustomConstructorWithNoInterfaceObjectPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp: Added.
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::createStructure):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::JSTestCustomConstructorWithNoInterfaceObjectPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::create):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::createStructure):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::JSTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::getConstructData):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::createPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getPrototype):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::destroy):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject):
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::isReachableFromOpaqueRoots):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::finalize):
        (WebCore::toJS):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h: Added.
        (WebCore::wrapperOwner):
        (WebCore::toJS):
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObject.h: Added.
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObject.mm: Added.
        (-[DOMTestCustomConstructorWithNoInterfaceObject dealloc]):
        (-[DOMTestCustomConstructorWithNoInterfaceObject finalize]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestCustomConstructorWithNoInterfaceObjectInternal.h: Added.
        * bindings/scripts/test/TestCustomConstructor.idl: Added.

2015-05-26  Joseph Pecoraro  <pecoraro@apple.com>

        CSS properties (font-synthesis, column-fill) are missing in getComputedStyles
        https://bugs.webkit.org/show_bug.cgi?id=145343

        Reviewed by Timothy Hatcher.

        * css/CSSComputedStyleDeclaration.cpp:

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2015-05-26  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Build SVGPathElement.cpp with -O2 due to a GCC bug
        https://bugs.webkit.org/show_bug.cgi?id=145377

        Reviewed by Carlos Garcia Campos.

        * CMakeLists.txt:

2015-05-25  Dan Bernstein  <mitz@apple.com>

        Fixed a failing bindings test after r184853.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation): Removed an extraneous semicolon.

2015-05-25  Dan Bernstein  <mitz@apple.com>

        ASSERT_MAIN_THREAD and DOM_ASSERT_MAIN_THREAD are unnecessary no-ops
        https://bugs.webkit.org/show_bug.cgi?id=145372

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed DISABLE_THREAD_CHECK from DEBUG_DEFINES.

        * bindings/objc/DOMAbstractView.mm:
        (-[DOMAbstractView dealloc]): Removed use of DOM_ASSERT_MAIN_THREAD.
        (kit): Ditto.

        * bindings/objc/ExceptionHandlers.h: Removed definition of DOM_ASSERT_MAIN_THREAD.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateImplementation): Don’t emit DOM_ASSERT_MAIN_THREAD.

        Updated expected bindings test results:
        * bindings/scripts/test/ObjC/DOMFloat64Array.mm:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.mm:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.mm:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.mm:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.mm:
        * bindings/scripts/test/ObjC/DOMTestException.mm:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm:
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.mm:
        * bindings/scripts/test/ObjC/DOMTestNode.mm:
        * bindings/scripts/test/ObjC/DOMTestNondeterministic.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.mm:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        * bindings/scripts/test/ObjC/DOMattribute.mm:
        * bindings/scripts/test/ObjC/DOMreadonly.mm:

2015-05-25  Hunseop Jeong  <hs85.jeong@samsung.com>

        Replaced 0 with nullptr in WebCore/svg.
        https://bugs.webkit.org/show_bug.cgi?id=145367

        Reviewed by Gyuyoung Kim.

        No new tests, no behavior changes.

        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::PatternAttributes):
        * svg/SVGAnimatedType.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::cursorElementRemoved):
        (WebCore::SVGElement::cursorImageValueRemoved):
        (WebCore::SVGElement::getPresentationAttribute):
        * svg/SVGException.cpp:
        (WebCore::SVGException::initializeDescription):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::clearResourceReferences):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::removedFrom):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGLength.h:
        (WebCore::SVGLength::blend):
        * svg/SVGPathBlender.cpp:
        (WebCore::SVGPathBlender::SVGPathBlender):
        (WebCore::SVGPathBlender::cleanup):
        * svg/SVGPathBuilder.cpp:
        (WebCore::SVGPathBuilder::SVGPathBuilder):
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStreamBuilder.cpp:
        (WebCore::SVGPathByteStreamBuilder::SVGPathByteStreamBuilder):
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::dPropertyInfo):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::SVGPathParser):
        (WebCore::SVGPathParser::cleanup):
        * svg/SVGPathSegListBuilder.cpp:
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::SVGPathTraversalStateBuilder):
        * svg/SVGPathUtilities.cpp:
        (WebCore::globalSVGPathBuilder):
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::globalSVGPathByteStreamBuilder):
        (WebCore::globalSVGPathStringBuilder):
        (WebCore::globalSVGPathTraversalStateBuilder):
        (WebCore::globalSVGPathParser):
        (WebCore::globalSVGPathBlender):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::pointsPropertyInfo):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::cast):
        (WebCore::SVGTRefTargetEventListener::SVGTRefTargetEventListener):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::textLengthPropertyInfo):
        * svg/SVGURIReference.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewBoxPropertyInfo):
        (WebCore::SVGViewSpec::preserveAspectRatioPropertyInfo):
        (WebCore::SVGViewSpec::transformPropertyInfo):
        * svg/SVGViewSpec.h:
        (WebCore::SVGViewSpec::resetContextElement):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::cast):
        (WebCore::ConditionEventListener::disconnectAnimation):
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::SVGSMILElement::removedFrom):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::clearEffects):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        * svg/properties/SVGAnimatedPropertyDescription.h:
        (WebCore::SVGAnimatedPropertyDescription::SVGAnimatedPropertyDescription):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::~SVGAnimatedPropertyTearOff):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::animationEnded):
        (WebCore::SVGAnimatedStaticPropertyTearOff::SVGAnimatedStaticPropertyTearOff):
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::SVGPropertyTearOff):

2015-05-24  Sam Weinig  <sam@webkit.org>

        Crash when using a removed ScriptMessageHandler
        <rdar://problem/20888499>
        https://bugs.webkit.org/show_bug.cgi?id=145359

        Reviewed by Dan Bernstein.

        Added tests:
            WKUserContentController.ScriptMessageHandlerBasicRemove
            WKUserContentController.ScriptMessageHandlerCallRemovedHandler

        * page/UserMessageHandler.cpp:
        (WebCore::UserMessageHandler::~UserMessageHandler):
        (WebCore::UserMessageHandler::postMessage):
        (WebCore::UserMessageHandler::name):
        * page/UserMessageHandler.h:
        (WebCore::UserMessageHandler::create):
        * page/UserMessageHandler.idl:
        * page/UserMessageHandlerDescriptor.cpp:
        (WebCore::UserMessageHandlerDescriptor::UserMessageHandlerDescriptor):
        * page/UserMessageHandlerDescriptor.h:
        (WebCore::UserMessageHandlerDescriptor::client):
        (WebCore::UserMessageHandlerDescriptor::invalidateClient):
        Add support for invalidating the descriptor and throw an exception if someone tries
        to post a message using an invalidated descriptor.

        * page/UserMessageHandlersNamespace.cpp:
        (WebCore::UserMessageHandlersNamespace::handler):
        Add logic to remove message handlers if their descriptor has been invalidated.

2015-05-23  Dan Bernstein  <mitz@apple.com>

        Remove unused definitions of WEBKIT_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=145345

        Reviewed by Sam Weinig.

        * Configurations/WebCore.xcconfig: Also changed to use $(inherited).

2015-05-24  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/svg.
        https://bugs.webkit.org/show_bug.cgi?id=145209

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::propertyTypesAreConsistent):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::~SVGCursorElement):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        (WebCore::hasLoadListener):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        (WebCore::SVGKerningMap::insert):
        (WebCore::stringMatchesUnicodeRange):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::append):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseBeginOrEnd):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::clearResultsRecursive):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedProperty.cpp:
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::detachListWrappersAndResize):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clearContextAndRoles):

2015-05-24  Jeremy Jones  <jeremyj@apple.com>

        Register media MIME types as supported by HTML view in WebKit1.
        https://bugs.webkit.org/show_bug.cgi?id=145356

        Reviewed by Eric Carlson.

        getSupportedMediaMIMETypes is now used in WebKit1.

        * platform/MIMETypeRegistry.h: Export getSupportedMediaMIMETypes.

2015-05-23  Antti Koivisto  <antti@apple.com>

        Permanent redirects should have long implicit cache lifetime
        https://bugs.webkit.org/show_bug.cgi?id=145348
        rdar://problem/20680519

        Reviewed by Sam Weinig.

        301 Moved Permanently response that doesn't specify explicit lifetime should have long implicit lifetime.
        This matches other browsers.

        * platform/network/CacheValidation.cpp:
        (WebCore::computeFreshnessLifetimeForHTTPFamily):

            Give 301 Moved Permanently (and similarly semantically permanent 410 Gone) long implicit lifetime.

        (WebCore::updateRedirectChainStatus):

2015-05-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Cleanup after r184796
        https://bugs.webkit.org/show_bug.cgi?id=145333

        Reviewed by Alexey Proskuryakov.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::RenderingStyleSaver::RenderingStyleSaver): Deleted.
        (WebCore::RenderingStyleSaver::~RenderingStyleSaver): Deleted.

2015-05-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        Introduce UniquedStringImpl and SymbolImpl to separate symbolic strings from AtomicStringImpl
        https://bugs.webkit.org/show_bug.cgi?id=144848

        Reviewed by Darin Adler.

        Use UniquedStringImpl, SymbolImpl and AtomicStringImpl.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):

2015-05-23  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Ignore -webkit-flow-*content while collecting text content for innerText.
        https://bugs.webkit.org/show_bug.cgi?id=145344
        rdar://problem/20959522

        Reviewed by Antti Koivisto.

        This patch ensures that when a -webkit-flow-into content is present in a simple line layout container,
        we skip it while collecting the text content for innerText.
        It's not always guaranteed that a simple line layout container only contains simple text nodes. In such cases,
        we need to ensure that text offset computing only takes the simple text nodes into account.

        Test: fast/text/simple-line-layout-inner-text-with-flow-content.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        * editing/TextIterator.h:

2015-05-22  Mark Lam  <mark.lam@apple.com>

        Document::ensurePlugInsInjectedScript() should evaluate the injected script on its own frame.
        https://bugs.webkit.org/show_bug.cgi?id=145328

        Reviewed by Jon Lee.

        trac.webkit.org/r184329 fixed HTMLPlugInImageElement::didAddUserAgentShadowRoot()
        to use the document's frame instead of the page's main frame.  However,
        Document::ensurePlugInsInjectedScript() is still evaluating the injected script on
        the main frame.

        As a result, HTMLPlugInImageElement::didAddUserAgentShadowRoot()'s attempt to get
        the injected createOverlay function from the document frame's global object will
        fail.  Fixing Document::ensurePlugInsInjectedScript() to evaluating the injected
        script on the document's frame fixes the issue.

        No new tests.

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

2015-05-22  Eric Carlson  <eric.carlson@apple.com>

        MediaPlayer doesn't need isPlayingToWirelessPlaybackTarget and isCurrentPlaybackTargetWireless
        https://bugs.webkit.org/show_bug.cgi?id=145325

        Reviewed by Brent Fulgham.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless): Call isCurrentPlaybackTargetWireless
        directly.
        (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): Ditto.
        (WebCore::HTMLMediaElement::isPlayingToWirelessPlaybackTarget): Ditto.
        (WebCore::HTMLMediaElement::mediaState): Ditto.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::currentPlaybackTargetIsWireless): Deleted.
        * html/HTMLMediaSession.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isPlayingToWirelessPlaybackTarget): Deleted.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::isPlayingToWirelessPlaybackTarget): Deleted.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isPlayingToWirelessPlaybackTarget): Deleted.

        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::updateForEventName): Call webkitCurrentPlaybackTargetIsWireless.

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsInline
        https://bugs.webkit.org/show_bug.cgi?id=145315

        Reviewed by Eric Carlson.

        Our API uses allowsInlineMediaPlayback. Our symbols should reflect the same.

        * page/Settings.cpp: Update the static variable name as well as the setting.
        * page/Settings.in: Ditto.

        * Modules/mediacontrols/MediaControlsHost.idl: Rename to allowsInlineMediaPlayback.
        Affects the media controls code.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::allowsInlineMediaPlayback):
        (WebCore::MediaControlsHost::mediaPlaybackAllowsInline): Deleted.

        Update to use the new name in the media controls.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.shouldHaveControls):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton):

        * css/MediaQueryEvaluator.cpp:
        (WebCore::video_playable_inlineMediaFeatureEval):
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback):

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsAirPlay
        https://bugs.webkit.org/show_bug.cgi?id=145316

        Reviewed by Eric Carlson.

        In preparation for an API rename, update internal symbols from mediaPlaybackAllowsAirPlay
        to allowsAirPlayForMediaPlayback.

        * page/Settings.in: Update the setting name.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::wirelessVideoPlaybackDisabled): Update the call to settings.
        * testing/InternalSettings.h: Update the name of the member variable.
        * testing/InternalSettings.cpp: Update the names and calls to settings.
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::InternalSettings):
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::setWirelessPlaybackDisabled):

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackRequiresUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=145314

        Reviewed by Anders Carlsson.

        In preparation for an API rename, update internal symbols from mediaPlaybackRequiresUserGesture
        to requiresUserGestureForMediaPlayback.

        * page/Settings.cpp: update static const default variable name.
        * page/Settings.in: update the setting name and static const default variable name.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon): Update settings call.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Ditto.

2015-05-22  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Figure out why list-detection2.html test fails on GTK
        https://bugs.webkit.org/show_bug.cgi?id=145273

        Reviewed by Chris Fleizach.

        Only consider the text under the pseudo element for GTK and EFL.
        The other platforms expose rendered text content through their
        own accessible objects. This will fix the crash on Windows until
        it can be looked into properly.

        No new tests. This should stop list-detection2.html to stop crashing on Windows.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):

2015-05-22  Jer Noble  <jer.noble@apple.com>

        [Mac] Audio tracks tagged as 'describes-video' are not automatically selected when that system accessibility option is set.
        https://bugs.webkit.org/show_bug.cgi?id=145228

        Reviewed by Eric Carlson.

        Tests: http/tests/media/hls/hls-accessiblity-describes-video.html
               media/accessiblity-describes-video.html

        Add support to CaptionUserPreferences to return the user's preferred audio characteristics,
        including "public.accessibility.describes-video". When the media accessibility options change,
        trigger the HTMLMediaElement to update the list of tracks, and chose a new audio track if
        appropriate. Manually filter those tracks matching the requested characteristics in
        MediaSelectionGroupAVFObjC.  Allow these characteristics to be overrided by Internals for
        testing purposes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::captionPreferencesChanged): Call tracksChanged().
        (WebCore::HTMLMediaElement::mediaPlayerPreferredAudioCharacteristics): Pass through to the page's caption preferences.
        * html/HTMLMediaElement.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::setPreferredAudioCharacteristic): Simple setter.
        (WebCore::CaptionUserPreferences::preferredAudioCharacteristics): Simple getter.
        * page/CaptionUserPreferences.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::~CaptionUserPreferencesMediaAF): Unregister for audio characteristics change notifications.
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges): Register for same.
        (WebCore::CaptionUserPreferencesMediaAF::setPreferredAudioCharacteristic): If in testing mode, pass to superclass; otherwise no-op.
        (WebCore::CaptionUserPreferencesMediaAF::preferredAudioCharacteristics): If in testing mode, pass to superclass;
            otherwise, ask the media accessibility framework.
        * page/CaptionUserPreferencesMediaAF.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::tracksChanged): Pass through to m_private.
        (WebCore::MediaPlayer::preferredAudioCharacteristics): Pass through to HTMLMediaElement.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerPreferredAudioCharacteristics): Added; return empty vector by default.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::tracksChanged): Added; no-op by default.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::create): Added characteristics parameter.
        (WebCore::MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC): Ditto.
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions): Add an additional filter against the
            passed-in characteristics.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::determineChangedTracksFromNewTracksAndOldItems): Pass the characteristics to the media selection group.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks): Pass in the user's preferred characteristics.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks): Pass in an empty vector.
        * testing/Internals.cpp:
        (WebCore::Internals::userPreferredAudioCharacteristics): Added; return the current setting.
        (WebCore::Internals::setUserPreferredAudioCharacteristic): Added; pass through to CaptionUserPreferences.
        * testing/Internals.h:
        * testing/Internals.idl:

        Add soft link macros which account for a possible failure to look up constants.

        * platform/cf/MediaAccessibilitySoftLink.cpp:
        * platform/cf/MediaAccessibilitySoftLink.h:
        * platform/mac/SoftLinking.h:
        * platform/win/SoftLinking.h:

2015-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Use CTFontDrawGlyphs() instead of CGContextShowGlyphsWithAdvances()/CGContextShowGlyphsAtPositions()
        https://bugs.webkit.org/show_bug.cgi?id=145234

        Reviewed by Enrica Casucci.

        Eventually, we want to migrate entirely off of text-related CoreGraphics calls
        and onto CoreText calls (in order to reduce complexity as well as eventually
        removing the need for FontPlatformData to hold a CGFontRef). There is an
        equivalent call to CGContextShowGlyphsWithAdvances() and
        CGContextShowGlyphsAtPositions(), namely, CTFontDrawGlyphs(), which we have
        found is as performant as its CoreGraphics counterparts. This patch simply
        migrates these two CG calls to its CT counterpart.

        Performance was measured on a iPhone 4s as well as a Mid 2010 Mac Pro.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showGlyphsWithAdvances):
        (WebCore::FontCascade::drawGlyphs):

2015-05-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Don't show default controls after playing to wireless target
        https://bugs.webkit.org/show_bug.cgi?id=145317

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePanelTransitionEnd): Don't show controls unless the video
        element has the 'controls' attribute.
        (Controller.prototype.setPlaying): Check this.video.controls directly because we never want
        to show controls unless the attribute is present.
        (Controller.prototype.showControls): Ditto.
        (Controller.prototype.updateWirelessPlaybackStatus): Call reconnectControls.
        (Controller.prototype.handleWirelessPlaybackChange): Don't call reconnectControls, it will
        happen in updateWirelessPlaybackStatus.
        (Controller.prototype.showInlinePlaybackPlaceholderOnly): Deleted.

2015-05-22  Chris Dumez  <cdumez@apple.com>

        [CG] Regression(r78652): Partially decoded images are not properly removed from MemoryCache when pruning
        https://bugs.webkit.org/show_bug.cgi?id=145310

        Reviewed by Antti Koivisto.

        r78652 added partially decoded images to the MemoryCache's list of live
        decoded resources so that they can be pruned on memory pressure. This
        was needed because CG decodes part of the image to determine its
        properties (e.g. its size). On memory pressure, we call
        BitmapImage::destroyDecodedData() which clears the ImageSource and
        frees up this extra decoded data.

        However, we would fail to remove such partially decoded images from the
        MemoryCache's list of live resources when pruning. This is because
        BitmapImage::destroyMetadataAndNotify() fails to take into account the
        decoded properties size when no frame has been cleared. We would thus
        fail to detect a decoded size change and not call
        CachedImage::decodedSizeChanged(). As a result, the CachedImage's
        decoded size is not reset to 0 and we don't remove it from live decoded
        resources.

        This patch updates BitmapImage::destroyMetadataAndNotify() to account
        for m_decodedPropertiesSize even if frameBytesCleared is 0. This way,
        images for which we have't decoded any frames yet will correctly report
        that we cleared the decoded data used to determine the image properties
        and their decoded size will be properly reset to 0. As a result, these
        will be removed from the MemoryCache's list of live decoded resources.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):
        (WebCore::BitmapImage::destroyMetadataAndNotify):
        (WebCore::BitmapImage::dataChanged):
        * platform/graphics/BitmapImage.h:

2015-05-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Unable to get cursor in new Rule section after creating multiple New Rules
        https://bugs.webkit.org/show_bug.cgi?id=145294

        Reviewed by Timothy Hatcher.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureParsedDataReady):
        Allow stylesheets with mutations for the inspector stylesheet
        which we control mutations of.

2015-05-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Device picker menu should be persistent
        https://bugs.webkit.org/show_bug.cgi?id=145311

        Reviewed by Brent Fulgham.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): Add logging.
        (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): Ditto.
        (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): Ditto.
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Ditto.
        (WebCore::WebMediaSessionManager::clientStateDidChange): Ditto.
        (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): Ditto.
        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): Don't set ExternalDeviceAutoPlayCandidate unless
        there is an event listener.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): Release the menu
        controller and remove observers.
        (WebCore::MediaPlaybackTargetPickerMac::create): Add logging.
        (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Ditto.
        (WebCore::MediaPlaybackTargetPickerMac::availableDevicesDidChange): Ditto.
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Ditto.
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Ditto.
        (WebCore::MediaPlaybackTargetPickerMac::addPendingAction): Start the timer after
        a brief pause to debounce multiple identical notifications. 
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Add logging.
        (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets): Add logging.
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): Don't release
        the menu controller delegate.
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Add logging.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Update logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Ditto.

2015-05-22  Alexey Proskuryakov  <ap@apple.com>

        Build fix. Added a platform ifdef.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::isUserInitiatedKey):

2015-05-22  Tim Horton  <timothy_horton@apple.com>

        Remove action menu support
        https://bugs.webkit.org/show_bug.cgi?id=145305
        <rdar://problem/21070771>

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSMenuSPI.h:
        * platform/spi/mac/NSViewSPI.h: Removed.
        Remove some SPI.

2015-05-22  Antti Koivisto  <antti@apple.com>

        MaskImageOperation code does not manage CachedImageClients correctly
        https://bugs.webkit.org/show_bug.cgi?id=145276
        rdar://problem/20959822

        * rendering/RenderLayerMaskImageInfo.cpp:
        (WebCore::RenderLayer::MaskImageInfo::removeMaskImageClients):

            Followup fix: clear m_maskImageOperations vector.

2015-05-22  Brady Eidson  <beidson@apple.com>

        Rework how the ResourceRequest user initiated property key is used.
        Followup to https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Dan Bernstein.

        * platform/mac/WebCoreSystemInterface.h:

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::isUserInitiatedKey):

        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2015-05-22  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix for ENABLE(TREE_DEBUGGING)

        * editing/VisibleSelection.h:
        * html/parser/HTMLElementStack.h:
        * html/parser/HTMLFormattingElementList.h:

2015-05-22  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Figure out why list-detection2.html test fails on GTK
        https://bugs.webkit.org/show_bug.cgi?id=145273

        Reviewed by Chris Fleizach.

        Platforms which expose rendered text content through the parent element "ignore" the
        child renderers. This was causing AccessibilityList::childHasPseudoVisibleListItemMarker
        to fail, which in turn caused the list detection heuristic to fail. Therefore add one
        final check to this method to look for non-empty, non-whitespace text under the ::before
        pseudo element.

        No new tests; list-detection2.html now passes on GTK.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):

2015-05-21  Jer Noble  <jer.noble@apple.com>

        [iOS] Tell AVPlayerLayer when we enter optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=145289

        Reviewed by Eric Carlson.

        AVFoundation would normally already know that its AVPlayerLayer is in optimized
        fullscreen mode, but because of the WebProcess/UIProcess split, they need to be
        told explicitly in the WebProcess when the UIProcess enters optimized fullscreen
        mode.

        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::fullscreenModeChanged): Pass to private().
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVideoFullscreenMode): Pass to m_private.
        (WebCore::MediaPlayer::fullscreenMode): Pass to m_client.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerFullscreenMode): Default implementation returns None.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setVideoFullscreenMode): Default implementation is a no-op.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Get the fullscreen
            mode from MediaPlayer and tell the AVPlayerLayer if the mode is optimized.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode):
            Ditto.
        * platform/spi/mac/AVFoundationSPI.h:

2015-05-21  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [GTK] Implement computedRoleString in AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=128420

        Reviewed by Chris Fleizach.

        Expose all ARIA roles (not just landmark-related roles) via an "xml-roles" AtkObject
        attribute as per http://www.w3.org/TR/core-aam-1.1/#roleMappingGeneralRules

        Expose non-empty computed role strings via AtkObject attribute named "computed-role".
        Currently the computed role and the ARIA role value happen to be the same string, but
        that might not always be the case. And AtkObject attributes are cheap.

        Test: platform/gtk/accessibility/xml-roles-exposed.html.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2015-05-21  Antti Koivisto  <antti@apple.com>

        MaskImageOperation code does not manage CachedImageClients correctly
        https://bugs.webkit.org/show_bug.cgi?id=145276
        rdar://problem/20959822

        Reviewed by Andreas Kling.

        Test: css3/masking/mask-image-client-crash.html

        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::isMaskLoaded):
        (WebCore::MaskImageOperation::setImage):

            If image changes transfer the clients to the new image.

        (WebCore::MaskImageOperation::setRenderLayerImageClient):

            Always use setImage.

        (WebCore::MaskImageOperation::notifyFinished):
        * platform/graphics/MaskImageOperation.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerMaskImageInfo.cpp:
        (WebCore::RenderLayer::MaskImageInfo::~MaskImageInfo):
        (WebCore::RenderLayer::MaskImageInfo::updateMaskImageClients):

            Store the MaskImageOperations where we added clients.

        (WebCore::RenderLayer::MaskImageInfo::removeMaskImageClients):

            Make sure we remove the clients from the same MaskImageOperations we added them to.

        * rendering/RenderLayerMaskImageInfo.h:

2015-05-21  Daniel Bates  <dabates@apple.com>

        Update Autofill button icon
        https://bugs.webkit.org/show_bug.cgi?id=145191
        <rdar://problem/20178942>

        Reviewed by Jessie Berlin.

        * css/html.css:
        (input::-webkit-auto-fill-button):
        (input::-webkit-auto-fill-button:active):
        (input::-webkit-auto-fill-button:hover):

2015-05-21  Brady Eidson  <beidson@apple.com>

        Add an "initiated by user gesture" flag to ResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Alex Christensen.

        Allow WebKit to tell WebCore what the new property key is:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Add the flag to ResourceRequest, and make sure it encodes/decodes:
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::initiatedByUserGesture):
        (WebCore::ResourceRequestBase::setInitiatedByUserGesture):
        (WebCore::ResourceRequestBase::encodeWithoutPlatformData):
        (WebCore::ResourceRequestBase::decodeWithoutPlatformData):

        Set/get the property on native CFURLRequestRefs:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

        Set/get the property on native NSURLRequests:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2015-05-21  Daniel Bates  <dabates@apple.com>

        Rollout <http://trac.webkit.org/changeset/183909>
        (https://bugs.webkit.org/show_bug.cgi?id=144657)

        Revert <http://trac.webkit.org/changeset/183909> since pausing the database
        thread prevents in-progress transactions from completing. We need to think
        about this change some more.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::setPauseAllDatabases): Deleted.
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::setPauseAllDatabases): Deleted.
        * Modules/webdatabase/DatabaseServer.h:

2015-05-21  Jake Nielsen  <jacob_nielsen@apple.com>

        r184718 and r184725 caused four tests to begin crashing

        Unreviewed rollback.

        Tests that started crashing:

        svg/carto.net/textbox.svg svg/custom/tref-clone-crash.html svg/custom/use-animation-in-fill.html svg/custom/use-multiple-on-nested-disallowed-font.html

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::propertyTypesAreConsistent):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::~SVGCursorElement):
        (WebCore::SVGCursorElement::isSupportedAttribute):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement):
        (WebCore::SVGDocumentExtensions::rebuildElements):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
        (WebCore::attributeNameToAnimatedPropertyTypeMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        (WebCore::cssPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        (WebCore::hasLoadListener):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        (WebCore::SVGKerningMap::insert):
        (WebCore::stringMatchesUnicodeRange):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::begin):
        (WebCore::SVGPathByteStream::end):
        (WebCore::SVGPathByteStream::append):
        (WebCore::SVGPathByteStream::clear):
        (WebCore::SVGPathByteStream::isEmpty):
        * svg/SVGPathUtilities.cpp:
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseBeginOrEnd):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::clearResultsRecursive):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedProperty.cpp:
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::detachListWrappersAndResize):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clearContextAndRoles):

2015-05-21  Brent Fulgham  <bfulgham@apple.com>

        Scroll-snap points needs to be updated during programmatic scrolls
        https://bugs.webkit.org/show_bug.cgi?id=145216
        <rdar://problem/21051039>

        Reviewed by Dean Jackson.

        Whenever we adjust the current scroll position, make sure we also update the current
        active scroll snap offset index (if applicable).

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation): Call the new 'updateActiveScrollSnapIndexForOffset'
        method after moving to a new position.
        (WebCore::ScrollAnimator::setCurrentPosition): Ditto.
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): New method. Asks the scroll controller to
        identify the closest scroll snap offset index. If it finds something relevant, update the ScrollableArea state
        to track these new values.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollController::activeScrollSnapIndexDidChange):
        (WebCore::ScrollController::setScrollSnapIndexDidChange):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset): Added. Find the closest relevant scroll snap offset
        index for the given scroll offset, and update the internal scroll snap state to reflect it.
        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset): Given the x and y offset for a scroll,
        set the relevant scroll snap offset indices.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollTo): Call the new 'updateActiveScrollSnapIndexForOffset' method
        after moving to a new position.
        (WebCore::ScrollAnimatorMac::immediateScrollBy): Ditto.

2015-05-21  Matt Baker  <mattbaker@apple.com>

        Unreviewed build fix.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::propertyTypesAreConsistent): should be type.properties, not type.properties().

2015-05-21  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Remove ReadableStreamReader closed promise internal slot
        https://bugs.webkit.org/show_bug.cgi?id=145215

        Reviewed by Darin Adler.

        Using the new JSPromiseDeferred member generated by binding generator to handle closed promise attribute.
        Removed internal slots routines previously used to ensure persistency of the promise.

        Existing tests cover the changes.

        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):
        (WebCore::JSReadableStreamReader::cancel): Deleted.
        (WebCore::JSReadableStreamReader::releaseLock): Deleted.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::getPropertyFromObject): Deleted.
        (WebCore::callFunction): Deleted.
        (WebCore::ReadableJSStream::Source::create): Deleted.
        (WebCore::ReadableJSStream::Source::Source): Deleted.
        * bindings/js/ReadableJSStream.h:

2015-05-21  Roger Fong  <roger_fong@apple.com>

        Media Controls stop updating after hovering for a few seconds.
        https://bugs.webkit.org/show_bug.cgi?id=144770.
        <rdar://problem/19823121>

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createBase):
        We should never hide controls immediately as a result of mousing out of the controls.
        It should only happen when the mouse leaves the video entirely.
        (Controller.prototype.updateTimelineMetricsIfNeeded):
        Don’t update if controls are hidden, timeline dimensions will be 0.
        (Controller.prototype.handlePanelTransitionEnd): 
        Instead of adjusting visibility via adding and removing classes,
        remove controls entirely from the tree.
        (Controller.prototype.showControls):
        Add controls back into the tree when showing controls.
        (Controller.prototype.updateForShowingControls):
        Helper method for showControls.
        (Controller.prototype.controlsAreHidden):
        Controls also hidden if removed from tree.

        Remove forceUpdate logic, no longer necessary.
        (Controller.prototype.handleDurationChange): 
        (Controller.prototype.updateProgress):
        (Controller.prototype.updateTime):

        Override methods to use add and remove panelContainer for iOS.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePanelTransitionEnd):
        (ControllerIOS.prototype.showControls):
        (ControllerIOS.prototype.controlsAreHidden):

2015-05-21  Chris Dumez  <cdumez@apple.com>

        Regression(r179293): We no longer call destroyDecodedData() on CachedResources on memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=145270
        <rdar://problem/20734901>

        Reviewed by Andreas Kling.

        We no longer call destroyDecodedData() on CachedResources on memory
        pressure after r179293. In r179293, we started calling
        MemoryCache::evictResources() on memory pressure instead of
        MemoryCache::pruneToPercentage(0). However, unlike
        MemoryCache::pruneToPercentage(), it appears
        MemoryCache::evictResources() removes the CachedResources from the
        memory cache without calling destroyDecodedData() on them.
        This caused a regression on Membuster.

        This patch now calls MemoryCache::pruneLiveResourcesToSize(0) on
        critical memory pressure, instead of evictResources(). We don't need to
        call pruneDeadResourcesToSize(0) here because the non-critical memory
        pressure handler already takes care of this.

        During local testing, this change seemed to decrease the overall memory
        usage of WebProcesses by ~10MB on Membuster (tested on Yosemite).

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-05-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG as image uses very tiny default font-size
        https://bugs.webkit.org/show_bug.cgi?id=68090

        Reviewed by Darin Adler.

        When loading a document, WebKit creates a Page object and then changes its setting
        from the browser's preferences. This is true for interactive resources also, such as a
        stand-alone SVG or an SVG embedded in an <object> tag for example. For non-interactive
        resources, like an SVG embedded in an <img> tag for example, this function is called
        after loading the resource is finished. This function creates an artificial page and
        fabricates a scoped settings for it. This turns out to be problematic for cases like
        the default font size because its initial value is zero. We cannot go from WebCore to
        WebKit to ask for the global settings. But we can inherit the global settings from the
        the master page. This is not the best solution because of two reasons. (1) Once the
        resource is cached and the styles for the text elements are calculated, nothing can
        change the values of styles except removing the resource itself from the cache if the
        browser's preferences change. Also there is no mechanism to notify this artificial
        page if the browser's preferences change. (2) An image like a non-interactive SVG,
        should be displayed the same way regardless of the browser's preferences. A user may
        be able to change the default font size for other text. But this should not affect
        images even if they are vector images like SVG. An easy and more agreeable solution
        is to hard-code the default font size for this case and do not depend on the global
        settings at all.

        Test: svg/text/text-default-font-size.html

        * page/Settings.in: Set the initial value of the setting defaultFontSize to be 16.
        
2015-05-21  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/svg.
        https://bugs.webkit.org/show_bug.cgi?id=145209

        Reviewed by Darin Adler.

        No new tests, no new tests.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::propertyTypesAreConsistent):
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::~SVGCursorElement):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::pauseAnimations):
        (WebCore::SVGDocumentExtensions::unpauseAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):
        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap):
        (WebCore::hasLoadListener):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        (WebCore::SVGKerningMap::insert):
        (WebCore::stringMatchesUnicodeRange):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::append):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseBeginOrEnd):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        (WebCore::SVGSMILElement::notifyDependentsIntervalChanged):
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::clearResultsRecursive):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedProperty.cpp:
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::detachListWrappersAndResize):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::clearContextAndRoles):

2015-05-21  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=145112

        Reviewed by Darin Adler.

        As a step to remove PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr
        depends on null of return value.

        No new tests, no behavior changes.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::create):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::create):
        (WebCore::MediaKeys::createSession):
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/gamepad/Gamepad.h:
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepadFromPlatformGamepad):
        * Modules/gamepad/deprecated/Gamepad.h:
        * Modules/geolocation/GeolocationError.h:
        (WebCore::GeolocationError::create):
        * Modules/geolocation/GeolocationPosition.h:
        (WebCore::GeolocationPosition::create):
        * Modules/geolocation/Geoposition.h:
        (WebCore::Geoposition::create):
        * Modules/geolocation/PositionError.h:
        (WebCore::PositionError::create):
        * Modules/geolocation/PositionOptions.h:
        (WebCore::PositionOptions::create):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::create):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::create):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/mediastream/RTCIceCandidate.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        (WebCore::OfflineAudioDestinationNode::create):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::originLockFor):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLError.h:
        (WebCore::SQLError::create):
        * Modules/webdatabase/SQLResultSet.h:
        (WebCore::SQLResultSet::create):
        * Modules/webdatabase/SQLResultSetRowList.h:
        (WebCore::SQLResultSetRowList::create):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::create):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::create):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WebCore::WorkerThreadableWebSocketChannel::create):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::create):
        * editing/InsertListCommand.h:
        (WebCore::InsertListCommand::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/Worker.h:
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::createExpression):
        (WebCore::XPathExpression::evaluate):
        * xml/XPathExpression.h:

2015-05-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184667 and r184682.
        https://bugs.webkit.org/show_bug.cgi?id=145245

        Broke media/media-controls-timeline-updates.html on WebKit2
        (Requested by ap on #webkit).

        Reverted changesets:

        "Media Controls stop updating after hovering for a few
        seconds."
        https://bugs.webkit.org/show_bug.cgi?id=144770
        http://trac.webkit.org/changeset/184667

        "Unreviewed. Media Controls stop updating after hovering for a
        few seconds."
        https://bugs.webkit.org/show_bug.cgi?id=144770
        http://trac.webkit.org/changeset/184682

2015-05-20  Jon Lee  <jonlee@apple.com>

        [iOS] Update optimized fullscreen controls artwork
        https://bugs.webkit.org/show_bug.cgi?id=145208
        rdar://problem/21034032

        Reviewed by Jer Noble.

        Update the artwork when media goes into optimized fullscreen. Add a new UI part
        representing return-from-optimized.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaUIImageData): Return data for the return button.
        * Modules/mediacontrols/MediaControlsHost.idl: Add a new part ID.
        * Modules/mediacontrols/mediaControlsApple.js: Add a new ClassName to apply to the
        button when in the proper state.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePresentationModeChange): Add the ClassName when the
        video goes into optimized fullscreen mode. Remove it otherwise.
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Add the return button data to the
        stylesheet.

2015-05-20  Alex Christensen  <achristensen@webkit.org>

        [ContentExtensions] Properly initialize ActionKey.state
        https://bugs.webkit.org/show_bug.cgi?id=145237
        rdar://problem/20716683

        Reviewed by Benjamin Poulain.

        * contentextensions/DFAMinimizer.cpp:
        Initialize ActionKey.state to Valid if it is a valid ActionKey.
        Inlining can now be done safely.

2015-05-20  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Media Controls stop updating after hovering for a few seconds.
        https://bugs.webkit.org/show_bug.cgi?id=144770.
        <rdar://problem/19823121>

        Followup to r184667.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.showControls):
        Only put controls back into the tree if they don’t yet exist in the tree.
        Otherwise we interrupt operations like scrubbing.

2015-05-20  Enrica Casucci  <enrica@apple.com>

        [iOS] Using CSS viewport units causes incorrect layout.
        https://bugs.webkit.org/show_bug.cgi?id=145225
        rdar://problem/20924495

        Reviewed by Benjamin Poulain.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::initialScaleFromSize):
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::initialScaleFromSize):
        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize):

2015-05-20  Chris Fleizach  <cfleizach@apple.com>

        AX: improve list heuristics (presentational use versus actual lists)
        https://bugs.webkit.org/show_bug.cgi?id=134187

        Reviewed by Darin Adler.

        Improve heuristics for list detection by:
            1. Not exposing lists without list markers (unless explicitly marked as lists)
            2. Recognizing css: before-content as list markers

        Test: accessibility/list-detection2.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isDescriptionList):
        (WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):
        (WebCore::AccessibilityList::determineAccessibilityRole):
        * accessibility/AccessibilityList.h:

2015-05-20  Antti Koivisto  <antti@apple.com>

        REGRESSION (r172591): Can no longer style <optgroup> with colors (LayoutTests/fast/forms/select/optgroup-rendering.html)
        https://bugs.webkit.org/show_bug.cgi?id=145227
        rdar://problem/20967472

        Reviewed by Darin Adler.

        Test: fast/forms/select/select-painting.html

        Use computedStyle() consistently for option and optgroup items.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):

            We can always use computedStyle() and it can't be null. If there was renderer style it would return that.

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemStyle):
        (RenderMenuList::getItemBackgroundColor):

2015-05-19  Jer Noble  <jer.noble@apple.com>

        Touching HTMLMediaElement.h or MediaPlayer.h causes a world rebuild.
        https://bugs.webkit.org/show_bug.cgi?id=145193

        Reviewed by Eric Carlson.

        HTMLMediaElement.h and MediaPlayer.h are included in a number of headers solely for access to the enums
        defined within the classes contained within. Move these enums into their own--otherwise empty--classes.
        Then add `using` declarations to pull those inherited enums back into the namespace of HTMLMediaElement
        and MediaPlayer.

        Classes and headers which do not need to directly include HTMLMediaElement.h can now include HTMLMediaElementEnums.h
        instead; the same goes for MediaPlayer.h and MediaPlayerEnums.h.

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::TrackGroup::TrackGroup): Move definition here from the header.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::videoFullscreenGravity): MediaPlayer -> MediaPlayerEnums.
        (WebCore::HTMLMediaElement::preloadValue): Ditto.
        (WebCore::HTMLMediaElement::TrackGroup::TrackGroup): Deleted; moved to implementation file.
        * html/HTMLMediaElementEnums.h: Added.
        * html/MediaControllerInterface.h: Inherit from HTMLMediaElementEnums.
        * page/ChromeClient.h: HTMLMediaElement -> HTMLMediaElementEnums.
        * platform/graphics/MediaPlayer.h: MediaPlayer -> MediaPlayerEnums.
        * platform/graphics/MediaPlayerEnums.h: Added.
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:mode:]): HTMLMediaElement -> HTMLMediaElementEnums.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoOptimized): Ditto.
        (WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setMode): Ditto.
        (WebVideoFullscreenInterfaceAVKit::clearMode): Ditto.
        * platform/ios/WebVideoFullscreenModel.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoElement): Ditto.
        (WebVideoFullscreenModelVideoElement::fullscreenModeChanged): Ditto.

2015-05-20  Roger Fong  <roger_fong@apple.com>

        Media Controls stop updating after hovering for a few seconds.
        https://bugs.webkit.org/show_bug.cgi?id=144770.
        <rdar://problem/19823121>

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createBase):
        We should never hide controls immediately as a result of mousing out of the controls.
        It should only happen when the mouse leaves the video entirely.
        (Controller.prototype.updateTimelineMetricsIfNeeded):
        Don’t update if controls are hidden, timeline dimensions will be 0.
        (Controller.prototype.handlePanelTransitionEnd): 
        Instead of adjusting visibility via adding and removing classes,
        remove controls entirely from the tree.
        (Controller.prototype.showControls):
        Add controls back into the tree when showing controls.
        (Controller.prototype.updateForShowingControls):
        Helper method for showControls.
        (Controller.prototype.controlsAreHidden):
        Controls also hidden if removed from tree.

        Remove forceUpdate logic, no longer necessary.
        (Controller.prototype.handleDurationChange): 
        (Controller.prototype.updateProgress):
        (Controller.prototype.updateTime):

        Override methods to use add and remove panelContainer for iOS.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePanelTransitionEnd):
        (ControllerIOS.prototype.showControls):
        (ControllerIOS.prototype.controlsAreHidden):

2015-05-20  Eric Carlson  <eric.carlson@apple.com>

        [Mac] inform media session of all state changes
        https://bugs.webkit.org/show_bug.cgi?id=145222

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call updateMediaState.
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): Ditto.
        (WebCore::HTMLMediaElement::removeEventListener): Ditto.
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Ditto.

2015-05-20  Daniel Bates  <dabates@apple.com>

        AX: AutoFill button is not accessible with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=145200
        <rdar://problem/20507480>

        Reviewed by Chris Fleizach.

        Add ARIA label and role attributes to the AutoFill button markup so that VoiceOver
        can identify and interact with it.

        Test: accessibility/input-auto-fill-button.html

        * English.lproj/Localizable.strings: Add placeholder localized string for AutoFill button.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createAutoFillButton): Add ARIA label and role attributes.
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillButtonText): Added; returns the localized string for the AutoFill button.
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXAutoFillButtonText): Ditto.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXAutoFillButtonText): Ditto.

2015-05-20  Dean Jackson  <dino@apple.com>

        Label text for default buttons don’t have the correct white color
        https://bugs.webkit.org/show_bug.cgi?id=145221
        <rdar://problem/20985817>

        Follow-up commit. After discussion with the AppKit team, we've
        concluded that a solid white is the color that best matches
        the system.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor): Use Color::white.

2015-05-20  Dean Jackson  <dino@apple.com>

        Label text for default buttons don’t have the correct white color
        https://bugs.webkit.org/show_bug.cgi?id=145221
        <rdar://problem/20985817>

        Reviewed by Tim Horton.

        Use a 85% solid white for the active text color on buttons.

        As has been disappointingly pointed out in other patches, we don't
        have a good way to test ActiveButtonText since it only applies at
        paint time.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor): Move to an 85% solid white.

2015-05-20  Alexey Proskuryakov  <ap@apple.com>

        ThreadableLoaderOptions::isolatedCopy() doesn't produce a copy that is safe for sending to another thread
        https://bugs.webkit.org/show_bug.cgi?id=145217

        Reviewed by Anders Carlsson.

        Caught by existing tests, rarely. I don't know how to catch such bugs more reliably.

        * loader/ThreadableLoader.cpp: (WebCore::ThreadableLoaderOptions::isolatedCopy):
        * loader/ThreadableLoader.h:

2015-05-20  Tim Horton  <timothy_horton@apple.com>

        Add a mechanism to opt-out of the automatic scaling applied to not-really-responsive sites
        https://bugs.webkit.org/show_bug.cgi?id=144760

        Reviewed by Darin Adler.

        Add a new viewport property, shrink-to-fit, which can be used to disable
        the automatic scaling introduced in r181400. This provides sites with a
        way to tell WebKit that they're really sure they want to be laid out at
        window-width/height, even if they fail to fit within that size.

        * dom/ViewportArguments.cpp:
        (WebCore::ViewportArguments::resolve):
        (WebCore::findBooleanValue):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::operator==):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints):
        (WebCore::ViewportConfiguration::shouldIgnoreVerticalScalingConstraints):
        (WebCore::ViewportConfiguration::webpageParameters):
        (WebCore::ViewportConfiguration::textDocumentParameters):
        (WebCore::ViewportConfiguration::imageDocumentParameters):
        (WebCore::ViewportConfiguration::testingParameters):
        (WebCore::booleanViewportArgumentIsSet):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfigurationTextStream::operator<<):
        (WebCore::viewportArgumentUserZoomIsSet): Deleted.
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::Parameters::Parameters):
        Plumb the shrink-to-fit viewport property through.
        If shrink-to-fit is set to yes, or not set, we behave as usual; if it is
        set to no, we will bail from shouldIgnore[Horizontal|Vertical]ScalingConstraints,
        effectively disabling the automatic scaling introduced in r181400.

2015-05-20  Antti Koivisto  <antti@apple.com>

        Assertion failure in WebCore::BidiRun::BidiRun()
        https://bugs.webkit.org/show_bug.cgi?id=145203
        rdar://problem/20958973

        Reviewed by Andreas Kling.

        Test: fast/text/text-combine-crash.html

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

            Renove !isCombined() check. RenderCombineText::combineText() doesn't
            do any work unless needed and text may become uncombined too.

        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

            Same here.

2015-05-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        AudioContext resume/close/suspend should reject promises with a DOM exception in lieu of throwing exceptions
        https://bugs.webkit.org/show_bug.cgi?id=145064

        Reviewed by Darin Adler.

        Rejecting resume/suspend/close promises with InvalidStateError values in case context is offline.
        Removed unneeded calls to postTask for resolving/rejecting promises.
        Adding promise rejection of DOM Exception values, 0 being equivalent of no error passed to reject callback.

        Test: webaudio/audiocontext-promise-throwing.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::suspendContext): Rejecting promise in lieu of throwing exception.
        (WebCore::AudioContext::resumeContext): Ditto.
        (WebCore::AudioContext::closeContext): Ditto.
        * Modules/webaudio/AudioContext.h:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::suspend): Removing ExceptionCode handling.
        (WebCore::JSAudioContext::resume): Ditto.
        (WebCore::JSAudioContext::close): Ditto.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::createDOMException): Splitting DOM exception creation from throwing.
        (WebCore::setDOMException): Ditto.
        * bindings/js/JSDOMBinding.h: Adding createDOMException prototype.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::reject<ExceptionCode>):

2015-05-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184645.
        https://bugs.webkit.org/show_bug.cgi?id=145220

        Broken build (Requested by jacob_nielsen on #webkit).

        Reverted changeset:

        "AX: AutoFill button is not accessible with VoiceOver"
        https://bugs.webkit.org/show_bug.cgi?id=145200
        http://trac.webkit.org/changeset/184645

2015-05-20  Daniel Bates  <dabates@apple.com>

        AX: AutoFill button is not accessible with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=145200
        <rdar://problem/20507480>

        Reviewed by Chris Fleizach.

        Add ARIA label and role attributes to the AutoFill button markup so that VoiceOver
        can identify and interact with it.

        Test: accessibility/input-auto-fill-button.html

        * English.lproj/Localizable.strings: Add placeholder localized string for AutoFill button.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createAutoFillButton): Add ARIA label and role attributes.
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillButtonText): Added; returns the localized string for the AutoFill button.
        * platform/LocalizedStrings.h:
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::AXAutoFillButtonText): Ditto.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXAutoFillButtonText): Ditto.

2015-05-20  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Relax restrictions on triggers that match everything.
        https://bugs.webkit.org/show_bug.cgi?id=145069

        Reviewed by Benjamin Poulain.

        Added API tests that cover the new functionality and test for correctness in behavior.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::addUniversalActionsToDFA):
        (WebCore::ContentExtensions::compileRuleList):
        Put universalActionsWithoutDomains into the DFA from filtersWithoutDomains and
        put universalActionsWithDomains into the DFA from filtersWithDomains.        
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        Remove error codes for errors that are not errors any more.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::set32Bits):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitJump):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValue):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValueRange):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitTestFlagsAndAppendAction): Deleted.
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsForDefaultStylesheetFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot): Deleted.
        * contentextensions/DFABytecodeInterpreter.h:
        Add a new bytecode AppendActionDefaultStylesheet to mark actions that are css-display-none
        that need to be put in the default stylesheet to be ignored or not as a whole.
        css-display-none actions with flags or domain rules and css-display-none actions 
        after ignore-previous-rules actions are not to be in this precompiled stylesheet, but
        they will be applied as needed per page.  The precompiled stylesheet is already applied
        if no ignore-previous-rules action is triggered.
        * loader/ResourceLoadInfo.h:

2015-05-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        JS binding generator should create a member variable for each Promise attribute of an interface
        https://bugs.webkit.org/show_bug.cgi?id=145056

        Reviewed by Darin Adler.

        For each attribute XXX whose type is Promise, a member m_XXXPromiseDeferred is created, its type being a JSC::Strong of JSPromiseDeferred.
        The purpose is to enable custom getters to create the JSPromiseDeferred and store ino the class member to ensure the same promise is returned each time
        the custom getter is called.
        This patch will enable simplifying ReadableStreamReader custom binding.

        Covered by added attribute in TestObj.idl.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        (webkit_dom_test_obj_get_test_promise_attr):
        (webkit_dom_test_obj_set_nullable_string_value): Deleted.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjTestPromiseAttr):
        (WebCore::jsTestObjAttributeWithReservedEnumType): Deleted.
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj testPromiseAttr]):
        (-[DOMTestObj attribute]): Deleted.
        * bindings/scripts/test/TestObj.idl:

2015-05-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        AudioContext suspend/resume/close should resolve promises immediately when state is already suspended/active/closed
        https://bugs.webkit.org/show_bug.cgi?id=145164

        Reviewed by Jer Noble.

        Test: webaudio/audiocontext-promise.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::suspendContext): Immediatly call callbacks whenever possible to resolve/reject promises.
        (WebCore::AudioContext::resumeContext): Ditto.
        (WebCore::AudioContext::closeContext): Ditto

2015-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r184420): [GTK] webkit_dom_html_element_get_children has been removed
        https://bugs.webkit.org/show_bug.cgi?id=145174

        Reviewed by Philippe Normand.

        children property has been moved to Element, Document and
        DocumentFragment to match the spec, so we need to expose the new
        get_children and bring back webkit_dom_html_element_get_children()
        as deprecated.

        * bindings/gobject/WebKitDOMDeprecated.cpp:
        (webkit_dom_html_element_get_children):
        * bindings/gobject/WebKitDOMDeprecated.h:
        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:

2015-05-20  Hunseop Jeong  <hs85.jeong@samsung.com>

        nullptr cleanup in WebCore/xml.
        https://bugs.webkit.org/show_bug.cgi?id=145165

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior changes

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::clearResponseBuffers):
        (WebCore::XMLHttpRequest::clearRequest):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::XSLImportRule):
        (WebCore::XSLImportRule::~XSLImportRule):
        (WebCore::XSLImportRule::setXSLStyleSheet):
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::~XSLStyleSheet):
        (WebCore::XSLStyleSheet::clearDocuments):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::saveResultToString):
        (WebCore::xsltParamArrayFromParameterMap):
        (WebCore::xmlDocPtrFromNode):
        (WebCore::XSLTProcessor::transformToString):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::clearCurrentNodeStack):
        (WebCore::XMLDocumentParser::exitText):
        (WebCore::XMLDocumentParser::notifyFinished):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * xml/parser/XMLDocumentParserScope.cpp:
        * xml/parser/XMLDocumentParserScope.h:

2015-05-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Network Cache: Implement ShareableResource for Soup and enable it for GTK platform
        https://bugs.webkit.org/show_bug.cgi?id=144380

        Reviewed by Antti Koivisto.

        Add a soup implementation of SharedBuffer::tryReplaceContentsWithPlatformBuffer().

        Covered by http/tests/cache/disk-cache/ tests.

        * loader/cache/CachedResource.cpp: Define
        CachedResource::tryReplaceEncodedData() also for Soup.
        * loader/cache/CachedResource.h: Ditto.
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer):

2015-05-17  Sam Weinig  <sam@webkit.org>

        Organize event handlers a bit
        https://bugs.webkit.org/show_bug.cgi?id=145106

        Reviewed by Darin Adler.

        - Add GlobalEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#globaleventhandlers)
          and move all event handlers shared by Element, Document and DOMWindow there. Put all the standard defined
          event handlers at the top (commenting out the ones that aren't implemented yet) and the non-standard ones
          at the bottom.

          There is one change in behavior here. Previously, the media related event handlers where only exposed on
          Element and DOMWindow. The spec says they should also be on Document, so this adds support for that (this
          is tested in fast/dom/event-handler-attributes.html).

        - Add WindowEventHandlers.idl (from https://html.spec.whatwg.org/multipage/webappapis.html#windoweventhandlers)
          and move all event handlers shared by DOMWindow, HTMLBodyElement and HTMLFrameSetElement there. Put all the 
          standard defined event handlers at the top (commenting out the ones that aren't implemented yet) and the 
          non-standard ones at the bottom.

        - Group remaining event handlers in Element, Document, DOMWindow, HTMLBodyElement and HTMLFrameSetElement by
          their grouping, and add some FIXMEs for future cleaning.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        - Add GlobalEventHandlers.idl and WindowEventHandlers.idl.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        Add special cases for WindowEventHandler when used on DOMWindow and DocumentEventHandler when used on Document
        so that event handlers using those extended attributes can be set on shared interfaces. This is used to allow
        DOMWindow to implement WindowEventHandlers.

        * dom/Document.idl:
        Move event handlers to GlobalEventHandlers and have Document implement it. Group remaining event handlers.

        * dom/Element.idl:
        Move event handlers to GlobalEventHandlers and have Element implement it. Group remaining event handlers.

        * dom/GlobalEventHandlers.idl:
        Added.

        * html/HTMLBodyElement.idl:
        Move event handlers to WindowEventHandlers and have HTMLBodyElement implement it. Group remaining event handlers.
        
        * html/HTMLFrameSetElement.idl:
        Move event handlers to WindowEventHandlers and have HTMLFrameSetElement implement it. Group remaining event handlers.

        * page/DOMWindow.idl:
        Move event handlers to GlobalEventHandlers and WindowEventHandlers and have DOMWindow implement both of them. Group 
        remaining event handlers.

        * page/WindowEventHandlers.idl:
        Added.

2015-05-19  Antti Koivisto  <antti@apple.com>

        Crash under WebCore::invalidateStyleRecursively
        https://bugs.webkit.org/show_bug.cgi?id=145186
        rdar://problem/19736838

        Reviewed by Andreas Kling

        We have seen crashes where we run out of stack under invalidateStyleRecursively in StyleInvalidationAnalysis
        on some devices.

        Switch to iterative algorithm.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        (WebCore::invalidateIfNeeded):
        (WebCore::invalidateStyleForTree):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        (WebCore::invalidateStyleRecursively): Deleted.

2015-05-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Move AtomicStringImpl table related operations from AtomicString to AtomicStringImpl
        https://bugs.webkit.org/show_bug.cgi?id=145109

        Reviewed by Darin Adler.

        * dom/TreeScope.cpp:
        (WebCore::TreeScope::getElementById):

2015-05-19  Jon Lee  <jonlee@apple.com>

        [iOS] Optimized fullscreen placeholder is incorrectly sized
        https://bugs.webkit.org/show_bug.cgi?id=145196
        rdar://problem/21031188

        Reviewed by Dean Jackson.

        Add a new media part UI for the placeholder text when entering optimized fullscreen,
        and use it as part of the title text in the placeholder. Now the wireless playback status
        div serves as a multi-purpose placeholder.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaUIImageData): Return the placeholder text.
        * Modules/mediacontrols/MediaControlsHost.idl: Add a new UI part for placeholder text.
        * Modules/mediacontrols/mediaControlsApple.js: Add a new "optimized" ClassName when
        the presentation mode is set to optimized.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status): The text should be at
        medium weight, not light weight.
        (audio::-webkit-media-controls-wireless-playback-text-top): The title text should be
        white for both wireless playback and optimized fullscreen. It matches the style
        when taking a video fullscreen.

        Add new CSS rules when the placard is used for optimized fullscreen.
        (audio::-webkit-media-controls-wireless-playback-status.optimized): Accommodate the
        size of the graphic, and position appropriately.
        (audio::-webkit-media-controls-wireless-playback-text-top.optimized): One line is
        needed, so use this one, and place it where the bottom one is since more room is
        needed to accommodate the graphic.
        (audio::-webkit-media-controls-wireless-playback-text-bottom.optimized): One line is
        needed, so hide this one.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Several of the container divs are already
        created in Controller.prototype.createControls(). Fly-by fix to avoid creation of
        those divs. Only the panelContainer is new for the iOS controls. Fly-by fix of a
        missing semicolon.
        (ControllerIOS.prototype.handlePresentationModeChange): When the presentation mode
        changes do several things:
            1- Update the background image. Clear the inline background image when going back
               to inline or in wireless playback.
            2- Add the "optimized" ClassName to the placeholder container, and the two text
               divs when entering optimized fullscreen. Remove them in other cases.
            3- Set -webkit-media-controls-wireless-playback-text-top to the placeholder text.
               This is better than embedding it inside the graphic. Clear the -bottom text.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Add a new enum to obtain the placeholder
        text.

2015-05-19  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Use GSimpleProxyResolver instead of custom SoupProxyResolver
        https://bugs.webkit.org/show_bug.cgi?id=145154

        Reviewed by Gyuyoung Kim.

        SoupProxyResolver was deprecated since libsoup 2.42.
        So, this patch refactors the custom SoupProxyResolver to GSimpleProxyResolver
        which provides same functionality in gio.

        No new tests, because there is not behavior change.

        * PlatformEfl.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/soup/ProxyResolverSoup.cpp: Removed.
        * platform/network/soup/ProxyResolverSoup.h: Removed.
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::setHTTPProxy): Moved to private member.
        (WebCore::SoupNetworkSession::httpProxy): Deleted because nobody calls it.
        * platform/network/soup/SoupNetworkSession.h:

2015-05-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184595.
        https://bugs.webkit.org/show_bug.cgi?id=145197

        Introduced a crash in 15 layout tests on Mavericks on #webkit
        (Requested by rniwa on #webkit).

        Reverted changeset:

        "Media Controls stop updating after hovering for a few
        seconds."
        https://bugs.webkit.org/show_bug.cgi?id=144770
        http://trac.webkit.org/changeset/184595

2015-05-19  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r181571): Build broken when USE(OPENGL_ES_2) is defined.
        https://bugs.webkit.org/show_bug.cgi?id=145156

        Reviewed by Alex Christensen.

        No new tests, no behavior changes.

        Vertex Array Objects are not available in OpenGLESv2.
        Add guards to avoid using this when building with GLESv2.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):

2015-05-19  Roger Fong  <roger_fong@apple.com>

        Upper half of volume control should be filled, not hollow.
        https://bugs.webkit.org/show_bug.cgi?id=145187.
        <rdar://problem/21021970>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.drawVolumeBackground):

2015-05-19  Michael Saboff  <msaboff@apple.com>

        REGRESSION(183787): JIT is enabled for all builds
        https://bugs.webkit.org/show_bug.cgi?id=145179

        Reviewed by Geoffrey Garen.

        Eliminated the setting of ENABLE_JIT, as wtf/Platform.h has appropriate logic to
        set it depending on OS and CPU type.

        Only changed the way build options are initialized.

        * Configurations/FeatureDefines.xcconfig:

2015-05-19  Chris Dumez  <cdumez@apple.com>

        [Mac] Font lookups are flakey due to caching
        https://bugs.webkit.org/show_bug.cgi?id=145180
        <rdar://problem/21012406>

        Reviewed by Darin Adler.

        Font lookups were flakey on Mac due to the cache in fontWithFamily().
        The reason is that the "desired family" to "available family" mapping
        is sometimes dependent on the desired traits. However, our cache was
        only using the "desired family" as key.

        This patch now uses a std::pair as key containing both the "desired
        family" and the "desired traits" for correctness. I also updated the
        cache to use WTF types instead of NS types.

        Test: platform/mac/fast/text/font-weights.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::desiredFamilyToAvailableFamilyMap):
        (WebCore::hasDesiredFamilyToAvailableFamilyMapping):
        (WebCore::rememberDesiredFamilyToAvailableFamilyMapping):
        (WebCore::fontWithFamily):
        (WebCore::invalidateFontCache):
        (WebCore::desiredFamilyToAvailableFamilyDictionary): Deleted.

2015-05-19  Brady Eidson  <beidson@apple.com>

        X-Frame-Options headers not respected when loading from application cache.
        <rdar://problem/14877623> and https://bugs.webkit.org/show_bug.cgi?id=131800

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/appcache/x-frame-options-prevents-framing.php

        This patch updates SubstituteData to hold on to a ResourceResponse instead of just a URL.
        
        It also updates all users of SubstituteData to reflect this.
        
        Finally it updates ApplicationCacheHost to put the full response (including x-frame-options header)
        in the SubstituteData so they can be checked at the appropriate times.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::responseReceived): Update an ASSERT to reflect that it's okay to not have
          a main resource as long as you have a substitute identifier for it.
        (WebCore::DocumentLoader::documentURL):
        (WebCore::DocumentLoader::contentFilterDidDecide):
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::defaultSubstituteDataForURL):

        * loader/SubstituteData.h:
        (WebCore::SubstituteData::SubstituteData):
        (WebCore::SubstituteData::shouldRevealToSessionHistory):
        (WebCore::SubstituteData::mimeType):
        (WebCore::SubstituteData::textEncoding):
        (WebCore::SubstituteData::response):
        (WebCore::SubstituteData::responseURL): Deleted.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadMainResource): Put the full ResourceResponse here, which 
          includes x-frame-options headers sent back when the resources was initially loaded from the network.

        * platform/network/ResourceResponseBase.h:

2015-05-19  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(142590): Part 2: Scroll-snap points are improperly snapping to earlier index values (Scrolling Thread) 
        https://bugs.webkit.org/show_bug.cgi?id=145175
        <rdar://problem/21023785>

        Reviewed by Beth Dakin.

        Extend the main-thread scrolling changes done in Bug 145140 to also handle Scrolling Thread snapping.
        The post-layout fixup (needed to handle window resize and device orientation changes) should not fire
        while Scrolling Thread scroll-snap animations are running, since these animations will most likely
        move the scroll view into the proper position. If we attempt to 'fix up' the scroll position before
        these animations finish, we get an ugly 'jump' in the display.

        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollSnapInProgress): New method based on isRubberBandInProgress, which considers
        both the ScrollAnimator (main thread) scrolling, as well as the ScrollingCoordinator (Scrolling Thread)
        scrolling operations. Returns true if a scroll-snap animation is still active.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::isScrollSnapInProgress): Added. Returns scrolling tree's
        'isScrollSnapInProgress' state.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::isScrollSnapInProgress): Added default 'false' stub.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree): Use modern C++11 initializers.
        (WebCore::ScrollingTree::isScrollSnapInProgress): Added.
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping): Added.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent): Update scrolling tree state to match the
        ScrollController's scroll-snap state.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startScrollSnapTimer): Added. When starting a scroll snap timer,
        always set the scrolling tree scroll-snapping state to true.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopScrollSnapTimer): Added. When ending a scroll snap timer,
        only set the scrolling tree scroll-snapping state to false if the other axis animator is inactive.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::updateScrollSnapState): Revise implementation to use its 'isScrollSnapInProgress'
        method, rather than only looking at the ScrollAnimator (main thread) state.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isScrollSnapInProgress): Added.
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::hasActiveScrollSnapTimerForAxis): Added. Reports if the scroll snap animation
        timer on the requested axis is running or not.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isScrollSnapInProgress): Added.
        * rendering/RenderLayer.h:

2015-05-19  Roger Fong  <roger_fong@apple.com>

        Media Controls stop updating after hovering for a few seconds.
        https://bugs.webkit.org/show_bug.cgi?id=144770.
        <rdar://problem/19823121>

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createBase):
        We should never hide controls immediately as a result of mousing out of the controls.
        It should only happen when the mouse leaves the video entirely.
        (Controller.prototype.updateTimelineMetricsIfNeeded):
        Don’t update if controls are hidden, timeline dimensions will be 0.
        (Controller.prototype.handlePanelTransitionEnd): 
        Instead of adjusting visibility via adding and removing classes,
        remove controls entirely from the tree.
        (Controller.prototype.showControls):
        Add controls back into the tree when showing controls.
        (Controller.prototype.updateForShowingControls):
        Helper method for showControls.
        (Controller.prototype.controlsAreHidden):
        Controls also hidden if removed from tree.

        Remove forceUpdate logic, no longer necessary.
        (Controller.prototype.handleDurationChange): 
        (Controller.prototype.updateProgress):
        (Controller.prototype.updateTime):

        Override methods to use add and remove panelContainer for iOS.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handlePanelTransitionEnd):
        (ControllerIOS.prototype.showControls):
        (ControllerIOS.prototype.controlsAreHidden):

2015-05-19  Brent Fulgham  <bfulgham@apple.com>

        Scroll-snap animations should not start on axes with zero-delta
        https://bugs.webkit.org/show_bug.cgi?id=145148

        Reviewed by Dean Jackson.

        Don't begin a scroll snap animation on an axis that had no change in position (on that axis)
        during the gesture.

        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Don't begin a scroll snap
        animation if no movement on this axis was ever made.

2015-05-19  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        AudioContext should resolve promises with jsUndefined() and not jsNull()
        https://bugs.webkit.org/show_bug.cgi?id=145063

        Reviewed by Sam Weinig.

        Covered by updated test.

        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve): resolving std::nullptr_t as jsUndefined() and not jsNull()

2015-05-19  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Migrate closed promise handling from ReadableStreamReader to ReadableStream
        https://bugs.webkit.org/show_bug.cgi?id=145110

        Reviewed by Darin Adler.

        Reader is now just checking whether it is the reader locking the stream or not.
        If not and stream is readable, it resolves the closed promise.
        Otherwise, it delegates the promise handling to its stream.

        No change in behavior.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::cleanCallbacks): Cleaning of closed callbacks.
        (WebCore::ReadableStream::changeStateToClosed): Resolving closed promise if set.
        (WebCore::ReadableStream::changeStateToErrored): Rejecting closed promise if set.
        (WebCore::ReadableStream::getReader): Removed reader state notification.
        (WebCore::ReadableStream::closed): Moved from reader to stream.
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::reader): Added to allow reader to check whether it is locking its stream or not.
        (WebCore::ReadableStream::isReadable): Added as an improvement over internalState which is removed.
        (WebCore::ReadableStream::internalState): Deleted.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::closed):
        * Modules/streams/ReadableStreamReader.h: Removed state and closed promise callbacks.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::close): Refactoring of internalState to isReadable.
        (WebCore::JSReadableStreamController::error): Ditto.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed): Refactoring to have the promise value as callback parameter.

2015-05-19  Jeremy Jones  <jeremyj@apple.com>

        Remove use of deprecated AVKit SPI cancelOptimizedFullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=145159

        Reviewed by Eric Carlson.

        Remove cancelOptimizedFullscreen, and use stopOptimizedFullscreen instead.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal):
        * platform/spi/cocoa/AVKitSPI.h: remove declaration.

2015-05-19  Zalan Bujtas  <zalan@apple.com>

        Merged anonymous blocks should invalidate simple line layout path.
        https://bugs.webkit.org/show_bug.cgi?id=145104
        rdar://problem/20980930

        Reviewed by Antti Koivisto.

        When anonymous blocks are merged together, it's not guaranteed that the final block can use simple line layout.
        This patch ensures that the flow block, where the other block's content gets moved to, is no longer on simple line layout path.
        Whether the final flow block ends up using inline boxes or simple line layout will be determined during the next layout.

        Test: fast/block/crash-when-anonymous-blocks-are-merged-with-simple-line-layout.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):

2015-05-19  Beth Dakin  <bdakin@apple.com>

        Crash in WebCore::RenderLayer::updateScrollbarsAfterLayout
        https://bugs.webkit.org/show_bug.cgi?id=145142

        Reviewed by Simon Fraser.

        I have not been able to reproduce this crash, but according to symbolication 
        m_vBar is null. It seems like this crash was probably caused by 
        http://trac.webkit.org/changeset/173668 which made it so that overflow:scroll 
        behaves like overflow:auto when the scrollbars are overlay. I can see how you 
        could encounter this crash with that change if the layout caused 
        styleRequiresScrollbar() to return true when it used to return false. Then this 
        code, by failing to null-check the scrollbars, assumes that 
        styleRequiresScrollbar() could not have changed based on a layout. But it could 
        change if the css changed the scrollbars to be custom or if the user managed 
        switch to legacy style scrollbars at just the wrong time. Or I suppose it could 
        also happen if the user has legacy scrollbars and the style switched from auto to 
        scroll during the layout.

        Anyway, we should null-check  the scrollbars. This is a speculative fix.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):

2015-05-19  Hunseop Jeong  <hs85.jeong@samsung.com>

        Use modern for-loops in WebCore/xml.
        https://bugs.webkit.org/show_bug.cgi?id=145046

        Reviewed by Chris Dumez.

        No new tests, no new tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::uppercaseKnownHTTPMethod):
        * xml/XPathExpressionNode.cpp:
        (WebCore::XPath::Expression::setSubexpressions):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSum::evaluate):
        (WebCore::XPath::populateFunctionMap):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathParser.cpp:
        (WebCore::XPath::populateAxisNamesMap):
        * xml/XPathPath.cpp:
        (WebCore::XPath::Filter::evaluate):
        (WebCore::XPath::LocationPath::evaluate):
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::EqTestOp::compare):
        (WebCore::XPath::Union::evaluate):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::optimize):
        (WebCore::XPath::Step::predicatesAreContextListInsensitive):
        (WebCore::XPath::Step::evaluate):
        (WebCore::XPath::nodeMatches):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::~XSLStyleSheet):
        (WebCore::XSLStyleSheet::isLoading):
        (WebCore::XSLStyleSheet::clearDocuments):
        (WebCore::XSLStyleSheet::locateStylesheetSubResource):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltParamArrayFromParameterMap):

2015-05-19  Jon Lee  <jonlee@apple.com>

        Improve text rendering of placeholder
        https://bugs.webkit.org/show_bug.cgi?id=145135

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css: The <p> elements of the wireless playback
        text are being popped out into separate layers, causing the text to render antialiased, which
        looks bad on non-retina machines. Explicitly set the background color (which is ok since the
        container element for the placeholder is also black). Also extend the height out 1pt to prevent
        clipping of descenders.
        (audio::-webkit-media-controls-wireless-playback-text-top): Set background color to black and add
        1 to the height.
        (audio::-webkit-media-controls-wireless-playback-text-bottom): Ditto.

2015-05-19  Jon Lee  <jonlee@apple.com>

        [iOS] Current time display should be right-aligned
        https://bugs.webkit.org/show_bug.cgi?id=145163
        rdar://problem/21014339

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsiOS.css: Use flex-start and flex-end
        instead of right and left, similar to the Mac controls.
        (video::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-time-remaining-display):

2015-05-14  Chris Fleizach  <cfleizach@apple.com>

        AX: Select text mechanism returns results outside of text control regions
        https://bugs.webkit.org/show_bug.cgi?id=145041

        Reviewed by Mario Sanchez Prada.

        The behavior of the select text mechanism (inside accessibility) should make sure that results
        returned stay within text control elements if the search was initiated inside a text control element.

        Test: platform/mac/accessibility/select-text-stays-inside-text-controls.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::rangeClosestToRange):
        (WebCore::AccessibilityObject::selectText):

2015-05-19  Chris Dumez  <cdumez@apple.com>

        Mark static variables as const when possible
        https://bugs.webkit.org/show_bug.cgi?id=145161

        Reviewed by Andreas Kling.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/webdatabase/SQLException.cpp:
        * dom/DOMCoreException.cpp:
        * inspector/NetworkResourcesData.cpp:
        * loader/icon/IconDatabase.cpp:
        (WebCore::urlForLogging):
        * page/AutoscrollController.cpp:
        * page/Page.cpp:
        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsAdSheet):
        (WebCore::applicationIsMobileMail):
        (WebCore::applicationIsMobileSafari):
        (WebCore::applicationIsDumpRenderTree):
        (WebCore::applicationIsWebApp):
        (WebCore::applicationIsOkCupid):
        (WebCore::applicationIsFacebook):
        (WebCore::applicationIsEpicurious):
        (WebCore::applicationIsDaijisenDictionary):
        (WebCore::applicationIsNASAHD):
        (WebCore::applicationIsMASH):
        (WebCore::applicationIsTheEconomistOnIPhone):
        (WebCore::applicationIsWebProcess):
        (WebCore::applicationIsIBooksOnIOS):
        * platform/audio/HRTFElevation.cpp:
        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::processIsRunningPropertyDescriptor):
        (WebCore::outputDevicePropertyDescriptor):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toCoreTextFontWeight):
        (WebCore::toAppKitFontWeight):
        (WebCore::toNSFontWeight):
        * platform/mac/ScrollAnimatorMac.mm:
        (supportsUIStateTransitionProgress):
        (supportsExpansionTransitionProgress):
        (supportsContentAreaScrolledInDirection):
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::dataForURLComponentType):
        * platform/mock/ScrollbarThemeMock.cpp:
        * platform/text/icu/UTextProviderLatin1.cpp:
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::calculateMaximumWidth):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::matchedEndLine):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        * rendering/RenderFrameBase.cpp:
        (WebCore::shouldExpandFrame):
        * rendering/RenderTableSection.cpp:
        * rendering/RenderThemeIOS.mm:
        (WebCore::getInsetGradient):
        (WebCore::getShineGradient):
        (WebCore::getShadeGradient):
        (WebCore::getConvexGradient):
        (WebCore::getConcaveGradient):
        (WebCore::getSliderTrackGradient):
        (WebCore::getReadonlySliderTrackGradient):
        (WebCore::getSliderThumbOpaquePressedGradient):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::toFontWeight):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):

2015-05-18  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use Ref instead of PassRefPtr in WebCore/bindings
        https://bugs.webkit.org/show_bug.cgi?id=144981

        Reviewed by Darin Adler.

        As a step to purge PassRefPtr, remove PassRefPtr in WebCore/bindings.

        No new tests, no behavior changes.

        * bindings/gobject/GObjectNodeFilterCondition.h:
        (WebCore::GObjectNodeFilterCondition::create):
        * bindings/gobject/GObjectXPathNSResolver.h:
        (WebCore::GObjectXPathNSResolver::create):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSErrorHandler.h:
        (WebCore::JSErrorHandler::create):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::createForNode):
        (WebCore::JSLazyEventListener::createForDOMWindow):
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/JSMutationCallback.h:
        (WebCore::JSMutationCallback::create):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::numberValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/js/SerializedScriptValue.h:
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::wrap):
        * bindings/objc/ObjCNodeFilterCondition.h:
        (WebCore::ObjCNodeFilterCondition::create):

2015-05-18  Csaba Osztrogonác  <ossy@webkit.org>

        Fix uninitialized warnings in RealtimeMediaSourceCenterOwr.cpp
        https://bugs.webkit.org/show_bug.cgi?id=145119

        Reviewed by Gyuyoung Kim.

        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):

2015-05-18  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Ignore warnings in system headers
        https://bugs.webkit.org/show_bug.cgi?id=144747

        Reviewed by Darin Adler.

        Separate include directories into WebKit project includes and system includes. Suppress all
        warnings from headers in system include directories using the SYSTEM argument to
        the include_directories command.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:

2015-05-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments on r184353
        https://bugs.webkit.org/show_bug.cgi?id=145146

        Reviewed by Benjamin Poulain.

        See per-file comments.

        No new tests because there is no behavior change.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamilySpecialCase): Use equalIgnoringASCIICase() AtomicString overload.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateCachedSystemFontDescription): Implement Ben's ideas for
        cheaply constructing AtomicStrings only when necessary.

2015-05-18  Skachkov Alexandr  <gskachkov@gmail.com>

        [ES6] Arrow function syntax. Feature flag for arrow function
        https://bugs.webkit.org/show_bug.cgi?id=145108

        Reviewed by Ryosuke Niwa.

        Added feature flag ENABLE_ES6_ARROWFUNCTION_SYNTAX for arrow function

        * Configurations/FeatureDefines.xcconfig:

2015-05-18  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(142590): Scroll-snap points are improperly snapping to earlier index values
        https://bugs.webkit.org/show_bug.cgi?id=145140
        <rdar://problem/21006738>

        Reviewed by Beth Dakin.

        The new "nearestActiveSnapPoint" logic is firing while scroll snap animations are running. We need
        to add an "isScrollSnapInProgress" predicate, much like the existing "isRubberBandInProgress" to avoid
        certain "fix-up" logic that we don't want running while we are in the process of moving to a new position.

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::isScrollSnapInProgress): Added.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::updateScrollSnapState): If we are in the midst of a scroll snap operation,
        do not attempt to reset position to the current active snap point.
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::isScrollSnapInProgress): Added.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::isScrollSnapInProgress): Added.

2015-05-17  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Add scrollbar width in intrinsic logical widths computation
        https://bugs.webkit.org/show_bug.cgi?id=145021

        Like for flexboxes we've to take into account the scrollbar logical
        width while computing the intrinsic min and max logical widths.

        Reviewed by Sergio Villar Senin.

        Test: fast/css-grid-layout/compute-intrinsic-widths-scrollbar.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths): Add scrollbar
        logical width.

2015-05-17  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Delegate ReadableStreamReader reference counting to ReadableStream
        https://bugs.webkit.org/show_bug.cgi?id=144907

        Reviewed by Darin Adler.

        Changed the link between readadable stream and reader.
        Controller ref()/deref() now increments/decrements its stream ref counter, similarly to ReadableStreamController.
        This ensures that even if JS scripts do not keep track of the readable stream,
        the readable stream will not be disposed as long as the JS script has access to its reader.

        All readers of a given stream are kept by the stream, either in an array (for released readers) 
        or and in ReadableStream::m_reader for the active reader.
        This removes the need for the code synchronizing stream and reader.

        As a reader can now already count on its stream, the reader no longer needs to store the error in errored state.
        Removal of ReadableJSStream::Reader as closed promise rejection error is directly retrieved from the ReadableStream.
        Moved the creation of reader directly in ReadableStream.

        Next step should be to remove ReadableStreamReader::m_state and to delegate the handling of ReadableStreamReader closed promise callbacks to ReadableStream.

        No change in behavior.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToClosed):
        (WebCore::ReadableStream::changeStateToErrored):
        (WebCore::ReadableStream::getReader):
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::reader):
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::clean):
        (WebCore::ReadableStreamReader::ref):
        (WebCore::ReadableStreamReader::deref):
        (WebCore::ReadableStreamReader::closed):
        (WebCore::ReadableStreamReader::changeStateToClosed):
        (WebCore::ReadableStreamReader::changeStateToErrored):
        * Modules/streams/ReadableStreamReader.h:
        (WebCore::ReadableStreamReader::ReadableStreamReader):
        * Modules/streams/ReadableStreamReader.idl:
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::getReader):
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):
        (WebCore::constructJSReadableStreamReader):
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::storeError):
        (WebCore::ReadableJSStream::ReadableJSStream): Deleted.
        * bindings/js/ReadableJSStream.h:

2015-05-17  Alexey Proskuryakov  <ap@apple.com>

        Crash when uploading huge files to YouTube or Google Drive
        https://bugs.webkit.org/show_bug.cgi?id=145083
        rdar://problem/15468529

        Reviewed by Darin Adler.

        This fixes the crash, but uploading will fail.

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start): Tell SubresourceLoader to not store a copy of
        all received data, FileReaderLoader has its own buffer.
        (WebCore::FileReaderLoader::didReceiveResponse): Fixed a bounds check - not every
        64-bit value that doesn't fit into 32 bits is negative. With this, FileReader fails
        on huge files right away, as intended.
        (WebCore::FileReaderLoader::didReceiveData): Fixed multiple bugs in code that's
        executed when size is not available upfront. This is the code that used to crash,
        but with the above fix, it's not executed by YouTube.
        Not only overflow was handled incorrectly, but even simply growing a buffer for
        append was buggy.

2015-05-16  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (Subpixel): Dashed underline is missing when box is positioned at subpixels.
        https://bugs.webkit.org/show_bug.cgi?id=145097
        rdar://problem/18588415

        Reviewed by Simon Fraser.

        Dashed and dotted border painting needs clipping in order to properly display corners.
        Similarly to solid border's quad calculation, we pixelsnap the border positions before computing the clipping quad values.

        Test: fast/borders/dashed-border-on-subpixel-position.html
              fast/borders/dotted-border-on-subpixel-position.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):

2015-05-16  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove styleText() and applyStyleText() from InspectorStyle.
        https://bugs.webkit.org/show_bug.cgi?id=145093

        Reviewed by Darin Adler.

        styleText() and applyStyleText() in InspectorStyle are private aliases for the public
        accessors in the same class but are rarely used. I think it would be better off removing
        these aliases and updating all the current call sites to use the public accessors directly
        as noted in InspectorStyleSheet.h.

        No new tests, no behavior change.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateAllProperties):
        * inspector/InspectorStyleSheet.h:

2015-05-16  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove MessageType variant of addMessageToConsole() from ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=145095

        Reviewed by Darin Adler.

        All addMessageToConsole() in ChromeClient are exactly the same thing.
        So there is no reason to keep all this methods.

        No new tests, no behavior change.

        * page/ChromeClient.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):

2015-05-15  Sam Weinig  <sam@webkit.org>

        Add getElementById to DocumentFragment
        https://bugs.webkit.org/show_bug.cgi?id=145094

        Reviewed by Alexey Proskuryakov.

        Match the latest DOM standard and other browsers by adding getElementById
        to DocumentFragment in addition to Document and SVGSVGElement. Add NonElementParentNode
        interface that the DOM standard defines.

        Test: fast/dom/DocumentFragment/getElementById.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add NonElementParentNode.idl

        * dom/Document.idl:
        Mark Document as implementing NonElementParentNode and remove now redundant getElementById
        declaration.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::getElementById):
        * dom/DocumentFragment.h:
        Add implementation of getElementById for DocumentFragments. Add a fast path for ShadowRoots
        which can take advantage of the fact that they are TreeScopes to use the elements by id cache
        in TreeScrope.

        * dom/DocumentFragment.idl:
        Mark DocumentFragment as implementing NonElementParentNode.

        * dom/NonElementParentNode.idl: Copied from Source/WebCore/dom/NonDocumentTypeChildNode.idl.
        Added.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        Convert to taking an AtomicString to match other getElementByIds.

2015-05-15  Antti Koivisto  <antti@apple.com>

        When redirecting to data URL use HTTP response for same origin policy checks
        https://bugs.webkit.org/show_bug.cgi?id=145054
        rdar://problem/20299050

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/security/canvas-remote-read-data-url-image-redirect.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::responseReceived):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isOriginClean):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::passesAccessControlCheck):
        (WebCore::CachedResource::passesSameOriginPolicyCheck):

            Factor repeatedly used same origin policy test into a function.

        (WebCore::CachedResource::redirectReceived):

            When redirecting to a data URL save the redirect response.

        (WebCore::CachedResource::responseForSameOriginPolicyChecks):

            In case we got redirected to data use that response instead of the final data response for policy checks.

        * loader/cache/CachedResource.h:

2015-05-16  Jon Lee  <jonlee@apple.com>

        [iOS] wireless playback picker button is drawn incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=145057
        rdar://problem/20877518

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessTargetPickerButton): This method is
        defined in Controller, but is only meant to run on Macs. Override it with
        an empty function for iOS.

2015-05-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r183300): Background missing on top links on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=145079
        rdar://problem/20914252

        Reviewed by Tim Horton.
        
        Re-land r184421 with a fix to check against rects.coverageRect
        rather than the stale m_coverageRect.

        Test: compositing/visible-rect/backing-change-height-from-zero.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldSkipLayerInDump):

2015-05-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r181625): Timeline recording started from console.profile is always empty
        https://bugs.webkit.org/show_bug.cgi?id=144882

        Reviewed by Joseph Pecoraro.

        A timeline recording will always be stopped before the end of the current run loop is observed. Before
        dispatching the recording stopped event, any events that are currently in progress should be considered
        complete and sent to the frontend.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStop):

2015-05-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r184421.
        https://bugs.webkit.org/show_bug.cgi?id=145087

        Introduced 42 layout test failures (Requested by rniwa on
        #webkit).

        Reverted changeset:

        "REGRESSION (r183300): Background missing on top links on
        apple.com"
        https://bugs.webkit.org/show_bug.cgi?id=145079
        http://trac.webkit.org/changeset/184421

2015-05-15  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r183300): Background missing on top links on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=145079
        rdar://problem/20914252

        Reviewed by Tim Horton.

        GraphicsLayerCA::setVisibleAndCoverageRects() only set the m_intersectsCoverageRect
        flag if the coverage rect changed, but it doesn't if you simply change the size of
        the layer.

        Instead, always re-evaluate the intersection, and set the CoverageRectChanged bit
        if it changes.

        Test: compositing/visible-rect/backing-change-height-from-zero.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldSkipLayerInDump): Don't skip any layers in a
        debug layer dump, to assist debugging.

2015-05-15  Sam Weinig  <sam@webkit.org>

        Move HTMLElement's children property to ParentNode
        https://bugs.webkit.org/show_bug.cgi?id=145072

        Reviewed by Chris Dumez.

        Match the latest DOM standard and other browsers by moving the children property
        to ParentNode, thus exposing it on Element, Document and DocumentFragment.

        Test: fast/dom/ParentNode-children.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::children):
        Moved implementation from HTMLElement to here.

        (WebCore::ContainerNode::ensureCachedHTMLCollection):
        (WebCore::ContainerNode::cachedHTMLCollection):
        Moved implementation from Element to here so that ContainerNode::children
        can use it.

        (WebCore::ContainerNode::firstElementChild):
        (WebCore::ContainerNode::lastElementChild):
        (WebCore::ContainerNode::childElementCount):
        Remove unnecessary assertions.

        * dom/ContainerNode.h:
        Moved declarations from HTMLElement and Element to here.

        * dom/Element.cpp:
        (WebCore::Element::ensureCachedHTMLCollection): Deleted.
        (WebCore::Element::cachedHTMLCollection): Deleted.
        * dom/Element.h:
        Moved to ContainerNode.

        * dom/Node.cpp:
        (WebCore::Node::previousElementSibling):
        (WebCore::Node::nextElementSibling):
        Remove unnecessary assertions.

        * dom/ParentNode.idl:
        Moved the children property here from HTMLElement.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children): Deleted.
        * html/HTMLElement.h:
        Moved to ContainerNode.

        * html/HTMLElement.idl:
        Get rid of the children property for all bindings except Objective-C which needs
        to keep it to avoid changing the public API.

2015-05-15  Zalan Bujtas  <zalan@apple.com>

        WebCore ASan debug build fails. ERROR: WebCore has a weak external symbol in it.
        https://bugs.webkit.org/show_bug.cgi?id=145070

        Reviewed by David Kilzer.

        Build fix.

        * Configurations/WebCore.unexp:

2015-05-15  Beth Dakin  <bdakin@apple.com>

        Prefix force on MouseEvent and add constants for click and force click values
        https://bugs.webkit.org/show_bug.cgi?id=145065
        -and corresponding-
        rdar://problem/20770052

        Reviewed by Tim Horton.

        (WebCore::MouseEvent::webkitForce):
        * dom/MouseEvent.idl:

2015-05-15  Jer Noble  <jer.noble@apple.com>

        [MediaControls] Refactor media controls & bring improvements made to iOS controls to Mac.
        https://bugs.webkit.org/show_bug.cgi?id=144973

        Reviewed by Dean Jackson.

        Pull improvements made to the iOS media controls back into the Mac controls by moving
        code from mediaControlsiOS.js into MediaControlsApple.js.

        The largest refactored feature is the ability to drop individual controls from the media
        controls when the video is too small to contain them. To allow these controls to resize
        dynamically, a new "resize" event is fired inside the media element's shadow DOM.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .dropped): Added; sets "display: none".
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Set defaults for new variables.
        (Controller.prototype.updateControls): Update the controls width; moved from iOS.js.
        (Controller.prototype.handleReadyStateChange): Update the controls; moved from iOS.js.
        (Controller.prototype.handleTimeUpdate): Update the progress; moved from iOS.js.
        (Controller.prototype.handleTimelineInput): Pause if scrubbing; moved from iOS.js.
        (Controller.prototype.handleTimelineChange): Update the progress; moved from iOS.js.
        (Controller.prototype.showControls): Update the controls width; moved from iOS.js.
        (Controller.prototype.hideControls): Removed _potentiallyScrubbing check; not needed due to changes
            to controlsAlwaysVisible().
        (Controller.prototype.scheduleUpdateLayoutForDisplayedWidth): Moved from iOS.js.
        (Controller.prototype.isControlVisible): Added; checks whether control is parented & not hidden.
        (Controller.prototype.updateLayoutForDisplayedWidth): Moved from iOS.js and refactored.
        (Controller.prototype.controlsAlwaysVisible): Return true if scrubbing.
        (Controller.prototype.updateHasAudio): Check currentPlaybackTargetIsWireless(); moved from iOS.js.
        (Controller.prototype.get scrubbing): Simple getter for _scrubbing.
        (Controller.prototype.set scrubbing): Check play state if scrubbing; start playback (if necessary)
            if not scrubbing.
        (Controller.prototype.get pageScaleFactor): Moved from iOS.js.
        (Controller.prototype.set pageScaleFactor): Ditto.
        (Controller.prototype.handleRootResize): Schedule an update of the contrtols width.

        Remove a bunch of newly unnecessary code from the iOS media controls:

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS):
        (ControllerIOS.prototype.createControls): Remove ivars moved into Apple.js.
        (ControllerIOS.prototype.configureInlineControls): Remove spacer; made unnecessary.
        (ControllerIOS.prototype.showControls): Deleted.
        (ControllerIOS.prototype.updateTime): Deleted.
        (ControllerIOS.prototype.handleTimelineTouchStart): Just call "scrubbing = true", handled in Apple.js.
        (ControllerIOS.prototype.handleTimelineTouchEnd): Just call "scrubbing = false", handled in Apple.js.
        (ControllerIOS.prototype.handleReadyStateChange): Deleted.
        (ControllerIOS.prototype.setPlaying): Don't check _timelineIsHidden; not needed.
        (ControllerIOS.prototype.get pageScaleFactor): Deleted.
        (ControllerIOS.prototype.set pageScaleFactor): Deleted.
        (ControllerIOS.prototype.scheduleUpdateLayoutForDisplayedWidth): Deleted.
        (ControllerIOS.prototypeupdateLayoutForDisplayedWidth): Deleted.

        Fire a "resize" event at the shadow DOM root when layout results in a size change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::layoutSizeChanged): Fire the "resize" event at the shadow DOM.
        * html/HTMLMediaElement.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout): Trigger layoutSizeChanged()
        * rendering/RenderMedia.h:

        Drive-by fixes:

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): aria-label text is totally wrong; removed.
        (Controller.prototype.updateWirelessPlaybackStatus): Use class-names to hide controls, not inline styles.

2015-05-15  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Fail to load old content extension files
        https://bugs.webkit.org/show_bug.cgi?id=145027

        Reviewed by Eric Carlson.

        * contentextensions/DFABytecode.h:

2015-05-15  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed build fix.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Add clang pragmas to ignore
        deprecation warnings.

2015-05-15  Jeremy Jones  <jeremyj@apple.com>

        Limit alternate fullscreen with linked on or after.
        https://bugs.webkit.org/show_bug.cgi?id=144894

        Reviewed by Dean Jackson.

        * platform/ios/WebCoreSystemInterfaceIOS.h: add new wkIOSSystemVersion

2015-05-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Revert part of r184361.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.configureInlineControls):
        HI wants the buttons flipped.

2015-05-15  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix trivial typo in TextEncodingDetectorICU.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=145055

        Reviewed by Alexey Proskuryakov.

        No new tests, no behavior change..

        * platform/text/TextEncodingDetectorICU.cpp:
        (WebCore::detectTextEncoding):

2015-05-15  Alexey Proskuryakov  <ap@apple.com>

        Cyrillic top-level domains are displayed as punycode
        https://bugs.webkit.org/show_bug.cgi?id=145024
        rdar://problem/17747133
        rdar://problem/14116594

        Reviewed by Tim Horton.

        Handling each TLD in code is annoying, but we can probably survive like this
        for a few more years, and maybe we'll think of an entirely different way to deal
        with non-ASCII domain labels in the meanwhile.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isSecondLevelDomainNameAllowedByTLDRules):
        (WebCore::allCharactersAllowedByTLDRules):

2015-05-15  Roger Fong  <roger_fong@apple.com>

        Cursor is displayed after full screen video controls fade away.
        https://bugs.webkit.org/show_bug.cgi?id=145034.
        <rdar://problem/20458604>

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-panel):
        Unnecessary cursor style is on the control panel while hidden but
        the cursor will already be hidden anyways from being auto-hidden.
        Causes style to change when controls are hidden,
        which causes the cursor to reappear.

2015-05-15  Roger Fong  <roger_fong@apple.com>

        Checkmark on OFF option of captions sometimes does not appear.
        https://bugs.webkit.org/show_bug.cgi?id=145060.
        <rdar://problem/19388333>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.buildCaptionMenu):
        Audio tracks don’t have an OFF option.
        Remove related code to allow OFF option for subtitles to work properly.

2015-05-15  Zalan Bujtas  <zalan@apple.com>

        White edge on animating panel on http://rokkosunnyvale.com
        https://bugs.webkit.org/show_bug.cgi?id=144986
        rdar://problem/20907683

        Reviewed by Simon Fraser.

        Background image geometry calculation needs to be based on the final painting size of the container
        in order to accurately compute tile sizes, repeating positions etc.
        The container's size is pixelsnapped at painting using absolute coordinates. This patch
        ensures that we snap to the same size while computing background geometry.

        Test: fast/images/background-image-size-changes-fractional-position.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::getBackgroundPaintedExtent):
        (WebCore::RenderBox::computeBackgroundIsKnownToBeObscured):
        (WebCore::RenderBox::maskClipRect):
        (WebCore::RenderBox::repaintLayerRectsForImage): unable to get absolute coords.
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::boxShadowShouldBeAppliedToBackground):
        (WebCore::RenderImage::computeBackgroundIsKnownToBeObscured):
        * rendering/RenderImage.h:
        * rendering/RenderLayer.cpp: unable to get absolute coords.
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage): currently not used.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeBackgroundIsKnownToBeObscured):
        (WebCore::RenderObject::backgroundIsKnownToBeObscured):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::boxShadowShouldBeAppliedToBackground):
        * rendering/RenderTableCell.h:

2015-05-15  Jer Noble  <jer.noble@apple.com>

        Crash in RenderFlowThread::popFlowThreadLayoutState() due to mismatched push/pop count
        https://bugs.webkit.org/show_bug.cgi?id=145042

        Reviewed by David Hyatt.

        RenderFlowThread previously used a ListHashSet to store its stack of active objects. This
        is problematic because, if the same object is pushed twice, only a single entry of that
        object is added to the stack. After this occurs, a matching number of pushes will pop too
        many items off the stack, causing a crash when popping a stack with zero items. This
        specifically happens in FrameView::layout(), which will push its root renderer on the stack
        of active items, and then ask the root to layout(), which will attempt to push itself on the
        stack of active items.

        Instead of a ListHashSet, use a Vector, which has similar memory characteristics and no 
        uniqueness requirements.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState):
        (WebCore::RenderFlowThread::popFlowThreadLayoutState):
        * rendering/RenderFlowThread.h:

2015-05-15  Per Arne Vollan  <peavo@outlook.com>

        [Curl] WebSocket platform part is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=144628

        Reviewed by Darin Adler.

        Add Curl platform code implementation for WebSockets.

        * platform/network/curl/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::create):
        (WebCore::SocketStreamHandle::SocketData::SocketData):
        * platform/network/curl/SocketStreamHandleCurl.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):
        (WebCore::SocketStreamHandle::readData):
        (WebCore::SocketStreamHandle::sendData):
        (WebCore::SocketStreamHandle::waitForAvailableData):
        (WebCore::SocketStreamHandle::startThread):
        (WebCore::SocketStreamHandle::stopThread):
        (WebCore::SocketStreamHandle::didReceiveData):
        (WebCore::SocketStreamHandle::didOpenSocket):
        (WebCore::SocketStreamHandle::createCopy):

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

        REGRESSION(r183861): [SOUP] Downloads are broken when using the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=144738

        Reviewed by Alexey Proskuryakov.

        Add ResourceHandle::releaseForDownload() that releases the current
        handle to be used as a download.

        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::releaseForDownload):

2015-05-15  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Fix PlatformDisplayWayland construction error, implement the destructor
        https://bugs.webkit.org/show_bug.cgi?id=144997

        Reviewed by Carlos Garcia Campos.

        The PlatformDisplayWayland constructor is private, so we can't use
        std::make_unique<>() to construct an object of this class.

        Implement the PlatformDisplayWayland destructor, cleaning out all
        the Wayland resources, if present.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create):
        (WebCore::PlatformDisplayWayland::PlatformDisplayWayland):
        (WebCore::PlatformDisplayWayland::~PlatformDisplayWayland):

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

        Images on www.fitstylelife.com jiggle on hover.
        https://bugs.webkit.org/show_bug.cgi?id=145020
        rdar://problem/20885337

        Reviewed by Simon Fraser.

        This patch ensures that the clipping layer of a composited content is pixel snapped properly.

        Tests: compositing/composited-parent-clipping-layer-on-subpixel-position.html
               compositing/parent-clipping-layer-on-subpixel-position.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2015-05-14  Chris Dumez  <cdumez@apple.com>

        Have DOMWindow::createWindow() take references to frames
        https://bugs.webkit.org/show_bug.cgi?id=145037

        Reviewed by Gyuyoung Kim.

        Have DOMWindow::createWindow() take references to frames instead of
        pointers as they are expected to be non-null. Also return a RefPtr
        instead of a PassRefPtr.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:

2015-05-14  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r183794): Garbage tiles when body background switches to fixed
        https://bugs.webkit.org/show_bug.cgi?id=145032
        rdar://problem/20963679

        Reviewed by Dean Jackson.
        
        After r183794 (or possibly an earlier commit), we failed to dynamically update
        the configuration of layers that handled fixed background attachment on the root.
        
        This would result in unpainted tiles, and non-fixed-background behavior.
        
        Fix by calling RenderLayerCompositor::rootOrBodyStyleChanged() whenever the
        style changes on the root or body renderers, and triggering a compositing update
        if the fixedness of the background changes. It calls the existing rootBackgroundTransparencyChanged()
        if the color changes.

        Test: platform/mac-wk2/tiled-drawing/toggle-to-fixed-background.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged):
        (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged):
        * rendering/RenderLayerCompositor.h:

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

        Unreviewed, rolling out r184359 and r184362.
        https://bugs.webkit.org/show_bug.cgi?id=145035

        Introduced a crash in six media element tests (Requested by
        rniwa on #webkit).

        Reverted changesets:

        "[MediaControls] Refactor media controls & bring improvements
        made to iOS controls to Mac."
        https://bugs.webkit.org/show_bug.cgi?id=144973
        http://trac.webkit.org/changeset/184359

        "Unreviewed build fix after r184359; typo."
        http://trac.webkit.org/changeset/184362

2015-05-14  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r184359; typo.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::layoutSizeChanged):

2015-05-14  Roger Fong  <roger_fong@apple.com>

        Adjust button CSS and positioning in preparation.
        https://bugs.webkit.org/show_bug.cgi?id=144973.
        <rdar://problem/20306227>

        Reviewed by Dean Jackson.

        The only visual change here is the swapping of the rewind and play button positions.
        Also, position buttons based off of both left and right margins instead of just one of the two.
        This allows the controls drop off to work without having to use a spacer element to take the place
        of the timeline if the controls are too small.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-panel .mute-box):
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button.exit):
        (audio::-webkit-media-controls-time-remaining-display):
        (audio:-webkit-full-screen::-webkit-media-controls-toggle-closed-captions-button):
        (audio:-webkit-full-screen::-webkit-media-controls-wireless-playback-picker-button):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.configureInlineControls):

2015-05-14  Dean Jackson  <dino@apple.com>

        MediaControls: controls are live even when invisible
        https://bugs.webkit.org/show_bug.cgi?id=145029
        <rdar://problem/20865442>

        Reviewed by Jer Noble.

        When the controls are invisible they should ignore touch/mouse
        events.

        * Modules/mediacontrols/mediaControlsiOS.css: Add pointer-events: none where appropriate.
        (video::-webkit-media-controls-panel-container):
        (video::-webkit-media-controls-panel-background):
        (video::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel.paused):

2015-05-14  Jer Noble  <jer.noble@apple.com>

        [MediaControls] Refactor media controls & bring improvements made to iOS controls to Mac.
        https://bugs.webkit.org/show_bug.cgi?id=144973

        Reviewed by Dean Jackson.

        Pull improvements made to the iOS media controls back into the Mac controls by moving
        code from mediaControlsiOS.js into MediaControlsApple.js.

        The largest refactored feature is the ability to drop individual controls from the media
        controls when the video is too small to contain them. To allow these controls to resize
        dynamically, a new "resize" event is fired inside the media element's shadow DOM.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .dropped): Added; sets "display: none".
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Set defaults for new variables.
        (Controller.prototype.updateControls): Update the controls width; moved from iOS.js.
        (Controller.prototype.handleReadyStateChange): Update the controls; moved from iOS.js.
        (Controller.prototype.handleTimeUpdate): Update the progress; moved from iOS.js.
        (Controller.prototype.handleTimelineInput): Pause if scrubbing; moved from iOS.js.
        (Controller.prototype.handleTimelineChange): Update the progress; moved from iOS.js.
        (Controller.prototype.showControls): Update the controls width; moved from iOS.js.
        (Controller.prototype.hideControls): Removed _potentiallyScrubbing check; not needed due to changes
            to controlsAlwaysVisible().
        (Controller.prototype.scheduleUpdateLayoutForDisplayedWidth): Moved from iOS.js.
        (Controller.prototype.isControlVisible): Added; checks whether control is parented & not hidden.
        (Controller.prototype.updateLayoutForDisplayedWidth): Moved from iOS.js and refactored.
        (Controller.prototype.controlsAlwaysVisible): Return true if scrubbing.
        (Controller.prototype.updateHasAudio): Check currentPlaybackTargetIsWireless(); moved from iOS.js.
        (Controller.prototype.get scrubbing): Simple getter for _scrubbing.
        (Controller.prototype.set scrubbing): Check play state if scrubbing; start playback (if necessary)
            if not scrubbing.
        (Controller.prototype.get pageScaleFactor): Moved from iOS.js.
        (Controller.prototype.set pageScaleFactor): Ditto.
        (Controller.prototype.handleRootResize): Schedule an update of the contrtols width.

        Remove a bunch of newly unnecessary code from the iOS media controls:

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS):
        (ControllerIOS.prototype.createControls): Remove ivars moved into Apple.js.
        (ControllerIOS.prototype.configureInlineControls): Remove spacer; made unnecessary.
        (ControllerIOS.prototype.showControls): Deleted.
        (ControllerIOS.prototype.updateTime): Deleted.
        (ControllerIOS.prototype.handleTimelineTouchStart): Just call "scrubbing = true", handled in Apple.js.
        (ControllerIOS.prototype.handleTimelineTouchEnd): Just call "scrubbing = false", handled in Apple.js.
        (ControllerIOS.prototype.handleReadyStateChange): Deleted.
        (ControllerIOS.prototype.setPlaying): Don't check _timelineIsHidden; not needed.
        (ControllerIOS.prototype.get pageScaleFactor): Deleted.
        (ControllerIOS.prototype.set pageScaleFactor): Deleted.
        (ControllerIOS.prototype.scheduleUpdateLayoutForDisplayedWidth): Deleted.
        (ControllerIOS.prototypeupdateLayoutForDisplayedWidth): Deleted.

        Fire a "resize" event at the shadow DOM root when layout results in a size change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::layoutSizeChanged): Fire the "resize" event at the shadow DOM.
        * html/HTMLMediaElement.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout): Trigger layoutSizeChanged()
        * rendering/RenderMedia.h:

        Drive-by fixes:

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): aria-label text is totally wrong; removed.
        (Controller.prototype.updateWirelessPlaybackStatus): Use class-names to hide controls, not inline styles.

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

        Crash in ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline
        https://bugs.webkit.org/show_bug.cgi?id=119068

        Reviewed by Enrica Casucci.

        The bug was caused by makeInsertedContentRoundTrippableWithHTMLTreeBuilder not updating
        nodes kept tracked by insertedNodes and moveNodeOutOfAncestor stumbling upon it.

        Fixed the bug by updating insertedNodes in makeInsertedContentRoundTrippableWithHTMLTreeBuilder.

        Test: editing/inserting/insert-table-in-paragraph-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor):
        * editing/ReplaceSelectionCommand.h:

2015-05-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Expose more font weights for -apple-system
        https://bugs.webkit.org/show_bug.cgi?id=144707

        Reviewed by Simon Fraser.

        Previously, when we parsed a CSS declaration of the form font: keyword; where keyword
        is one of caption, icon, menu, message-box, small-caption, -webkit-mini-control, -webkit-small-control,
        or -webkit-control (which html.css does for form controls), we would ask the system what the appropriate
        system font is, get that font's family name, and synthesize a font-family CSS property for the element.
        Then, later when we actually go to look up the font, we would look up the font by family name using this
        information. However, this round-tripping of a font through a family name is actually lossy, and is not
        guaranteed to preserve system-font-ness (which we use for various things including metrics calculations).

        This patch modifies this logic to specify a token family name instead, which the font lookup code special
        cases (and reacts by making the appropriate system-font lookup call). This approach is currently how iOS
        handles these system fonts; this patch simply brings this approach to OS X.

        There is also an added progression here. We used to simply call [NSFont fontWithName:size:] on the system
        font family name (which the parser found for us) which entirely disregards weight. This means that we
        used to be getting synthesized bold in form controls which ask for a heavy weight. Migrating to this
        system-font aware call means that we get the real bold font instead of synthesized bold.

        Once this system-font-ness is guaranteed to be preserved between parsing time and font lookup time, we
        can safely migrate to using [NSFont systemFontOfSize:weight] instead of [NSFont systemFontOfSize:] on
        platforms which support it.

        Tests: fast/text/systemFont.html
               fast/css/css2-system-fonts.html
               fast/forms/select/optgroup-rendering.html
               fast/forms/validation-message-appearance.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemFont): Add a comment regarding why we are bothering with expanding out
        the font property in the first place.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::primaryFontIsSystemFont): Update to use new system font tokens.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toNSFontWeight): New static method to map font weights to NSFontWeight constants available on
        Yosemite and later.
        (WebCore::fontWithFamilySpecialCase): Pull all these special-case font token name handling into a
        separate function, which returns an Optional.
        (WebCore::fontWithFamily):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlFont): Use the font token name instead of the generated system font family
        name.
        * platform/spi/mac/NSFontSPI.h: Add [NSFont systemFontWithSize:weight:] and the proper NSFontWeight
        constants.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateCachedSystemFontDescription): Use the font token names instead of the
        generated system font family name.
        (WebCore::RenderThemeMac::setFontFromControlSize): Ditto.

2015-05-14  Roger Fong  <roger_fong@apple.com>

        Add internals setting to disable wireless playback availability for layout tests
        https://bugs.webkit.org/show_bug.cgi?id=145012.
        <rdar://problem/20946504>

        Reviewed by Eric Carlson.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::resetToConsistentState):
        (WebCore::InternalSettings::setWirelessPlaybackDisabled):
        * testing/InternalSettings.idl:

2015-05-14  Beth Dakin  <bdakin@apple.com>

        Change range of possible forces for mouseforcechanged DOM event
        https://bugs.webkit.org/show_bug.cgi?id=144987
        -and corresponding-
        rdar://problem/20472802

        Reviewed by Tim Horton.

        Change to a 0-3 range.
        * platform/PlatformMouseEvent.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):

2015-05-14  Manuel Rego Casasnovas  <rego@igalia.com>

        Fix typo in RenderBox::instrinsicScrollbarLogicalWidth()
        https://bugs.webkit.org/show_bug.cgi?id=144999

        Reviewed by Sergio Villar Senin.

        Rename RenderBox::instrinsicScrollbarLogicalWidth() to
        RenderBox::intrinsicScrollbarLogicalWidth().

        No new tests, no behavior changes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::intrinsicScrollbarLogicalWidth):
        (WebCore::RenderBox::instrinsicScrollbarLogicalWidth): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):

2015-05-14  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        SharedBuffer::createWithContentsOfFile should use map file routines
        https://bugs.webkit.org/show_bug.cgi?id=144192

        Reviewed by Darin Adler.

        Made use of mmap routines within SharedBuffer::createWithContentsOfFile for EFL, GTK and Mac ports.
        If mapping is failing, it falls back to the previous version of SharedBuffer::createWithContentsOfFile renamed as
        SharedBuffer::createFromReadingFile (using open/read method).
        File content is mapped until SharedBuffer is cleared, destroyed or additional content is appended to the SharedBuffer.

        A helper class, MappedFileData, is introduced to handle mapped files through calls to open/mmap/munmap/close.

        Patch covered by existing layout tests and added unit tests.

        * platform/FileSystem.cpp:
        (WebCore::MappedFileData::MappedFileData):
        (WebCore::MappedFileData::operator=):
        (WebCore::MappedFileData::~MappedFileData):
        * platform/FileSystem.h:
        (WebCore::MappedFileData::MappedFileData):
        (WebCore::MappedFileData::operator bool):
        (WebCore::MappedFileData::data):
        (WebCore::MappedFileData::size):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createWithContentsOfFile): Making use of MappedFileData before using createFromReadingFile.
        (WebCore::SharedBuffer::size): Checking whether data is coming from a MappedFileData.
        (WebCore::SharedBuffer::data): Ditto.
        (WebCore::SharedBuffer::append): Ditto.
        (WebCore::SharedBuffer::clear): Clearing MappedFileData if needed.
        (WebCore::SharedBuffer::copy): Transferring mapped data to buffer if needed.
        (WebCore::SharedBuffer::getSomeData):
        (WebCore::SharedBuffer::maybeTransferMappedFileData):
        * platform/SharedBuffer.h:
        * platform/gtk/SharedBufferGtk.cpp:
        (WebCore::SharedBuffer::createFromReadingFile): renamed from createWithContentsOfFile.
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createFromReadingFile): Dito.
        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createFromReadingFile): Ditto.
        * platform/win/SharedBufferWin.cpp:
        (WebCore::SharedBuffer::createFromReadingFile): Ditto.

2015-05-13  Simon Fraser  <simon.fraser@apple.com>

        Get the ScriptController from the correct frame for media elements and plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=144983
        rdar://problem/20692642&19943135

        Reviewed by Sam Weinig.

        HTMLMediaElement, QuickTimePluginReplacement and HTMLPlugInImageElement were
        getting the main frame's ScriptController instead of the one for their frame.
        This caused media controls JS to be running in the context of the main frame,
        which broke media controls which use getCSSCanvasContext() and -webkit-canvas.
        
        Fix by getting the frame via the element's document.
        
        Also undo r180584 which was working around this bug.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.drawTimelineBackground):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::pageScaleFactorChanged):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):

2015-05-13  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix trivial typos in ApplyBlockElementCommand
        https://bugs.webkit.org/show_bug.cgi?id=144984

        Reviewed by Alexey Proskuryakov.

        No new tests, no behavior change.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection):
        (WebCore::ApplyBlockElementCommand::endOfNextParagraphSplittingTextNodesIfNeeded):
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded): Deleted.
        * editing/ApplyBlockElementCommand.h:

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

        REGRESION (r179958): Crash in WebCore::DocumentLoader::detachFromFrame when -[id<WebPolicyDelegate> decidePolicyForMIMEType:request:frame:decisionListener:] fails to call -[id<WebPolicyDecisionListener> download|ignore|use]
        <http://webkit.org/b/144975>

        Reviewed by Andy Estes.

        This change reverts r179958.  It changes RELEASE_ASSERT*()
        statements back to Debug-only ASSERT*() statements.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::detachFromFrame):

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

        Cached CSS image resources don't show up after reloading <http://nightly.webkit.org/start/>
        https://bugs.webkit.org/show_bug.cgi?id=144952
        rdar://problem/13387307

        Reviewed by Oliver Hunt.

        This is a symptom of a general problem that we don't revalidate subresources of cached parsed stylesheets.

        Fix by tightening the check we perform when choosing to used the cached sheet. If there are expired subresources
        we reparse the sheet.

        Test: http/tests/cache/stylesheet-sharing.html

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::traverseSubresources):
        (WebCore::CSSCrossfadeValue::hasFailedOrCanceledSubresources): Deleted.

            Replace hasFailedOrCanceledSubresources with general purpose subresource traversal functions.

        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::traverseSubresources):
        (WebCore::CSSFilterImageValue::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::traverseSubresources):
        (WebCore::CSSFontFaceSrcValue::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSFontFaceSrcValue.h:
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::traverseSubresources):
        (WebCore::CSSImageSetValue::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::traverseSubresources):
        (WebCore::CSSImageValue::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSImageValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::traverseSubresources):
        (WebCore::CSSValue::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::traverseSubresources):
        (WebCore::CSSValueList::hasFailedOrCanceledSubresources): Deleted.
        * css/CSSValueList.h:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::traverseSubresources):
        (WebCore::StyleProperties::hasFailedOrCanceledSubresources): Deleted.
        * css/StyleProperties.h:
        * css/StyleSheetContents.cpp:
        (WebCore::traverseSubresourcesInRules):
        (WebCore::StyleSheetContents::traverseSubresources):
        (WebCore::StyleSheetContents::subresourcesAllowReuse):

            Disallow reuse if there are expired subresources.

        (WebCore::StyleSheetContents::isLoadingSubresources):

            Testing support.

        (WebCore::childRulesHaveFailedOrCanceledSubresources): Deleted.
        (WebCore::StyleSheetContents::hasFailedOrCanceledSubresources): Deleted.
        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::loadCompleted):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::makeRevalidationDecision):
        (WebCore::CachedImage::mustRevalidateDueToCacheHeaders): Deleted.

            Move the logging code out from this function (it requires frame access this function doesn't otherwise need)
            and refactor to return a decision enum.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::makeRevalidationDecision):
        (WebCore::logResourceRevalidationReason): Deleted.
        (WebCore::CachedResource::mustRevalidateDueToCacheHeaders): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::loadFailedOrCanceled):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::logRevalidation):
        (WebCore::logResourceRevalidationDecision):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):

            Move logging here.

        * testing/Internals.cpp:
        (WebCore::Internals::isSharingStyleSheetContents):
        (WebCore::Internals::isStyleSheetLoadingSubresources):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-13  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Remove scaleFactor from SurfaceUpdateInfo
        https://bugs.webkit.org/show_bug.cgi?id=144935

        Reviewed by Darin Adler.

        The members of SurfaceUpdateInfo are only used to update tile except scaleFactor.
        So, this patch removes scaleFactor from SurfaceUpdateInfo.
        In addition, removes unnecessary parameters in createTile() 

        No new tests because there is no behavior change.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createTile):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp:
        (WebCore::CoordinatedTile::updateBackBuffer):
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        * platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h:

2015-05-13  Sam Weinig  <sam@webkit.org>

        Modernize ContainerNode::childElementCount
        https://bugs.webkit.org/show_bug.cgi?id=144930

        Reviewed by Darin Adler.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childElementCount):
        Use std::distance to compute the number of child elements.

        * dom/ElementChildIterator.h:
        Add typedefs to make the child element iterators conform STL standards.

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

        REGRESSION(r183770): Crash inside WebEditorClient::shouldApplyStyle when applying underline
        https://bugs.webkit.org/show_bug.cgi?id=144949
        <rdar://problem/20895753>

        Reviewed by Darin Adler.

        The crash was caused by the variant of applyStyleToSelection that takes EditingStyle passing
        a null pointer to shouldApplyStyle when we're only applying text decoration changes so that
        m_mutableStyle in the editing style is null. This didn't reproduce in execCommand since we
        wouldn't call shouldApplyStyle in that case. It didn't reproduce in my manual testing because
        font panel also sets text shadow, which ends up filling up m_mutableStyle.

        Fixed the bug by creating a mutable style properties when one is not provided by EditingStyle.
        Also fixed the "FIXME" in the function by converting text decoration changes to a corresponding
        text decoration value. The values passed to shouldApplyStyle now matches the old behavior prior
        to r183770.

        Test: editing/style/underline-by-user.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleWithResolvedTextDecorations): Added.
        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyleToSelection): Use styleWithResolvedTextDecorations to avoid the crash.

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

        Work around HTMLMediaElement::documentDidResumeFromPageCache being called twice
        https://bugs.webkit.org/show_bug.cgi?id=144969

        Reviewed by Alexey Proskuryakov.

        * dom/Document.cpp:
        (WebCore::Document::addPlaybackTargetPickerClient): Replace ASSERT with early 
        return to work around https://webkit.org/b/144970.

2015-05-13  Timothy Horton  <timothy_horton@apple.com>

        Going back after resizing causes scroll knob to appear in the middle of the page
        https://bugs.webkit.org/show_bug.cgi?id=144968
        <rdar://problem/18299827>

        Reviewed by Beth Dakin.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        (WebCore::CachedPage::markForContentsSizeChanged):
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForContentsSizeChanged):
        * history/PageCache.h:
        Add a flag that will cause us to call updateContentsSize() after a page
        comes out of the page cache, if necessary.

        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        * page/FrameView.h:
        Mark all cached pages for this frame as needing updateContentsSize()
        when setContentsSize happens. This will ensure that scrollbar layers
        are repositioned when coming out of the page cache.

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

        Need SPI to set the overlay scroll bar style
        https://bugs.webkit.org/show_bug.cgi?id=144928
        -and corresponding-
        rdar://problem/20143614

        Reviewed by Anders Carlsson.

        New ChromeClient function preferredScrollbarOverlayStyle() will fetch the 
        scrollbar style that was set via the new SPI.
        * page/ChromeClient.h:

        If the preferredScrollbarOverlayStyle() is anything but None, then use it. None is 
        used to indicate that the normal heuristic should compute the appropriate color.
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle):
        * page/FrameView.h:

2015-05-13  Brent Fulgham  <bfulgham@apple.com>

        Scrollbars in overflow regions are not vanishing after scrolling with scroll snap points
        https://bugs.webkit.org/show_bug.cgi?id=142521
        <rdar://problem/20100706>

        Reviewed by Darin Adler.

        The scrollbars were not being dismissed because they were not being notified that the wheel
        gesture was finished. This was happening because the wheel event 'ended' state has zero
        deltaX and deltaY. If the region did not allow stretching, it would exit early, never passing
        through the 'handleWheelEventPhase' code that would notify the scrollbar controller that
        the gesture had ended.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::mouseExitedContentArea): The wrong ScrollAnimator method was being
        called when the mouse exited the content area.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent): Do not early return when the wheel event has
        no change in X or Y coordinate.

2015-05-12  David Hyatt  <hyatt@apple.com>

        Don't compute selection painting info when we don't have selection.
        https://bugs.webkit.org/show_bug.cgi?id=144920
        <rdar://problem/20919920>

        Reviewed by Simon Fraser.

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

        Just set the selection paint style to the text paint style when we don't have a selection
        at all. Computing the selection style takes time in the case where a ::selection pseudo is
        used on the page, so we don't want to waste time computing that info unless it's actually
        needed.

2015-05-13  Joseph Pecoraro  <pecoraro@apple.com>

        Pass String as reference in more places
        https://bugs.webkit.org/show_bug.cgi?id=144769

        Reviewed by Daniel Bates.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpString):
        (WebCore::CloneSerializer::dumpStringObject):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * dom/DocumentMarkerController.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::stripCharacters):
        (WebCore::InspectorNodeFinder::InspectorNodeFinder):
        * inspector/InspectorNodeFinder.h:

2015-05-13  Timothy Horton  <timothy_horton@apple.com>

        View scale changes are temporarily lost after restoring a page from the page cache
        https://bugs.webkit.org/show_bug.cgi?id=144934

        Reviewed by Brady Eidson.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        (WebCore::CachedPage::markForDeviceOrPageScaleChanged): Renamed.
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForDeviceOrPageScaleChanged): Renamed.
        * history/PageCache.h:
        Rename PageCache/CachedPage methods to make it more clear that they
        will eventually result in calling deviceOrPageScaleFactorChanged().
        Also, use modern initialization for CachedPage members.

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        Store the pageScaleFactor on HistoryItem with the view scale factored out,
        because the view scale can change while the page is in the page cache, and
        WebCore needs a way - without consulting with WebKit2 - to apply the changed
        view scale to the cached page scale.

        * page/Page.cpp:
        (WebCore::Page::setViewScaleFactor):
        (WebCore::Page::setDeviceScaleFactor):
        * page/Page.h:
        (WebCore::Page::viewScaleFactor):
        Keep track of the viewScaleFactor, and mark all pages in the page cache
        as needing to call deviceOrPageScaleFactorChanged and do a full style recalc
        when they come back from the page cache.

        For now, we expect all callers of setPageScaleFactor (including WebKit2 and
        HistoryController) to multiply the viewScale in manually, to avoid the
        significant amount of change in WebCore that would be required to keep them
        totally separately.

2015-05-12  Zan Dobersek  <zdobersek@igalia.com>

        Reduce TransformationMatrix copies in MatrixTransformOperation, Matrix3DTransformOperation
        https://bugs.webkit.org/show_bug.cgi?id=144797

        Reviewed by Darin Adler.

        Using std::swap() on TransformationMatrix objects which don't
        provide move constructors will result in copies.

        Instead, use a helper function in both MatrixTransformOperation
        and Matrix3DTransformOperation that calls TransformationMatrix::blend()
        and returns the new Matrix(3D)TransformOperation object, and call it
        with fromT and toT arguments switched when blending to identity.

        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::createOperation):
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/Matrix3DTransformOperation.h: No need
        to copy the m_matrix member, it won't change when passed to
        TransformationMatrix::multiply().
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::createOperation):
        (WebCore::MatrixTransformOperation::blend):

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

        [EGL][X11] XPixmap created in GLContextEGL::createPixmapContext() is leaked
        https://bugs.webkit.org/show_bug.cgi?id=144909

        Reviewed by Sergio Villar Senin and Žan Doberšek.

        The pixmap is created and passed to eglCreatePixmapSurface(), but
        never released. eglCreatePixmapSurface() doesn't take the
        ownership of the pixmap, so we should explicitly free it when the
        GLContextEGL is destroyed.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createPixmapContext): Use XUniquePixmap
        and transfer the ownership to the context by using the new
        constructor that receives a XUniquePixmap&&.
        (WebCore::GLContextEGL::createContext): createPixmapContext() is
        now only defined for X11.
        (WebCore::GLContextEGL::GLContextEGL): New constructor that
        receives a XUniquePixmap&&.
        * platform/graphics/egl/GLContextEGL.h: Add new constructor and
        initialize the cairo device when defined to simplify constructors.

2015-05-12  Sungmann Cho  <sungmann.cho@navercorp.com>

        Reindent DIBPixelData.h for consistency.
        https://bugs.webkit.org/show_bug.cgi?id=144942

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * platform/graphics/win/DIBPixelData.h:
        (WebCore::DIBPixelData::DIBPixelData):
        (WebCore::DIBPixelData::buffer):
        (WebCore::DIBPixelData::bufferLength):
        (WebCore::DIBPixelData::size):
        (WebCore::DIBPixelData::bytesPerRow):
        (WebCore::DIBPixelData::bitsPerPixel):

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

        Unreviewed, rolling out r184224.
        https://bugs.webkit.org/show_bug.cgi?id=144946

        Made inspector/page/main-frame-resource.html assert every time
        (Requested by ap on #webkit).

        Reverted changeset:

        "Web Inspector: REGRESSION (r181625): Timeline recording
        started from console.profile is always empty"
        https://bugs.webkit.org/show_bug.cgi?id=144882
        http://trac.webkit.org/changeset/184224

2015-05-12  Jer Noble  <jer.noble@apple.com>

        [Mac] Hang in MediaPlayerPrivateAVFoundationObjC::audioSourceProvider() - 'tracks' property not yet loaded
        https://bugs.webkit.org/show_bug.cgi?id=144937

        Reviewed by Eric Carlson.

        Querying for the -[AVAsset tracks] property blocks for network loading; and could
        block forever if the asset in question is not reachable. Add a "safe" mechanism for
        querying the list of audible tracks, and use that when providing the audioSourceProvider()
        with an audible track.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeAVAssetTracksForAudibleMedia):

2015-05-12  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r184228.

        * bindings/scripts/CodeGeneratorJS.pm:

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

        Turn antialiased font dilation off by default
        https://bugs.webkit.org/show_bug.cgi?id=144940
        rdar://problem/20923031

        Reviewed by Sam Weinig.

        Turn antialised font dilation off by default.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * platform/graphics/FontCascade.cpp:

2015-05-12  Alex Christensen  <achristensen@webkit.org>

        Don't export all JS bindings classes.
        https://bugs.webkit.org/show_bug.cgi?id=144932

        Reviewed by Dan Bernstein.

        This change is good if it compiles and links successfully.

        * bindings/scripts/CodeGeneratorJS.pm:
        (ExportLabelForClass):
        Add a list of the JS bindings classes that need WEBCORE_EXPORT to prevent exporting too many symbols from WebCore.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:
        Update bindings tests to remove WEBCORE_EXPORT from most of the tests,
        but keep one test with WEBCORE_EXPORT and one test with WEBCORE_TESTSUPPORT_EXPORT.

2015-05-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update DXSDK_DIR settings for build system.

        Unreviewed build fix.

        * WebCore.vcxproj/WebCore.proj: Add DXSDK_DIR definition for builder.

2015-05-12  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Return Ref instead of PassRefPtr in create() factory functions of WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=144904

        Reviewed by Andreas Kling.

        We return Ref when we're sure if pointer can't be null. If not, we use RefPtr instead PassRefPtr.

        No new tests, no behavior changes.

        * dom/AutocompleteErrorEvent.h:
        * dom/DOMNamedFlowCollection.h:
        (WebCore::DOMNamedFlowCollection::create):
        * dom/MessageChannel.h:
        (WebCore::MessageChannel::create):
        * dom/MessagePort.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::create):
        * dom/MutationObserver.h:
        * dom/NamedFlowCollection.h:
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::create):
        * dom/NodeIterator.h:
        (WebCore::NodeIterator::create):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::create):
        * dom/ProcessingInstruction.h:
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::create):
        * dom/SecurityPolicyViolationEvent.h:
        * dom/StaticNodeList.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Touch.cpp:
        (WebCore::Touch::cloneWithNewTarget):
        * dom/Touch.h:
        (WebCore::Touch::create):
        * dom/TouchEvent.h:
        * dom/TouchList.h:
        (WebCore::TouchList::create):
        * dom/TreeWalker.h:
        (WebCore::TreeWalker::create):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::create):
        * dom/WebKitNamedFlow.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::PlatformMessagePortChannel::create):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::create):

2015-05-12  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r181625): Timeline recording started from console.profile is always empty
        https://bugs.webkit.org/show_bug.cgi?id=144882

        Reviewed by Brian Burg.

        A timeline recording will always be stopped before the end of the current run loop is observed. Before
        dispatching the recording stopped event, the last run loop record must be completed and sent to the frontend
        to prevent it from being discarded.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStop):

2015-05-12  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r175617): Some text doesn't render on internationalculinarycenter.com
        https://bugs.webkit.org/show_bug.cgi?id=144917
        rdar://problem/20545878

        Reviewed by Andreas Kling.

        This patch ensures that text stroke width value is taken into account while
        calculating visual overflow for simple line layout.
        Ceiling the text stroke width value matches the normal text layout behaviour.

        Test: fast/text/simple-line-layout-text-stroke-width.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):

2015-05-12  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/spi/cf/CFNetworkSPI.h:

2015-05-12  Brent Fulgham  <bfulgham@apple.com>

        ROLLOUT [Win] Unreviewed build fix for older DirectX build environments.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:

2015-05-12  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] ARIA menu items should not have anonymous block children
        https://bugs.webkit.org/show_bug.cgi?id=144653

        Reviewed by Chris Fleizach.

        Exclude anonymous block children of menu items from the accessible tree
        for ATK. Exclude list markers from the accessibility tree if the parent
        is not being exposed as an accessible list item.

        No new tests. Instead, modified the existing tests to reflect the correct
        behavior.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2015-05-08  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Share cookie storage between UI process and secondary processes
        https://bugs.webkit.org/show_bug.cgi?id=144820
        rdar://problem/20572830

        Reviewed by Darin Adler.

        * platform/network/mac/CookieJarMac.mm:
        * platform/spi/cf/CFNetworkSPI.h:
        Moved SPIs into an SPI header, so that WebKit2 could use them too without duplication.

2015-05-12  Chris Dumez  <cdumez@apple.com>

        [WK2] Log using diagnostic logging how far back in history we navigate
        https://bugs.webkit.org/show_bug.cgi?id=144919
        <rdar://problem/20920043>

        Reviewed by Gavin Barraclough.

        Add diagnostic logging keys for logging back history navigation delta.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::deltaKey):
        (WebCore::DiagnosticLoggingKeys::backNavigationKey):
        * page/DiagnosticLoggingKeys.h:

2015-05-12  Yoav Weiss  <yoav@yoav.ws>

        Avoid CSSPrimitiveValue allocation when parsing sizes
        https://bugs.webkit.org/show_bug.cgi?id=144910

        Reviewed by Darin Adler.

        Turn non-calc length calculation logic into a static method,
        so that it can be called without a CSSPrimitiveValue object.
        Then, call that method to calculate the default source-size length.

        No new tests, since no functionality change.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble): Split out the logic for everything that's not calc into a static method.
        (WebCore::CSSPrimitiveValue::computeNonCalcLengthDouble): Static length computation logic for everything that is not calc.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontRelativeLength): Turn into static.
        * css/SourceSizeList.cpp:
        (WebCore::defaultLength): Use the new static method to compute the length.
        (WebCore::computeLength): Use the calc length computation methods directly.

2015-05-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix for older DirectX build environments.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp: Switch back to our
        d3d stub header to avoid build failures on July 2004 DXSDK build environments.

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

        [Mac] Refine media playback target client configuration
        https://bugs.webkit.org/show_bug.cgi?id=144892

        Reviewed by Brent Fulgham.

        Client and target picker state changes fequently happen several times in quick succession, so
        don't react to immediately so we can batch callbacks to the web process. 
        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::ClientState::ClientState): Store the client as a reference rather than a pointer
        because it can never be NULL.
        (WebCore::ClientState::operator == ): New.
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): Schedule the initial client 
        configuration and a target configuration check.
        (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): Schedule a target monitoring
        update, and a target configuration check.
        (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): Ditto.
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Schedule a target monitoring update.
        (WebCore::WebMediaSessionManager::clientStateDidChange): If the client whose state has changed
        can play to a target, tell it to start using the target even if it isn't playing as long as
        no other client is actively using a target.
        (WebCore::WebMediaSessionManager::setPlaybackTarget): Configure clients after a pause.
        (WebCore::WebMediaSessionManager::configureNewClients): New, do new client configuration.
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients): New, configure target clients.
        (WebCore::WebMediaSessionManager::scheduleDelayedTask): Schedule the timer.
        (WebCore::WebMediaSessionManager::taskTimerFired): Execute delayed tasks.
        (WebCore::WebMediaSessionManager::find): 
        * Modules/mediasession/WebMediaSessionManager.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): Call updateMediaState.
        (WebCore::HTMLMediaElement::setPlaying): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Ditto.
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Expand logging.
        (WebCore::HTMLMediaElement::updateMediaState): New, don't broadcast a media state change
        unless something actually changed.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): Update logging.
        (WebCore::HTMLMediaSession::setShouldPlayToPlaybackTarget): Ditto.
        (WebCore::HTMLMediaSession::mediaEngineUpdated): Cleanup.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Remove the call to
        deprecated API and the "-Wdeprecated-declarations".

2015-05-12  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [GTK] Defer to WebCore Accessibility for table exposure
        https://bugs.webkit.org/show_bug.cgi?id=144896

        Reviewed by Chris Fleizach.

        Stop unconditionally exposing all HTMLTableElement nodes as AccessibilityTables
        for WebKitGtk.

        No new tests. Several existing tests already cover table exposure. They have
        been updated accordingly.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::computeIsTableExposableThroughAccessibility):

2015-05-12  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK][WK2] rowAtIndex is not implemented in DRT/WKTR
        https://bugs.webkit.org/show_bug.cgi?id=116971

        Reviewed by Chris Fleizach.

        Because ATK lacks API to directly get an accessible row via its index,
        the implementation of rowAtIndex gets a cell in the indexed row and
        returns the parent row. The failing test continued to fail because
        AccessibilityARIAGridCell::parentTable called parentObjectUnignored at
        most twice, the second call in place to handle rows which are included
        in the tree. However, given a well-formed ARIA grid with a rowgroup that
        is interactive, that rowgroup also needs to be in the tree necessitating
        parentObjectUnignored be called a third time to get to the grid. Given a
        poorly-formed ARIA grid, there may additional objects which pass the test
        for inclusion standing in between the cell and grid necessitating more
        calls still. Therefore, ascend the hierarchy to find the parent grid.

        No new tests. The failing test now passes.

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable):

2015-05-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [X11] Add XUniquePtr and XUniqueResource to automatically free X resources
        https://bugs.webkit.org/show_bug.cgi?id=144521

        Reviewed by Darin Adler.

        Add XUniquePtr as a template alias of std:unique_ptr to handle X
        resources using pointers and XUniqueResource as a new class to
        handle X resources using a long unsigned identifier. This
        simplifies the code and makes it more difficult to leak X resources.

        * PlatformEfl.cmake: Add new files to compilation.
        * PlatformGTK.cmake: Ditto.
        * platform/graphics/cairo/BackingStoreBackendCairoX11.cpp:
        (WebCore::BackingStoreBackendCairoX11::BackingStoreBackendCairoX11):
        Remove the display member, and use XUnique for Pixmap and GC.
        (WebCore::BackingStoreBackendCairoX11::~BackingStoreBackendCairoX11):
        Remove code to explicitly free Pixmap and GC.
        (WebCore::BackingStoreBackendCairoX11::scroll):
        * platform/graphics/cairo/BackingStoreBackendCairoX11.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::createWindowContext): Use XUnique and the
        new constructor that receives a XID, since there's no longer
        conflict with the one receiving a Pbuffer.
        (WebCore::GLContextGLX::createPbufferContext): Use XUnique and the
        new constructor that receives a XUniqueGLXPbuffer&&.
        (WebCore::GLContextGLX::createPixmapContext):
        (WebCore::GLContextGLX::createContext):
        (WebCore::GLContextGLX::GLContextGLX):
        (WebCore::GLContextGLX::~GLContextGLX): Remove code to explicitly
        free X resources.
        (WebCore::GLContextGLX::makeContextCurrent):
        (WebCore::GLContextGLX::cairoDevice):
        (WebCore::GLContextGLX::platformContext):
        * platform/graphics/glx/GLContextGLX.h:
        * platform/graphics/surfaces/egl/EGLXSurface.cpp:
        (WebCore::EGLXTransportSurfaceClient::EGLXTransportSurfaceClient):
        (WebCore::EGLXTransportSurfaceClient::destroy):
        (WebCore::EGLXTransportSurfaceClient::prepareTexture):
        * platform/graphics/surfaces/egl/EGLXSurface.h:
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::findMatchingConfig): Use XUnique
        instead of the custom std::unique X11Deleter.
        (WebCore::GLXConfigSelector::findMatchingConfigWithVisualId): Ditto.
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface): Ditto.
        (WebCore::GLXOffScreenSurface::initialize):
        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createOffScreenWindow): Ditto.
        (WebCore::X11Helper::createPixmap): Ditto.
        * platform/graphics/surfaces/glx/X11Helper.h:
        * platform/graphics/x11/XUniquePtr.h: Remove X11Deleter.
        (WebCore::XPtrDeleter::operator()):
        * platform/graphics/x11/XUniqueResource.cpp: Added.
        (WebCore::XUniqueResource<XResource::Colormap>::deleteXResource):
        (WebCore::XUniqueResource<XResource::Damage>::deleteXResource):
        (WebCore::XUniqueResource<XResource::Pixmap>::deleteXResource):
        (WebCore::XUniqueResource<XResource::Window>::deleteXResource):
        (WebCore::XUniqueResource<XResource::GLXPbuffer>::deleteXResource):
        (WebCore::XUniqueResource<XResource::GLXPixmap>::deleteXResource):
        * platform/graphics/x11/XUniqueResource.h: Added.
        (WebCore::XUniqueResource::XUniqueResource):
        (WebCore::XUniqueResource::operator=):
        (WebCore::XUniqueResource::~XUniqueResource):
        (WebCore::XUniqueResource::get):
        (WebCore::XUniqueResource::release):
        (WebCore::XUniqueResource::reset):
        (WebCore::XUniqueResource::operator!):
        (WebCore::XUniqueResource::operator UnspecifiedBoolType*):

2015-05-12  Zan Dobersek  <zdobersek@igalia.com>

        Move TransformOperation-based classes off of PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=144876

        Reviewed by Darin Adler.

        Remove uses of PassRefPtr from the TransformOperation class and its
        derivatives, operating on Ref and RefPtr objects instead.

        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::blend):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations):
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.h:

2015-05-12  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStream reader should not be disposable when having pending promises
        https://bugs.webkit.org/show_bug.cgi?id=144869

        Reviewed by Darin Adler.

        Made error promise callback to take a ref to the reader so that the reader is not disposed as long as the promise callback is not resolved.

        Covered by tests added to streams/readable-stream-gc.html.

        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::ReadableStreamReader): Moved initialize() call outside constructor as it can ref/unref.
        (WebCore::ReadableStreamReader::releaseStreamAndClean): Added protector.
        * Modules/streams/ReadableStreamReader.h:
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed): Lambda for error now takes a ref to the reader.
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::Reader::create): Calling initialize() after adoptRef().

2015-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Clean up redundant resources in case of failure in GLContextEGL context creation methods
        https://bugs.webkit.org/show_bug.cgi?id=144878

        Reviewed by Martin Robinson.

        GLContextEGL::createWindowContext() and GLContextEGL::createPixmapContext() methods
        should clean up the freshly-created resources when prematurely returning due to a
        failure.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createPixmapContext):

2015-05-11  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/20878075> Trying to navigate to an invalid URL loads about:blank, but -[WKWebView URL] returns the invalid URL

        Reviewed by Alexey Proskuryakov.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/ProvisionalURLChange.mm

        In some cases, trying to navigate to an invalid URL results in navigation to about:blank.
        When the about:blank load is committed, the UI process still thinks that the provisional
        URL is the original, invalid URL, and updates its state to reflect that that’s the URL that
        has been committed.

        The provisional URL changes (1) when a provisional load begins, (2) when a server redirect
        happens, (3) when the client changes the request in willSendRequest, and (4) in this
        about:blank case. For (1) and (2), there are frame loader client callbacks. (3) is client-
        initiated. So this patch addresses (4).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::maybeLoadEmpty): If our request URL is changing to about:blank and
        while loading the main resource, call FrameLoaderClient::dispatchDidChangeProvisionalURL.
        * loader/FrameLoaderClient.h: Added dispatchDidChangeProvisionalURL with an empty
        implementation.

2015-05-11  Zalan Bujtas  <zalan@apple.com>

        Text is misplaced when custom font does not have space glyph.
        https://bugs.webkit.org/show_bug.cgi?id=144879

        Reviewed by Myles C. Maxfield

        This patch ensures that we use fallback font for the missing space glyph only when the rendered text has space in it.

        If a font does not provide all the glyphs required to render the associated text, we initiate fallback fonts. It is done while
        measuring the text at layout time. However due to the fact that we always pre-measure space, a font with no space glyph in it is never sufficient.
        (even when the text does not require space at all)
        Fallback fonts impact line positions through ascent/descent calculation.

        Test: fast/text/font-with-no-space-glyph.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/line/BreakingContext.h:
        (WebCore::WordTrailingSpace::WordTrailingSpace):
        (WebCore::WordTrailingSpace::width):
        (WebCore::BreakingContext::handleText):

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

        Small tidyup in animations code
        https://bugs.webkit.org/show_bug.cgi?id=144893

        Reviewed by Eric Carlson.

        Reading progress(1, 0, 0) in callers of AnimationBase::progress() was confusing,
        particularly as the last parameter is a TimingFunction*. Put default values 
        in the header (with nullptr) and fix the callers. Also fix variable names in
        the implementation.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress):
        * page/animation/AnimationBase.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::getAnimatedStyle):
        (WebCore::ImplicitAnimation::blendPropertyValueInStyle):

2015-05-11  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in WebCore/rendering
        https://bugs.webkit.org/show_bug.cgi?id=144872

        Reviewed by Darin Adler.

        As a step to remove PassRefPtr, this patch replaces PassRefPtr with Ref in WebCore/rendering.

        No new tests, no behavior changes.

        * rendering/HitTestingTransformState.h:
        (WebCore::HitTestingTransformState::create):
        * rendering/RenderLayer.cpp:
        (WebCore::ClipRects::create):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeIOS::create):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeMac::create):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeWin.h:
        * rendering/TextAutoSizing.h:
        (WebCore::TextAutoSizingValue::create):
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createShapeValue):
        (WebCore::ShapeValue::createBoxShapeValue):
        (WebCore::ShapeValue::createImageValue):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StylePendingImage.h:
        * rendering/style/StyleReflection.h:
        (WebCore::StyleReflection::create):

2015-05-11  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update device picker icon when video tracks change
        https://bugs.webkit.org/show_bug.cgi?id=144889
        <rdar://problem/20907253>

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateHasVideo):

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

        Scroll snap logic should be triggered when resizing the WebView
        https://bugs.webkit.org/show_bug.cgi?id=142590
        <rdar://problem/20125088>

        Reviewed by Simon Fraser.

        Tests coming in a second patch.

        Resizing of the main frame or overflow regions was properly recalculating the scroll snap points,
        but there was no code to honor these values when window resizing was occurring. The correction was
        handled in two ways:
        1. Scrolling thread operations that moved to new snap points needed to notify the main thread that
           it had shifted to a new snap point, so that the resize code (which happens on the main thread)
           could ensure that we stayed clamped to the correct 'tile' in the snap region.
        2. Main thread (overflow) resizes were likewise missing code to honor the current snap position
           after resizing calculations were complete.

        This change also required the addition of two indices to the scrollable area to track which scroll
        snap point was currently being used. We don't bother with a 'none' case because you cannot have a
        'none' state when you have an active set of scroll snap points, and we do not execute this code
        if the scroll snap points are null.

        The FrameView code was computing updated snap offsets after it had dispatched frame view layout
        information to the scrolling thread, which was wrong. This was also corrected.

        I think it might be possible to track all of this state inside the ScrollController, but the current
        scroll snap architecture destroys and recreates the state each time a new set of interactions starts.
        This should be fixed in the future, which would allow us to remove some of this local state.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): Make sure 'updateSnapOffsets' is called prior to
        calling 'frameViewLayoutUpdated' so the scrolling thread gets correct updated points. Add a new
        call to 'scrollToNearestActiveSnapPoint', which will keep us on our current snap point during
        resize (if appropriate).
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollSnapOffsetIndices): Added. This finds and notifies
        the correct scroll region when a new snap position (index) has been selected by user interaction on
        the scrolling thread.
        (WebCore::AsyncScrollingCoordinator::deferTestsForReason): Added an assertion for 'isMainThread'.
        (WebCore::AsyncScrollingCoordinator::removeTestDeferralForReason): Ditto.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/AxisScrollSnapOffsets.h:
        (WebCore::closestSnapOffset): Modified to also return the selected snap point index so we can track
        it to handle resize operations.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::updateScrollSnapOffsetIndices):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::updateScrollSnapOffsetIndices): Added method to dispatch the active
        horizontal and vertical scroll snap indices back to the main thread.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent): After the scroll controller processes
        the current event, notify the main thread of any change in the active scroll snap index.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::activeScrollSnapOffsetIndexDidChange): Added method to allow ScrollAnimator
        clients to find out about the current scroll snap state, which is only known by the ScrollController.
        (WebCore::ScrollAnimator::activeScrollSnapOffsetIndexForAxis): Ditto.
        * platform/ScrollAnimator.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollToNearestActiveSnapPoint): Added method that allows us to set scroll position
        to one of our active scroll snap offsets.
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleWheelEvent): If the active scroll snap offset has changed, make sure we
        keep track of the new values for potential resize operations.
        (WebCore::ScrollableArea::clearHorizontalSnapOffsets): Make sure to also clear out the current snap index.
        (WebCore::ScrollableArea::clearVerticalSnapOffsets): Ditto.
        (WebCore::ScrollableArea::nearestActiveSnapPoint): New method that returns an updated IntPoint reflecting
        the proper scroll position based on the active scroll snap offset.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::currentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollableArea::setCurrentHorizontalSnapPointIndex): Added.
        (WebCore::ScrollableArea::currentVerticalSnapPointIndex): Added.
        (WebCore::ScrollableArea::setCurrentVerticalSnapPointIndex): Added.
        (WebCore::ScrollableArea::scrollToNearestActiveSnapPoint): Added.
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerClient::activeScrollOffsetIndex): Added new method for clients to implement.
        (WebCore::ScrollController::activeScrollSnapOffsetIndexDidChange): Added.
        (WebCore::ScrollController::setScrollSnapOffsetIndexDidChange): Added.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::activeScrollSnapOffsetIndexForAxis): Helper method to return current active
        index (if applicable).
        (WebCore::ScrollController::setActiveScrollSnapOffsetIndexForAxis): Helper function to safely set
        the current active index.
        (WebCore::ScrollController::beginScrollSnapAnimation): Updated to keep track of the new active scroll snap
        index, as well as whether the current animation actually changed the active snap point offset.
        * platform/cocoa/ScrollSnapAnimatorState.h: Revise to use modern C++ initializers, and to track a new index
        that represents the current scroll snap offset.
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::ScrollSnapAnimatorState::ScrollSnapAnimatorState): Update for modern C++ syntax.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToNearestActiveSnapPoint): New method to set scroll position to be one of our
        active scroll snap points.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Add a new call to 'scrollToNearestActiveSnapPoint' so that
        we stay on the current scroll snap offset during resizing.
        * rendering/RenderLayer.h:

2015-05-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments after r184037.

        Unreviewed.

        No new tests because there is no behavior change.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):

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

        [Win] Move Windows build target to Windows 7 (or newer)
        https://bugs.webkit.org/show_bug.cgi?id=144890
        <rdar://problem/20707307>

        Reviewed by Anders Carlsson.

        Update linked SDK and minimal Windows level to be compatible with
        Windows 7 or newer.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        * WebCorePrefix.h:
        * config.h:
        * testing/js/WebCoreTestSupportPrefix.h:

2015-05-11  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Always include rows in the tree of accessible tables
        https://bugs.webkit.org/show_bug.cgi?id=144885

        Reviewed by Chris Fleizach.

        Remove the code that excluded rows from the tree of accessible tables for
        Gtk and Efl, the latter of which inherited the exclusion from the former.

        No new tests. We already have several tests which cover table hierarchy.
        The associated expectations have been updated as part of this fix.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildrenFromSection):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetParent):

2015-05-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r175203): No profile information is shown in Inspector
        https://bugs.webkit.org/show_bug.cgi?id=144808

        Reviewed by Darin Adler.

        Profiles started from the console should always use the Inspector environment's shared stopwatch.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startFromConsole):

2015-05-11  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Support domain-specific rules and exceptions.
        https://bugs.webkit.org/show_bug.cgi?id=144833

        Reviewed by Darin Adler.

        Test: http/tests/contentextensions/domain-rules.html
        (And lots of API tests)

        This patch adds if-domain and unless-domain to the trigger in the JSON format.
        if-domain makes the rule apply only to domains in the list.
        unless-domain makes the rule apply to domains that are not in the list.
        
        All rules without if-domain or unless-domain are compiled into a set of DFAs.  This behavior is unchanged.
        All rules with if-domain or unless-domain are compiled into a separate set of DFAs.
        The domains are also compiled into another set of DFAs.  This makes 3 arrays of DFA bytecode instead of 1.
        
        If there are no domain specific rules, there is no change in behavior.
        If there are domain specific rules, the URL will be checked for matches in both
        filtersWithoutDomainsBytecode and filtersWithDomainsBytecode.  If there are matches from 
        filtersWithDomainsBytecode then the domain of the main document will be checked with 
        domainFiltersBytecode to see which of the matches applies to this domain.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::isEmpty):
        (WebCore::ContentExtensions::CombinedURLFilters::addDomain):
        * contentextensions/CombinedURLFilters.h:
        Added addDomain, which adds characters from a domain to the prefix tree directly without using YARR.
        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::compileRuleList):
        Separate the rules into rules with domains and rules without domains and compile to bytecode.
        * contentextensions/ContentExtensionCompiler.h:
        Updated compiler interface to reflect the slightly more complicated structure.
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        Added new parsing errors.
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getDomainList):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadEncodedRules):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::operator==):
        Parse the new domain structures from JSON into the Trigger structure.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Interpret as much bytecode as necessary to determine which rules apply to this URL and domain.
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        * loader/ResourceLoadInfo.h:
        Keep track of which actions have an if-domain trigger.  If an action is in the 
        filtersWithDomainsBytecode, then it either has an if-domain or an unless-domain in its trigger.
        This requires additional information in the bytecode, so there are two new bytecode types.

2015-05-11  Yoav Weiss  <yoav@yoav.ws>

        Add srcset, sizes and picture to the features json
        https://bugs.webkit.org/show_bug.cgi?id=144862

        Reviewed by Benjamin Poulain.

        Add the srcset w descriptor and sizes attribute as a new feature in the JSON file,
        as well as adding the picture element and srcset's x descriptor as seperate features.

        No new tests, since no new functionality added.

        * features.json:

2015-05-11  Chris Dumez  <cdumez@apple.com>

        Fix checkingLogicalHeight initialization in Document::updateLayoutIfDimensionsOutOfDate()
        https://bugs.webkit.org/show_bug.cgi?id=144873

        Reviewed by Simon Fraser.

        Fix checkingLogicalHeight initialization in Document::updateLayoutIfDimensionsOutOfDate().
        checkingLogicalHeight should only be initialized to true when
        "dimensionsCheck & WidthDimensionsCheck" if isVertical is true.

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

2015-05-11  Daniel Bates  <dabates@apple.com>

        [iOS] Close all open databases in expiration handler of process assertion
        https://bugs.webkit.org/show_bug.cgi?id=144661
        <rdar://problem/20845052>

        Reviewed by Darin Adler.

        Expose functionality in WebCore to close all open databases. Closing a SQLite database
        will interrupt any in-progress database transactions.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::closeAllDatabases): Added; turns around and calls DatabaseServer::closeAllDatabases().
        * Modules/webdatabase/DatabaseManager.h: Export DatabaseManager::closeAllDatabases() so that
        we can call in from WebKit2.
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::closeAllDatabases): Added; turns around and calls DatabaseTracker::closeAllDatabases().
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::closeAllDatabases): Added; closes all open databases.
        * Modules/webdatabase/DatabaseTracker.h: Export DatabaseTracker::closeAllDatabases() so that
        we can call in from Legacy WebKit.

2015-05-11  Antti Koivisto  <antti@apple.com>

        WebContent crash under com.apple.WebCore: WebCore::WebKitCSSResourceValue::isCSSValueNone const + 6
        https://bugs.webkit.org/show_bug.cgi?id=144870
        rdar://problem/20727702

        Reviewed by Simon Fraser.

        No repro but we are seeing null pointer crashes like this:

        Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
        0   com.apple.WebCore   0x00007fff92da5706 WebCore::WebKitCSSResourceValue::isCSSValueNone() const + 6
        1   com.apple.WebCore   0x00007fff93382b48 WebCore::MaskImageOperation::isCSSValueNone() const + 24
        2   com.apple.WebCore   0x00007fff92e0475e WebCore::FillLayer::hasNonEmptyMaskImage() const + 30

        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::MaskImageOperation):
        (WebCore::MaskImageOperation::isCSSValueNone):

            This would crash like this if both m_styleImage and m_cssMaskImageValue are null.
            There are no obvious guarantees that this doesn't happen. Two of the constructor variants allow it
            and there is setImage which may turn m_styleImage null later too.

            Fix by making null m_cssMaskImageValue always signify CSSValueNone.

        (WebCore::MaskImageOperation::cssValue):

2015-05-11  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::AccessibilityMenuList::addChildren()
        https://bugs.webkit.org/show_bug.cgi?id=144860

        Reviewed by Mario Sanchez Prada.

        There were some unsafe pointer accesses in AccessibilityMenuList code that needed to be cleaned up.

        Test: accessibility/menu-list-crash2.html

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):

2015-05-11  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Unnecessary condition check in the while loop
        https://bugs.webkit.org/show_bug.cgi?id=125001

        Reviewed by Csaba Osztrogonác.

        While loop in this case needs to be optimized a little.
        For now a conditional statement in while will execute two
        times at begin. do-while loop avoids to check first statement.

        No new tests. No behaviour changed.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):

2015-05-11  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Reorder Performance class's member initialization sequence
        https://bugs.webkit.org/show_bug.cgi?id=144858

        Reviewed by Csaba Osztrogonác.

        No new tests, no new behaviors.

        * page/Performance.cpp:
        (WebCore::Performance::Performance):

2015-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Reduce TransformationMatrix copies in WebKitCSSMatrix operations
        https://bugs.webkit.org/show_bug.cgi?id=144795

        Reviewed by Darin Adler.

        Instead of copying the TransformationMatrix member, performing
        the operation on it and then copying it again when creating
        the new WebKitCSSMatrix object, copy it just once by first
        creating the new WebKitCSSMatrix object and then performing
        the operation on that object's TransformationMatrix directly.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::multiply):
        (WebCore::WebKitCSSMatrix::translate):
        (WebCore::WebKitCSSMatrix::scale):
        (WebCore::WebKitCSSMatrix::rotate):
        (WebCore::WebKitCSSMatrix::rotateAxisAngle):
        (WebCore::WebKitCSSMatrix::skewX):
        (WebCore::WebKitCSSMatrix::skewY):

2015-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Add missing vtable override specifiers under Source/WebCore/loader, Source/WebCore/xml
        https://bugs.webkit.org/show_bug.cgi?id=144793

        Reviewed by Darin Adler.

        Update virtual method overrides under Source/WebCore/loader
        and Source/WebCore/dom which are missing the override specifier.

        * loader/DocumentThreadableLoader.h:
        (WebCore::DocumentThreadableLoader::refThreadableLoader):
        (WebCore::DocumentThreadableLoader::derefThreadableLoader):
        * loader/cache/CachedRawResource.h:
        * xml/parser/XMLDocumentParser.h:

2015-05-11  Zan Dobersek  <zdobersek@igalia.com>

        Add missing vtable override specifiers under Source/WebCore/accessibility, Source/WebCore/dom
        https://bugs.webkit.org/show_bug.cgi?id=144792

        Reviewed by Darin Adler.

        Update virtual method overrides under Source/WebCore/accessibility
        and Source/WebCore/dom which are missing the override specifier.

        * accessibility/AccessibilityMockObject.h:
        (WebCore::AccessibilityMockObject::isDetachedFromParent): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * dom/DecodedDataDocumentParser.h:
        * dom/TouchEvent.h:

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

        Have MediaStream::getAudioTracks(), MediaStream::getVideoTracks() return const references
        https://bugs.webkit.org/show_bug.cgi?id=144794

        Reviewed by Philippe Normand.

        * Modules/mediastream/MediaStream.h: getAudioTracks() and getVideoTracks()
        should return a const reference to the member variables, instead of
        copying the objects on every call.

2015-05-10  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Use Ref instead of PassRefPtr in WebCore/page
        https://bugs.webkit.org/show_bug.cgi?id=144841

        Reviewed by Darin Adler.

        To kill PassRefPtr, this patch replaces PassRefPtr with Ref or RefPtr
        in WebCore/page.

        No new tests, no behavior changes.

        * page/DebugPageOverlays.cpp:
        * page/EventSource.cpp:
        (WebCore::EventSource::create):
        * page/EventSource.h:
        * page/History.h:
        (WebCore::History::create):
        * page/Location.h:
        (WebCore::Location::create):
        * page/MainFrame.cpp:
        (WebCore::MainFrame::create):
        * page/MainFrame.h:
        * page/Navigator.h:
        (WebCore::Navigator::create):
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::create):
        * page/PageOverlay.h:
        * page/Performance.h:
        * page/PerformanceEntryList.h:
        (WebCore::PerformanceEntryList::create):
        * page/PerformanceMark.h:
        (WebCore::PerformanceMark::create):
        * page/PerformanceMeasure.h:
        (WebCore::PerformanceMeasure::create):
        * page/PerformanceNavigation.h:
        (WebCore::PerformanceNavigation::create):
        * page/PerformanceResourceTiming.h:
        (WebCore::PerformanceResourceTiming::create):
        * page/PerformanceTiming.h:
        (WebCore::PerformanceTiming::create):
        * page/PerformanceUserTiming.h:
        (WebCore::UserTiming::create):
        * page/Screen.h:
        * page/Settings.cpp:
        (WebCore::Settings::create):
        * page/Settings.h:
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::create):
        * page/TextIndicator.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::create):
        * page/UserContentController.h:
        * page/UserMessageHandlerDescriptor.h:
        (WebCore::UserMessageHandlerDescriptor::create):
        * page/UserMessageHandlersNamespace.h:
        * page/VisitedLinkStore.h:
        * page/WebKitNamespace.h:
        (WebCore::WebKitNamespace::create):
        * page/WebKitPoint.h:
        (WebCore::WebKitPoint::create):
        * page/WorkerNavigator.h:
        (WebCore::WorkerNavigator::create):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        * page/animation/KeyframeAnimation.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::createForSelection):
        (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::clone):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::create):
        (WebCore::ScrollingStateFrameScrollingNode::clone):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        (WebCore::ScrollingStateOverflowScrollingNode::create):
        (WebCore::ScrollingStateOverflowScrollingNode::clone):
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::clone):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::create):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::create):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::create):
        * page/scrolling/mac/ScrollingTreeMac.cpp:
        (ScrollingTreeMac::create):
        * page/scrolling/mac/ScrollingTreeMac.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::create):

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

        background-position sometimes doesn't work properly with background-attachment: fixed
        https://bugs.webkit.org/show_bug.cgi?id=103757
        rdar://problem/18749925

        Reviewed by Darin Adler.
        
        Fix sizing issues with fixed backgrounds when top content inset (blurred toolbar) is in
        effect.
        
        The primary issue was that positioningAreaSize was including the top content inset
        height, and should not have been, but there were also issues with the "fixedBackgroundPaintsInLocalCoordinates"
        code path, which kicks in when the root background is fixed.

        Tests: platform/mac-wk2/tiled-drawing/top-content-inset-fixed-attachment-cover-local.html
               platform/mac-wk2/tiled-drawing/top-content-inset-fixed-attachment-cover.html
               platform/mac-wk2/tiled-drawing/top-content-inset-fixed-attachment-local.html
               platform/mac-wk2/tiled-drawing/top-content-inset-fixed-attachment-positioned.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Get rid of the public item accessors in BackForwardClient
        https://bugs.webkit.org/show_bug.cgi?id=144827

        Reviewed by Darin Adler.

        Remove backItem(), currentItem(), and forwardItem() from BackForwardClient.
        We can still use these functionalities through BackForwardController.

        No new tests, no behavior change.

        * history/BackForwardClient.h:
        (WebCore::BackForwardClient::backItem): Deleted.
        (WebCore::BackForwardClient::currentItem): Deleted.
        (WebCore::BackForwardClient::forwardItem): Deleted.

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Rename Length::isPercent() and Length::isPercentNotCalculated().
        https://bugs.webkit.org/show_bug.cgi?id=144791

        Reviewed by Darin Adler.

        1. Rename these methods as below for consistency and clarity.

        Length::isPercentNotCalculated() => Length::isPercent()
        Length::isPercent() => Length::isPercentOrCalculated()

        2. Simplify the condition check of length type in SVGLengthContext::valueForLength().

        "length.isPercent() && !length.isCalculated()" => "length.isPercent()"

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForImageSliceSide):
        (WebCore::valueForReflection):
        (WebCore::percentageOrZoomAdjustedValue):
        (WebCore::lineHeightFromStyle):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::is100Percent):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::computeTransformedExtentViaTransformList):
        * platform/Length.h:
        (WebCore::Length::percent):
        (WebCore::Length::isPercent):
        (WebCore::Length::isPercentOrCalculated):
        (WebCore::Length::isSpecified):
        (WebCore::Length::isPercentNotCalculated): Deleted.
        * platform/graphics/transforms/TranslateTransformOperation.h:
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::shouldScaleColumns):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::textIndentOffset):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::needsPreferredWidthsRecalculation):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::logicalWidthIsResolvable):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        (WebCore::RenderBox::hasUnsplittableScrollingOverflow):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight):
        (WebCore::RenderBoxModelObject::relativePositionOffset):
        (WebCore::RenderBoxModelObject::computedCSSPadding):
        (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RenderElement.cpp:
        (WebCore::mustRepaintFillLayers):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::repaintOrMarkForLayout):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeIntrinsicLogicalWidths):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::computeIntrinsicLogicalWidths):
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computeIntrinsicLogicalWidths):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeIntrinsicLogicalWidths):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isPercentage):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::isPercentage):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::computedLineHeight):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::hasRelativeDimensions):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::valueForLength):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::hasRelativeWidth):
        (WebCore::SVGImage::hasRelativeHeight):

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove unnecessary semicolons.
        https://bugs.webkit.org/show_bug.cgi?id=144844

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readString):
        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        (WebCore::RealtimeMediaSourceCapabilities::setHasVideoSource):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::nsError):
        * rendering/RenderThemeIOS.mm:
        (WebCore::getSharedFunctionRef):

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove unnecessary forward declarations in StyleProperties.h
        https://bugs.webkit.org/show_bug.cgi?id=144843

        Reviewed by Darin Adler.

        No new tests, no behavior change.        

        * css/StyleProperties.h:

2015-05-10  Darin Adler  <darin@apple.com>

        [Cocoa] Fix paths and resort WebCore project file
        https://bugs.webkit.org/show_bug.cgi?id=144838

        Reviewed by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj: Re-sorted this file with the
        sort-Xcode-project-file script and fixed the paths in the platform/ios directory.

2015-05-10  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Refactor ReadableStreamReader close promise callback cleaning
        https://bugs.webkit.org/show_bug.cgi?id=144799

        Reviewed by Darin Adler.

        Moved close callback cleaning to releaseStream, which is now releaseStreamAndClean.
        Moved that method to private as it is no longer needed by subclasses.

        No behavior changes.

        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::releaseStreamAndClean):
        (WebCore::ReadableStreamReader::changeStateToClosed):
        (WebCore::ReadableStreamReader::changeStateToErrored):
        * Modules/streams/ReadableStreamReader.h:

2015-05-10  Darin Adler  <darin@apple.com>

        [Cocoa] Don't soft link DataDetectorsCore
        https://bugs.webkit.org/show_bug.cgi?id=144837

        Reviewed by Dan Bernstein.

        Linking this in the normal way should slightly speed up the web process
        startup time. We don't need to soft link it: It's present in the
        OS X base system and there is no reference cycle with WebKit.

        * Configurations/WebCore.xcconfig: Added PrivateFrameworks to
        FRAMEWORK_SEARCH_PATHS for Mac and added DataDetectorsCore to
        OTHER_LDFLAGS_PLATFORM for Mac. We may want to do this later for iOS too.

        * WebCore.xcodeproj/project.pbxproj: Added DataDetectorsCoreSPI.h.

        * editing/mac/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult): Removed check to see
        if DataDetectorsCore is available.

        * page/mac/ServicesOverlayController.h: Simplified a forward declaration to
        only declare what we actually use.
        * page/mac/ServicesOverlayController.mm: Moved SOFT_LINK from here to the
        DataDetectorsSPI.h header.

        * platform/spi/cocoa/DataDetectorsCoreSPI.h: Added. This is the low level
        DataDetectorsCore framework, which has no reference cycle with WebKit, and
        which we can link to normally. Moved the content here from DataDetectorsSPI.h,
        added a USE(APPLE_INTERNAL_SDK) path that uses the system headers, and fixed
        the incorrect return type on DDScannerScanQuery, which was detected when
        using the system headers in conjunction with this file.

        * platform/spi/mac/DataDetectorsSPI.h: Removed the content of this file that
        was actually about DataDetectorsCore. Also added a USE(APPLE_INTERNAL_SDK)
        path that uses the system headers and moved a few stray DataDetectors SPI
        definitions from elsewhere into this header.

2015-05-10  Chris Fleizach  <cfleizach@apple.com>

        AX: Don't expose elements as data tables just because they use display: table
        https://bugs.webkit.org/show_bug.cgi?id=144804

        Reviewed by Mario Sanchez Prada.

        Elements will create RenderTable objects if they have display:table. We shouldn't assume these are accessibility tables.

        Test: accessibility/css-table-ignored.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):

2015-05-09  Chris Dumez  <cdumez@apple.com>

        Introduce ParentNode.idl / NonDocumentTypeChildNode.idl
        https://bugs.webkit.org/show_bug.cgi?id=144825

        Reviewed by Sam Weinig.

        Introduce ParentNode.idl / NonDocumentTypeChildNode.idl as per DOM
        specification and to avoid IDL code duplication:
        - https://dom.spec.whatwg.org/#interface-parentnode
        - https://dom.spec.whatwg.org/#interface-nondocumenttypechildnode

        No Web-Exposed behavior change.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CharacterData.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/NonDocumentTypeChildNode.idl: Copied from Source/WebCore/dom/DocumentFragment.idl.
        * dom/ParentNode.idl: Copied from Source/WebCore/dom/DocumentFragment.idl.

2015-05-09  Chris Dumez  <cdumez@apple.com>

        Invalidate the FontCache on WebProcess suspension / critical memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=144821

        Reviewed by Antti Koivisto.

        Invalidate the FontCache on WebProcess suspension / critical memory
        pressure to free a bit more memory (an extra 4-16Kb per WebProcess on
        the pages I tested). We already purge inactive font data on
        non-critical memory warning but invalidating the whole FontCache takes
        care of clearing the FontCascade cache and the fontPlatformData cache
        as well.

        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-05-09  Yoav Weiss  <yoav@yoav.ws>

        Remove the PICTURE_SIZES build flag
        https://bugs.webkit.org/show_bug.cgi?id=144679

        Reviewed by Benjamin Poulain.

        Removed the PICTURE_SIZES build time flag.

        No new tests, since there's no functionality change.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/SourceSizeList.cpp:
        (WebCore::parseSizesAttribute): Deleted.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::currentSrc):
        * html/HTMLImageElement.idl:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::parseDescriptors):
        (WebCore::pickBestImageCandidate):

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        These convenience constructors are unnecessary. Moving the code that makes the StringView
        back to the call site will also help us make things more elegant in future refactoring.

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText): Remove ambiguous call.
        * platform/graphics/StringTruncator.cpp:
        (WebCore::stringWidth):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):

2015-05-08  Sam Weinig  <sam@webkit.org>

        Element Traversal is not just Elements anymore
        https://bugs.webkit.org/show_bug.cgi?id=144822

        Reviewed by Simon Fraser.

        Match other browsers and the new DOM spec at https://dom.spec.whatwg.org by
        exposing the element traversal methods on non-Elements.

        - Makes firstElementChild, lastElementChild and childElementCount available on
          Document and DocumentFragment in addition to Element.
        - Makes nextElementSibling and previousElementSibling available on CharacterData
          in addition to Element.

        Tests: fast/dom/element-traversal-on-character-data.html
               fast/dom/element-traversal-on-document-fragment.html
               fast/dom/element-traversal-on-document.html

        * dom/CharacterData.idl:
        Expose nextElementSibling and previousElementSibling.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::firstElementChild):
        (WebCore::ContainerNode::lastElementChild):
        (WebCore::ContainerNode::childElementCount):
        * dom/ContainerNode.h:
        Move implementations of firstElementChild, lastElementChild and childElementCount here
        from Element to make them shareable.

        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        Expose firstElementChild, lastElementChild and childElementCount.

        * dom/Element.cpp:
        (WebCore::Element::firstElementChild): Deleted.
        (WebCore::Element::lastElementChild): Deleted.
        (WebCore::Element::previousElementSibling): Deleted.
        (WebCore::Element::nextElementSibling): Deleted.
        (WebCore::Element::childElementCount): Deleted.
        * dom/Element.h:
        Move element traversal functions down to Node and ContainerNode.

        * dom/Element.idl:
        Update comments to indicate where these functions are defined now.

        * dom/Node.cpp:
        (WebCore::Node::previousElementSibling):
        (WebCore::Node::nextElementSibling):
        * dom/Node.h:
        Move implementations of nextElementSibling and previousElementSibling here
        from Element to make them shareable.

2015-05-08  Michael Catanzaro  <mcatanzaro@igalia.com>, Martin Robinson <mrobinson@igalia.com>

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Carlos Garcia Campos.

        Use ENABLE(DEVELOPER_MODE) rather than DEVELOPMENT_BUILD.

        * platform/gtk/GtkUtilities.cpp:
        * platform/gtk/GtkUtilities.h:
        * platform/text/gtk/HyphenationLibHyphen.cpp:
        (WebCore::availableLocales):

2015-05-08  Alexey Proskuryakov  <ap@apple.com>

        Crashes in SocketStreamHandleBase::close
        https://bugs.webkit.org/show_bug.cgi?id=144767
        rdar://problem/20486538

        Reviewed by Brady Eidson.

        This is a speculative fix, I could not reproduce the crash.

        * Modules/websockets/WebSocketChannel.cpp: (WebCore::WebSocketChannel::processFrame):
        Normally, processOutgoingFrameQueue() closes the handle in the end when called in
        OutgoingFrameQueueClosing state. But there is no definitive protection against
        processing two CLOSE frames, in which case we'd try to close the handle twice.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback): Passing empty data to the client
        results in the socket being closed, which makes no sense here.

2015-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183996.
        https://bugs.webkit.org/show_bug.cgi?id=144806

        ASan detected use-after free (Requested by ap on #webkit).

        Reverted changeset:

        "Remove convenience constructors for TextRun"
        https://bugs.webkit.org/show_bug.cgi?id=144752
        http://trac.webkit.org/changeset/183996

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

        [Mac] Playback target clients do not unregister on page reload
        https://bugs.webkit.org/show_bug.cgi?id=144761

        Reviewed by Brady Eidson.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Unregister all target picker clients.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Register for page cache callback.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Unregister for page cache callback.
        (WebCore::HTMLMediaElement::documentWillSuspendForPageCache): New.
        (WebCore::HTMLMediaElement::documentDidResumeFromPageCache): New.

2015-05-08  Chris Dumez  <cdumez@apple.com>

        Throttle RequestAnimationFrame in subframes that are outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=144718
        <rdar://problem/20688782>

        Reviewed by Simon Fraser.

        Throttle RequestAnimationFrame in subframes that are outside the
        viewport or have "display: none" for performance and power.

        Tests: fast/animation/request-animation-frame-throttle-subframe-display-none.html
               fast/animation/request-animation-frame-throttle-subframe.html

        * dom/Document.h:
        (WebCore::Document::scriptedAnimationController):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::setThrottled):
        (WebCore::ScriptedAnimationController::isThrottled):
        * dom/ScriptedAnimationController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        Call FrameView::setFrameRect() only *after* the view has been
        set on the Frame. Otherwise, setFrameRect() ends up calling
        viewportContentsChanged() and we hit the
        ASSERT(frame().view() == this) assertion in windowClipRect()
        because the Frame still has its old FrameView. This is covered
        by loader/go-back-to-different-window-size.html layout test.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        (WebCore::FrameView::applyRecursivelyWithVisibleRect):
        (WebCore::FrameView::resumeVisibleImageAnimations):
        (WebCore::FrameView::updateScriptedAnimationsThrottlingState):
        (WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):
        (WebCore::FrameView::updateThrottledDOMTimersState):
        (WebCore::FrameView::scrollPositionChanged): Deleted.
        (WebCore::FrameView::sendResizeEventIfNeeded): Deleted.
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isRequestAnimationFrameThrottled):
        (WebCore::Internals::isTimerThrottled): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-08  Daniel Bates  <dabates@apple.com>

        Fix the iOS Simulator external SDK build following <http://trac.webkit.org/changeset/181918>

        Remove unused iOS Simulator-variant of CARenderServerRenderLayerWithTransform(). Also guard
        IOSurfaceRef-variant of CARenderServerRenderLayerWithTransform() with USE(IOSURFACE)
        since it is only applicable on platforms that use IOSurface.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        These convenience constructors are unnecessary. Moving the code that makes the StringView
        back to the call site will also help us make things more elegant in future refactoring.

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText): Remove ambiguous call.
        * platform/graphics/StringTruncator.cpp:
        (WebCore::stringWidth):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):

2015-05-08  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStream constructor start function should be able to error the stream
        https://bugs.webkit.org/show_bug.cgi?id=141162

        Reviewed by Darin Adler.

        This patch implements the functionality of the ReadableStreamController error function.
        It basically changes the state of the stream to errored, resolves the ready promise and rejects the closed promise.
        Adding support to reject promise with any JSValue.

        Support for storing the error is added to both reader and stream.

        Test: streams/readable-stream-controller-error.html and rebased tests

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToErrored):
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::initialize):
        (WebCore::ReadableStreamReader::closed):
        (WebCore::ReadableStreamReader::changeStateToClosed):
        (WebCore::ReadableStreamReader::changeStateToErrored):
        * Modules/streams/ReadableStreamReader.h:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::reject):
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::error):
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::createReader):
        (WebCore::ReadableJSStream::storeError):
        (WebCore::ReadableJSStream::Reader::storeError):
        (WebCore::ReadableJSStream::jsController): Deleted.
        * bindings/js/ReadableJSStream.h:

2015-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183985.
        https://bugs.webkit.org/show_bug.cgi?id=144796

        broke loader/go-back-to-different-window-size.html (Requested
        by kling on #webkit).

        Reverted changeset:

        "Throttle RequestAnimationFrame in subframes that are outside
        the viewport"
        https://bugs.webkit.org/show_bug.cgi?id=144718
        http://trac.webkit.org/changeset/183985

2015-05-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        SharedBuffer::m_size should be initialized to 0 when defining it
        https://bugs.webkit.org/show_bug.cgi?id=144740

        Reviewed by Darin Adler.

        Setting m_size to 0 when declaring it and updating constructor definitions.

        No change in behaviour.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):

2015-05-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183945.
        https://bugs.webkit.org/show_bug.cgi?id=144789

        "It broke all the GTK+ tests" (Requested by KaL on #webkit).

        Reverted changeset:

        "[GTK] Checks for DEVELOPMENT_BUILD are all wrong"
        https://bugs.webkit.org/show_bug.cgi?id=144746
        http://trac.webkit.org/changeset/183945

2015-05-07  Chris Dumez  <cdumez@apple.com>

        Throttle RequestAnimationFrame in subframes that are outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=144718
        <rdar://problem/20688782>

        Reviewed by Simon Fraser.

        Throttle RequestAnimationFrame in subframes that are outside the
        viewport or have "display: none" for performance and power.

        Tests: fast/animation/request-animation-frame-throttle-subframe-display-none.html
               fast/animation/request-animation-frame-throttle-subframe.html

        * dom/Document.h:
        (WebCore::Document::scriptedAnimationController):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::setThrottled):
        (WebCore::ScriptedAnimationController::isThrottled):
        * dom/ScriptedAnimationController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        (WebCore::FrameView::applyRecursivelyWithVisibleRect):
        (WebCore::FrameView::resumeVisibleImageAnimations):
        (WebCore::FrameView::updateScriptedAnimationsThrottlingState):
        (WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):
        (WebCore::FrameView::updateThrottledDOMTimersState):
        (WebCore::FrameView::scrollPositionChanged): Deleted.
        (WebCore::FrameView::sendResizeEventIfNeeded): Deleted.
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isRequestAnimationFrameThrottled):
        (WebCore::Internals::isTimerThrottled): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-07  Yoav Weiss  <yoav@yoav.ws>

        Calculate source-size length as a float
        https://bugs.webkit.org/show_bug.cgi?id=144766

        Reviewed by Dean Jackson.

        Make sure that the source-size length is calculated as a float,
        to align with the spec.

        Test: fast/dom/HTMLImageElement/sizes/image-sizes-1x.html
              fast/dom/HTMLImageElement/sizes/image-sizes-2x.html

        * css/SourceSizeList.cpp:
        (WebCore::parseSizesAttribute):
        (WebCore::defaultLength):
        (WebCore::computeLength):
        * css/SourceSizeList.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::pickBestImageCandidate):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLSrcsetParser.h:

2015-05-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183895.
        https://bugs.webkit.org/show_bug.cgi?id=144786

        Many tests became flaky (Requested by ap on #webkit).

        Reverted changeset:

        "Expose more font weights for -apple-system"
        https://bugs.webkit.org/show_bug.cgi?id=144707
        http://trac.webkit.org/changeset/183895

2015-05-07  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Add first-letter assert exception in RenderButton::setupInnerStyle().
        https://bugs.webkit.org/show_bug.cgi?id=140517OB

        Reviewed by Darin Adler.

        StyleResolver references inner block's render style temporary in
        RenderBlock::styleDidChange() when we have first-letter css pseudo
        element.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setupInnerStyle):

2015-05-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix build after r183970.

        WEBCORE_EXPORT should not be used on inlined functions.

        * platform/graphics/ca/GraphicsLayerCA.h:

2015-05-07  Anders Carlsson  <andersca@apple.com>

        Build fixes.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXRTFForRange:]):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_addMarkersToList):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writeFileWrapperAsRTFDAttachment):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setTypes):
        Pass empty arrays and dictionaries instead of nil.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        Pass the document view to the AppKit paint method.

2015-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Purge PassRefPtr in WebCore/html - 3
        https://bugs.webkit.org/show_bug.cgi?id=144686

        Reviewed by Andreas Kling.

        Replace PassRefPtr with Ref in create() factory functions, because
        it doesn't have to change to be null.

        No new tests, no behavior changes.

        * html/FTPDirectoryDocument.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::create):
        * html/HTMLKeygenElement.cpp:
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::create):
        * html/TimeRanges.cpp:
        (WebCore::TimeRanges::create):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderContainerElement::create):
        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::create):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::create):
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::create):
        (WebCore::TextControlInnerElement::create):
        (WebCore::TextControlInnerTextElement::create):
        (WebCore::SearchFieldResultsButtonElement::create):
        (WebCore::SearchFieldCancelButtonElement::create):
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::create):
        * html/track/InbandDataTextTrack.cpp:
        (WebCore::InbandDataTextTrack::create):
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::create):
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::create):
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create):
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackList.h:
        * html/track/VTTRegionList.h:
        (WebCore::VTTRegionList::create):

2015-05-07  Dean Jackson  <dino@apple.com>

        [iOS] MediaControls: disappear while scrubbing
        https://bugs.webkit.org/show_bug.cgi?id=144777
        <rdar://problem/20065572>

        Reviewed by Eric Carlson.

        If we are scrubbing we shouldn't hide the controls.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.hideControls): Return early if we are scrubbing.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype): Add initial value for _potentiallyScrubbing and
        rename from non-underscored value throughout the file.
        (ControllerIOS.prototype.handleTimelineTouchEnd): When we finish scrubbing, reset
        the timer to hide the controls.

2015-05-07  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r183300): Fixed elements flash when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=144778
        rdar://problem/20769741

        Reviewed by Dean Jackson.

        After r183300 we can detached layer backing store when outside the coverage region.
        However, position:fixed layers are moved around by the ScrollingCoordinator behind
        GraphicsLayer's back, so we can do layer flushes with stale information about layer
        geometry.
        
        To avoid dropping backing store for layers in this situation, prevent backing
        store detachment on layers registered with the ScrollingCoordinator as viewport-constrained
        layers. Preventing detachment on a layer also prevents detachment on all descendant
        layers.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setAllowsBackingStoreDetachment):
        (WebCore::GraphicsLayer::allowsBackingStoreDetachment):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): Set m_intersectsCoverageRect to true
        if backing store detachment is prevented.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Set a bit in the CommitState to 
        communicate to descendants that detachment is prevented.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::CommitState::CommitState): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setIsScrollCoordinatedWithViewportConstrainedRole):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::setScrollingNodeIDForRole): If registering with a non-zero
        nodeID for the ViewportConstrained role, turn off backing store detachment.

2015-05-07  Sam Weinig  <sam@webkit.org>

        Consider implementing Document.scrollingElement
        <rdar://problem/20845213>
        https://bugs.webkit.org/show_bug.cgi?id=143609

        Reviewed by Simon Fraser.

        Add the non-compliant implementation of Document.scrollingElement that the spec,
        found at http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement, 
        says we should have while we have non-compliant implementations of Element.scrollTop
        and Element.scrollLeft (fixing that is tracked by https://bugs.webkit.org/show_bug.cgi?id=106133).

        Tests: fast/dom/Document/scrollingElement-quirks-mode.html
               fast/dom/Document/scrollingElement-standards-mode.html

        * dom/Document.cpp:
        (WebCore::Document::scrollingElement):
        * dom/Document.h:
        * dom/Document.idl:

2015-05-07  Dean Jackson  <dino@apple.com>

        [iOS] While scrubbing and holding down, video continues to play
        https://bugs.webkit.org/show_bug.cgi?id=144776
        <rdar://problem/20863757>

        Reviewed by Simon Fraser.

        When we are scrubbing a video, we should pause playback. As we
        let go of the scrubber playback can resume (but only if it was
        playing originally).

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Listen for touchstart on the scrubber.
        (ControllerIOS.prototype.handleTimelineInput): Call the prototype, but pause if necessary.
        (ControllerIOS.prototype.handleTimelineChange): Just moved this to be with the other timeline functions.
        (ControllerIOS.prototype.handleTimelineTouchStart): Add the listeners for end and cancel. Remember that we are
        potentially about to scrub.
        (ControllerIOS.prototype.handleTimelineTouchEnd): Remove the listeners.

2015-05-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Applying a filter on an SVG element, which is larger than 4096 pixels, causes this element to be rendered shifted to the left
        https://bugs.webkit.org/show_bug.cgi?id=144335

        Reviewed by Daniel Bates.

        Address comments raised by Darin Adler in review.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::sizeNeedsClamping):
        (WebCore::ImageBuffer::clampedSize):
        (WebCore::ImageBuffer::isSizeClamped): Deleted.
        * platform/graphics/ImageBuffer.h:
        The condition for the negative width/height in isSizeClamped() was wrong. Use
        FloatSize::isEmpty() instead and rename the function to sizeNeedsClamping().
        The new function should return the opposite of the old function return value.
        
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::updateBackingStoreRect):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        Call the new function and negate the condition for the return value.

2015-05-07  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * editing/mac/EditorMac.mm:
        (WebCore::dataInRTFDFormat):
        (WebCore::dataInRTFFormat):

2015-05-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Applying a filter on an SVG element, which is larger than 4096 pixels, causes this element to be rendered shifted to the left
        https://bugs.webkit.org/show_bug.cgi?id=144335

        Reviewed by Darin Adler.

        When the SVG element is larger than 4096x4096 pixels and it has a filter,
        a clipper or a masker, the ImageBuffer which is created for drawing the
        sourceGraphicBuffer has to be clamped to this size. The reason for this
        clamping is the FilterEffect simply ignores processing any ImageBuffer
        larger than this size.
        
        The bug was happening because we did not propagate the clamping logic to
        the FilterEffect. The FilterEffect result ImageBuffer was not clamped as
        what we do for drawing the sourceGraphicBuffer. If only the destination
        point is specified, the GraphicsContext::drawImageBuffer() assumes the
        source and the destination images have the same size which is not true
        with the clamping.
        
        The fix is to add the clamping logic to the FilterEffect. Two places we
        need to change. (1) FilterEffect::createImageBufferResult() has to apply
        the same clamping we do in SVGRenderingContext::createImageBuffer(). (2)
        FilterEffect::drawingRegionOfInputImage() has to consider the clamping 
        when mapping from absolute coordinates to the ImageBuffer coordinates.
        
        Tests: svg/filters/big-sized-off-viewport-filter.svg

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::isSizeClamped):
        (WebCore::ImageBuffer::clampedSize):
        (WebCore::ImageBuffer::clampedRect):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::setSpaceSize): Move all the clamping helper methods
        from SVGRenderingContext and RenderSVGResourceFilter to the ImageBuffer.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::platformApplySoftware): Use logicalSize() of the
        result image instead of using absolutePaintRect(). The later returns the
        rectangle of the element without clamping.
        
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::fitsInMaximumImageSize): Deleted.
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applySVGMask):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::createTileImage): Make the modifications
        which are needed because of moving the clamping helper methods to ImageBuffer
        and because of changing the prototype of SVGRenderingContext methods.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::drawingRegionOfInputImage): Consider the clamping
        when mapping from absolute coordinates to the ImageBuffer coordinates.

        (WebCore::FilterEffect::createImageBufferResult): Apply the same clamping
        we do in SVGRenderingContext::createImageBuffer() when creating the 
        FilterEffect result ImageBuffer.
        
        (WebCore::FilterEffect::apply):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        (WebCore::FilterEffect::maxFilterArea): Deleted.
        (WebCore::FilterEffect::isFilterSizeValid): Deleted.
        * platform/graphics/filters/FilterEffect.h: Use the new ImageBuffer clamping
        helper methods and delete the local ones.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::translate):
        * platform/graphics/transforms/AffineTransform.h: Add new scale and translate
        overloads to AffineTransform.
        
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::updateBackingStoreRect):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect): Code clean up.
        
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::calculateScreenFontSizeScalingFactor):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):
        Return the AffineTransform instead of passing it through the reference of
        an argument.
        
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::createImageBufferForPattern): Deleted.
        Code clean up and method rename.
        
        (WebCore::SVGRenderingContext::clampedAbsoluteTargetRect): Deleted.
        (WebCore::SVGRenderingContext::clampedAbsoluteSize): Deleted.
        * rendering/svg/SVGRenderingContext.h: Move the clamping helper methods to
        the ImageBuffer class.
    
2015-05-07  Beth Dakin  <bdakin@apple.com>

        New force-related DOM events should fire in WK1 views
        https://bugs.webkit.org/show_bug.cgi?id=144663
        -and corresponding-
        rdar://problem/20281886

        Reviewed by Sam Weinig.

        All of the WK1 mouse events need to take the correspondingPressureEvent.
        * page/EventHandler.h:

        Make correspondingPressureEvent a part of CurrentEventScope. This is needed to 
        have accurate pressure information for all of the mouse events in subframes.
        * page/mac/EventHandlerMac.mm:
        (WebCore::correspondingPressureEventSlot):
        (WebCore::EventHandler::correspondingPressureEvent):
        (WebCore::CurrentEventScope::CurrentEventScope):
        (WebCore::CurrentEventScope::~CurrentEventScope):

        These events don’t have an associated pressure, so send nil for the 
        correspondingPressureEvent.
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::keyEvent):

        Pipe through correspondingPressureEvent.
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):

        New function to handle pressure change events.
        (WebCore::EventHandler::pressureChange):

        Pipe through correspondingPressureEvent.
        (WebCore::EventHandler::passMouseMovedEventToScrollbars):
        (WebCore::EventHandler::currentPlatformMouseEvent):

        Take the correspondingPressureEvent in order to build a PlatformMouseEvent with 
        the correct pressure information.
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::globalPointForEvent):
        (WebCore::pointForEvent):
        (WebCore::mouseButtonForEvent):
        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformMouseEvent):

2015-05-06  Roger Fong  <roger_fong@apple.com>

        Media Controls: Scrubber should be independent of actual video time, causes scrubber to be jumpy.
        https://bugs.webkit.org/show_bug.cgi?id=144700.
        <rdar://problem/19997548>

        Reviewed by Jer Noble.

        Update time and timeline during the timeline input event instead of the wrapper's mousemove.
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.handleTimelineMouseMove):
        (Controller.prototype.drawTimelineBackground): 

        (Controller.prototype.updateControlsWhileScrubbing): 
        Updates time and scrubber to reflect timeline user input.

2015-05-07  Yoav Weiss  <yoav@yoav.ws>

        Handle meta viewport in HTMLPreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=144640

        Reviewed by Dean Jackson.

        Add support for the <meta> tag to the HTMLPreloadScanner
        and when the meta tag's name is viewport, get the document
        to process the tag's attribute value, and set its ViewportArgument.

        Tests: fast/dom/HTMLMetaElement/meta-preloader.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor): Added meta.
        (WebCore::TokenPreloadScanner::initiatorFor): Added meta.
        (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner): Call document.processViewport is meta viewport encountered.
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute): Keep track of meta viewport tags.
        (WebCore::testPreloadScannerViewportSupport): Testing function that makes sure this functionality is working.
        * html/parser/HTMLPreloadScanner.h:
        * testing/Internals.cpp:
        (WebCore::Internals::testPreloaderSettingViewport): Calls the testing function.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-07  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r164449): Subpixel rendering: http://www.apple.com/iphone-6/ "Faster wireless." image displays vertical black line on 1x displays at specific window width.
        https://bugs.webkit.org/show_bug.cgi?id=144723
        rdar://problem/18307094

        Reviewed by Simon Fraser.

        This patch ensures that the backing store's graphics layer is always positioned on a device pixel boundary.

        While calculating the backing store's graphics layer location, its ancestor layer's compositing bounds is taken into account.
        However the compositing bounds is an unsnapped value, so in order to place the graphics layer properly,
        we need to pixel align the ancestor compositing bounds before using it to adjust the child's graphics layer position.

        Test: compositing/ancestor-compositing-layer-is-on-subpixel-position.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2015-05-07  Yoav Weiss  <yoav@yoav.ws>

        Fix sizes crash and add invalid value tests.
        https://bugs.webkit.org/show_bug.cgi?id=144739

        Reviewed by Darin Adler.

        Make sure that only CSS length are allowed when the sizes parser is calling computeLength.
        Also make sure that for invalid lengths, the 100vw default is used instead.

        Test: fast/dom/HTMLImageElement/sizes/image-sizes-invalids.html

        * css/SourceSizeList.cpp:
        (WebCore::computeLength):
        (WebCore::defaultLength):
        (WebCore::parseSizesAttribute):

2015-05-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Checks for DEVELOPMENT_BUILD are all wrong
        https://bugs.webkit.org/show_bug.cgi?id=144746

        Reviewed by Martin Robinson.

        Use DEVELOPER_MODE rather than DEVELOPMENT_BUILD.

        * platform/gtk/GtkUtilities.cpp:
        * platform/gtk/GtkUtilities.h:
        * platform/text/gtk/HyphenationLibHyphen.cpp:
        (WebCore::availableLocales):

2015-05-07  Simon Fraser  <simon.fraser@apple.com>

        Remove the WK1-only code path for independently composited iframes
        https://bugs.webkit.org/show_bug.cgi?id=144722

        Reviewed by Dean Jackson.

        In WebKit1 on Mac, we allowed iframes to be composited independently of their
        parent document, relying on the fact that the frame's platform view can host
        a layer-backed view. However, this ran into bugs (rdar://problem/18862298),
        and triggers the assertion at the end of FrameView::updateLayoutAndStyleIfNeededRecursive(),
        because the compositing update after a layout can dirty style in notifyIFramesOfCompositingChange().
        
        Removing the WK1-only code path solves these problems. It also eliminates the need
        to do compositing-specific frame overlap testing.

        * page/FrameView.cpp:
        (WebCore::FrameView::setIsOverlapped): No need to do compositing-related things here.
        Any iframe that gets composited will participate in the normal compositing overlap
        testing in its parent frame.
        (WebCore::FrameView::hasCompositedContentIncludingDescendants): Deleted.
        (WebCore::FrameView::hasCompositingAncestor): Deleted.
        * page/FrameView.h:
        * rendering/RenderLayerCompositor.cpp: Replace ownerElement() checks in this file
        with an isMainFrameCompositor() for readability. Some 0->nullptr.
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::chromeClient):
        (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::setIsInWindow):
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame): frameRenderer.requiresAcceleratedCompositing()
        already bails on no content RenderView, so the shouldPropagateCompositingToEnclosingFrame() check does
        nothing and is removed.
        (WebCore::RenderLayerCompositor::isAsyncScrollableStickyLayer):
        (WebCore::RenderLayerCompositor::requiresScrollLayer):
        (WebCore::RenderLayerCompositor::documentUsesTiledBacking):
        (WebCore::RenderLayerCompositor::isMainFrameCompositor):
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls):
        (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer):
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::ensureRootLayer): Main frame attaches via ChromeClient,
        all other frames attach via parent frame.
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange): This call to
        scheduleSetNeedsStyleRecalc(SyntheticStyleChange) was the source of dirtying style after
        layout, but is no longer needed so remove it.
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::scrollingCoordinator):
        (WebCore::RenderLayerCompositor::graphicsLayerFactory):
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames): Deleted.
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame): Deleted.
        (WebCore::RenderLayerCompositor::mainFrameBackingIsTiled): Deleted. This was mis-named;
        it really asks whether the document uses tiled backing, but does not check for main frame.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents): No need to do frame overlap testing for
        compositing now.

2015-05-06  Dean Jackson  <dino@apple.com>

        Handle backdrop views that have to tile
        https://bugs.webkit.org/show_bug.cgi?id=142317
        <rdar://problem/20049088>

        Reviewed by Simon Fraser.

        Take 2 - this was rolled out because Mavericks was crashing.

        Make sure backdrop layers don't tile. If they are big
        enough, we'll leave it to the platform compositor to handle.

        This also fixes a bug where if a layer changed from a backdrop
        type to a tiled type, it would still retain its custom appearance
        and we'd try to add children to the wrong layer.

        Test: compositing/media-controls-bar-appearance-big.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Check if
        a layer needs a backdrop before checking if it needs to tile.

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Revert "Introducing the Platform Abstraction Layer (PAL)"
        https://bugs.webkit.org/show_bug.cgi?id=144751

        Unreviewed.

        PAL should be a new target inside WebCore, rather than a top-level folder.

        * WebCore.xcodeproj/project.pbxproj:
        * Configurations/FeatureDefines.xcconfig:

2015-05-07  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * Configurations/WebCoreTestSupport.xcconfig:

2015-05-07  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] The pre element should be mapped to ATK_ROLE_SECTION; not ATK_ROLE_PANEL
        https://bugs.webkit.org/show_bug.cgi?id=144702

        Reviewed by Chris Fleizach.

        Add a new PreRole AccessibilityRole so that per-platform mapping is possible.
        Map PreRole to ATK_ROLE_SECTION for Efl and Gtk; to NSAccessibilityGroupRole
        for the Mac. Add PreRole to the list of "text type" ATK roles.

        No new tests. Existing tests were updated to reflect the corrected mapping.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::allowsTextRanges):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        (roleIsTextType):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2015-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
        https://bugs.webkit.org/show_bug.cgi?id=144727

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Don’t include AspenFamily.xcconfig.
        * Configurations/WebCore.xcconfig: For iOS, define INSTALL_PATH in terms of
        INSTALL_PATH_PREFIX, and set INSTALL_PATH_PREFIX for the iOS 8.x Simulator.
        * Configurations/WebCoreTestSupport.xcconfig: Define INSTALL_PATH in terms of
        INSTALL_PATH_PREFIX and INSTALL_PATH_ACTUAL, and define INSTALL_PATH_PREFIX for the iOS 8.x
        Simulator.

2015-05-07  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Playback target isn't set on new element
        https://bugs.webkit.org/show_bug.cgi?id=144724

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Call setShouldPlayToPlaybackTarget
        if necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Remember
        the setting in case we don't have an AVPlayer yet.

2015-05-07  Yoav Weiss  <yoav@yoav.ws>

        Fix <script srcset> being loaded by the preloader.
        https://bugs.webkit.org/show_bug.cgi?id=144675

        Reviewed by Darin Adler.

        Fix HTMLPreloadScanner to make sure that srcset is only loaded
        when it is present on an <img>.

        Tests: http/tests/loading/preload-script-src.html
               http/tests/loading/preload-script-srcset-ignored.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):

2015-05-07  Žan Doberšek  <zdobersek@igalia.com>

        Add missing type traits specialization for PlatformDisplayWayland
        https://bugs.webkit.org/show_bug.cgi?id=144671

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/wayland/PlatformDisplayWayland.h:
        Add missing type traits specialization for the PlatformDisplayWayland
        class via the SPECIALIZE_TYPE_TRAITS_PLATFORM_DISPLAY macro.

2015-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Mark grid shorthands as layout dependent
        https://bugs.webkit.org/show_bug.cgi?id=144687

        Reviewed by Darin Adler.

        grid-template and grid shorthands were not marked us layout dependent,
        so you can end up calling them before the grid has been laid out and
        you'll get a crash at valueForGridTrackList() because of trackPositions
        won't be initialized yet.

        Tests: fast/css-grid-layout/grid-shorthand-computed-style-crash.html
               fast/css-grid-layout/grid-template-shorthand-computed-style-crash.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent): Add the grid shorthands only if the object
        is a RenderGrid as otherwise it's not needed (using the same condition
        for grid-template-columns and grid-template-rows properties too).

2015-05-06  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
        https://bugs.webkit.org/show_bug.cgi?id=144657
        <rdar://problem/18894598>

        Reviewed by Andy Estes.

        Export WebCore functionality to pause and resume the database thread so that we can
        make use of this functionality from WebKit2.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseServer::setPauseAllDatabases().
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::setPauseAllDatabases): Added; turns around and calls
        DatabaseTracker::tracker().setDatabasesPaused() to pause or resume the database thread.
        For now, we guard this call with PLATFORM(IOS). We'll look to remove this guard once
        we fix <https://bugs.webkit.org/show_bug.cgi?id=144660>.
        * Modules/webdatabase/DatabaseServer.h:

2015-05-06  Brent Fulgham  <bfulgham@apple.com>

        Scroll-snap points do not handle margins and padding propertly
        https://bugs.webkit.org/show_bug.cgi?id=144647
        <rdar://problem/20829473>

        Reviewed by Simon Fraser.

        The calculation of scroll snap points was incorrect because it did not account for margins or padding.
        This was fixed by using the "paddingBoxRect" to represent the overall size of the view area, and
        subtracting the relevant padding when computing the size of the scroll snap offsets.

        Extend testing internals with accessor methods to retrieve string representations of the scroll snap
        offsets and scroll snap coordinates computed during layout. These values are used in the new
        'css3/scroll-snap/scroll-snap-offsets-and-coordinates.html' test.

        New tests:
        * css3/scroll-snap/scroll-snap-offsets-and-coordinates.html: Added.
        * platform/mac-wk2/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-borders.html: Added.
        * platform/mac-wk2/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-padding.html: Added.
        * platform/mac-wk2/tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-rotated.html: Added.

        * css/LengthFunctions.h: Expose the 'valueForLength' method so we can use it in WebCoreTestSupport.
        * dom/Node.h: Expose the 'renderBox' method so we can use it in WebCoreTestSupport.
        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Use 'contentBoxRect' for overall size, so that we don't use padding
        as part of our offset calculations.
        (WebCore::updateSnapOffsetsForScrollableArea): Ditto.
        * rendering/RenderBox.h: Expose 'canBeScrolledAndHasScrollableArea' for use in WebCoreTestSupport.
        * rendering/style/RenderStyle.h: Expose 'scrollSnapCoordinates' for use in WebCoreTestSupport.
        * testing/Internals.cpp:
        (WebCore::appendOffsets): Helper function.
        (WebCore::Internals::scrollSnapOffsets): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up TextRun constructors
        https://bugs.webkit.org/show_bug.cgi?id=144712

        Reviewed by Zalan Bujtas.

        This patch uses constructor forwarding to make TextRun's constructors much simpler. It then
        updates the implementations of RenderBlock::constructTextRun() to be more consistent with
        TextRun (via using StringViews).

        No new tests because there is no behavior change.

        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::longDivLeftPadding):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        (WebCore::constructTextRunInternal): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        (WebCore::RenderEmbeddedObject::unavailablePluginIndicatorBounds):
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::SVGTextMetricsBuilder):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):

2015-05-06  Sungmann Cho  <sungmann.cho@navercorp.com>

        Rename URL::copy() to URL::isolatedCopy() to match String.
        https://bugs.webkit.org/show_bug.cgi?id=144684

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::setURL):
        (WebCore::WebSocketHandshake::httpURLForAuthenticationAndCookies):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * platform/CrossThreadCopier.cpp:
        (WebCore::URL>::copy):
        * platform/URL.cpp:
        (WebCore::URL::isolatedCopy):
        (WebCore::URL::copy): Deleted.
        * platform/URL.h:
        (WebCore::URLCapture::URLCapture):
        * platform/network/BlobPart.h:
        (WebCore::BlobPart::detachFromCurrentThread):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::copyData):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):

2015-05-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183894.
        https://bugs.webkit.org/show_bug.cgi?id=144719

        crashes on mavericks (Requested by dino on #webkit).

        Reverted changeset:

        "Handle backdrop views that have to tile"
        https://bugs.webkit.org/show_bug.cgi?id=142317
        http://trac.webkit.org/changeset/183894

2015-05-06  Jon Lee  <jonlee@apple.com>

        CoreTextSPI.h uses wrong version number to denote Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=144701

        Reviewed by Dean Jackson.

        * platform/spi/cocoa/CoreTextSPI.h: Should 101000 not 10100.

2015-05-06  Jon Lee  <jonlee@apple.com>

        Expose more font weights for -apple-system
        https://bugs.webkit.org/show_bug.cgi?id=144707

        Reviewed by Dean Jackson.

        Update to platform/mac/fast/text/systemFont.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::toNSFontWeight): New static method to map font weights to NSFontWeight constants available on
        Yosemite and later.
        (WebCore::fontWithFamily): Request the system font with a mapped weight on Yosemite and later.
        * platform/spi/mac/NSFontSPI.h: Add [NSFont systemFontWithSize:weight:], and the proper NSFontWeight
        constants.

2015-05-06  Dean Jackson  <dino@apple.com>

        Handle backdrop views that have to tile
        https://bugs.webkit.org/show_bug.cgi?id=142317
        <rdar://problem/20049088>

        Reviewed by Simon Fraser.

        Make sure backdrop layers don't tile. If they are big
        enough, we'll leave it to the platform compositor to handle.

        This also fixes a bug where if a layer changed from a backdrop
        type to a tiled type, it would still retain its custom appearance
        and we'd try to add children to the wrong layer.

        Test: compositing/media-controls-bar-appearance-big.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Check if
        a layer needs a backdrop before checking if it needs to tile.

2015-05-06  Carlos Garcia Campos  <cgarcia@igalia.com> and Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Compile error due to undefined symbols after r183868
        https://bugs.webkit.org/show_bug.cgi?id=144692

        Reviewed by Alex Christensen.

        Speculative build fix. Add dummy PlatformDisplayWin.

        * PlatformWinCairo.cmake: Add PlatformDisplay.cpp to compilation.
        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/win/PlatformDisplayWin.h:
        Add stubs to compile.
        * WebCore.vcxproj/WebCore.vcxproj
        * WebCore.vcxproj/WebCore.vcxproj.filters
        Add new files to Windows build.

2015-05-06  David Hyatt  <hyatt@apple.com>

        Avoid copies in scrollOffsetForFixedPosition() and inline it.
        https://bugs.webkit.org/show_bug.cgi?id=144709

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::frameScaleFactor):
        Added so that scrollOffsetForFixedPosition() can be inlined without having to
        reference Frame's implementation.

        (WebCore::FrameView::scrollOffsetForFixedPosition): Deleted.
        Moved this to the header.

        * page/FrameView.h:
        Inline scrollOffsetForFixedPosition() and get rid of all the copying
        it was doing.

2015-05-06  David Hyatt  <hyatt@apple.com>

        RenderLayer::currentTransform computes a pixel snapped rect it doesn't use.
        https://bugs.webkit.org/show_bug.cgi?id=144708

        Reviewed by Simon Fraser.

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

        Only compute a pixel snapped rect if we actually end up needing it. The common case
        is that this rect is not needed, so pushing it inside the two if statements
        speeds up the common case.

2015-05-06  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-05-06  David Hyatt  <hyatt@apple.com>

        Optimize topLeftLocationOffset() addition in updateLayerPosition
        https://bugs.webkit.org/show_bug.cgi?id=144704

        Reviewed by Dean Jackson.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        Move the hasFlippedBlocks bit to FrameView instead of RenderView. Works better for inlining
        the check in any renderer header, and it also makes more sense conceptually, since the RenderView
        itself could be a flipped block.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        Change over to the FrameView bit.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::applyTopLeftLocationOffset):
        Add a new inlined function that can apply the top left location offset to a point without
        multiple LayoutSize creations and copies. It invokes a helper for flipping that is not
        inlined only in the case where actual flipped blocks exist in the render tree.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateFromStyle):
        Set the bit on the FrameView now instead of the RenderView.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        Call the new applyTopLeftLocationOffset function so that the point can have offsets added
        in without any extra copies.

        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        Switch over to the bit on the FrameView.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        Get rid of the bit on the RenderView.

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Introducing the Platform Abstraction Layer (PAL)
        https://bugs.webkit.org/show_bug.cgi?id=143358

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj: Let the project know about the .a
        * Configurations/FeatureDefines.xcconfig: Updated

2015-05-06  Eric Carlson  <eric.carlson@apple.com>

        [iOS] remove some unnecessary iOS-only media code
        https://bugs.webkit.org/show_bug.cgi?id=144697
        <rdar://problem/20229914>

        Reviewed by Jer Noble.

        * html/HTMLAttributeNames.in: Remove data-youtube-id.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Remove dataYouTubeID.

2015-05-06  David Hyatt  <hyatt@apple.com>

        Optimize relativePositionOffset() to avoid doing unnecessary work
        https://bugs.webkit.org/show_bug.cgi?id=144698

        Reviewed by Simon Fraser.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffset):

        Patch relativePositionOffset to avoid doing unnecessary work in the common case where
        all values of top/left/right/bottom are either auto or fixed. We no longer fetch
        containingBlock() into a local always, but instead just invoke the function only
        when necessary.

        Also avoid computing the percentage-relative maximum for the top/right/bottom/left lengths
        when they are fixed values, since that maximum won't be examined at all.

2015-05-06  Martin Robinson  <mrobinson@igalia.com>

        [FreeType] Vertical CJK glyphs should not be rendered with synthetic oblique
        https://bugs.webkit.org/show_bug.cgi?id=144612

        Reviewed by Darin Adler.

        No new tests. This causes fast/text/international/synthesized-italic-vertical.html to pass.

        * platform/graphics/Font.cpp:
        (WebCore::Font::nonSyntheticItalicFont): Compile this method for Cairo as well.
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback): When searching for the system fallback,
        ensure that we do not use synthetic oblique when rendering vertical CJK glyphs.
        (WebCore::FontCascadeFonts::glyphDataForNormalVariant): Extend the CJK fix to Cairo ports.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::setSyntheticOblique): Added this helper method, because
        Freetype/Cairo ports needs to be able to recreate the scaled font matrix when the
        synthetic oblique settings changes.
        * platform/graphics/freetype/FontPlatformData.h: Rename initializeWithFontFace to buildScaledFont.
        Remove the now unused m_horizontalOrientationMatrix member.
        (WebCore::FontPlatformData::setSyntheticOblique): Added the helper here as well.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Calculate whether or not to use synthetic oblique here,
        before buildScaledFont is called. Call buildScaledFont instead of initializeWithFontFace.
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::buildScaledFont): Renamed from initializeWithFontFace, does
        the same thing, except calculate whether or not to use synthetic oblique. Instead just
        reads the value.
        (WebCore::FontPlatformData::setOrientation): Instead of adjusting the font matrix, recreate
        the entire font.
        (WebCore::FontPlatformData::setSyntheticOblique): Added.
        (WebCore::rotateCairoMatrixForVerticalOrientation): Deleted.
        (WebCore::FontPlatformData::initializeWithFontFace): Deleted.

2015-05-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Test splitting NFAs by max NFA size.
        https://bugs.webkit.org/show_bug.cgi?id=144659

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.h:
        Make maxNFASize a parameter so we can test it with small values.

2015-05-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (r183467): Unable to start downloads in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=144533

        Reviewed by Darin Adler.

        If willSendRequest delegate mutated the request we would lose the requester field value from the original.

        No test runner support for mutating requests.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):

            This needs to keep the requester too.

        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties): Deleted.

            Share implementations.

2015-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Toggling underline on font panel removes strike through
        https://bugs.webkit.org/show_bug.cgi?id=144670
        <rdar://problem/3790443>

        Reviewed by Darin Adler.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Added a variant that takes CSSStyleDeclaration.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyleToSelection): Takes Ref<EditingStyle>&& instead of RefPtr<EditingStyle>&&.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame): Ditto.
        (WebCore::executeStrikethrough):
        (WebCore::executeUnderline):

2015-05-06  Jessie Berlin  <jberlin@webkit.org>

        More build fixing.

        * page/mac/TextIndicatorWindow.mm:

2015-05-06  Jessie Berlin  <jberlin@webkit.org>

        32-bit build fix after r183859 and r183860.

        * page/mac/TextIndicatorWindow.mm:
        Autosynthesis isn't available for our 32-bit builds.

2015-05-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [EGL] Move EGLDisplay handling to PlatformDisplay and remove PlatformDisplay definition from GLDefs.h
        https://bugs.webkit.org/show_bug.cgi?id=144685

        Reviewed by Martin Robinson.

        The EGL display is also initialized in multiple places, and could
        be unified in PlatformDisplay. Remove the PlatformDisplay
        definition from platform/graphics/opengl/GLDefs.h to avoid conflicts.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::PlatformDisplay): Initialize m_eglDisplay.
        (WebCore::PlatformDisplay::~PlatformDisplay): Call terminateEGLDisplay().
        (WebCore::PlatformDisplay::eglDisplay): Lazy intialize the EGL
        display and return it.
        (WebCore::PlatformDisplay::initializeEGLDisplay):
        (WebCore::PlatformDisplay::terminateEGLDisplay):
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::sharedEGLDisplay): Use PlatformDisplay::eglDisplay().
        * platform/graphics/opengl/GLDefs.h: Remove unneeded definitions.
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::GLPlatformSurface): Remove
        m_sharedDisplay member, PlatformDisplay::sharedDisplay() can be used instead.
        (WebCore::GLPlatformSurface::sharedDisplay): Deleted.
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/egl/EGLConfigSelector.h: Use
        EGLDisplay instead of PlatformDisplay.
        * platform/graphics/surfaces/egl/EGLContext.cpp:
        (WebCore::EGLOffScreenContext::initialize): Use PlatformDisplay::eglDisplay().
        * platform/graphics/surfaces/egl/EGLHelper.cpp: Remove the
        EGLDisplayConnection clas and use PlatformDisplay instead.
        (WebCore::EGLHelper::eglDisplay):
        (WebCore::EGLHelper::currentDisplay):
        (WebCore::EGLDisplayConnection::EGLDisplayConnection): Deleted.
        (WebCore::EGLDisplayConnection::~EGLDisplayConnection): Deleted.
        (WebCore::EGLDisplayConnection::display): Deleted.
        (WebCore::EGLDisplayConnection::terminate): Deleted.
        * platform/graphics/surfaces/egl/EGLHelper.h:
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLTransportSurface::EGLTransportSurface): Use EGLHelper::eglDisplay().
        (WebCore::EGLTransportSurface::destroy): Ditto.
        (WebCore::EGLOffScreenSurface::EGLOffScreenSurface): Ditto.
        (WebCore::EGLOffScreenSurface::destroy): Ditto.
        * platform/graphics/surfaces/egl/EGLXSurface.cpp:
        (WebCore::EGLWindowTransportSurface::EGLWindowTransportSurface):
        Use PlatformDisplay::eglDisplay().
        (WebCore::EGLWindowTransportSurface::swapBuffers): Ditto.
        (WebCore::EGLPixmapSurface::EGLPixmapSurface): Ditto.
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        (WebCore::GLXOffScreenContext::initialize): Use X11Helper::nativeDisplay().
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface): Do not use m_sharedDisplay.
        (WebCore::GLXOffScreenSurface::initialize): Ditto.
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::PlatformDisplayWayland): Call
        PlatformDisplay::initializeEGLDisplay() to insialize the EGL display.
        * platform/graphics/wayland/PlatformDisplayWayland.h:
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::initializeEGLDisplay): Override
        PlatformDisplay::initializeEGLDisplay() to initialize the
        m_eglDisplay member.
        * platform/graphics/x11/PlatformDisplayX11.h:

2015-05-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DOMStorage exception and issue with sessionStorage
        https://bugs.webkit.org/show_bug.cgi?id=144646

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        Return session storage if the identifier says not local storage.

2015-05-06  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Move ReadableStreamJSSource.h/.cpp to ReadableJSStream.h/.cpp
        https://bugs.webkit.org/show_bug.cgi?id=144567

        Reviewed by Darin Adler.

        In addition to renaming ReadableStreamJSSource.h/.cpp, ReadableStreamJSSource is now made a private class of
        ReadableJSStream, called ReadableJSStream::Source.
        Made some minor refactoring (passing some ExecState by ref and not by pointer).
        No functional change, existing tests cover the changes.

        * bindings/js/JSReadableStreamCustom.cpp:
        * bindings/js/ReadableJSStream.cpp:
        (WebCore::ReadableJSStream::Source::create):
        (WebCore::ReadableJSStream::Source::Source):
        (WebCore::ReadableJSStream::Source::~Source):
        (WebCore::ReadableJSStream::Source::globalObject):
        (WebCore::ReadableJSStream::Source::start):
        (WebCore::ReadableJSStream::create):
        (WebCore::ReadableJSStream::ReadableJSStream):
        * bindings/js/ReadableJSStream.h:

2015-05-05  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r183517): Yellow find-in-page highlight gets stuck forever
        https://bugs.webkit.org/show_bug.cgi?id=144651
        <rdar://problem/20755722>

        * page/mac/TextIndicatorWindow.mm:
        Fix an incorrectly-applied review comment.

2015-05-05  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r183517): Yellow find-in-page highlight gets stuck forever
        https://bugs.webkit.org/show_bug.cgi?id=144651
        <rdar://problem/20755722>

        Reviewed by Dan Bernstein.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::clearTextIndicator):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (WebCore::TextIndicatorWindow::closeWindow):
        (WebCore::TextIndicatorWindow::startFadeOut):
        We can't keep m_fadingOut on TextIndicatorWindow, since it is reused.
        Keep it on the WebTextIndicatorView instead.

2015-05-05  Žan Doberšek  <zdobersek@igalia.com>

        Add missing vtable override specifiers under Source/WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=144578

        Reviewed by Daniel Bates.

        Update virtual method overrides under Source/WebCore/html
        which are missing the override specifier.

        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.h:
        * html/track/InbandTextTrack.h:
        * html/track/TrackListBase.h:

2015-05-05  Žan Doberšek  <zdobersek@igalia.com>

        Add missing vtable override specifiers under Source/WebCore/rendering
        https://bugs.webkit.org/show_bug.cgi?id=144570

        Reviewed by Darin Adler.

        Update virtual method overrides under Source/WebCore/rendering
        which are missing the override specifiers.

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::calculateBoundaries): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::shadowControlsNeedCustomLayoutMetrics): Deleted.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderThemeGtk.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/svg/RenderSVGBlock.h:

2015-05-05  Žan Doberšek  <zdobersek@igalia.com>

        Add missing vtable override specifiers under Source/WebCore/Modules
        https://bugs.webkit.org/show_bug.cgi?id=144569

        Reviewed by Darin Adler.

        Update virtual method overrides under Source/WebCore/Modules
        which are missing the override specifier.

        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::mediaType): Deleted.
        (WebCore::AudioContext::presentationType): Deleted.
        (WebCore::AudioContext::canReceiveRemoteControlCommands): Deleted.
        (WebCore::AudioContext::didReceiveRemoteControlCommand): Deleted.
        (WebCore::AudioContext::overrideBackgroundPlaybackRestriction): Deleted.
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::refThreadableWebSocketChannel): Deleted.
        (WebCore::WebSocketChannel::derefThreadableWebSocketChannel): Deleted.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        (WebCore::WorkerThreadableWebSocketChannel::refThreadableWebSocketChannel): Deleted.
        (WebCore::WorkerThreadableWebSocketChannel::derefThreadableWebSocketChannel): Deleted.

2015-05-05  Žan Doberšek  <zdobersek@igalia.com>

        EventHandler::m_eventHandlerWillResetCapturingMouseEventsElement is incorrectly initialized
        https://bugs.webkit.org/show_bug.cgi?id=144583

        Reviewed by Daniel Bates.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): The
        m_eventHandlerWillResetCapturingMouseEventsElement is a boolean,
        so initialize it to false, instead of to nullptr.

2015-05-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] grid-template-areas should accept none value
        https://bugs.webkit.org/show_bug.cgi?id=144624

        Reviewed by Darin Adler.

        Default value for grid-template-areas property is "none":
        http://dev.w3.org/csswg/css-grid/#propdef-grid-template-areas

        Currently if you set the property to "none" from JavaScript, the value
        doesn't get reseted and it keeps the old value.

        Update fast/css-grid-layout/grid-template-areas-get-set.html adding a
        new test case.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTemplateAreas): Add support to parse
        "none" successfully.

2015-05-05  Zalan Bujtas  <zalan@apple.com>

        Remove unused RenderLayerBacking::hasContentsLayer().
        https://bugs.webkit.org/show_bug.cgi?id=144658

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderLayerBacking.h:

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Limit NFA size.
        https://bugs.webkit.org/show_bug.cgi?id=144649

        Reviewed by Benjamin Poulain.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        Add a maximum NFA size to ensure that we do not use too much memory when compiling.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Remove debugging code that doesn't compile any more.

2015-05-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Some assertion failures in compositing code after r183820.
        https://bugs.webkit.org/show_bug.cgi?id=144630.

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

2015-05-05  Timothy Horton  <timothy_horton@apple.com>

        Add a layout mode for computing fixed layout size from a minimum size
        https://bugs.webkit.org/show_bug.cgi?id=144610
        <rdar://problem/19790341>

        Reviewed by Simon Fraser.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add some SPI.

2015-05-05  Brent Fulgham  <bfulgham@apple.com>

        iOS] Scroll snap points trigger reentrant layout
        https://bugs.webkit.org/show_bug.cgi?id=144644
        <rdar://problem/20366547>

        Reviewed by Simon Fraser.

        Covered by scroll-snap-mandatory.html test.

        We had an iOS code path in 'appendChildSnapOffsets' that used offsetLeft and offsetTop. This code
        was sometimes called during layout, which triggered a reentrant layout call, resulting in a debug
        assertion.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Remove iOS codepath.

2015-05-05  Roger Fong  <roger_fong@apple.com>

        Blurry media control icons on non retina displays.
        https://bugs.webkit.org/show_bug.cgi?id=144638.
        <rdar://problem/20526166>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.css:
        Adjust fullscreen buttons so that they look good on both 1x and 2x displays.
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button.exit):
        (audio::-webkit-media-controls-fullscreen-button:active):
        (audio::-webkit-media-controls-panel button.exit:active):
        Handle wireless playback picker button background in mediaControlsApple.js
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button.playing): Deleted.

        * Modules/mediacontrols/mediaControlsApple.js:
        Update wireless playback picker button based on display type.
        (Controller.prototype.UIString):
        (Controller.prototype.handleReadyStateChange):
        (Controller.prototype.updateWirelessTargetPickerButton):
        (Controller.prototype.updateWirelessPlaybackStatus):

2015-05-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash under WebCore::domWindowFromExecState reloading page with inspector open
        https://bugs.webkit.org/show_bug.cgi?id=144636

        Reviewed by Mark Lam.

        This ensures we create an InjectedScript for the execution context
        (frame) preventing the global object / exec state from getting garbage
        collected before we remove it from our map.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::notifyContextCreated):

2015-05-05  Dean Jackson  <dino@apple.com>

        [iOS] AirPlay placeholder in inline videos uses Helvetica or Times, should be system font
        https://bugs.webkit.org/show_bug.cgi?id=144643

        Reviewed by Brent Fulgham.

        The Airplay placard should use "-apple-system" as a font-family.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status):

2015-05-05  Zalan Bujtas  <zalan@apple.com>

        Navigating to www.apple.com hits assertion in WebCore::TextIteratorCopyableText::set()
        https://bugs.webkit.org/show_bug.cgi?id=144629
        rdar://problem/20689877

        Reviewed by Andreas Kling.

        This patch ensures that we don't emit empty text for the text iterator.
        In TextIterator::handleTextNode before emitting a string, certain characters (\n \t) need to
        be replaced with space. When such character is found, we emit the string we've processed so far and
        handle the replacement during the next callback.
        When the first character in the string needs replacing, there's nothing to emit. However if we don't
        handle at least one character, TextIterator::advance believes that processing is done and never calls  
        TextIterator::handleTextNode back with the rest of the string. 

        Test: fast/text/simple-line-layout-innerText-with-newline.html

        * editing/TextIterator.cpp:
        (WebCore::isNewLineOrTabCharacter):
        (WebCore::TextIterator::handleTextNode):

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory to store the json input.
        https://bugs.webkit.org/show_bug.cgi?id=144604

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        (WebCore::ContentExtensions::loadEncodedRules):
        Don't copy strings as much or keep them alive after done using them.

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

        Prevent recursive calls to show target picker menu.
        https://bugs.webkit.org/show_bug.cgi?id=144637
        <rdar://problem/20824726>

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: Add m_showingMenu.
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Do nothing if the menu
        is already showing.

2015-05-05  Dean Jackson  <dino@apple.com>

        Use system blue for Airplay Glyph
        https://bugs.webkit.org/show_bug.cgi?id=144614

        There was a typo in the last commit.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-optimized-fullscreen-button): Transition duration should be 250ms.

2015-05-04  Dean Jackson  <dino@apple.com>

        [iOS] Use system blue for Airplay Glyph
        https://bugs.webkit.org/show_bug.cgi?id=144614

        Reviewed by Eric Carlson.

        Revert to using masks for the glyphs in the media controls,
        which allows us to:
        - use the system blue color when Airplay is active <rdar://problem/20245297>
        - fade out from the active state <rdar://problem/20245487>
        - allow the play button to give touch feedback <rdar://problem/17849930>

        While those are three separate bugs, they all get addressed by
        this single change.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-optimized-fullscreen-button):
        (audio::-webkit-media-controls-optimized-fullscreen-button:active):
        (video::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-play-button.paused):
        (video::-webkit-media-controls-fullscreen-button):
        (video::-webkit-media-controls-wireless-playback-picker-button):
        (video::-webkit-media-controls-wireless-playback-picker-button.playing):
        (video::-webkit-media-controls-optimized-fullscreen-button):
        (video::-webkit-media-controls-play-button:active): Deleted.
        (video::-webkit-media-controls-play-button.paused:active): Deleted.
        (video::-webkit-media-controls-fullscreen-button:active): Deleted.
        (video::-webkit-media-controls-wireless-playback-picker-button:active): Deleted.

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

        Only autoplay videos should not automatically play to playback target
        https://bugs.webkit.org/show_bug.cgi?id=144633

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Set RequireUserGestureToAutoplayToExternalDevice.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Remove
        RequireUserGestureToAutoplayToExternalDevice.
        (WebCore::HTMLMediaElement::mediaState): Set ExternalDeviceAutoPlayCandidate if playback
        was started from a user gesture, even if the video loops and/or doesn't have audio.

        * html/HTMLMediaSession.h: Define RequireUserGestureToAutoplayToExternalDevice.
        (WebCore::HTMLMediaSession::hasBehaviorRestriction): New.

2015-05-05  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed logging fix.

        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired): Fix typo in logging channel.

2015-05-04  Roger Fong  <roger_fong@apple.com>

        Media control volume slider is opaque.
        https://bugs.webkit.org/show_bug.cgi?id=144470.
        <rdar://problem/20770350>

        Rubberstamped by Simon Fraser.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel): 
        Don't create a stacking context just for the controls.
        Doing so causes the mix-blend-mode on the volume box to fail.

2015-05-05  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Combine NFAs properly and free memory as we compile.
        https://bugs.webkit.org/show_bug.cgi?id=144485

        Reviewed by Benjamin Poulain.

        This patch correctly combines all regular expressions with a common prefix up to
        the last quantified term into the same NFA.  It also deletes the prefix tree as it 
        creates NFAs, thus reducing the maximum memory used when compiling.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::isEmpty):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        (WebCore::ContentExtensions::CombinedURLFilters::clear): Deleted.
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionsDebugging.h:

2015-05-04  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory when writing byte code to file
        https://bugs.webkit.org/show_bug.cgi?id=144602

        Reviewed by Darin Adler.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        Compile one DFA at a time so we don't need to keep all the bytecode in memory at the same time.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Jumps are now relative to the current DFA because we don't know about other DFAs that
        have been compiling when linking the DFA bytecode.  This will also make the DFA bytecode
        easier to minimize because more of the values are small in the DFAs after the first DFA.
        * platform/FileSystem.h:

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

        Unreviewed, speculative WinCairo buildfix after r183807.

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

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

        Remove TextureMapperImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=143561

        Reviewed by Žan Doberšek.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWinCairo.cmake:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::paintToTextureMapper):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToTextureMapper):
        * platform/graphics/texmap/BitmapTextureImageBuffer.cpp: Removed.
        * platform/graphics/texmap/BitmapTextureImageBuffer.h: Removed.
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::createTexture):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setFilters):
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::create):
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::accelerationMode): Deleted.
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp: Removed.
        * platform/graphics/texmap/TextureMapperImageBuffer.h: Removed.
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::CompositingCoordinator):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::GraphicsLayer::supportsContentsTiling):
        (WebCore::CoordinatedGraphicsLayer::setShouldSupportContentsTiling): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2015-05-05  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Box Alignment] Upgrade align-content parsing to CSS3 Box Alignment spec
        https://bugs.webkit.org/show_bug.cgi?id=144443

        Reviewed by Darin Adler.

        Upgrade the align-content property to the last CSS3 Box
        Alignment specification. As it uses a different enumeration for
        Positional and Distribution alignment, it implies some changes in
        the FlexibleBox implementation.

        Test: css3/parse-align-content.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::resolveContentAlignmentAuto):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::initialAlignContentOffset):
        (WebCore::alignContentSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolveContentAlignment):
        (WebCore::RenderStyle::resolveContentJustification):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2015-05-05  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        streams/readable-stream.html is very flaky
        https://bugs.webkit.org/show_bug.cgi?id=144455

        Reviewed by Darin Adler.

        Changed the link between readadable stream and controller.
        Controller ref()/deref() now increments/decrements its stream ref counter.
        This ensures that even if JS scripts do not keep track of the readable stream,
        the readable stream will not be disposed as long as the JS script has access to its controller.

        Test: streams/readable-stream-gc.html

        * Modules/streams/ReadableStreamController.h:
        (WebCore::ReadableStreamController::ReadableStreamController):
        (WebCore::ReadableStreamController::ref):
        (WebCore::ReadableStreamController::deref):
        (WebCore::ReadableStreamController::create): Deleted.
        (WebCore::ReadableStreamController::stream): Deleted.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::close):
        (WebCore::JSReadableStreamController::enqueue):
        (WebCore::JSReadableStreamController::error):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::ReadableStreamJSSource::~ReadableStreamJSSource):
        (WebCore::ReadableStreamJSSource::start):
        (WebCore::ReadableJSStream::jsController):
        * bindings/js/ReadableStreamJSSource.h:

2015-05-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Small cleanup in RenderText::computePreferredLogicalWidths()
        https://bugs.webkit.org/show_bug.cgi?id=144615

        Reviewed by Simon Fraser.

        A little bit of cleanup before I tackle dependent widths in this function.

        No new tests because there is no behavior change.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):

2015-05-05  Joanmarie Diggs  <jdiggs@igalia.com>

        [ATK] AX: figure out platform difference for ATK to make accessibility/table-cell-display-block.html work
        https://bugs.webkit.org/show_bug.cgi?id=143083

        Reviewed by Chris Fleizach.

        The main platform difference was that ATK was mapping the td element to
        the accessible table cell, and the render block resulting from the style
        wound up being the cell parent. In contrast, AX API was mapping the cell
        element to an AXGroup which was a child of the AXCell. Rather than try to
        bend yet another case to the will of our individual platforms' table needs,
        it made more sense to clean up the code that is competing and move toward
        more platform-unified handling. This is the first step in that direction,
        with ATK moving closer toward the WebCore/AX API mapping.

        No new tests. Instead, modified and fixed the test which was being skipped
        for GTK, and also updated the expectations of some Mac tests whose FIXMEs
        should now be fixed.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::computeIsTableExposableThroughAccessibility):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2015-05-04  Jer Noble  <jer.noble@apple.com>

        [iOS] Videos on apple.com flash when touching to show or hide the controls
        https://bugs.webkit.org/show_bug.cgi?id=144598

        Reviewed by Eric Carlson.

        The apple.com site will add a "selection" rectangle atop a playing video when it recieves a touchstart
        event. The default media controls use touchstart to signal the controls to become visible. Stop the touch
        from propagating down to the page in this case.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleWrapperTouchStart):

2015-05-04  Andreas Kling  <akling@apple.com>

        Record the reference time when Performance is constructed.
        <https://webkit.org/b/144616>

        Reviewed by Geoffrey Garen.

        This is a merge of Blink's r156613 by simonjam@chromium.org.

        Cache a copy of the DocumentLoader's reference timestamp when constructing
        the Performance object. That way we don't have to jump through a bunch of scary
        hoops to access it when now() is called later on.

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

2015-05-04  Simon Fraser  <simon.fraser@apple.com>

        Fix assertions in WK1 tests after r183777.
        
        Two issues with the original change:
        
        If not in compositing mode, we shouldn't schedule layer flushes, since
        Document::documentWillSuspendForPageCache() only only calls cancelCompositingLayerUpdate()
        if in compositing mode.
        
        Second, RenderLayerCompositor::rootBackgroundTransparencyChanged() never stored the
        new color, resulting in too many triggered compositing updates.

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

2015-05-04  Zalan Bujtas  <zalan@apple.com>

        RenderWidget::setWidgetGeometry() can end up destroying *this*.
        https://bugs.webkit.org/show_bug.cgi?id=144601

        Reviewed by Andreas Kling.

        This is a speculative fix to ensure we don't crash on an invalid *this* renderer
        while flattening the current iframe.
        Calling RenderWidget::setWidgetGeometry() can result in destroying the current renderer.
        While it is not a issue in case of normal layout flow as widget positions are updated at post layout,
        frame flattening initiates this action in the middle of layout.
        This patch re-introduces refcount model for RenderWidgets so that the renderer is protected during layout
        when frame flattening is in use.

        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening): Let's be paranoid about child view.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::~RenderWidget):
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::ref):
        (WebCore::RenderWidget::deref):

2015-05-04  Doug Russell  <d_russell@apple.com>

        AX: setting focus via accessibility object needs to set isSynchronizing in resulting selection intent
        https://bugs.webkit.org/show_bug.cgi?id=144489

        Reviewed by Chris Fleizach.

        Resolves infinite looping when navigating rapidly between controls with the search API and then focusing
        on the returned control.
        Remove isSynchronizing flag from AXTextStateChangeIntent and put it on AXObjectCache.
        Move AXTextStateChangeIntent logic in AccessibilityRenderObject into a helper method.
        Call new AXTextStateChangeIntent helper from AccessibilityRenderObject::setFocus().
        Add support for setSelectedVisibleTextRange() in accessibility tests.

        Test: platform/mac/accessibility/selection-sync.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::showIntent):
        (WebCore::AXObjectCache::setTextSelectionIntent):
        (WebCore::AXObjectCache::setIsSynchronizingSelection):
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        * accessibility/AXObjectCache.h:
        * accessibility/AXTextStateChangeIntent.h:
        (WebCore::AXTextStateChangeIntent::AXTextStateChangeIntent):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::setTextSelectionIntent):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::setFocused):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange): Deleted.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):

2015-05-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Audio-only files should not have a device picker
        https://bugs.webkit.org/show_bug.cgi?id=144606
        <rdar://problem/20806387>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.hasVideo): New.
        (Controller.prototype.updateFullscreenButtons): Use hasVideo.
        (Controller.prototype.updateHasVideo): Ditto.
        (Controller.prototype.updateWirelessTargetAvailable): Don't show the target picker button
        unless a file has video.

2015-05-04  Chris Dumez  <cdumez@apple.com>

        Crash at com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::createWindow + 185
        https://bugs.webkit.org/show_bug.cgi?id=144597
        <rdar://problem/20361579>

        Reviewed by Andreas Kling.

        Test: fast/dom/Window/window-open-activeWindow-null-frame.html

        In our implementation of window.open(), we make sure that the window
        which window.open() is called has a frame. However, we did not have the
        same check for the activeDOMWindow (i.e. the lexicalGlobalObject) causing
        us to crash in WebCore::createWindow() when dereferencing it.

        This patch updates WebCore::createWindow() takes a reference to the
        openerFrame instead of a pointer to make it clear the implementation
        expects it to be non-null. A null check is then added for the frame
        at the call site: DOMWindow::createWindow().

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * loader/FrameLoader.cpp:
        (WebCore::isDocumentSandboxed):
        (WebCore::FrameLoader::submitForm):
        (WebCore::createWindow):
        Take a reference to openerFrame instead of a pointer as the
        implementation expects it to be non-null.

        * loader/FrameLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        Add null check for activeFrame before passing it to
        WebCore::createWindow().

2015-05-04  Dean Jackson  <dino@apple.com>

        Create a named CSS property for system colors
        https://bugs.webkit.org/show_bug.cgi?id=144423

        Follow-up comments from Darin Adler.

        * rendering/RenderThemeIOS.h: Cache a Color rather than an RGBA32.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor): Use "add" to avoid multiple hits on the HashMap, and
        cache invalid responses so that we don't have to keep looking for non-existent colors.
        * rendering/RenderThemeMac.h: Same as iOS.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor):

2015-05-04  Simon Fraser  <simon.fraser@apple.com>

        display:none iframes cause repeated compositing flushing
        https://bugs.webkit.org/show_bug.cgi?id=144529

        Reviewed by Darin Adler.
        
        FrameView::updateLayoutAndStyleIfNeededRecursive() only forces layout on rendered
        frames, by virtue of using its Widget children which are FrameViews.
        
        However, FrameView::flushCompositingStateIncludingSubframes() iterated over
        all frames, and return false if any subframe needed layout. Thus, if it saw
        non-rendered frames (which are never laid out), it would return false,
        which causes the CFRunLoopObserver that drives flushing to run again.
        
        Fix by having FrameView::flushCompositingStateIncludingSubframes() only check
        rendered frames, using FrameTree::traverseNextRendered() (which needs to be public).
        
        Also change FrameView::needsStyleRecalcOrLayout() and FrameView::updateLayoutAndStyleIfNeededRecursive()
        to fetch the list of FrameViews using FrameTree's nextRenderedSibling(), rather than using
        the Widget tree, since we'd like to eventually remove Widgets, and using the Frame
        tree matches flushCompositingStateIncludingSubframes() and other code.

        Test: compositing/iframes/display-none-subframe.html

        * page/FrameTree.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::needsStyleRecalcOrLayout):
        (WebCore::FrameView::renderedChildFrameViews): Helper that returns a vector
        of Ref<FrameView>s for rendered frames only.
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:

2015-05-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed. Fix build with SECURITY_ASSERTIONS enabled.
        <rdar://problem/20653104>

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForPageCache):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * dom/ScriptExecutionContext.h:

2015-05-04  Simon Fraser  <simon.fraser@apple.com>

        Fix updating of tiled backing opaquenss when the page background color changes
        https://bugs.webkit.org/show_bug.cgi?id=144600
        rdar://problem/20723035

        Reviewed by Tim Horton.

        RenderLayerCompositor makes the page tiles opaque or not based on the result of
        viewHasTransparentBackground(), which consults the view transparency, and
        FrameView::documentBackgroundColor(). documentBackgroundColor() in turn is based
        on the root and/or body background colors.

        We thus need to re-evaluate whether page tiles are opaque when any of these inputs
        change, but were failing to do so for the FrameView's baseBackgroundColor, and
        the page root background color.
        
        Fix by having FrameView::setBaseBackgroundColor(), and RenderBox::styleDidChange()
        (for the root) trigger a compositing update when necessary.

        Added setViewBaseBackgroundColor() on Internals for testing.

        Test: platform/mac-wk2/tiled-drawing/background-transparency-toggle.html

        * page/FrameView.cpp:
        (WebCore::FrameView::setTransparent): Use the isViewForDocumentInFrame() helper.
        (WebCore::FrameView::setBaseBackgroundColor): Bail if we're not the view for the 
        frame's document, and trigger a compositing update check if the alpha changed.
        (WebCore::FrameView::isViewForDocumentInFrame): Helper that checks to see if
        this FrameView is associated with the Document being displayed in the FrameView's
        Frame. This returns false when we're setting up a new FrameView (its Frame still
        points to the old document, so renderView() returns the RenderView for the Frame's
        existing Document).
        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): Have the compositor check to see if it needs
        to do an update.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged): If the result
        of documentBackgroundColor() changed in alpha since the last time, trigger a compositing
        update.
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setViewBaseBackgroundColor):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-04  Jer Noble  <jer.noble@apple.com>

        [iOS] Crash in -[WebCALayerHostWrapper resolveBounds]
        https://bugs.webkit.org/show_bug.cgi?id=144595

        Reviewed by Eric Carlson.

        It is possible for a WebCALayorHostWrapper to outlive the WebVideoFullscreenModel to which it refers,
        since the model pointer is bare, rather than a RefPtr. The reference to the model must be invalidated
        before the model is destroyed.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal):

2015-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Toggling underline or strike through affects each other
        https://bugs.webkit.org/show_bug.cgi?id=27818

        Reviewed by Darin Adler.

        This patch introduces a new mechanism to apply and remove text decorations. This is necessary because text
        decorations are always additive and we can't differentiate whether we're adding or removing a text decoration.
        Conceptually, we need four values for text decorations: adding underline, removing underline, adding
        line-through, and removing line-through but we have only three: underline, line-through, none.

        After this patch, there are three mechanism by which text decorations states are kept tracked. While applying
        or removing text decorations, we use newly added m_underlineChange and m_strikeThroughChange in EditingStyle.
        For the typing style, we use -webkit-text-decorations-in-effect to store the state since we need to preserve
        every type of text decorations such as overline in addition to underline and line-through. Once applied, all
        text decorations should be expressed in terms of the standard text-decoration property.

        Test: editing/execCommand/toggle-mixed-text-decorations.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::removeCSSStyle): conflictsWithInlineStyleOfElement now creates a new inline style
        instead of a list of properties to remove.
        (WebCore::ApplyStyleCommand::addBlockStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange): Merge inline styles instead of adding as string.
        Otherwise it would generate style content attribute with multiple text-decoration properties.

        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::matches):
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle): Takes an EditingStyle instead of StyleProperties.
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle):
        (WebCore::HTMLTextDecorationEquivalent::HTMLTextDecorationEquivalent): 
        (WebCore::HTMLTextDecorationEquivalent::propertyExistsInStyle): Respect newly added m_strikeThroughChange and
        m_underlineChange in EditingStyle.
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::changeInStyle): Added. Retrieves the change enum for the associated
        type of text-decoration (underline or strike through).
        (WebCore::HTMLAttributeEquivalent::matches):
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle):
        (WebCore::EditingStyle::EditingStyle): Initialize m_underlineChange and m_strikeThroughChange. Also use the
        delegating constructor elsewhere. Also added the missing call to extractFontSizeDelta() in the variant that
        takes CSSPropertyID and String, and added a variant that takes CSSPropertyID and CSSValueID.
        (WebCore::EditingStyle::isEmpty): Return false when m_underlineChange and m_strikeThroughChange are not "none".
        (WebCore::applyTextDecorationChangeToValueList): Added.
        (WebCore::EditingStyle::overrideTypingStyleAt): Added. Used by Editor::computeAndSetTypingStyle to set a new
        typing style. Resolve m_underlineChange and m_strikeThroughChange into -webkit-text-decorations-in-effect.
        (WebCore::EditingStyle::clear): Clear m_underlineChange and m_strikeThroughChange.
        (WebCore::EditingStyle::copy): Copy m_underlineChange and m_strikeThroughChange.
        (WebCore::textDecorationValueList): Added.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Now takes a pointer to MutableStyleProperties
        instead of a vector. This was necessary we can't simply remove text-decoration property in ApplyStyleCommand's
        removeCSSStyle as that would result in unrelated text decorations also getting removed. Also added the code
        for m_underlineChange and m_strikeThroughChange. Only removing text decoration changes can cause a conflict
        since text decorations are always additive.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Check isEmpty() instead of the nullity of
        m_mutableStyle to respect m_underlineChange and m_strikeThroughChange.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode): Respect the values of m_underlineChange and
        m_strikeThroughChange. Here, the style is considered present if it has text decorations that are being added.
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::elementMatchesAndPropertyIsNotInInlineStyleDecl): Takes EditingStyle instead of StyleProperties to
        respect m_underlineChange and m_strikeThroughChange.
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::mergeTextDecorationValues):
        (WebCore::EditingStyle::mergeStyle): Make a copy of CSSValueList before modifying it since CSSValueList's are
        shared with other immutable StyleProperties.
        (WebCore::StyleChange::StyleChange): Set m_applyUnderline, m_applyLineThrough, and m_cssStyle if either
        m_underlineChange or m_strikeThroughChange are TextDecorationChange::Add in EditingStyle if the current position
        doesn't already have the matching style.
        (WebCore::StyleChange::operator==): Moved from the header file. Also added the logic to compare m_cssStyle now
        that it's a StyleProperties instead of String.

        * editing/EditingStyle.h: Added TextDecorationChange.
        (WebCore::EditingStyle::create): Added a variant that takes CSSPropertyID and CSSValueID.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement):
        (WebCore::EditingStyle::setUnderlineChange): Added.
        (WebCore::EditingStyle::underlineChange): Added.
        (WebCore::EditingStyle::setStrikeThroughChange): Added.
        (WebCore::EditingStyle::strikeThroughChange): Added.
        (WebCore::StyleChange::cssStyle): Now returns StyleProperties* instead of String so that ApplyStyleCommand's
        applyInlineStyleChange could merge inline styles instead of just appending it to the end.
        (WebCore::StyleChange::operator==): Moved into the cpp file.

        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle): Added. This variant takes EditingStyle instead of StyleProperties.
        (WebCore::Editor::applyStyleToSelection): Ditto.
        (WebCore::Editor::computeAndSetTypingStyle): Added a variant for EditingStyle. Also use overrideTypingStyleAt
        to set -webkit-text-decorations-in-effect based on m_underlineChange and m_strikeThroughChange 

        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::isStylePresent): Extracted from executeToggleStyle.
        (WebCore::executeApplyStyle):
        (WebCore::executeToggleStyle):
        (WebCore::executeToggleStyleInList): Deleted.
        (WebCore::textDecorationChangeForToggling): Added. Used in executeStrikethrough and executeUnderline.
        (WebCore::executeStrikethrough):
        (WebCore::executeUnderline):

2015-05-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Fix build breakage caused by API deprecation
        https://bugs.webkit.org/show_bug.cgi?id=144593

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Suppress warnings.

2015-05-04  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r178156): CSS Parser incorrectly rejects valid calc() in padding-right property
        https://bugs.webkit.org/show_bug.cgi?id=144584
        <rdar://problem/20796829>

        Reviewed by Darin Adler.

        The CSS parser was rejecting calculated values at parsing time if it
        considered the value was negative and the CSS property did not allow
        negative values. However, doing so at this point will not always work
        because we don't necessarily know the font-size yet (for e.g. for
        calc(0.5em - 2px). Also, rejecting negative calculated values is not
        the right behavior as the the specification. The specification says
        we should clamp:
        http://dev.w3.org/csswg/css-values-3/#calc-range

        This patch updates validateCalculationUnit() to stop marking the value
        as invalid if it is negative. Instead, let the CSSCalcValue's permitted
        range clamp the value as needed.

        This bug was causing the bottom graphic on aldentrio.com to not be
        rendered properly.

        Test: fast/css/negative-calc-values.html
              fast/css/padding-calc-value.html

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

2015-05-04  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Show wireless playback placard even when an element has custom controls
        https://bugs.webkit.org/show_bug.cgi?id=144548

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.shouldHaveAnyUI): Return true when playing to wireless target.
        (Controller.prototype.reconnectControls): Add controls when playing to wireless target.
        (Controller.prototype.setPlaying): Return early when there is no 'controls' attribute.
        (Controller.prototype.showControls): Ditto.
        (Controller.prototype.updateWirelessPlaybackStatus): Call updateBase when playing to wireless
        target to ensure that controls have been set up.
        (Controller.prototype.handleWirelessPlaybackChange): Call reconnectControls when playing
        to wireless target when there is no 'controls' attribute.
        (Controller.prototype.showInlinePlaybackPlaceholderOnly): New.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Call configureMediaControls.
        (WebCore::HTMLMediaElement::configureMediaControls): Require controls when playing
        to wireless target.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Remove some unhelpful, noisy, logging.

2015-05-04  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Moved off of a deprecated
        method to a non-deprecated equivalent.

2015-05-04  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Box Alignment] Upgrade justify-content parsing to CSS3 Box Alignment spec.
        https://bugs.webkit.org/show_bug.cgi?id=144442

        Reviewed by David Hyatt.

        Upgrade the justify-content property to the last CSS3 Box
        Alignment specification. It defines a different enumeration for
        Positional and Distribution alignment, which requires changes in
        the FlexibleBox implementation.

        A new parsing function has been implemented to replace the basic
        keyword IDs validation. Because of the complexity of the new
        values, a new CSSPrimitiveValue derived class has been defined
        which simplifies considerably the parsing logic.

        We will follow the same approach than for Self Alignment, defining
        a single class to hold all the related alignment data. This makes
        possible to use a StyleBuilderConverter function instead of custom
        builder functions for these properties.

        Test: css3/parse-justify-content.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::resolveContentAlignmentAuto):
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::valueForItemPositionWithOverflowAlignment): Deleted.
        * css/CSSContentDistributionValue.cpp: Added.
        (WebCore::CSSContentDistributionValue::CSSContentDistributionValue):
        (WebCore::CSSContentDistributionValue::~CSSContentDistributionValue):
        (WebCore::CSSContentDistributionValue::customCSSText):
        (WebCore::CSSContentDistributionValue::equals):
        * css/CSSContentDistributionValue.h: Added.
        (WebCore::CSSContentDistributionValue::create):
        (WebCore::CSSContentDistributionValue::distribution):
        (WebCore::CSSContentDistributionValue::position):
        (WebCore::CSSContentDistributionValue::overflow):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::isContentDistributionKeyword):
        (WebCore::isContentPositionKeyword):
        (WebCore::isAlignmentOverflowKeyword):
        (WebCore::CSSParser::parseContentDistributionOverflowPosition):
        (WebCore::CSSParser::parseItemPositionOverflowPosition):
        (WebCore::CSSParser::parseLegacyPosition): Deleted.
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ContentPosition):
        (WebCore::CSSPrimitiveValue::operator ContentDistributionType):
        (WebCore::CSSPrimitiveValue::operator EFlexDirection): Deleted.
        * css/CSSPropertyNames.in:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isContentDistributionValue):
        (WebCore::CSSValue::isWebKitCSSFilterValue): Deleted.
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertContentAlignmentData):
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData): Deleted.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialJustifyContentOffset):
        (WebCore::justifyContentSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair):
        (WebCore::RenderMathMLScripts::fixAnonymousStyles):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleContentAlignmentData.h: Added.
        (WebCore::StyleContentAlignmentData::StyleContentAlignmentData):
        (WebCore::StyleContentAlignmentData::setPosition):
        (WebCore::StyleContentAlignmentData::setDistribution):
        (WebCore::StyleContentAlignmentData::setOverflow):
        (WebCore::StyleContentAlignmentData::position):
        (WebCore::StyleContentAlignmentData::distribution):
        (WebCore::StyleContentAlignmentData::overflow):
        (WebCore::StyleContentAlignmentData::operator==):
        (WebCore::StyleContentAlignmentData::operator!=):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2015-05-04  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Compile error in sharedEGLDisplay() method.
        https://bugs.webkit.org/show_bug.cgi?id=144563

        Reviewed by Alex Christensen.

        The PlatformDisplay type is undefined.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::sharedEGLDisplay):

2015-05-04  Zan Dobersek  <zdobersek@igalia.com>

        [WTF] Remove Functional.h inclusions
        https://bugs.webkit.org/show_bug.cgi?id=144400

        Reviewed by Darin Adler.

        Remove unnecessary inclusions of the <wtf/Functional.h> header in WebCore.

        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * platform/MemoryPressureHandler.cpp:
        * platform/UserActivity.h: Include the <objc/objc.h> header that was previously
        indirectly included through Functional.h.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        * platform/mac/SoftLinking.h: Unconditionally include the <objc/runtime.h> header
        that was previously included for the Mac port through Functional.h.

2015-05-04  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Refactor ReadableJSStream and ReadableStreamJSSource
        https://bugs.webkit.org/show_bug.cgi?id=144387

        Reviewed by Darin Adler.

        Made ReadableStreamReader a private class of ReadableJSStream.
        Simplified ReadableJSStream construction so that binding constructor does not need to know about ReadableStreamJSSource. 

        No functional change, existing tests cover the changes.

        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::source): Added to implement jsSource(), needed by ReadableJSStream.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::constructJSReadableStream): Simplified to not have to handle source creation.
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::ReadableStreamJSSource::globalObject): Helper function to be used in other future methods.
        (WebCore::ReadableStreamJSSource::start):
        (WebCore::ReadableJSStream::create):
        (WebCore::ReadableJSStream::createReader):
        (WebCore::ReadableJSStream::jsSource):
        (WebCore::ReadableJSStream::Reader::create):
        (WebCore::ReadableJSStream::Reader::Reader):
        * bindings/js/ReadableStreamJSSource.h:

2015-05-04  Csaba Osztrogonác  <ossy@webkit.org>

        Remove move-js-headers.sh
        https://bugs.webkit.org/show_bug.cgi?id=144323

        Reviewed by Daniel Bates.

        move-js-headers.sh was only used by the Wx port, which has been removed from trunk long ago.

        * move-js-headers.sh: Removed.

2015-05-04  Csaba Osztrogonác  <ossy@webkit.org>

        [ARM] Don't compare unsigned chars to EOF (-1)
        https://bugs.webkit.org/show_bug.cgi?id=144439

        Reviewed by Geoffrey Garen.

        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebKit::nextToken): Don't cast return value of fgetc() to char.

2015-05-04  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Wrong computed style for named grid lines in implicit tracks
        https://bugs.webkit.org/show_bug.cgi?id=144449

        Reviewed by Sergio Villar Senin.

        If there're implicit tracks then trackPositions is bigger than
        trackSizes, so we need to use the proper index to append the trailing
        <ident>s in valueForGridTrackList().

        Test: fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):

2015-05-03  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr in WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=144543

        Reviewed by Andreas Kling.

        Change PassRefPtr in create() factory functions with Ref. In some functions,
        it returns RefPtr when it might have a chance to return nullptr.

        No new tests, no behavior changes.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::sendError):
        * html/DOMFormData.h:
        (WebCore::DOMFormData::create):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        * html/HTMLMediaElement.h:
        * html/MediaError.h:
        (WebCore::MediaError::create):
        * html/MediaKeyError.h:
        (WebCore::MediaKeyError::create):
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasProxy.cpp:
        (WebCore::CanvasProxy::create):
        * html/canvas/CanvasProxy.h:
        * html/canvas/WebGLActiveInfo.h:
        (WebCore::WebGLActiveInfo::create):
        * html/canvas/WebGLContextAttributes.h:
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLSampler.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLShaderPrecisionFormat.h:
        * html/canvas/WebGLSync.h:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLUniformLocation.h:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/shadow/ImageControlsRootElement.cpp:
        (WebCore::ImageControlsRootElement::maybeCreate):
        * html/shadow/ImageControlsRootElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::create):
        (WebCore::MediaControlPanelEnclosureElement::create):
        (WebCore::MediaControlOverlayEnclosureElement::create):
        (WebCore::MediaControlTimelineContainerElement::create):
        (WebCore::MediaControlVolumeSliderContainerElement::create):
        (WebCore::MediaControlStatusDisplayElement::create):
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlOverlayPlayButtonElement::create):
        (WebCore::MediaControlSeekForwardButtonElement::create):
        (WebCore::MediaControlSeekBackButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlClosedCaptionsContainerElement::create):
        (WebCore::MediaControlClosedCaptionsTrackListElement::create):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlPanelVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create):
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create):
        (WebCore::MediaControlTimeRemainingDisplayElement::create):
        (WebCore::MediaControlCurrentTimeDisplayElement::create):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControlsApple.h:
        (WebCore::MediaControlsAppleEventListener::create):
        * html/shadow/MeterShadowElement.h:
        (WebCore::MeterInnerElement::create):
        (WebCore::MeterBarElement::create):
        (WebCore::MeterValueElement::create):
        * html/shadow/ProgressShadowElement.h:
        (WebCore::ProgressInnerElement::create):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::create):
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElement::maybeCreate):
        * html/track/TextTrackCueList.h:
        (WebCore::TextTrackCueList::create):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::create):
        * html/track/VTTCue.h:
        (WebCore::VTTCue::create):
        * html/track/VTTRegion.h:
        * html/track/VideoTrack.h:
        * html/track/VideoTrackList.h:
        * html/track/WebVTTElement.cpp:
        (WebCore::WebVTTElement::create):
        * html/track/WebVTTElement.h:
        * html/track/WebVTTParser.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCreateResourceLoader):

2015-05-03  Simon Fraser  <simon.fraser@apple.com>

        Make some static data const
        https://bugs.webkit.org/show_bug.cgi?id=144552

        Reviewed by Andreas Kling.

        Turn baseTable and shiftTable into const data.

        * platform/graphics/FormatConverter.cpp:

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

        Assertion failure (!needsLayout()) loading inkedmag.com
        https://bugs.webkit.org/show_bug.cgi?id=144528
        rdar://problem/20788681

        Reviewed by Darin Adler.
        
        When animated GIFs get into catch-up mode, which is common on inkedmag.com,
        BitmapImage::advanceAnimation() can synchronously call it's observer's
        animationAdvanced(). This could cause RenderImage::repaintOrMarkForLayout()
        to repaint or mark itself as needing layout in the middle of painting.
        If painting multiple tiles, this could occur when painting the first tile,
        and then painting the second tile would assert in RenderView::paint().
        
        It's always wrong to synchronously call the observer when advancing
        the animation, since this happens when painting, and you can't repaint
        when painting. The long comment and call to startAnimation(DoNotCatchUp)
        was required to explain and work around this, but it's simpler to just
        advance the animation on a zero-delay timer.
        
        Special handling is required for the case where internalAdvanceAnimation()
        is catching up, and reaches the end of a non-repeating image; there, we
        have to set a flag and do the notify on a zero-delay timer.
        
        Lots of comment cleanup.

        Test: fast/images/set-needs-layout-in-painting.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::startTimer): Utility to create and start the timer.
        (WebCore::BitmapImage::repetitionCount):
        (WebCore::BitmapImage::startAnimation): Early return in the DoNotCatchUp clause.
        If skipping, and internalAdvanceAnimation() returns false (meaning it must have
        reached the end), then queue up a notify. Change the normal behavior to just
        start the timer.
        (WebCore::BitmapImage::stopAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation): Notify if the flag is set.
        * platform/graphics/BitmapImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint): Add a SetLayoutNeededForbiddenScope to
        detect setNeedsLayouts when painting replaced elements, including images.

2015-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL] Unify platform display handling
        https://bugs.webkit.org/show_bug.cgi?id=144517

        Reviewed by Martin Robinson.

        There are several places were we are handling the X display
        connection:

        - GLContext::sharedX11Display() creates a new connection.
        - X11Helper::nativeDisplay() creates a new connection.
        - BackingStoreBackendCairoX11 uses the GTK+ shared connection.
        - NetscapePlugin::x11HostDisplay() uses the GTK+/ecore shared connection
        - The rest of the GTK+ code uses the shared GTK+ connection

        And then we also have WaylandDisplay and the code to check if the
        current display is wayland or X11.
        We could unify all these to share the same connection to reduce
        the amount of ifdefs and ensure a single connection. That will
        also allow us to use "smart pointers" for the X resources that
        need a Display* to be freed.

        * PlatformEfl.cmake: Add new files to compilation.
        * PlatformGTK.cmake: Move some files to WebCore_SOURCES sinc ethey
        don't use GTK+ anymore, and add new files to compilation.
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::cleanupActiveContextsAtExit): Remove the
        custom X11 connection.
        (WebCore::GLContext::createContextForWindow): Check if the shared
        display is Wayland to create a EGL context in such case.
        * platform/graphics/PlatformDisplay.cpp: Added.
        (WebCore::PlatformDisplay::createPlatformDisplay): Creates the
        shared display, using the GTK+/ecore shared connection.
        (WebCore::PlatformDisplay::sharedDisplay): Return the shared display.
        * platform/graphics/PlatformDisplay.h: Added.
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::sharedEGLDisplay): Use PlatformDisplay::sharedDisplay()
        to get the native display.
        (WebCore::GLContextEGL::createPixmapContext): Ditto.
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::createWindowContext): Ditto.
        (WebCore::GLContextGLX::createPbufferContext): Ditto.
        (WebCore::GLContextGLX::createPixmapContext): Ditto.
        (WebCore::GLContextGLX::createContext): Ditto.
        (WebCore::GLContextGLX::~GLContextGLX): Ditto.
        (WebCore::GLContextGLX::defaultFrameBufferSize): Ditto.
        (WebCore::GLContextGLX::makeContextCurrent): Ditto.
        (WebCore::GLContextGLX::swapBuffers): Ditto.
        (WebCore::GLContextGLX::cairoDevice): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext): Ditto.
        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::nativeDisplay): Ditto.
        * platform/graphics/wayland/PlatformDisplayWayland.cpp: Renamed from Source/WebCore/platform/graphics/wayland/WaylandDisplay.cpp.
        (WebCore::PlatformDisplayWayland::globalCallback):
        (WebCore::PlatformDisplayWayland::globalRemoveCallback):
        (WebCore::PlatformDisplayWayland::create): Renamed instance() as
        create() since the single instance is now handled by PlatformDisplay.
        (WebCore::PlatformDisplayWayland::PlatformDisplayWayland):
        (WebCore::PlatformDisplayWayland::createSurface):
        (WebCore::PlatformDisplayWayland::createSharingGLContext):
        * platform/graphics/wayland/PlatformDisplayWayland.h: Renamed from Source/WebCore/platform/graphics/wayland/WaylandDisplay.h.
        * platform/graphics/x11/PlatformDisplayX11.cpp: Added.
        (WebCore::PlatformDisplayX11::PlatformDisplayX11):
        (WebCore::PlatformDisplayX11::~PlatformDisplayX11):
        * platform/graphics/x11/PlatformDisplayX11.h: Added.
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::getDisplaySystemType): Deleted.
        * platform/gtk/GtkUtilities.h:

2015-05-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] API tests crashing on debug builds due to extra unref
        https://bugs.webkit.org/show_bug.cgi?id=144508

        Reviewed by Mario Sanchez Prada.

        The problem is that we were assuming that when a new DOMWindow is
        created, the DOM object cache was notified about the previous
        DOMWindow being destroyed before objects for the new DOMWindow are
        added to the cache. However, that's not always the case and we
        only create a DOMWindowObserver for the first DOMWindow. We need
        to keep a pointer to the DOMWindow being observed to clear() the
        cache and create a new DOMWindowObserver when it changes in the
        Frame.

        Fixes crashes in several unit tests in debug builds.

        * bindings/gobject/DOMObjectCache.cpp:

2015-05-03  Alexey Proskuryakov  <ap@apple.com>

        Remove timer alignment logging that I added earler today.

        * page/Settings.cpp: (WebCore::Settings::setDOMTimerAlignmentInterval):

2015-05-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Purge PassRefPtr create() factory functions in html 
        https://bugs.webkit.org/show_bug.cgi?id=144522

        Reviewed by Darin Adler.

        Return Ref instead of PassRefPtr in create() factory functions in html, because the factory
        can't return null. This patch is a first step to purge in html. Following patch is going to
        be uploaded.

        No new tests, no behavior changes.

        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::create):
        (WebCore::UploadButtonElement::createForMultiple):
        * html/MediaController.cpp:
        (MediaController::create):
        * html/MediaController.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::create):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLContextAttributes.cpp:
        (WebCore::WebGLContextAttributes::create):
        * html/canvas/WebGLContextAttributes.h:
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::create):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::create):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::create):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLQuery.cpp:
        (WebCore::WebGLQuery::create):
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::create):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLSampler.cpp:
        (WebCore::WebGLSampler::create):
        * html/canvas/WebGLSampler.h:
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLShaderPrecisionFormat.cpp:
        (WebCore::WebGLShaderPrecisionFormat::create):
        * html/canvas/WebGLShaderPrecisionFormat.h:
        * html/canvas/WebGLSync.cpp:
        (WebCore::WebGLSync::create):
        * html/canvas/WebGLSync.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::create):
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLTransformFeedback.cpp:
        (WebCore::WebGLTransformFeedback::create):
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLUniformLocation.cpp:
        (WebCore::WebGLUniformLocation::create):
        * html/canvas/WebGLUniformLocation.h:
        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::create):
        * html/canvas/WebGLVertexArrayObject.h:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::create):
        * html/canvas/WebGLVertexArrayObjectOES.h:

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

        Style recalc always causes detach from shared StyleRareNonInheritedData.
        <https://webkit.org/b/144530>

        Reviewed by Darin Adler.

        StyleResolver::adjustStyleForMaskImages() was always calling RenderStyle::ensureMaskLayers()
        when we were in style recalc. This caused the RenderStyle to COW off from the previously
        shared StyleRareNonInheritedData even if nothing actually changes.

        This patch adds an early return to adjustStyleForMaskImages() when the previous style had
        no mask images. Further refinements could be made, but this covers the most common case where
        we don't have any mask images at all.

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

2015-05-02  Alexey Proskuryakov  <ap@apple.com>

        fast/frames/flattening/iframe-flattening-resize-event-count.html times out on Yosemite WK2
        https://bugs.webkit.org/show_bug.cgi?id=144155

        Unreviewed, will roll out soon.

        Added some temporary logging to better see if alignment is indeed the culprit.

        * page/Settings.cpp: (WebCore::Settings::setDOMTimerAlignmentInterval):

2015-05-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use Ref instead of PassRefPtr in WebCore/svg 
        https://bugs.webkit.org/show_bug.cgi?id=144479

        Reviewed by Darin Adler.

        Remove remained PassRefPtr in svg.

        No new tests, no behavior changes.

        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue):
        * svg/SVGFontFaceSrcElement.h:
        * svg/properties/SVGPropertyInfo.h:

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

        Small cleanup in BitmapImage
        https://bugs.webkit.org/show_bug.cgi?id=144515

        Reviewed by Darin Adler.

        Use an enum for the internalAdvanceAnimation() argument, with a default.
        
        Wrap the clearing of the timer in a clearTimer() function, called from
        stopAnimation(). This fixes the jarring reading of BitmapImage::internalAdvanceAnimation(),
        which used to start by calling stopAnimation().

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::clearTimer):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::stopAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:

2015-05-01  Simon Fraser  <simon.fraser@apple.com>

        Avoid compositing updates after style recalcs which have no compositing implications
        https://bugs.webkit.org/show_bug.cgi?id=144502

        Reviewed by Darin Adler.
        
        After r183461, we have reliable information about whether a style change with zero
        diff can be reliably ignored. Use that information to track whether a given
        recalcStyle() does anything which should force a compositing update.
        
        This eliminates up to 40% of the post-recalcStyle compositing updates on some pages.
        
        Add Internals API to test.

        Test: compositing/updates/no-style-change-updates.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Tell the FrameView we're going to recalc style.
        * page/FrameView.cpp:
        (WebCore::FrameView::willRecalcStyle): Pass it on to the compositor.
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange): Move the code
        that was here into RenderLayerCompositor::didRecalcStyleWithNoPendingLayout().
        * page/FrameView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::willRecalcStyle): Reset the m_layerNeedsCompositingUpdate flag.
        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout): Bail on the update if
        no layers changed.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Logging. Increment m_compositingUpdateCount,
        which is used for testing.
        (WebCore::RenderLayerCompositor::layerStyleChanged): Set the m_layerNeedsCompositingUpdate flag.
        (WebCore::RenderLayerCompositor::startTrackingCompositingUpdates): Reset the counter.
        (WebCore::RenderLayerCompositor::compositingUpdateCount):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::startTrackingCompositingUpdates):
        (WebCore::Internals::compositingUpdateCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-05-01  Andreas Kling  <akling@apple.com>

        Reproducible crash removing name attribute from <img> node
        <https://webkit.org/b/144371>
        <rdar://problem/17198583>

        Reviewed by Darin Adler.

        The problem here was with HTMLImageElement::getNameAttribute(), which relies
        on Element::hasName() to avoid slow attribute lookups when the attribute
        is already known not to be present. Unfortunately hasName() uses an ElementData
        flag that wasn't getting updated until after the call to parseAttribute().

        This patch fixes the issue by moving the code that updates the hasName() flag
        before the parseAttribute() virtual dispatch.

        Test: fast/dom/HTMLImageElement/remove-name-id-attribute-from-image.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

2015-05-01  Eric Carlson  <eric.carlson@apple.com>

        Postpone caption style sheet creation
        https://bugs.webkit.org/show_bug.cgi?id=144499

        Reviewed by Simon Fraser.
        
        Generating and inserting the caption user style sheet is expensive so don't do it until
        we see a text track, and only do it for the first video element in a PageGroup.

        Test: media/track/track-user-stylesheet.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Only register for caption preferences
        changes if we have done so before.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Only unregister for caption preferences
        changes if we registered for them.
        (WebCore::HTMLMediaElement::addTextTrack): Register for caption preference changes.
        * html/HTMLMediaElement.h:

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges): Only
        generate the style sheet when called for the first time.

2015-05-01  Dean Jackson  <dino@apple.com>

        [iOS] Scrubber display is broken if the buffered range is empty
        https://bugs.webkit.org/show_bug.cgi?id=144511

        Reviewed by Eric Carlson.

        Make sure that if video.buffered returns an empty list, we
        still draw the scrubber background correctly.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.drawTimelineBackground): Ensure that buffered
        is always at least as big as the current time.

2015-05-01  Roger Fong  <roger_fong@apple.com>

        Media control volume slider should be vertical to avoid flickering issues.
        https://bugs.webkit.org/show_bug.cgi?id=144496.
        <rdar://problem/20451328>

        Reviewed by Darin Adler.

        * Modules/mediacontrols/mediaControlsApple.css:
        Resize and reposition the volume box so that it does not have to rotated via a transform.
        (audio::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-panel .volume-box): Also set overflow: hidden so we can't interact
             with the volume slider while the volume box is hidden.
        (audio::-webkit-media-controls-panel .volume-box:active):
        Rotate and position the volume slider via transforms. Make sure it's not transformed in the fullscreen controls.
        (video::-webkit-media-controls-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider):

2015-05-01  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests (Part 4): Scroll Snap Support
        https://bugs.webkit.org/show_bug.cgi?id=144482

        Reviewed by Simon Fraser.

        New tests will be landed in a second patch.

        The new WheelEventTestTriggers do not work properly with scroll snap points, because some test deferral notifications
        need to be triggered for state changes on the scrolling thread. This required the following changes:
        1. A flag indicating that we want to know about WheelEvent state changes needed to be propagated to the scrolling thread,
           so that tests could be deferred until Scrolling thread rubberband or scroll-snap animations had completed.
        2. The ScrollingNodeID needed to be used for registering and clearing deferrals.
        3. The scrolling thread needed a way to dispatch messages to the main thread indicating that we should (or should not)
           defer tests due to scrolling actions.

        Note that a future patch will extend this support to include the RemoteScrollingTree.

        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::deferTestsForReason): Added some logging features.
        (WebCore::WheelEventTestTrigger::removeTestDeferralForReason): Ditto.
        (WebCore::dumpState): Helper function for logging test deferral state.
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired): Added some logging features.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated): Make sure that the scrolling thread is
        told that it needs to send scrolling state back to the main thread. Only do this if we are in testing mode.
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll): The scrollingNodeID should be
        used as the identifier for this operation, not the page address.
        (WebCore::AsyncScrollingCoordinator::deferTestsForReason): Added. receives messages from the scrolling thread
        and notifies the testing infrastructure.
        (WebCore::AsyncScrollingCoordinator::removeTestDeferralForReason): Ditto.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): When cloning the ScrollingStateScrollingNode,
        include the testing mode state.
        (WebCore::ScrollingStateScrollingNode::setExpectsWheelEventTestTrigger): Added.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::expectsWheelEventTestTrigger): Added.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::deferTestsForReason): Added stub.
        (WebCore::ScrollingTree::removeTestDeferralForReason): Ditto.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::deferTestsForReason): Added. Dispatches messages from the scrolling thread to the
        main thread.
        (WebCore::ThreadedScrollingTree::removeTestDeferralForReason): Ditto.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac): Initialize testing state flag.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): If the 'ExpectsWheelEventTestTrigger' flag is
        set, update local state.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent): If we are testing, and the wheel event should be handled
        asynchronously, tell the testing infrastructure we need to wait for the thread state to sync.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::deferTestsForReason): Added. Notifies test system we need to defer tests
        until we notify them. Also used by the ScrollController during animations.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::removeTestDeferralForReason): Ditto.
        * platform/Logging.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::deferTestsForReason): Added. Used by ScrollController during animation. This updates the
        testing infrastructure directly, since it is running in the same process and main thread.
        (WebCore::ScrollAnimator::removeTestDeferralForReason): Ditto.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerClient::deferTestsForReason): Change client API.
        (WebCore::ScrollControllerClient::removeTestDeferralForReason): Ditto.
        (WebCore::ScrollControllerClient::testTrigger): Deleted.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::startSnapRubberbandTimer): Use new client API.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Ditto.
        (WebCore::ScrollController::startScrollSnapTimer): Ditto.
        (WebCore::ScrollController::stopScrollSnapTimer): Ditto.

2015-05-01  Joseph Pecoraro  <pecoraro@apple.com>

        Inline some small methods instead of them being EXPORT'd and out of line
        https://bugs.webkit.org/show_bug.cgi?id=144498

        Reviewed by Darin Adler.

        * page/Page.cpp:
        (WebCore::Page::testTrigger): Deleted.
        (WebCore::Page::clearTrigger): Deleted.
        (WebCore::Page::expectsWheelEventTriggers): Deleted.
        * page/Page.h:
        (WebCore::Page::testTrigger):
        (WebCore::Page::clearTrigger):
        (WebCore::Page::expectsWheelEventTriggers):

2015-05-01  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/8636045> Back/forward navigation to an error page in Safari breaks the back-forward list
        https://bugs.webkit.org/show_bug.cgi?id=144501

        Reviewed by Darin Adler.

        Test: TestWebKitAPI/Tests/WebKit2Cocoa/LoadAlternateHTMLString.mm

        Normally, loading substitute data (such as an error page) creates a new back-forward list
        item. FrameLoader has a mechanism that detects when a substitute data load occurs during
        handling of a provisional load error and prevents the creation of a new back-forwards list
        item in that case if the unreachable URL is the same as the failing provisional URL. This
        mechanism was broken in WebKit2, where handling the provisional load error is asynchronous.

        The fix is to capture some state (namely, the failing provisional URL) when dispatching the
        load error and allow it to be restored when loading the substitute data.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Removed initialization of
        m_delegateIsHandlingProvisionalLoadError.
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL): Instead of checking
        m_delegateIsHandlingProvisionalLoadError and if true using the provisional document loader’s
        URL, check m_provisionalLoadErrorBeingHandledURL.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Instead of checking and setting
        m_delegateIsHandlingProvisionalLoadError, use m_provisionalLoadErrorBeingHandledURL.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::provisionalLoadErrorBeingHandledURL): Added this getter. The client
        can call this from its override of dispatchDidFailProvisionalLoad and store the result.
        (WebCore::FrameLoader::setProvisionalLoadErrorBeingHandledURL): Added this setter. The
        client can call this prior to loading substitute data if it’s done as part of handling a
        previously-dispatched didFailProvisionalLoad.

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        USE(...) macro should expect unprefixed variables
        https://bugs.webkit.org/show_bug.cgi?id=144454

        Reviewed by Daniel Bates.

        * DerivedSources.make: Replace all occurrences WTF_USE with USE.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * bindings/objc/PublicDOMInterfaces.h: Ditto.
        * config.h: Ditto.
        * crypto/mac/SerializedCryptoKeyWrapMac.mm: Ditto.
        * page/AlternativeTextClient.h: Ditto.
        * platform/efl/FileSystemEfl.cpp: Ditto.
        (WebCore::fileSystemRepresentation): Ditto.
        * platform/graphics/cg/ImageBufferDataCG.h: Ditto.
        * platform/graphics/cg/PDFDocumentImage.h: Ditto.
        * platform/ios/wak/WAKAppKitStubs.h: Ditto.
        * rendering/RenderLayerCompositor.cpp: Ditto.

2015-05-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Text dilation parameters are not restored after being set
        https://bugs.webkit.org/show_bug.cgi?id=144507
        <rdar://problem/19446938>

        Reviewed by Simon Fraser and Ned Holbrook.

        Create a RAII class who is in charge of saving, applying, and restoring dilation parameters. Use this class
        around our text drawing routines.

        Note that this migrates our use of CTFontSetRenderingParameters() to CTFontSetRenderingStyle().

        Test: fast/text/dilation-save-restore.html

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::RenderingStyleSaver::RenderingStyleSaver):
        (WebCore::RenderingStyleSaver::~RenderingStyleSaver):
        (WebCore::showGlyphsWithAdvances):
        * platform/spi/cg/CoreGraphicsSPI.h:
        * platform/spi/cocoa/CoreTextSPI.h:

2015-05-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183687.
        https://bugs.webkit.org/show_bug.cgi?id=144505

        Appears to have caused assertions (Requested by ap on
        #webkit).

        Reverted changeset:

        "Media control volume slider is opaque."
        https://bugs.webkit.org/show_bug.cgi?id=144470
        http://trac.webkit.org/changeset/183687

2015-05-01  Jeremy Jones  <jeremyj@apple.com>

        Stop using deprecated AVKit SPI for enter and exit fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=144493

        Reviewed by Jer Noble.

        Replace 
            -enterFullScreenWithCompletionHandler:
            -exitFullScreenWithCompletionHandler:
        with
            -enterFullScreenAnimated:completionHandler:
            -exitFullScreenAnimated:completionHandler:
        
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal):
        * platform/spi/cocoa/AVKitSPI.h:

2015-05-01  Roger Fong  <roger_fong@apple.com>

        Media control volume slider is opaque.
        https://bugs.webkit.org/show_bug.cgi?id=144470.
        <rdar://problem/20770350>

        Rubberstamped by Simon Fraser.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel): 
        Don't create a stacking context just for the controls.
        Doing so causes the mix-blend-mode on the volume box to fail.

2015-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] REGRESSION(183368): It made editing tests assert
        https://bugs.webkit.org/show_bug.cgi?id=144447

        Reviewed by Chris Fleizach.

        Don't notify platforms of editing actions of type EditActionUnspecified.
        If we don't know what the action is, platform accessibility APIs certainly
        won't.

        Add AXTextEditTypeAttributesChange and AXTextAttributesChanged as catch-alls
        for formatting changes. ATK lacks finely-grained signals through which to
        specify which text attributes have changed. If other platforms have such
        signals, new types can always be added.

        Don't post an accessible replacement notification for AXTextEditTypeCut.
        The notification is handled by DeleteSelectionCommand. It is possible for
        white space to be inserted in preparation for a cut which was triggering
        a not-reached assert, but insertion of whitespace in preparation for a
        cut does not seem notification-worthy.

        Treat AXTextEditTypeDictation the same as other insertion types (insert,
        paste, typing) with respect to replacement notifications.

        No new tests. The hundreds of editing tests that had been crashing seem sufficient.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::showIntent):
        (WebCore::AXObjectCache::textChangeForEditType):
        * accessibility/AXObjectCache.h:
        * accessibility/AXTextStateChangeIntent.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::applyEditType):
        (WebCore::EditCommand::unapplyEditType):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/ReplaceInsertIntoTextNodeCommand.cpp:
        (WebCore::ReplaceInsertIntoTextNodeCommand::notifyAccessibilityForTextChange):

2015-05-01  Brady Eidson  <beidson@apple.com>

        Add API to disable meta refreshes.
        <rdar://problem/20333198> and https://bugs.webkit.org/show_bug.cgi?id=144269

        Reviewed by Alexey Proskuryakov.

        Test: loader/meta-refresh-disabled.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Bail early if Settings have meta refreshes disabled.
        * page/Settings.in:

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        [Freetype] Properly support synthetic oblique in vertical text
        https://bugs.webkit.org/show_bug.cgi?id=144492

        Reviewed by Sergio Villar Senin.

        No new tests. Covered by existing tests.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::initializeWithFontFace): Skew vertical when using synthetic
        oblique for vertical text.

2015-05-01  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] REGRESSION: accessibility/canvas-fallback-content.html now crashes
        https://bugs.webkit.org/show_bug.cgi?id=144481

        Reviewed by Chris Fleizach.

        Canvas fallback content is allowed to be focusable if the canvas is displayed
        and visible. Update the style when creating an accessible object for a node in
        a canvas subtree and before Element::isFocusable() gets called.

        No new tests. The existing, crashing test no longer crashes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):

2015-05-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add CombinedURLFilters debugging code.
        https://bugs.webkit.org/show_bug.cgi?id=144491

        Reviewed by Daniel Bates.

        No change in behavior.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::recursiveMemoryUsed):
        (WebCore::ContentExtensions::CombinedURLFilters::memoryUsed):
        (WebCore::ContentExtensions::prefixTreeVertexToString):
        (WebCore::ContentExtensions::recursivePrint):
        (WebCore::ContentExtensions::CombinedURLFilters::print):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::memoryUsed):
        * contentextensions/NFA.h:
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::quantifierToString):
        (WebCore::ContentExtensions::Term::toString):

2015-05-01  Eric Carlson  <eric.carlson@apple.com>

        Fix text track language selection logic
        https://bugs.webkit.org/show_bug.cgi?id=144467

        Reviewed by Brent Fulgham.

        No new tests, media/track/track-language-preference.html was updated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Correct a minor style typo.
        (WebCore::HTMLMediaElement::configureTextTrackDisplay): Update logging.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::textTrackSelectionScore): Minor cleanup.
        (WebCore::CaptionUserPreferences::textTrackLanguageSelectionScore): Give exact matches a
        higher score.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::textTrackSelectionScore): Update for 
        indexOfBestMatchingLanguageInList change.

        * platform/Language.cpp:
        (WebCore::indexOfBestMatchingLanguageInList): Add parameter for exact match. Convert the
        passed language to lower case as we do with the preferred languages.
        * platform/Language.h:

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        [Freetype] Add support for the font-synthesis property
        https://bugs.webkit.org/show_bug.cgi?id=144472

        Reviewed by Sergio Villar Senin.

        No new tests. This causes fast/css3-text/font-synthesis.html to pass
        for WebKitGTK+.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Only use synthetic bold when the font description allows it.
        (WebCore::FontPlatformData::initializeWithFontFace): Ditto for synthetic oblique.

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        [GTK] New CORS tests from r183280 fail on WebKitGTK+
        https://bugs.webkit.org/show_bug.cgi?id=144469

        Reviewed by Sergio Villar Senin.

        No new tests. This causes failing tests to pass.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Clear the origin header on cross-origin redirects.

2015-04-30  Alex Christensen  <achristensen@webkit.org>

        Compile fix when using content extensions debugging code.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::printTransitions):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/DFANode.h:
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::memoryUsed):
        (WebCore::ContentExtensions::NFA::debugPrintDot):

2015-04-30  Dan Bernstein  <mitz@apple.com>

        Fixed the build for <rdar://problem/20758514>

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::destroyMix): Don’t pass nil to
        -[AVMutableAudioMix setInputParameters:].

2015-04-30  Daniel Bates  <dabates@apple.com>

        Clean up: Remove unnecessary runtime computation of string length
        https://bugs.webkit.org/show_bug.cgi?id=144483

        Reviewed by Joseph Pecoraro.

        Following <http://trac.webkit.org/changeset/183649>, WebCore::fullyQualifiedInfoTableName()
        computes strlen() of the first string literal as part of concatenating two string literals.
        It is sufficient to use sizeof() - 1 instead of strlen() to compute the length of the first
        string literal because the size of the string literal is known at compile time.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::fullyQualifiedInfoTableName):

2015-04-30  Dean Jackson  <dino@apple.com>

        Expose -apple-system as a font family
        https://bugs.webkit.org/show_bug.cgi?id=144484
        <rdar://problem/20767330>

        Reviewed by Tim Horton.

        Accept "-apple-system" for the font-family property, and
        rename "-apple-system-font-monospaced-numbers" to
        "-apple-system-monospaced-numbers".

        Also change the media controls to use the new name.

        Covered by existing tests and this new one:
            fast/text/system-font-legacy-name.html

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-time-remaining-display):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        (audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-status-display):
        * platform/graphics/ios/FontCacheIOS.mm: Add support for the new name.
        (WebCore::createCTFontWithFamilyNameAndWeight):
        * platform/graphics/mac/FontCacheMac.mm: Ditto.
        (WebCore::fontWithFamily):

2015-04-30  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] overflow-position keyword for align and justify properties.
        https://bugs.webkit.org/show_bug.cgi?id=144235

        Reviewed by Sergio Villar Senin.

        When the alignment subject is larger than the alignment container,
        it will overflow. Some alignment modes, if honored in this
        situation, may cause data loss; an overflow alignment mode can be
        explicitly specified to avoid this.

        This patch implements overflow-keyword handling for Grid Layout on
        align-self and justify-self properties.

        Test: fast/css-grid-layout/grid-align-justify-overflow.html

        * rendering/RenderGrid.cpp:
        (WebCore::computeOverflowAlignmentOffset):
        (WebCore::RenderGrid::rowPositionForChild):
        (WebCore::RenderGrid::columnPositionForChild):
        (WebCore::RenderGrid::rowAxisPositionForChild): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::resolveAlignmentData):
        (WebCore::resolveJustificationData):
        (WebCore::RenderStyle::resolveAlignment):
        (WebCore::RenderStyle::resolveAlignmentOverflow):
        (WebCore::RenderStyle::resolveJustification):
        (WebCore::RenderStyle::resolveJustificationOverflow):
        * rendering/style/RenderStyle.h:

2015-04-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Rebaseline bindings tests results after r183648.

        Unreviewed.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::setJSTestNondeterministicNondeterministicWriteableAttr):
        (WebCore::setJSTestNondeterministicNondeterministicExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicGetterExceptionAttr):
        (WebCore::setJSTestNondeterministicNondeterministicSetterExceptionAttr):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors4):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):

2015-04-30  Simon Fraser  <simon.fraser@apple.com>

        Fixed elements end up in the middle of the view with pageScale < 1
        https://bugs.webkit.org/show_bug.cgi?id=144428
        rdar://problem/20404982

        Reviewed by Tim Horton.

        When pageScale is < 1, we used fixed layout mode, and FrameView::fixedElementsLayoutRelativeToFrame()
        returns true. However, the scrolling thread was calling the static scrollOffsetForFixedPosition()
        hardcoding 'false' for this parameter.
        
        Fix by sending the value of fixedElementsLayoutRelativeToFrame over to the scrolling thread,
        so we can use it when doing scrolling-thread fixed position stuff.

        Not testable.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setFixedElementsLayoutRelativeToFrame):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode):
        (WebCore::ScrollingTreeFrameScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::fixedElementsLayoutRelativeToFrame):
        (WebCore::ScrollingTreeFrameScrollingNode::shouldUpdateScrollLayerPositionSynchronously): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition):

2015-04-30  Beth Dakin  <bdakin@apple.com>

        Remove invalid assertion from MouseEvent::create()
        https://bugs.webkit.org/show_bug.cgi?id=144477

        Reviewed by Tim Horton.

        mouseforcechanged events and mouseforcewillbegin trigger this assertion. The 
        assertion does not seem valuable, so rather than changing it, just remove it.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):

2015-04-30  Dean Jackson  <dino@apple.com>

        -apple-system-font-monospaced-numbers doesn't work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=144478
        <rdar://problem/20544940>

        Reviewed by Brent Fulgham.

        Make sure to start from the system font descriptor when
        asking for a monospaced numeric alternate.

        Test: platform/ios-simulator/fast/text/system-monospaced-numbers.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::createCTFontWithFamilyNameAndWeight):

2015-04-30  Oliver Hunt  <oliver@apple.com>

        DOM bindings should not be using a reference type to point to a temporary object
        https://bugs.webkit.org/show_bug.cgi?id=144474

        Reviewed by Beth Dakin.

        The DOM bindings will currently try and use a local reference to point
        to a temporary object. This currently works as a by product of the compiler's
        stack layout. This patch removes the dependency on undefined behaviour
        by ensuring that we use a value rather than reference type.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheck):
        (GetNativeTypeForCallbacks):

2015-04-30  Brady Eidson  <beidson@apple.com>

        Build fix after r183646 for less enlightened platforms.

        Unreviewed.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::fullyQualifiedInfoTableName): Windows doesn’t have stpcpy :(

2015-04-30  Brady Eidson  <beidson@apple.com>

        Javascript using WebSQL can create their own WebKit info table.
        <rdar://problem/20688792> and https://bugs.webkit.org/show_bug.cgi?id=144466

        Reviewed by Alex Christensen.

        Test: storage/websql/alter-to-info-table.html

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::databaseInfoTableName): Return the info table name.
        (WebCore::fullyQualifiedInfoTableName): Append "main." to the info table name.
        (WebCore::DatabaseBackendBase::DatabaseBackendBase): Use the fully qualified name.
        (WebCore::DatabaseBackendBase::performOpenAndVerify): Ditto.
        (WebCore::DatabaseBackendBase::getVersionFromDatabase): Ditto.
        (WebCore::DatabaseBackendBase::setVersionInDatabase): Ditto.

2015-04-30  Beth Dakin  <bdakin@apple.com>

        Should choose UIScrollView indicatorStyle based on the document background color
        https://bugs.webkit.org/show_bug.cgi?id=144473
        -and corresponding-
        rdar://problem/19897699

        Reviewed by Simon Fraser.

        Export this function.
        * platform/graphics/Color.h:

2015-04-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Allow WebKit to build without ANGLE support
        https://bugs.webkit.org/show_bug.cgi?id=144459
        <rdar://problem/20707307>

        Reviewed by Dean Jackson.

        * platform/graphics/GLContext.cpp: Use the ENABLE(GRAPHICS_CONTEXT_3D)
        macro to avoid compiling this code if not using WEBGL/3D contexts.

2015-04-29  David Hyatt  <hyatt@apple.com>

        Avoid containingBlock() calls when no writing mode flipping is needed.
        https://bugs.webkit.org/show_bug.cgi?id=144407

        Reviewed by Simon Fraser.

        Add a bool to RenderView that indicates whether or not any flipped blocks have been
        added to the view. Once tainted, the view just stays dirty forever. If no flipped
        blocks are ever seen, we can then optimize away calls to containingBlock().

        The motivation for this patch is to improve layer position updating, which makes many
        calls to topLeftLocationOffset(), one of the functions that can be optimized by this
        change.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateFromStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:

2015-04-29  Jer Noble  <jer.noble@apple.com>

        Make GenericTaskQueue even more generic (and usable inside platform/)
        https://bugs.webkit.org/show_bug.cgi?id=144414

        Reviewed by Eric Carlson.

        Templatize GenericTaskQueue so that it can be used from within platform/.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/GenericTaskQueue.cpp: Removed.
        * html/HTMLMediaElement.h:
        * platform/GenericTaskQueue.h: Renamed from Source/WebCore/dom/GenericTaskQueue.h.
        (WebCore::TaskDispatcher::TaskDispatcher): Added default templatized class which just calls the parameter's postTask().
        (WebCore::TaskDispatcher::postTask): Call context's postTask().
        (WebCore::TaskDispatcher<Timer>::TaskDispatcher): Add a timer version which does not require a context.
        (WebCore::TaskDispatcher<Timer>::postTask): Set the timer.
        (WebCore::TaskDispatcher<Timer>::timerFired): Call the task.
        (WebCore::GenericTaskQueue::GenericTaskQueue): Moved from .cpp.
        (WebCore::GenericTaskQueue::enqueueTask): Ditto.
        (WebCore::GenericTaskQueue::close): Ditto.
        (WebCore::GenericTaskQueue::cancelAllTasks): Ditto.
        (WebCore::GenericTaskQueue::hasPendingTasks): Ditto.

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed build fix. WebCore has a weak symbol.

        WebCore has a weak external symbol in it. A common cause of weak external
        symbols is when an inline function is listed in the linker export file.
        ERROR: symbol __ZNK7WebCore4Page25expectsWheelEventTriggersEv

        * page/Page.cpp:
        (WebCore::Page::expectsWheelEventTriggers):
        * page/Page.h:
        (WebCore::Page::expectsWheelEventTriggers): Deleted.

2015-04-29  Simon Fraser  <simon.fraser@apple.com>

        Crash at WebCore::Document::absoluteRegionForEventTargets 
        https://bugs.webkit.org/show_bug.cgi?id=144426
        rdar://problem/20502166

        Reviewed by Tim Horton.

        When a frame had wheel event handlers, we would register the document itself
        as a handler in its parent document. This is problematic, because there's not
        code path that removes it when the frame is destroyed.
        
        It turns out we don't need to do this at all; the non-fast scrollable region
        already takes handlers in subframes into account.

        Tests: fast/events/wheelevent-in-frame.html
               fast/events/wheelevent-in-reattached-frame.html

        * dom/Document.cpp:
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):

2015-04-29  Eric Carlson  <eric.carlson@apple.com>

        Not all videos should automatically play to playback target
        https://bugs.webkit.org/show_bug.cgi?id=144430
        <rdar://problem/20718523>

        Reviewed by Darin Adler.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::clientStateDidChange): Consider ExternalDeviceAutoPlayCandidate.
        Minor cleanup.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): Set ExternalDeviceAutoPlayCandidate when a <video>
        has a file with an audio track that does not loop.

        * page/MediaProducer.h: Add ExternalDeviceAutoPlayCandidate.

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        LiveNodeList may unexpectedly return an element for empty string
        https://bugs.webkit.org/show_bug.cgi?id=144429

        Reviewed by Darin Adler.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        Never return a result for an empty string.

2015-04-29  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Remove PassRefPtr in SVGFEFooElement classes
        https://bugs.webkit.org/show_bug.cgi?id=144425

        Reviewed by Darin Adler.

        As a step to use Ref instead of PassRefPtr, this patch purges PassRefPtr
        in SVGFEFooElement.

        No new tests, no behavior changes.

        * css/RGBColor.cpp:
        (WebCore::RGBColor::create):
        * css/RGBColor.h:
        * platform/graphics/filters/PointLightSource.h:
        (WebCore::PointLightSource::create):
        * platform/graphics/filters/SpotLightSource.h:
        (WebCore::SpotLightSource::create):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::rgbColor):
        * svg/SVGColor.h:
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightSource):
        * svg/SVGFELightElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * svg/SVGFESpotLightElement.h:

2015-04-29  Dean Jackson  <dino@apple.com>

        Create a named CSS property for system colors
        https://bugs.webkit.org/show_bug.cgi?id=144423
        <rdar://problem/20491011>

        Reviewed by Tim Horton.

        Test: fast/css/apple-system-colors.html

        Expose the following values to CSS color properties:
            -apple-system-blue
            -apple-system-brown
            -apple-system-gray
            -apple-system-green
            -apple-system-orange
            -apple-system-pink
            -apple-system-purple
            -apple-system-red
            -apple-system-yellow

        On platforms other than OS X Yosemite and iOS, the
        actual color values are undefined and become transparent
        black. (In fact, not all are defined on iOS either.)

        * WebCore.xcodeproj/project.pbxproj: Two new SPI header files.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validSystemColorValue): New helper function that
        checks if a CSSValueID is between the two system color values. This
        was being tested everywhere, which meant adding a new system color was
        at risk of being ignored. It's a static method so it can be used
        from the SVG CSS parser too.
        (WebCore::validPrimitiveValueColor): Use the new helper.
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseBackgroundColor): Ditto.
        (WebCore::CSSParser::parseShadow): Ditto.
        (WebCore::parseDeprecatedGradientColorStop): Ditto.
        (WebCore::parseGradientColorOrKeyword): Ditto.
        * css/CSSParser.h: New static helper function.

        * css/CSSValueKeywords.in: Add the new CSS value keywords.

        * css/SVGCSSParser.cpp:
        (WebCore::validSystemControlColorValue): SVG has a restricted
        set of system colors, so use the helper from CSSParser but with
        an extra condition.
        (WebCore::CSSParser::parseSVGValue): Use the helper.

        * platform/spi/ios/UIColorSPI.h: Added.
        * platform/spi/cocoa/NSColorSPI.h: Added.

        * rendering/RenderThemeIOS.h: New systemColor override. Also add a cache for system colors.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor): Ask UIColor to provide the color values for the new CSS values.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor): Ditto.

2015-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183600.
        https://bugs.webkit.org/show_bug.cgi?id=144432

        New tests time out everywhere (Requested by ap on #webkit).

        Reverted changeset:

        "Crash at WebCore::Document::absoluteRegionForEventTargets"
        https://bugs.webkit.org/show_bug.cgi?id=144426
        http://trac.webkit.org/changeset/183600

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS build fix. Unused parameter no longer exists.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteNonFastScrollableRegionForFrame):

2015-04-29  Simon Fraser  <simon.fraser@apple.com>

        Crash at WebCore::Document::absoluteRegionForEventTargets 
        https://bugs.webkit.org/show_bug.cgi?id=144426
        rdar://problem/20502166

        Reviewed by Tim Horton.

        When a frame had wheel event handlers, we would register the document itself
        as a handler in its parent document. This is problematic, because there's not
        code path that removes it when the frame is destroyed.
        
        It turns out we don't need to do this at all; the non-fast scrollable region
        already takes handlers in subframes into account.

        Tests: fast/events/wheelevent-in-frame.html
               fast/events/wheelevent-in-reattached-frame.html

        * dom/Document.cpp:
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):

2015-04-29  David Kilzer  <ddkilzer@apple.com>

        Attempt #2: Switch QuickLook soft-linking to use QuickLookSoftLink.{h,mm}
        <http://webkit.org/b/144362>

        Reviewed by Andy Estes.

        This patch switches soft-linking of QuickLook.framework to
        QuickLookSoftLink.{h,mm} so that we stop exporting unintended
        symbols.

        No new tests since no change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        - Add QuickLookSoftLinking.{h,mm} to the project.

        * platform/ios/QuickLookSoftLink.h: Added.
        * platform/ios/QuickLookSoftLink.mm: Added.
        * platform/mac/SoftLinking.h:
        (SOFT_LINK_CLASS_FOR_HEADER): Add macro.
        (SOFT_LINK_CLASS_FOR_SOURCE): Add macro.
        (SOFT_LINK_POINTER_FOR_HEADER): Add macro.
        (SOFT_LINK_POINTER_FOR_SOURCE): Add macro.

        * platform/network/ios/QuickLook.h:
        - Remove unused declarations.

        * platform/network/ios/QuickLook.mm:
        (WebCore::QLPreviewConverterClass): Deleted.
        (WebCore::QLTypeCopyBestMimeTypeForFileNameAndMimeType): Deleted.
        (WebCore::QLTypeCopyBestMimeTypeForURLAndMimeType): Deleted.
        (WebCore::QLTypeCopyUTIForURLAndMimeType): Deleted.
        - Remove SOFT_LINK macros and unused methods after switching to
          new QuickLookSoftLink.{h,mm}.
        (WebCore::QLPreviewGetSupportedMIMETypesSet):
        - Switch to use NeverDestroyed<>.
        (WebCore::registerQLPreviewConverterIfNeeded):
        (createQLPreviewProtocol):
        (WebCore::QLPreviewProtocol):
        (WebCore::QuickLookHandle::QuickLookHandle):
        (WebCore::QuickLookHandle::create):
        (WebCore::QuickLookHandle::shouldCreateForMIMEType):
        - Simplify code when using QuickLookSoftLink.h.

        * platform/network/ios/WebCoreURLResponseIOS.mm:
        - Include QuickLookSoftLink.h header.

2015-04-29  Simon Fraser  <simon.fraser@apple.com>

        Compute the non-fast-scrollable region in main-document coordinates
        https://bugs.webkit.org/show_bug.cgi?id=144420

        Reviewed by Tim Horton.

        Compute the non-fast-scrollable region in document coordinates, to make it easier
        to reason about. Previously, it was document coordinates offset by top content inset.

        * page/DebugPageOverlays.cpp:
        (WebCore::MouseWheelRegionOverlay::updateRegion): Traverse all frames to compute the wheel
        event handler region, mapping each to root view coords, and then mapping back into document
        coords at the end.
        (WebCore::NonFastScrollableRegionOverlay::updateRegion): No offset needed here; the
        overlay and region are both document coordinates.
        * page/FrameView.h: Make some mapping function overrides public, and expose widgetsInRenderTree().
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects): Remove frame argument.
        * page/Page.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::bounds):
        (WebCore::PageOverlay::viewToOverlayOffset): Convenience function to map between
        view and overlay coordinates.
        * page/PageOverlay.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp: New computeNonFastScrollableRegion() signature.
        (WebCore::AsyncScrollingCoordinator::updateNonFastScrollableRegion):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::absoluteNonFastScrollableRegionForFrame): This function
        recurses on frames, computing an absolute (document-relative) region per frame. This
        removes the confusing offsetting through top content inset.
        Change how we get to plugins that want wheel events; we can't get from PluginViewBase
        to renderers, so use FrameView's list of Widgets, and their RenderWidgets. This fixes
        regions for transformed plugin-ins.
        For subframes, we get a region in the subframe's document coords. Map to that sub-frame,
        then to our frame, then to our document.
        (WebCore::ScrollingCoordinator::absoluteNonFastScrollableRegion): Wrapper that hides
        the recursive function.
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Map the event point
        from view coordinates to document coordinates for testing against the non-fast region.
        We previously assert that the root note is a FrameScrolling node.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::viewToContentsOffset): Similar to ScrollView::viewToContents()
        for the scrolling tree.
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        * testing/Internals.cpp:
        (WebCore::Internals::nonFastScrollableRects): No need for frame arg.

2015-04-29  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143684
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        Tested by various fast/scrolling and platform/mac-wk2/tiled-drawing/scrolling tests.

        This series of changes adds a new singleton class, 'WheelEventTestTrigger', which encapsulates a
        function object to be fired when scroll events are finished. The object also keeps track of reasons
        why the test should not yet fire (e.g., 'rubberbanding' is active) so that tests do not incorrectly
        check rendering state in the middle of an animation.

        Switch from the original WeakPtr design to ThreadSafeRefPtr, because WeakPtr cannot be shared
        across multiple threads.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): Make sure ScrollAnimator knows about any active test trigger.
        (WebCore::FrameView::setScrollPosition): Ditto.
        (WebCore::FrameView::didAddScrollbar): Ditto.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::testTrigger): Moved to Page.
        (WebCore::MainFrame::ensureTestTrigger): Ditto.
        * page/MainFrame.h:
        * page/Page.cpp:
        (WebCore::Page::testTrigger): Moved from MainFrame, and converted to use RefPtr.
        (WebCore::Page::ensureTestTrigger): Ditto.
        * page/Page.h:
        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::WheelEventTestTrigger): Remove WeakPtr code.
        (WebCore::WheelEventTestTrigger::createWeakPtr): Deleted.
        * page/WheelEventTestTrigger.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents): Make sure the scroll animator knows about
        any active test trigger object.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll): Notify WheelEventTestTrigger
        that the scrolling thread is synced with the main thread.
        * platform/ScrollAnimator.h: Hold a RefPtr to the WheelEventTestTrigger. 
        (WebCore::ScrollAnimator::ScrollAnimator::setWheelEventTestTrigger):
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::startSnapRubberbandTimer): Notify test trigger to hold tests until rubber band
        snapping is complete.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Notify test trigger that rubber band snapping is done.
        (WebCore::ScrollController::startScrollSnapTimer): Notify test trigger to hold tests until scroll snapping
        is complete.
        (WebCore::ScrollController::stopScrollSnapTimer): Notify test trigger that scroll snapping is done.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture): Notify test trigger that a content scroll is in progress.
        (WebCore::ScrollAnimatorMac::didEndScrollGesture): Notify test trigger that a content scroll is finished.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledSoon): Notify test trigger to hold tests until the content
        scrolling is complete.
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired): Notify test trigger that content scrolling is done.
        * rendering/RenderBox.cpp:
        (WebCore::connectScrollAnimatorToTestTrigger): Helper function.
        (WebCore::RenderBox::setScrollLeft): Call 'connectScrollAnimatorToTestTrigger' to connect the ScrollAnimator
        to the WheelEventTestTrigger so that future scroll operations can notify the test infrastructure.
        (WebCore::RenderBox::setScrollTop): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar): Make sure the ScrollAnimator knows about any active test triggers.
        * rendering/RenderListBox.cpp:
        (WebCore::connectScrollAnimatorToTestTrigger): Helper function.
        (WebCore::RenderListBox::setScrollLeft): Call 'connectScrollAnimatorToTestTrigger' to connect the ScrollAnimator
        to the WheelEventTestTrigger so that future scroll operations can notify the test infrastructure.
        (WebCore::RenderListBox::setScrollTop): Ditto.
        (WebCore::RenderListBox::createScrollbar): Ditto.
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::monitorWheelEvents): Look for WheelEventTestTrigger in Page, rather than MainFrame.
        (WebCoreTestSupport::setTestCallbackAndStartNotificationTimer): Ditto.

2015-04-29  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Box Alignment] Unifying alignment data in a single class
        https://bugs.webkit.org/show_bug.cgi?id=144384

        Reviewed by David Hyatt.

        The new CSS Box Alignment specification introduces more complex
        values and syntax for defining alignment properties. Most of the
        alignment values were just keyword identifiers, but the new syntax
        allows different combinations of identifiers to determine the
        alignment behavior (eg. overflow-alignment keyword).

        This patch wll help to implement later overflow handling and
        specially Content Dstribution alignment, the most complex case by
        far. It will be more consistent against style changes and repaint,
        snce we will have just one field to monitoring for value
        modfications.

        No new tests, because no new functionality was added; it's just a
        code refactoring which is just expected to pass current tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::resolveSelfAlignmentAuto):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):
        (WebCore::StyleBuilderConverter::convertSVGColor): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitMaskImage): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritWebkitMaskImage): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::getValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::setValue): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritLineHeight): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::styleDidChange):
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::updateStyle):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair):
        (WebCore::RenderMathMLScripts::fixAnonymousStyles):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolveAlignment):
        (WebCore::RenderStyle::resolveJustification):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::contentDataEquivalent): Deleted.
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/StyleSelfAlignmentData.h: Added.
        (WebCore::StyleSelfAlignmentData::StyleSelfAlignmentData):
        (WebCore::StyleSelfAlignmentData::setPosition):
        (WebCore::StyleSelfAlignmentData::setPositionType):
        (WebCore::StyleSelfAlignmentData::setOverflow):
        (WebCore::StyleSelfAlignmentData::position):
        (WebCore::StyleSelfAlignmentData::positionType):
        (WebCore::StyleSelfAlignmentData::overflow):
        (WebCore::StyleSelfAlignmentData::operator==):
        (WebCore::StyleSelfAlignmentData::operator!=):

2015-04-29  Joseph Pecoraro  <pecoraro@apple.com>

        NodeList has issues with Symbol and empty string
        https://bugs.webkit.org/show_bug.cgi?id=144310

        Reviewed by Darin Adler.

        Tests: fast/dom/StyleSheet/stylesheet-symbol-names.html
               fast/dom/dataset-name-getter-symbols.html
               fast/dom/named-items-with-empty-name.html
               fast/dom/named-items-with-symbol-name.html
               storage/domstorage/localstorage/named-items.html

        Test different bindings objects with custom named setter
        and getter handlers. Ensure that they handle Symbol properties
        gracefully. Often times avoiding the string path.

        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::namedItem):
        (WebCore::StaticElementList::namedItem):
        Better handle the empty string. It should not match an item.

        * bindings/js/JSDOMBinding.h:
        (WebCore::propertyNameToString):
        In cases where we would use this, we should have handled
        Symbol properties.

        (WebCore::propertyNameToAtomicString):
        For Symbols, use the unique string. This should result
        in no matches for a Symbol property.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate):
        (WebCore::JSDOMStringMap::deleteProperty):
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::canGetItemsForName):
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::putDelegate):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::canGetItemsForName):
        Treat Symbol properties as private properties. They just
        go directly through to the Object, and avoid the string
        getter/setter property path.

2015-04-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Register with device picker whenever a page has <video>
        https://bugs.webkit.org/show_bug.cgi?id=144408

        Reviewed by Jer Noble.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::setPlaybackTarget): Drive-by fix: don't tell a client to play
        to the target when it has not routes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaState): Set RequiresPlaybackTargetMonitoring whenever the 
        element is <video> with a video track that does not block wireless playback.

2015-04-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add support for automatic hyphenation
        https://bugs.webkit.org/show_bug.cgi?id=44478

        Reviewed by Carlos Garcia Campos.

        No new tests. This patch unskips and updates results for existing hyphenation tests.

        * PlatformGTK.cmake: Add the libhypen implementation to the source list.
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::topLevelPath): Add this helper function taken from the test harness.
        (WebCore::getWebKitBuildDirectory): Ditto.
        * platform/gtk/GtkUtilities.h: Add function declarations for the helper functions.
        * platform/text/Hyphenation.cpp: Surround this implementation with !USE(LIBHYPHEN),
          so that it can still be shared.
        * platform/text/gtk/HyphenationLibHyphen.cpp: Added.
        (WebCore::extractLocaleFromDictionaryFilePath): Take in a dictionary filename and
        determine the locale that it covers.
        (WebCore::scanDirectoryForDicionaries): Look for all installed dictionaries as well
        as ones in the JHBuild root for testing.
        (WebCore::scanTestDictionariesDirectoryIfNecessary): Try to scan the dictionaries installed
        in the JHBuild root.
        (WebCore::availableLocales): Getter for global hash of installed dictionaries.
        (WebCore::canHyphenate): Added libhyphen implementation.
        (WebCore::HyphenationDictionary): Helper class that properly manages the memory of
        an open libhyphen dictionary. This is useful so that they can be stored in an MRU
        cache. This is a similar approach to the CoreFoundation implementation.
        (WebCore::AtomicStringKeyedMRUCache<RefPtr<HyphenationDictionary>>::createValueForNullKey): MRU cache
        helper.
        (WebCore::AtomicStringKeyedMRUCache<RefPtr<HyphenationDictionary>>::createValueForKey): Ditto.
        (WebCore::hyphenDictionaryCache): A cache for opened hyphenation dictionaries.
        (WebCore::countLeadingSpaces): Count leading spaces, since WebCore often passes words with them.
        (WebCore::lastHyphenLocation): Added libhyphen implementation.

2015-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWithFamily):

2015-04-29  Eric Carlson  <eric.carlson@apple.com>

        Some media tests assert after r183096
        https://bugs.webkit.org/show_bug.cgi?id=144098

        Reviewed by Brent Fulgham.

        Never assert when a MediaPlaybackTargetClient client calls one of the methods on Document
        after it has been unregistered. A media element unregisters itself when it is removed from the 
        document, but scripts can still run and modify state that results in a call to
        playbackTargetPickerClientStateDidChange. Remove the asserts instead of adding checks to
        the various call sites.

        * dom/Document.cpp:
        (WebCore::Document::showPlaybackTargetPicker): Don't assert if the client has already
        been unregistered.
        (WebCore::Document::playbackTargetPickerClientStateDidChange): Ditto.

2015-04-29  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Web process spins endlessly below layoutSimpleLines.
        https://bugs.webkit.org/show_bug.cgi?id=144403
        rdar://problem/20742783

        Reviewed by Antti Koivisto.

        When a text fragment overlaps multiple renderes and it does not fit the current line,
        we revert the text fragment iterator position so that the overlapping content
        gets processed again for the next line.
        However, TextFragmentIterator::revertToFragment() was reverting too much and
        we started processing old content all over again -> infinite loop.

        This patch ensures that text fragment iterator is reverted to the right position.

        Test: fast/text/simple-line-layout-wrapping-multiple-renderers-hang.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createLineRuns):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToEndOfFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2015-04-29  Filip Pizlo  <fpizlo@apple.com>

        JSTypeInfo should have an inline type flag to indicate of getCallData() has been overridden
        https://bugs.webkit.org/show_bug.cgi?id=144397

        Reviewed by Andreas Kling.

        If you override getCallData() and you want to be called a "function", then you need to use the
        new TypeOfShouldCallGetCallData flag.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:

2015-04-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183553 and r183561.
        https://bugs.webkit.org/show_bug.cgi?id=144406

        broke the iOS build (Requested by thorton__ on #webkit).

        Reverted changesets:

        "Switch QuickLook soft-linking to use
        QuickLookSoftLink.{h,mm}"
        https://bugs.webkit.org/show_bug.cgi?id=144362
        http://trac.webkit.org/changeset/183553

        "Unreviewed iOS build fix after r183553: fix declaration of
        QLPreviewScheme"
        http://trac.webkit.org/changeset/183561

2015-04-29  Antti Koivisto  <antti@apple.com>

        ResourceLoadPriority should be enum class
        https://bugs.webkit.org/show_bug.cgi?id=144326

        Reviewed by Darin Adler.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
        (WebCore::ResourceLoadScheduler::HostInformation::priorityToIndex):
        (WebCore::ResourceLoadScheduler::HostInformation::schedule):
        (WebCore::ResourceLoadScheduler::HostInformation::remove):
        (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::HostInformation::requestsPending):

            Modernize ResourceLoadScheduler code a bit while switching to enum class.

        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * platform/network/ResourceLoadPriority.h:
        (WebCore::operator++):
        (WebCore::operator--):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::cachePolicy):
        (WebCore::ResourceRequestBase::priority):
        (WebCore::ResourceRequestBase::setPriority):
        * platform/network/ResourceRequestBase.h:

            Remove bitfields. ResourceRequests are not present in large enough numbers to require this kind of optimization.
            Use modern initialization syntax.

        (WebCore::ResourceRequestBase::ResourceRequestBase):
        (WebCore::CrossThreadResourceRequestDataBase::CrossThreadResourceRequestDataBase): Deleted.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toResourceLoadPriority):
        (WebCore::toPlatformRequestPriority):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::toSoupMessagePriority):
        * testing/Internals.cpp:
        (WebCore::stringToResourceLoadPriority):

2015-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Use CTFontCreateForCSS instead of doing font search ourselves
        https://bugs.webkit.org/show_bug.cgi?id=132159

        Reviewed by Darin Adler.

        On platforms that support it, delegate font selection logic to the platform. Currently, this is
        only supported on Mac, using CTFontCreateForCSS().

        This also changes the mechanism that enforces our font whitelist in our tests. We used to
        swizzle the implementations of NSFontManager methods. This patch migrates to using a whitelist of
        font family names instead.

        Note that this patch is a work in progress, because it makes the following tests fail:
        fast/css/font-weight-1.html
        fast/forms/validation-message-appearance.html
        fast/forms/select/optgroup-rendering.html

        No new tests, because there is no behavior change.

        * platform/graphics/FontCache.h: Add a function to set the whitlist.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::fontWhitelist):
        (WebCore::FontCache::setFontWhitelist):
        (WebCore::toAppKitFontWeight):
        (WebCore::toCoreTextFontWeight):
        (WebCore::fontWithFamily): If ENABLE(PLATFORM_FONT_LOOKUP), use CTFontCreateForCSS().
        (WebCore::FontCache::createFontPlatformData):
        * platform/spi/cocoa/CoreTextSPI.h: Add signature for CTFontCreateForCSS().

2015-04-29  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix after r183553: fix declaration of QLPreviewScheme

        * platform/ios/QuickLookSoftLink.mm:

2015-04-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Use new device picker menu API
        https://bugs.webkit.org/show_bug.cgi?id=144392

        Reviewed by Jer Noble.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the route state to the picker.
        * platform/graphics/MediaPlaybackTargetPicker.h:

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac):  m_deviceChangeTimer -> m_pendingActionTimer.
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): Ditto.
        (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Renamed from 
        outputeDeviceAvailabilityChangedTimerFired.
        (WebCore::MediaPlaybackTargetPickerMac::availableDevicesDidChange): Use addPendingAction.
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Call new picker API if it is
        available. New API returns true if a target is chosen, so call currentDeviceDidChange in that case.
        (WebCore::MediaPlaybackTargetPickerMac::addPendingAction): New.
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Make asynchronous because it 
        can now be called from showPlaybackTargetPicker.
        (WebCore::MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired): Renamed
        pendingActionTimerFired.

        * platform/spi/cocoa/AVKitSPI.h: Add new SPI.

2015-04-29  Antti Koivisto  <antti@apple.com>

        Main resource loaded via 304 response becomes empty if reloaded by user
        https://bugs.webkit.org/show_bug.cgi?id=144386

        Reviewed by Darin Adler.

        Memory cache layer may make a main resource request conditional (add If-modified-since/If-none-match header).
        DocumentLoader stores the final ResourceRequest associated with document. If user triggered reload for
        conditionally loaded document DocumentLoader would include the same conditionals to the new request as well.
        Since these were not added by the memory cache it would pass any 304 response back to the DocumentLoader.
        However DocumentLoader has no code to handle 304 so we would end up with an empty document.

        Test: http/tests/cache/main-resource-304-reload.html

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

            Ensure DocumentLoader doesn't issue conditional requests.

2015-04-28  Jer Noble  <jer.noble@apple.com>

        Replace HTMLMediaElement's seek timer with a task queue.
        https://bugs.webkit.org/show_bug.cgi?id=144353

        Reviewed by Eric Carlson.

        No change in functionality, so no new tests added.

        Replace a zero-length timer with an explicit task queue, backed by Document's postTask(). To
        make enqueued tasks cancellable, add a new GenericTaskQueue class modelled on
        GenericEventQueue which can cancel enqueued but not-yet-executed tasks.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/GenericTaskQueue.cpp: Added.
        (WebCore::GenericTaskQueue::GenericTaskQueue): Initialize ivars.
        (WebCore::GenericTaskQueue::enqueueTask): Wrap the task and pass it to the ScriptExecutionContext.
        (WebCore::GenericTaskQueue::close): Assert that the task queue will not accept any additional tasks.
        (WebCore::GenericTaskQueue::cancelAllTasks): Revoke outstanding weak pointers, thereby cancelling tasks.
        * dom/GenericTaskQueue.h: Added.
        (WebCore::GenericTaskQueue::hasPendingTasks):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize the task queue.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Close the task queue.
        (WebCore::HTMLMediaElement::seekWithTolerance): Post a task, rather than start a timer.
        (WebCore::HTMLMediaElement::seekTask): Renamed from seekTimerFired().
        (WebCore::HTMLMediaElement::seekTimerFired): Deleted.
        * html/HTMLMediaElement.h:

2015-04-28  David Kilzer  <ddkilzer@apple.com>

        Switch QuickLook soft-linking to use QuickLookSoftLink.{h,mm}
        <http://webkit.org/b/144362>

        Reviewed by Andy Estes.

        This patch switches soft-linking of QuickLook.framework to
        QuickLookSoftLink.{h,mm} so that we stop exporting unintended
        symbols.

        No new tests since no change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        - Add QuickLookSoftLinking.{h,mm} to the project.

        * platform/ios/QuickLookSoftLink.h: Added.
        * platform/ios/QuickLookSoftLink.mm: Added.
        * platform/mac/SoftLinking.h:
        (SOFT_LINK_CLASS_FOR_HEADER): Add macro.
        (SOFT_LINK_CLASS_FOR_SOURCE): Add macro.

        * platform/network/ios/QuickLook.h:
        - Remove unused declarations.

        * platform/network/ios/QuickLook.mm:
        (WebCore::QLPreviewConverterClass): Deleted.
        (WebCore::QLTypeCopyBestMimeTypeForFileNameAndMimeType): Deleted.
        (WebCore::QLTypeCopyBestMimeTypeForURLAndMimeType): Deleted.
        (WebCore::QLTypeCopyUTIForURLAndMimeType): Deleted.
        - Remove SOFT_LINK macros and unused methods after switching to
          new QuickLookSoftLink.{h,mm}.
        (WebCore::QLPreviewGetSupportedMIMETypesSet):
        - Switch to use NeverDestroyed<>.
        (WebCore::registerQLPreviewConverterIfNeeded):
        (createQLPreviewProtocol):
        (WebCore::QLPreviewProtocol):
        (WebCore::QuickLookHandle::QuickLookHandle):
        (WebCore::QuickLookHandle::create):
        (WebCore::QuickLookHandle::shouldCreateForMIMEType):
        - Simplify code when using QuickLookSoftLink.h.

        * platform/network/ios/WebCoreURLResponseIOS.mm:
        - Include QuickLookSoftLink.h header.

2015-04-29  Darin Adler  <darin@apple.com>

        [ES6] Implement Unicode code point escapes
        https://bugs.webkit.org/show_bug.cgi?id=144377

        Reviewed by Antti Koivisto.

        Test: js/unicode-escape-sequences.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseEscape): Use ICU's UCHAR_MAX_VALUE instead of writing
        out 0x10FFFF; clearer this way. Also use our replacementCharacter instead of
        writing out 0xFFFD.

        * html/parser/HTMLEntityParser.cpp:
        (WebCore::isAlphaNumeric): Deleted.
        (WebCore::HTMLEntityParser::legalEntityFor): Use ICU's UCHAR_MAX_VALUE and
        U_IS_SURROGATE instead of writing the code out. Didn't use U_IS_UNICODE_CHAR
        because that also includes U_IS_UNICODE_NONCHAR and thus would change behavior,
        but maye it's something we want to do in the future.
        (WebCore::HTMLEntityParser::consumeNamedEntity): Use isASCIIAlphanumeric instead
        of a the function in this file that does the same thing less efficiently.

        * html/parser/InputStreamPreprocessor.h:
        (WebCore::InputStreamPreprocessor::processNextInputCharacter): Use
        replacementCharacter from CharacterNames.h instead of writing out 0xFFFd.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference): Use ICU's UCHAR_MAX_VALUE instead of
        defining our own local highestValidCharacter constant.

2015-04-29  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Organize and clean up unused CMake variables
        https://bugs.webkit.org/show_bug.cgi?id=144364

        Reviewed by Gyuyoung Kim.

        * PlatformGTK.cmake: Add variables specific to this project.

2015-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r182573): [GTK] The default context menu contains an empty item since r182573
        https://bugs.webkit.org/show_bug.cgi?id=144388

        Reviewed by Brady Eidson.

        There used to be a method in ContextMenuItem to check if share
        menu item was supported or not, but since r182573, there's a
        method to get the share menu item. If the returned menu item is
        null, it's not added to the menu, but we are not returning a null
        ContextMenu item even though we don't support share menu item.

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::shareMenuItem): Return a null ContextMenuItem.

2015-04-29  Zan Dobersek  <zdobersek@igalia.com>

        Switch to std::function<>, std::bind() in MediaPlayerPrivateAVFoundationObjC
        https://bugs.webkit.org/show_bug.cgi?id=144232

        Reviewed by Darin Adler.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): 
        Replace uses of WTF::Function<> and WTF::bind() with the STL alternatives.

2015-04-29  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Fix crash in WebCore::LogicalSelectionOffsetCaches::ContainingBlockInfo::setBlock().
        https://bugs.webkit.org/show_bug.cgi?id=140261

        Reviewed by Darin Adler.

        We need to check whether RenderObject is valid in RenderView::fooSubtreeSelection functions
        because invalid object has caused a crash. This patch adds isValidObjectForNewSelection(), and use it.

        * rendering/RenderView.cpp:
        (WebCore::isValidObjectForNewSelection):
        (WebCore::RenderView::clearSubtreeSelection):
        (WebCore::RenderView::applySubtreeSelection):

2015-04-29  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Synchronous XMLHttpRequest should get access to AppCache resources stored as flat files
        https://bugs.webkit.org/show_bug.cgi?id=143711

        Reviewed by Darin Adler.

        This patch checks whether a substitute resource data is stored in memory or in file for synchronous loads.
        If data is stored in file, it reads the data through SharedBuffer::createWithContentsOfFile.
        This patch refactors some routines to replace Vector<char> by SharedBuffer to transmit response data.

        Test: http/tests/appcache/simple-video-sync.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::createFileURL):
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackSynchronously):
        * loader/appcache/ApplicationCacheHost.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2015-04-29  Gyuyoung Kim  <gyuyoung.kim@webkit.org>

        Purge PassRefPtr from createSVGPathSegFoo factory functions
        https://bugs.webkit.org/show_bug.cgi?id=144374

        Reviewed by Darin Adler.

        Use Ref instead of PassRefPtr in createSVGPathSegFoo functions because
        those factory functions can't return null. Additionally let's remove unnecessary
        #include<PassRefPtr.h> there.

        No new tests, no behavior changes.

        * svg/SVGColor.cpp:
        (WebCore::SVGColor::cloneForCSSOM):
        * svg/SVGColor.h:
        * svg/SVGGlyphMap.h:
        (WebCore::GlyphMapNode::create):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::cloneForCSSOM):
        * svg/SVGPaint.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createSVGPathSegClosePath):
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        * svg/SVGPathElement.h:
        * svg/SVGPathSegArcAbs.h:
        (WebCore::SVGPathSegArcAbs::create):
        * svg/SVGPathSegArcRel.h:
        (WebCore::SVGPathSegArcRel::create):
        * svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::create):
        * svg/SVGPathSegCurvetoCubicAbs.h:
        (WebCore::SVGPathSegCurvetoCubicAbs::create):
        * svg/SVGPathSegCurvetoCubicRel.h:
        (WebCore::SVGPathSegCurvetoCubicRel::create):
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::create):
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::create):
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        (WebCore::SVGPathSegCurvetoQuadraticAbs::create):
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        (WebCore::SVGPathSegCurvetoQuadraticRel::create):
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::create):
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::create):
        * svg/SVGPathSegLinetoAbs.h:
        (WebCore::SVGPathSegLinetoAbs::create):
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        (WebCore::SVGPathSegLinetoHorizontalAbs::create):
        * svg/SVGPathSegLinetoHorizontalRel.h:
        (WebCore::SVGPathSegLinetoHorizontalRel::create):
        * svg/SVGPathSegLinetoRel.h:
        (WebCore::SVGPathSegLinetoRel::create):
        * svg/SVGPathSegLinetoVerticalAbs.h:
        (WebCore::SVGPathSegLinetoVerticalAbs::create):
        * svg/SVGPathSegLinetoVerticalRel.h:
        (WebCore::SVGPathSegLinetoVerticalRel::create):
        * svg/SVGPathSegMovetoAbs.h:
        (WebCore::SVGPathSegMovetoAbs::create):
        * svg/SVGPathSegMovetoRel.h:
        (WebCore::SVGPathSegMovetoRel::create):
        * svg/SVGViewSpec.h:
        (WebCore::SVGViewSpec::create):
        * svg/animation/SMILTimeContainer.h:
        (WebCore::SMILTimeContainer::create):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::create):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:

2015-04-28  Simon Fraser  <simon.fraser@apple.com>

        Make a non-static version of FrameView::yPositionForRootContentLayer()
        https://bugs.webkit.org/show_bug.cgi?id=144375

        Reviewed by Andy Estes.

        There were two calls to the static FrameView::yPositionForRootContentLayer()
        which passed in all the arguments for the same FrameView. Make a member
        function for convenience.

        * page/FrameView.cpp:
        (WebCore::FrameView::yPositionForRootContentLayer):
        * page/FrameView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

2015-04-28  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Merge TILED_BACKING_STORE guard with COORDINATED_GRAPHICS
        https://bugs.webkit.org/show_bug.cgi?id=143001

        Reviewed by Gyuyoung Kim.

        TiledBackingStore has only been used by Coordinated Graphics since Qt and WebKit1/Efl were dropped.
        So, this patch replaces USE(TILED_BACKING_STORE) with USE(COORDINATED_GRAPHICS) to merge the features.

        In addition, this moves TiledBackingStore and related files from platform to platform/texmap/coordinated
        where other coordinated graphics files are located.

        * CMakeLists.txt: Move TiledBackingStore.cpp because this is not common file.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj: Follow new location of TiledBackingStore* files.
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        (WebCore::FrameView::requestScrollPositionUpdate):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSizeIncludingObscuredArea):
        (WebCore::ScrollView::unscaledUnobscuredVisibleContentSize):
        (WebCore::ScrollView::visibleContentRectInternal):
        (WebCore::ScrollView::scrollTo):
        * platform/ScrollView.h:
        * platform/graphics/cairo/TileCairo.h: Removed because it is dead code since r169328
        * platform/graphics/texmap/coordinated/Tile.h: Renamed from Source/WebCore/platform/graphics/Tile.h.
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp: Renamed from Source/WebCore/platform/graphics/TiledBackingStore.cpp.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h: Renamed from Source/WebCore/platform/graphics/TiledBackingStore.h.
        * platform/graphics/texmap/coordinated/TiledBackingStoreBackend.h: Renamed from Source/WebCore/platform/graphics/TiledBackingStoreBackend.h.
        * platform/graphics/texmap/coordinated/TiledBackingStoreClient.h: Renamed from Source/WebCore/platform/graphics/TiledBackingStoreClient.h.

2015-04-28  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(180076): [Mac, iOS] Correct possible null dereference in printing code
        https://bugs.webkit.org/show_bug.cgi?id=144366
        <rdar://problem/20533513>

        Reviewed by Dean Jackson.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::needsAppleMailPaginationQuirk): Check if the document settings is a nullptr
        before attempting to dereference it. 

2015-04-28  Andreas Kling  <akling@apple.com>

        Simplify DOM wrapper destruction, don't deref() in finalizers.
        <https://webkit.org/b/144183>

        Reviewed by Darin Adler.

        DOM JS bindings had two mechanisms to call deref() on the WebCore object,
        once through a weak finalizer, and once through the JSCell's regular destructor.

        That was once believed to be an optimization, but these days the finalizer will
        run just moments before the destructor anyway, all in the same call stack.
        And more importantly, the finalizer is not guaranteed to run, for instance in the
        case where a Weak is assigned to after going dead, but before the WeakBlock
        has been swept by the incremental sweeper.

        Simplify this by just removing the deref() from the generated finalizers.
        This makes it easier to reason about DOM wrapper destruction, and eliminates
        the awkward time window  where a DOM wrapper could have a null impl().

        We could spend more time on figuring out a way to have finalizers manage the
        destruction of these wrappers, but that would require fundamental changes to
        our implementation of JSC::Weak pointers. It would allow us to make JSDOMWrapper
        destructor-less, and shrink each wrapper object by 1 pointer (the ClassInfo*.)
        However the risk:reward ratio does not seem justified at this point in time.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::~JSTestActiveDOMObject):
        (WebCore::JSTestActiveDOMObjectOwner::finalize):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::~JSTestCustomNamedGetter):
        (WebCore::JSTestCustomNamedGetterOwner::finalize):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::~JSTestEventConstructor):
        (WebCore::JSTestEventConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::~JSTestEventTarget):
        (WebCore::JSTestEventTargetOwner::finalize):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::~JSTestException):
        (WebCore::JSTestExceptionOwner::finalize):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::~JSTestGenerateIsReachable):
        (WebCore::JSTestGenerateIsReachableOwner::finalize):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::~JSTestInterface):
        (WebCore::JSTestInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListenerOwner::finalize):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::~JSTestNamedConstructor):
        (WebCore::JSTestNamedConstructorOwner::finalize):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        (WebCore::JSTestNondeterministic::~JSTestNondeterministic):
        (WebCore::JSTestNondeterministicOwner::finalize):
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::~JSTestObj):
        (WebCore::JSTestObjOwner::finalize):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::~JSTestOverloadedConstructors):
        (WebCore::JSTestOverloadedConstructorsOwner::finalize):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::finalize):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::~JSTestTypedefs):
        (WebCore::JSTestTypedefsOwner::finalize):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::~JSattribute):
        (WebCore::JSattributeOwner::finalize):
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::~JSreadonly):
        (WebCore::JSreadonlyOwner::finalize):
        * bindings/scripts/test/JS/JSreadonly.h:

2015-04-28  Alex Christensen  <achristensen@webkit.org>

        Build WinCairo without cygwin.
        https://bugs.webkit.org/show_bug.cgi?id=144365

        Reviewed by Myles Maxfield.

        * WebCore.vcxproj/WebCoreGeneratedWinCairo.make:
        Pass the CC executable to build-generated-files.pl like r182164.
        * WebCore.vcxproj/build-generated-files.pl:
        Default to 8 CPUs unless otherwise specified.

2015-04-28  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Process NFAs individually to avoid having all NFAs live at the same time
        https://bugs.webkit.org/show_bug.cgi?id=144363

        Reviewed by Alex Christensen.

        This brings dirty memory use when compiling our test content extension down from ~300MB to ~100MB.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::processNFAs):
        (WebCore::ContentExtensions::CombinedURLFilters::createNFAs): Deleted.
        * contentextensions/CombinedURLFilters.h:
        Replace function that creates a Vector of all the NFAs with one that allows incremental processing
        as they are created.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::addUniversalActionsToDFA):
        Extract code to add universal actions into a helper, since we need to call it in two places now.

        (WebCore::ContentExtensions::compileRuleList):
        Adopt CombinedURLFilters::processNFAs. Now that we don't have a Vector of NFAs, we need to keep track
        of whether or not any NFAs were processed and if we are currently processing the first NFA so we can
        ensure that we have some bytecode generated event for empty rule sets, and that universal actions are
        placed on the first DFA.

2015-04-28  Timothy Horton  <timothy_horton@apple.com>

        [TextIndicator] Yellow highlight takes too long to fade out on scroll
        https://bugs.webkit.org/show_bug.cgi?id=144358
        <rdar://problem/19451011>

        Reviewed by Beth Dakin.

        * page/TextIndicator.h:
        Add Lifetime and DismissalAnimation enums.

        (WebCore::TextIndicator::contentImageWithHighlight):
        (WebCore::TextIndicator::contentImage):
        Fix style.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::TextIndicatorWindow):
        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
        (WebCore::TextIndicatorWindow::clearTextIndicator):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (WebCore::TextIndicatorWindow::closeWindow):
        (WebCore::TextIndicatorWindow::startFadeOut):
        Rename m_startFadeOutTimer to m_temporaryTextIndicatorTimer (and related).
        This is just about temporary-lifetime TextIndicators, like the ones
        you get when the find-in-page UI is hidden but you hit Cmd-G.

        Add clearTextIndicator, which takes a DismissalAnimation, providing
        clients an opportunity to avoid the normal fade-out animation, if it
        was going to happen.

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183514.
        https://bugs.webkit.org/show_bug.cgi?id=144359

        It broke cloop test bots (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT"
        https://bugs.webkit.org/show_bug.cgi?id=144304
        http://trac.webkit.org/changeset/183514

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Zalan Bujtas  <zalan@apple.com>

        Checkboxes on bugs.webkit.org are painted with stripes at some zoom levels.
        https://bugs.webkit.org/show_bug.cgi?id=144351

        Reviewed by Simon Fraser.

        This patch ensures that CG context is properly restored after painting dashed/dotted lines.

        Test: fast/forms/checkbox-painting-with-hr.html

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

2015-04-28  Simon Fraser  <simon.fraser@apple.com>

        Provide contentsToView() and viewToContents() functions on ScrollView, and use them
        https://bugs.webkit.org/show_bug.cgi?id=144357

        Reviewed by Tim Horton.

        Too much code was consulting topContentInset() and headerHeight() directly. Replace
        with calls to new contentsToView() and viewToContents() functions, which wrap the
        exisiting documentScrollOffsetRelativeToViewOrigin().
        
        Use the new functions in FrameView and ScrollView coordinate mapping functions.
        
        No behavior change.

        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromRendererToContainingView):
        (WebCore::FrameView::convertFromContainingViewToRenderer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::viewToContents):
        (WebCore::ScrollView::contentsToView):
        (WebCore::ScrollView::rootViewToContents):
        (WebCore::ScrollView::contentsToRootView):
        (WebCore::ScrollView::rootViewToTotalContents):
        (WebCore::ScrollView::windowToContents):
        (WebCore::ScrollView::contentsToWindow):
        * platform/ScrollView.h:

2015-04-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Simplify code to support media engines which do not support target playback
        https://bugs.webkit.org/show_bug.cgi?id=144332

        Reviewed by Jer Noble.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): Always make client
        callback, let them decide if it is significant or not.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): m_loadTimer -> m_pendingActionTimer.
        (WebCore::HTMLMediaElement::scheduleDelayedAction): Handle CheckPlaybackTargetCompatablity.
        (WebCore::HTMLMediaElement::scheduleNextSourceChild): m_loadTimer -> m_pendingActionTimer.
        (WebCore::HTMLMediaElement::loadTimerFired): Renamed pendingActionTimerFired.
        (WebCore::HTMLMediaElement::prepareForLoad): m_loadTimer -> m_pendingActionTimer.
        (WebCore::HTMLMediaElement::setDefaultPlaybackRate): Add logging.
        (WebCore::HTMLMediaElement::clearMediaPlayer): m_loadTimer -> m_pendingActionTimer.
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsSupported): Removed.
        (WebCore::HTMLMediaElement::dispatchEvent): If a 'webkitcurrentplaybacktargetiswirelesschanged'
        event is dispatched when the current target is wireless but the media engine does not support
        wireless playback, tell the media engine not to play to the target.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker): Drive-by fix to disallow audio-only files.
        (WebCore::HTMLMediaSession::currentPlaybackTargetIsSupported): Deleted.
        * html/HTMLMediaSession.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isCurrentPlaybackTargetSupported): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Use a RetainPtr
        to explicitly manage the lifetime of the temporary object.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isPlayingToWirelessPlaybackTarget): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetSupported): Deleted.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetSupported): Deleted.

2015-04-28  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Use less memory for CombinedURLFilters.
        https://bugs.webkit.org/show_bug.cgi?id=144290

        Reviewed by Andreas Kling.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::recursiveMemoryUsed):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::createNFAs):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::memoryUsed):
        (WebCore::ContentExtensions::NFA::setActions):
        * contentextensions/NFA.h:
        * contentextensions/NFANode.h:
        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::Term::generateGraph):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        Use Vectors instead of HashTables in PrefixTreeVertex because the sets stay small and need to be more memory efficient.

2015-04-28  Brady Eidson  <beidson@apple.com>

        Consolidate most "frame load" arguments into FrameLoadRequest.
        https://bugs.webkit.org/show_bug.cgi?id=144276

        Reviewed by Alexey Proskuryakov.

        No new tests (No change in behavior).
        
        This patch starts the long overdue process of wrangling the insane load methods in FrameLoader.
        
        Humble beginnings of this long process:
        - Put most of the various "frame load" arguments that are passed around within FrameLoader on FrameLoadRequest.
        - Get rid of the "easy" constructors of FrameLoadRequest, forcing users to actually think about what they're doing.
        - Change a private FrameLoader load method (urlSelected) to take a FrameLoadRequest instead of argument gobbledygook.
        - Change a public FrameLoader load methods (changeLocation) to take a FrameLoadRequest instead of gobbledygook.
        
        These cover the straightforward changes where it was easy to figure out what the values of the FrameLoadRequest
        arguments were from these various call sites.
        
        Further refactoring can be done in much smaller patches, handling fewer cases at a time. Little by little we will be
        able to reduce the number of "load" methods on FrameLoader and make sure that they mainly only take a FrameLoadRequest
        as an argument.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::lockHistory):
        (WebCore::FrameLoadRequest::lockBackForwardList):
        (WebCore::FrameLoadRequest::shouldSendReferrer):
        (WebCore::FrameLoadRequest::allowNavigationToInvalidURL):
        (WebCore::FrameLoadRequest::newFrameOpenerPolicy):
        (WebCore::FrameLoadRequest::shouldReplaceDocumentIfJavaScriptURL):
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/FrameLoader.h:
        
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2015-04-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Implement font-synthesis CSS property
        https://bugs.webkit.org/show_bug.cgi?id=144305

        Reviewed by Andreas Kling.

        This patch is fairly straightforward, though there are some particular pieces to the patch listed below.

        The implementation of this font-synthesis CSS property lives inside FontCacheIOS and FontCacheMac. We already
        determine if we should synthesize bold and italics, this CSS property simply guards that decision.

        Because FontCache interacts with FontDescriptions and not RenderStyles, this patch moves the source of truth
        regarding font-synthesis into FontDescription (from RenderStyle).

        Test: fast/css3-text/font-synthesis.html

        * css/CSSPropertyNames.in: Mark font-synthesis as a FontProperty, which means that the relevant state is kept
        inside FontDescription. This also means that the property must be marked as a "high priority" property, which
        is enforced by it existing at the top of CSSPropertyNames.in. The move to FontDescription must be done so that
        FontCacheIOS and FontCacheMac have access to the saved state.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontSynthesisFromStyle): Update to look for state in FontDescription instead of RenderStyle.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontRanges): Guard the synthetic bold and synthic italic decision on the new
        FontSynthesis state inside FontDescription.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontSynthesis): Moved from
        StyleBuilderCustom::applyValueFontSynthesis(). This is because of the updated options inside of
        CSSPropertyNames.in
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontSynthesis): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription): Moved from RenderStyle.
        (WebCore::FontDescription::fontSynthesis): Ditto.
        (WebCore::FontDescription::setFontSynthesis): Ditto.
        (WebCore::FontDescription::initialFontSynthesis): Ditto.
        (WebCore::FontDescription::operator==): Update to include new state.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionFontDataCacheKey::makeFlagKey): Make FontDescription hashes sensitive to the new
        state inside FontDescription.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::createFontPlatformData): Guard the synthetic bold and synthetic italic decision on the
        new FontSynthesis state inside FontDescription.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/text/TextFlags.h: Move FontSynthesis type from RenderStyleConstants.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontSynthesis): Moved to FontDescription.
        (WebCore::RenderStyle::setFontSynthesis): Ditto.
        (WebCore::RenderStyle::initialFontSynthesis): Ditto.
        * rendering/style/RenderStyleConstants.h: Moved FontSynthesis type to TextFlags.
        * rendering/style/StyleRareInheritedData.h: Remove state regarding font synthesis (moved to FontDescription)

2015-04-28  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        SharedBuffer::copy is not computing the buffer size correctly when having m_dataArray
        https://bugs.webkit.org/show_bug.cgi?id=144321

        Reviewed by Darin Adler.

        Patch correctness covered by existing tests.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::copy): Direct appending to m_dataArray and not using append method as this method updates the SharedBuffer size.

2015-04-28  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Memory leak.
        https://bugs.webkit.org/show_bug.cgi?id=144327

        Reviewed by Brent Fulgham.

        When a data url is loaded, the ResourceHandle is not released.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::startJob):

2015-04-28  Andy Estes  <aestes@apple.com>

        Fix the Mavericks Debug build after r183467.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::requester): Removed WEBCORE_EXPORT.
        (WebCore::ResourceRequestBase::setRequester): Ditto.

2015-04-28  Csaba Osztrogonác  <ossy@webkit.org>

        Remove make-file-arrays.py
        https://bugs.webkit.org/show_bug.cgi?id=144324

        Reviewed by Gyuyoung Kim.

        * make-file-arrays.py: Removed.

2015-04-28  Antti Koivisto  <antti@apple.com>

        Build fix.

        * platform/network/ios/ResourceRequestIOS.mm:
        (WebCore::ResourceRequest::ResourceRequest):

2015-04-28  Antti Koivisto  <antti@apple.com>

        Network Cache: Disk cache getting filled by YouTube video data
        https://bugs.webkit.org/show_bug.cgi?id=144259

        Reviewed by Darin Adler.

        MSE media is loaded via XHR and tends to eventually fill the cache.

        YouTube serves the media chunks cacheable, however they are rarely (if ever) reused.
        We can reduce disk writes and keep more useful resources around by not caching them

        Test: http/tests/cache/disk-cache/disk-cache-media.html

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

            Set the requester.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::streamingMedia):
        * page/DiagnosticLoggingKeys.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::requester):
        (WebCore::ResourceRequestBase::setRequester):

            Add requester type to the request object. Currently this is main resource, xhr or unspecified.

        (WebCore::ResourceRequestBase::encodeWithoutPlatformData):
        (WebCore::ResourceRequestBase::decodeWithoutPlatformData):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::deprecatedSetMainResourceRequest): Deleted.
        (WebCore::ResourceRequest::deprecatedIsMainResourceRequest): Deleted.

            Replace this iOS only field with shared mechanism.

        * platform/network/ios/QuickLook.mm:
        (WebCore::QuickLookHandle::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

            Set the requester.

2015-04-28  Namhoon Kim  <nakim@ea.com>

        Fix windows build error in WebCore related to bulk build.
        https://bugs.webkit.org/show_bug.cgi?id=144313

        Reviewed by Csaba Osztrogonác.

        No new tests because there is no behavior change.

        * css/CSSAllInOne.cpp:
        * dom/DOMAllInOne.cpp:

2015-04-27  Simon Fraser  <simon.fraser@apple.com>

        Eliminate styleDidChange with StyleDifferenceEqual when updates are actually necessary
        https://bugs.webkit.org/show_bug.cgi?id=144198

        Followup: fix assertions seen in fullscreen and pseudo-element tests. These code
        paths set the style to the existing pointer, but with a SyntheticStyleChange.
        We have to avoid an early return in this case.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setStyle):

2015-04-25  Simon Fraser  <simon.fraser@apple.com>

        Eliminate styleDidChange with StyleDifferenceEqual when updates are actually necessary
        https://bugs.webkit.org/show_bug.cgi?id=144198

        Reviewed by Darin Adler, Antti Koivisto.
        
        SyntheticStyleChange style recalcs are triggered for cases where behavior depends
        on state which is outside of RenderStyle; this includes triggering compositing for
        animations, for video and canvas, and for iframes with composited content.
        
        In these cases, we'd run through RenderElement::setStyle() and its fan-out, but
        with diff == StyleDifferenceEqual, and so be unable to determine if there
        is actual work to be done.
        
        This patch enforces the contract that the diff is never StyleDifferenceEqual if
        compositing or other work has to happen from setStyle(). This is achieved by
        passing in a 'hasSideEffects' flag, which causes the diff to become at least
        StyleDifferenceRecompositeLayer.
        
        RenderLayerCompositor::layerStyleChanged() can now safely early return
        if the diff is equal. Future patches will reduce redundant work even more.

        Test: compositing/animation/no-style-recalc-during-accelerated-animation.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::animate): Returns a bool now if the state changed.
        (WebCore::AnimationBase::state):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations): bool out param which indicates
        whether any animations changed state.
        * page/animation/AnimationController.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate): If any transitions or animations changed
        state, set the animationStateChanged out param to true.
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate): Return true if the state changed.
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate): Return true if the state changed.
        * page/animation/KeyframeAnimation.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference): We may enter here now with diff
        != StyleDifferenceEqual, but still need to do the check to see if layers changed.
        (WebCore::RenderElement::initializeStyle): When setting style for the first time,
        don't use StyleDifferenceEqual.
        (WebCore::RenderElement::setStyle): Additional flag to indicate whether this style
        change involves side effects. If the diff is equal but the flag is set, change
        the diff to StyleDifferenceRecompositeLayer (the "lowest" non-zero diff).
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setAnimatableStyle): Pass true to setStyle() if hasSideEffects
        is true, or if animation state changed.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged): Pass the diff down.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerStyleChanged): Return if the diff is equal.
        * rendering/RenderLayerCompositor.h:
        * rendering/style/RenderStyleConstants.h: StyleDifferenceNewStyle is used when
        setting style for the first time.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::createRendererIfNeeded): Provide animationsChanged bool (which is unused).
        (WebCore::Style::resolveLocal): If the style change is synthetic, set the flag that
        says there are side-effects.

2015-04-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Add one single option to control all OpenGL-related options
        https://bugs.webkit.org/show_bug.cgi?id=144105

        Reviewed by Martin Robinson.

        Test WTF_USE_TEXTURE_MAPPER since USE_TEXTURE_MAPPER has been removed.

        * PlatformGTK.cmake:

2015-04-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Consolidate one-line flag-related header files into TextFlags.h
        https://bugs.webkit.org/show_bug.cgi?id=144295

        Reviewed by Tim Horton.

        There were a collection of single-line header files throughout platform/ which contain
        single-line type declaractions of flags related to text layout & rendering. This patch
        consolidates all these single-line headers into TextFlags.h

        No new tests because there is no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFace.h:
        * css/CSSPrimitiveValueMappings.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedTextTrack.h:
        * page/Settings.h:
        * platform/DragImage.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontOrientation.h: Removed.
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/FontRenderingMode.h: Removed.
        * platform/graphics/FontSmoothingMode.h: Removed.
        * platform/graphics/FontTraitsMask.h: Removed.
        * platform/graphics/FontWidthVariant.h: Removed.
        * platform/graphics/TextRenderingMode.h: Removed.
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/text/NonCJKGlyphOrientation.h: Removed.
        * platform/text/TextFlags.h:
        * rendering/TextPainter.h:
        * style/StyleFontSizeFunctions.h:

2015-04-27  Daniel Bates  <dabates@apple.com>

        Form control may be associated with the wrong HTML Form element after form id change
        https://bugs.webkit.org/show_bug.cgi?id=133456
        <rdar://problem/17095055>

        Reviewed by Andy Estes.

        Fixes an issue where a form control may be associated with the wrong HTML Form element
        after the id of the HTML Form element associated with the form control is changed when
        there is more than one HTML Form element with the same id in the document. Specifically,
        a form control that has an HTML form attribute value X will always be associated with
        some HTML Form element f where f.id = X regardless of whether f.id is subsequently
        changed.

        Tests: fast/forms/change-form-id-to-be-unique-then-submit-form.html
               fast/forms/change-form-id-to-be-unique.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): Notify observers when the id of an element changed.
        (WebCore::Element::updateId): Added parameter NotifyObservers (defaults to NotifyObservers::Yes),
        as to whether we should notify observers of the id change.
        (WebCore::Element::updateIdForTreeScope): Ditto.
        (WebCore::Element::willModifyAttribute): Do not notify observers of the id change immediately. As
        indicated by the name of this method, we plan to modify the DOM attribute id of the element, but
        we have not actually modified it when this method is called. Instead we will notify observers
        in Element::attributeChanged(), which is called after the DOM attribute id is modified.
        (WebCore::Element::cloneAttributesFromElement): Ditto.
        * dom/Element.h: Defined enum class NotifyObservers.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::addElementById): Added boolean parameter notifyObservers (defaults to true)
        as to whether we should dispatch a notification to all observers.
        (WebCore::TreeScope::removeElementById): Ditto.
        * dom/TreeScope.h:

2015-04-27  Alex Christensen  <achristensen@webkit.org>

        Reduce allocations and memory usage when compiling content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=144277

        Reviewed by Benjamin Poulain.

        Covered by existing tests.

        * contentextensions/Term.h:
        (WebCore::ContentExtensions::Term::CharacterSet::set):
        (WebCore::ContentExtensions::Term::CharacterSet::get):
        (WebCore::ContentExtensions::Term::CharacterSet::invert):
        (WebCore::ContentExtensions::Term::CharacterSet::inverted):
        (WebCore::ContentExtensions::Term::CharacterSet::bitCount):
        (WebCore::ContentExtensions::Term::CharacterSet::operator==):
        (WebCore::ContentExtensions::Term::CharacterSet::hash):
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::addCharacter):
        (WebCore::ContentExtensions::Term::isEndOfLineAssertion):
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        Use two uint64_t's instead of a BitVector with a capacity of 128 bits.

2015-04-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Rename WTF_USE_3D_GRAPHICS to ENABLE_GRAPHICS_CONTEXT_3D
        https://bugs.webkit.org/show_bug.cgi?id=144193

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        * platform/graphics/FormatConverter.cpp:
        * platform/graphics/FormatConverter.h:
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        * platform/graphics/OpenGLShims.cpp:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        * platform/graphics/glx/GLContextGLX.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/win/GraphicsContext3DWin.cpp:

2015-04-27  Jer Noble  <jer.noble@apple.com>

        [iOS] Video not centered in element on retina devices
        https://bugs.webkit.org/show_bug.cgi?id=144274

        Reviewed by Simon Fraser.

        In r173702, a transform was added to the video layer (and a matching, inverse transform
        in the UIProcess), but this transform affects the position property of the video layer
        used to position the video content within the element bounds when their aspect ratios
        do not match.

        To work around this problem, pre-apply the transform during -setPosition:.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebVideoContainerLayer setPosition:]):

2015-04-27  Jer Noble  <jer.noble@apple.com>

        Add a setting & restriction which prevents non-interactivte playback of audible media elements.
        https://bugs.webkit.org/show_bug.cgi?id=143486

        Reviewed by Eric Carlson.

        Tests: media/audio-playback-restriction-autoplay.html
               media/audio-playback-restriction-play.html

        To allow clients who want to allow non-user-interactive video-only playback, but still
        restrict playback of audible media elements, add a new setting and matching restriction
        which disallows playback of media elements containing audible characteristics.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Set the RequireUserGestureForAudioRateChange
            restriction if the audioPlaybackRequiresUserGesture() setting is set.
        (WebCore::HTMLMediaElement::parseAttribute): Drive-by fix. Move the opening brace
            out of the #if, as this confuses the heck out of diff and makes all subsequent
            changes appear to be within HTMLMediaElement::parseAttribute.
        (WebCore::HTMLMediaElement::autoplay): Remove the restriction check from within autoplay().
            It is checked again immediately after every autoplay() call site.
        (WebCore::HTMLMediaElement::pauseInternal): Remove the iOS-only #if.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack): Check whether playback
            is permitted, and if not, pause.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Ditto.
        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): Since BehaviorRestrictions is a bitfield, check each bit
            individually.
        (WebCore::HTMLMediaSession::removeBehaviorRestriction): Handle RequireUserGestureForAudioRateChange.
        (WebCore::HTMLMediaSession::playbackPermitted): Check whether the element has audio and 
            audio playback is restricted, and return false if so.
        * html/HTMLMediaSession.h:
        * page/Settings.cpp:
        * page/Settings.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Added. 
        (WebCore::Internals::setMediaElementRestrictions): Added.
        * testing/Internals.h:
        * testing/Internals.idl:

2015-04-27  Jer Noble  <jer.noble@apple.com>

        [WebAudio] AudioContext does not remove user-gesture restriction during resume()
        https://bugs.webkit.org/show_bug.cgi?id=144211

        Reviewed by Eric Carlson.

        Tests: webaudio/audiocontext-restriction-audiobuffersourcenode-start.html
               webaudio/audiocontext-restriction.html

        Before the introduction of resume(), suspend(), and stop(), AudioContexts which required
        a user-gesture would start normally, but would effectively mute their outputs. Now that
        the AudioContext's state property is exposed to JavaScript, the AudioContext should stay
        in the "suspended" state until the user-gesture restriction is lifted.

        Add a new method, willBeginPlayback() which checks and potentially clears the context's
        behavior restrictions before checking with the MediaSession. Call this new willBeginPlayback()
        method when the state would transition to "running".

        Because they may be called before any nodes are created, make sure to call lazyInitialize()
        from within the JS-exposed resumePlayback(), suspendPlayback(), and stopPlayback() methods.

        Instead of clearing the behavior restrictions directly, scheduled AudioNodes should instead
        call a new method nodeWillBeginPlayback(). Because existing sites will call AudioNode.start()
        inside a user-gesture handler to clear the user-gesture restriction, call startRendering()
        from nodeWillBeginPlayback(). But because we don't want AudioNode.start() to resume playback
        unconditionally, only do so when the user-gesture restriction is set.

        Now that an AudioContext will not transition to "running" state without a user-gesture (if
        that restriction is set), there's no reason to check for that restriction from inside
        AudioDestinationNode.

        Add some internal methods to set and clear AudioContext BehaviorRestrictions for testing purposes.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::startPlaying):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::nodeWillBeginPlayback):
        (WebCore::AudioContext::willBeginPlayback):
        (WebCore::AudioContext::willPausePlayback):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::suspendContext):
        (WebCore::AudioContext::resumeContext):
        (WebCore::AudioContext::closeContext):
        (WebCore::AudioContext::suspendPlayback):
        (WebCore::AudioContext::mayResumePlayback):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::behaviorRestrictions):
        (WebCore::AudioContext::userGestureRequiredForAudioStart):
        (WebCore::AudioContext::pageConsentRequiredForAudioStart):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::render):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::start):
        * testing/Internals.cpp:
        (WebCore::Internals::setAudioContextRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-04-27  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * accessibility/mac/AXObjectCacheMac.mm: (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        Use -setObject:forKey:, not array subscript.

2015-04-27  Eric Carlson  <eric.carlson@apple.com>

        WirelessTargetPicker should not be visible unless a file is playable
        https://bugs.webkit.org/show_bug.cgi?id=144271
        <rdar://problem/20712003>

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.isPlayable): New.
        (Controller.prototype.setStatusHidden): Call updateWirelessTargetAvailable.
        (Controller.prototype.updateWirelessTargetAvailable): Don't show the button until the
            status message has been hidden.

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

        [CMake] Autogenerate cmakeconfig.h.cmake
        https://bugs.webkit.org/show_bug.cgi?id=143997

        Reviewed by Csaba Osztrogonác.

        * PlatformGTK.cmake: Use the WTF_USE style variables, because those are the same
        as the ones exposed to the build.

2015-04-27  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Wrong text offsetting when range does not start from the first renderer.
        https://bugs.webkit.org/show_bug.cgi?id=144167
        rdar://problem/20639857

        Reviewed by Simon Fraser.

        This patch ensures that TextIterator returns the right text when the input range starts
        from a sibling node.

        TextIterator::m_previousTextLengthInFlow keeps track of the current node offset from the parent.
        It is required to map simple line layout runs to RenderText positions.
        This patch sets the offset value when the iteration start with a sibling node.

        Test: fast/text/range-text-with-simple-line-layout.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::handleTextNode):

2015-04-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183393.
        https://bugs.webkit.org/show_bug.cgi?id=144272

        Caused memory corruption detected by GuardMalloc (Requested by
        ap on #webkit).

        Reverted changeset:

        "Synchronous XMLHttpRequest should get access to AppCache
        resources stored as flat files"
        https://bugs.webkit.org/show_bug.cgi?id=143711
        http://trac.webkit.org/changeset/183393

2015-04-27  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Favicons loaded from disc cache are ignored.
        https://bugs.webkit.org/show_bug.cgi?id=143953

        Reviewed by Alex Christensen.

        When a favicon is loaded from the Curl disc cache, the icon data is thrown away.
        This happens because we give a 304 response, which makes the icon loader ignore
        the response. We can solve this by responding with 200 OK.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2015-04-27  Brady Eidson  <beidson@apple.com>

        Make 'enum NavigationType' be an enum class
        https://bugs.webkit.org/show_bug.cgi?id=144270

        Reviewed by Alex Christensen.

        No new tests (No change in behavior).

        I’ll be adding a new NavigationType for bug 144269 so it makes sense to make this
        an enum class first.

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

        * loader/NavigationAction.cpp:
        (WebCore::navigationType):
        (WebCore::NavigationAction::NavigationAction):

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::type):

2015-04-27  Yoav Weiss  <yoav@yoav.ws>

        Fix viewport units in Media Queries
        https://bugs.webkit.org/show_bug.cgi?id=144260

        Reviewed by Darin Adler.

        This patch makes sure that viewport units are considered "length units"
        in the context of Media Queries, by having MediaQueryExp use the unit logic
        that is in CSSPrimitiveValue.
        It does that by turning the relevant methods in CSSPrimitiveValue into static.

        It also makes sure that the logic for "resolution units" is not maintained separately 
        in MediaQueryExp, to avoid similiar issues in the future with resolution units.

        Test: fast/media/mq-viewport-units.html

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isViewportPercentageLength): Added a static variant.
        (WebCore::CSSPrimitiveValue::isLength): Added a static variant.
        (WebCore::CSSPrimitiveValue::isResolution): Added a static variant.
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithValidPositiveLenghtOrNumber): Call CSSPrimitiveValue's length unit logic.
        (WebCore::featureWithValidDensity): Call CSSPrimitiveValue's resolution unit logic.

2015-04-27  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Support for the justify-self and justify-items in grid layout
        https://bugs.webkit.org/show_bug.cgi?id=133280

        Reviewed by David Hyatt.

        Implementation of justify-self and justify-items properties for grid. It supports
        different writing-modes and direction. Margins, borders and paddings are also
        considered when computing the final position and stretched size.

        This patch applies also a quite important refactoring of the alignment logic in
        order to share code between the two alignment dimensions, row-axis and column-axis.

        Overflow handling is still missing and will be added later in a follow-up bug.

        Tests: fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-lr.html
               fast/css-grid-layout/grid-align-justify-margin-border-padding-vertical-rl.html
               fast/css-grid-layout/grid-align-justify-margin-border-padding.html
               fast/css-grid-layout/justify-self-cell.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::columnAxisPositionForChild):
        (WebCore::RenderGrid::rowAxisPositionForChild):
        (WebCore::RenderGrid::rowPositionForChild):
        (WebCore::RenderGrid::columnPositionForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::allowedToStretchLogicalHeightForChild): Deleted.
        (WebCore::RenderGrid::needToStretchChildLogicalHeight): Deleted.
        (WebCore::RenderGrid::marginLogicalHeightForChild): Deleted.
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching): Deleted.
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded): Deleted.
        * rendering/RenderGrid.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolveJustification):
        * rendering/style/RenderStyle.h:

2015-04-27  Darin Adler  <darin@apple.com>

        Crashes under IDBDatabase::closeConnection
        https://bugs.webkit.org/show_bug.cgi?id=141745

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::~IDBDatabase): Do the work of close/closeConnection without
        actually calling those functions.
        (WebCore::IDBDatabase::closeConnection): Protect the database so it's not destroyed
        in the middle of this function's execution.

2015-04-27  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStream constructor start function should be able to close the stream
        https://bugs.webkit.org/show_bug.cgi?id=143363

        Reviewed by Benjamin Poulain.

        Implements https://streams.spec.whatwg.org/#close-readable-stream.
        When the "close" JS function is called, the stream is getting closed.
        The stream state is changed to close and if it has a reader, the reader gets closed as well:
        The reader resolves the closed promise and releases the stream.

        Enabled the possibility to resolve a promise with any JS value.
        This is used to resolve closed promise with jsUndefined and will be used for read promises in
        the future as well, though of course it is not restricted to Streams.

        Covered by reference tests that are now passing.

        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToClosed): Called by the JS function 'close'.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::ReadableStreamReader): Initialized stream.
        (WebCore::ReadableStreamReader::initialize): Added to handle state change at constructor time
        in particular closed/errored state.
        (WebCore::ReadableStreamReader::releaseStream): Releases the stream.
        (WebCore::ReadableStreamReader::closed): Stores the promise callbacks and invokes success
        immediately if the stream is already closed.
        (WebCore::ReadableStreamReader::changeStateToClosed): Changes the internal state to closed,
        resolves the promise and releases the stream.
        * Modules/streams/ReadableStreamReader.h:
        (WebCore::ReadableStreamReader::State): Added.
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve<JSC::JSValue>): Adds the ability to resolve a promise with
        a custom JS value.
        * bindings/js/JSReadableStreamControllerCustom.cpp:
        (WebCore::JSReadableStreamController::close): Not "notImplemented" anymore. Now it closes the
        stream.
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed): Resolves the promise with undefined.

2015-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(CSS_GRID_LAYOUT) build after r183370
        https://bugs.webkit.org/show_bug.cgi?id=144255

        Reviewed by Carlos Garcia Campos.

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

2015-04-27  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Synchronous XMLHttpRequest should get access to AppCache resources stored as flat files
        https://bugs.webkit.org/show_bug.cgi?id=143711

        Reviewed by Darin Adler.

        This patch checks whether a substitute resource data is stored in memory or in file for synchronous loads.
        If data is stored in file, it reads the data through SharedBuffer::createWithContentsOfFile.
        This patch refactors some routines to replace Vector<char> by SharedBuffer to transmit response data.

        Test: http/tests/appcache/simple-video-sync.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::createFileURL):
        (WebCore::ApplicationCacheHost::maybeLoadSynchronously):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackSynchronously):
        * loader/appcache/ApplicationCacheHost.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2015-04-24  Philippe Normand  <pnormand@igalia.com>

        [JHBuild] Move to upstream OpenWebRTC
        https://bugs.webkit.org/show_bug.cgi?id=144145

        Reviewed by Carlos Garcia Campos.

        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.cpp:
        (WebCore::initializeOpenWebRTC): Update with new owr_init API.

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add initial implementation of NetworkProcess disk cache
        https://bugs.webkit.org/show_bug.cgi?id=143872

        Reviewed by Martin Robinson.

        Allow to create a GRefPtr for SoupBuffer. Even though SoupBuffer
        is not a GObject and has copy/free functions instead of ref/unref,
        it's internally refcounted, so we could use copy/free as
        ref/unref.

        * PlatformGTK.cmake:
        * platform/network/soup/GRefPtrSoup.cpp: Added.
        (WTF::refGPtr):
        (WTF::derefGPtr):
        * platform/network/soup/GRefPtrSoup.h: Added.

2015-04-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] LayoutBox::hasDefiniteLogicalHeight() should consider abspos boxes as definite
        https://bugs.webkit.org/show_bug.cgi?id=144144

        Reviewed by Darin Adler.

        Change order in hasDefiniteLogicalHeight() ifs to consider definite
        absolutely positioned elements.

        Test: fast/css-grid-layout/percent-track-breadths-regarding-container-size.html

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

2015-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGFilterBuilder should drive the builtin sourceAlpha from the passed sourceGraphic
        https://bugs.webkit.org/show_bug.cgi?id=144137

        Reviewed by Darin Adler.

        The SourceAlpha should be driven from the last applied FilterEffect. This
        will require the SourceAlpha FilterEffect to wrap a FilterEffect rather
        than just getting the SourceGraphic reference from FilterEffectRenderer.

        This is based on the Blink patch:
        https://src.chromium.org/viewvc/blink?revision=194115&view=revision.

        Test: svg/filters/sourceAlpha-input-filter-effect.html
        
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::create): Make SourceAlpha wraps a FilterEffect
        rather than a Filter.
        
        (WebCore::SourceAlpha::determineAbsolutePaintRect): Determine the paint
        rect from the wrapped FilterEffect.
        
        (WebCore::SourceAlpha::platformApplySoftware): Extract the alpha channel
        from the wrapped FilterEffect.
        
        (WebCore::SourceAlpha::SourceAlpha): 
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::SourceAlpha): Deleted.
        Reimplement the constructor of the SourceAlpha such that it wraps the
        sourceEffect in its inputEffects.
    
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter): Delete the FIXME
        comment and do exactly what it said. This matches the implementation of
        Gecko and Blink.
        
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        Delete the extra argument.

        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::SVGFilterBuilder):
        * svg/graphics/filters/SVGFilterBuilder.h: Drive the SourceAlpha from the
        passed source FilterEffect.

        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        Code clean up: Pointer to reference conversion. It starts by converting
        FilterEffect::m_filter from pointer to reference and it kept expanding.
        All the creations of FilterEffect were happening by passing "this" so
        passing "*this" did not require to check whether the pointer is nil.

        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        Code clean up: Pointer to reference and PassRefPtr<> to RefPtr<> or Ref<>
        conversion.

2015-04-26  Darin Adler  <darin@apple.com>

        REGRESSION (r174283): disabled default buttons use impossible-to-read white text on Mac
        https://bugs.webkit.org/show_bug.cgi?id=144237

        Reviewed by Simon Fraser.

        No test because DumpRenderTree and WebKitTestRunner don't have a good method
        for testing behaviors that are specific to active windows. That's the same reason
        that the change that caused this bug didn't come with a regression test.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Renamed "e" to "element". Added a comment to
        clarify the meaning of the setInsideDefaultButton function, and added an
        isDisabledFormControl check so it won't trigger on a disabled button.
        (WebCore::RenderTheme::systemColor): Moved CSSValueActivebuttontext into
        alphabetical order to match the rest of the switch statement ordering.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor): Moved CSSValueActivebuttontext into
        alphabetical order to match the rest of the switch statement ordering. Also
        fixed its behavior on older versions of OS X; it should just return the same
        thing that CSSValueButtontext would return in that context.

2015-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement ES6 template literals
        https://bugs.webkit.org/show_bug.cgi?id=142691

        Reviewed by Darin Adler.

        Add ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX compile time flag.

        * Configurations/FeatureDefines.xcconfig:

2015-04-26  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Support for align-self and align-items in grid layout
        https://bugs.webkit.org/show_bug.cgi?id=133225

        Reviewed by Darin Adler.

        Implementation of align-self and align-items properties for grid. It supports
        different writing-modes and direction. Margins, borders and paddings are also
        considered when computing the final position and stretched size.

        Overflow handling is still missing and will be added when implemented row-axis
        alignment support.

        Test: fast/css-grid-layout/grid-align.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::computeOverflowAlignmentOffset):
        (WebCore::RenderGrid::endOfRowForChild):
        (WebCore::RenderGrid::startOfRowForChild):
        (WebCore::RenderGrid::centeredRowPositionForChild):
        (WebCore::marginWidthForChild):
        (WebCore::marginHeightForChild):
        (WebCore::RenderGrid::allowedToStretchLogicalHeightForChild):
        (WebCore::RenderGrid::needToStretchChildLogicalHeight):
        (WebCore::RenderGrid::marginLogicalHeightForChild):
        (WebCore::RenderGrid::availableAlignmentSpaceForChildBeforeStretching):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        (WebCore::RenderGrid::rowPositionForChild):
        (WebCore::RenderGrid::findChildLogicalPosition):
        (WebCore::RenderGrid::populateGridPositions): Deleted.
        * rendering/RenderGrid.h:

2015-04-26  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType,
        postTextStateChangeNotification and postTextReplacementNotification to give assistive
        tech apps more reliable context for responding to changes in web content. Also implement
        a mechanism to post value changes in password form fields in coalesced ticks to thwart
        analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent,
        and an overload of postTextReplacementNotification to give assistive tech apps more
        reliable context for responding to changes in web content selection. Also block posting
        selection changes on password fields.

        Tests: platform/mac/accessibility/input-replacevalue-userinfo.html
               platform/mac/accessibility/selection-change-userinfo.html
               platform/mac/accessibility/value-change-userinfo.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::passwordNotificationPostTimerFired):
        (WebCore::AXObjectCache::showIntent):
        (WebCore::AXObjectCache::setTextSelectionIntent):
        (WebCore::isPasswordFieldOrContainedByPasswordField):
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::enqueuePasswordValueChangeNotification):
        (WebCore::AXObjectCache::rootWebArea):
        (WebCore::AXObjectCache::textChangeForEditType):
        (WebCore::AXObjectCache::selectedChildrenChanged): Deleted.
        (WebCore::AXObjectCache::frameLoadingEventNotification): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        (WebCore::AXObjectCache::textChangeForEditType):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::computedObjectAttributeCache): Deleted.
        (WebCore::AXObjectCache::getOrCreate): Deleted.
        (WebCore::AXObjectCache::attachWrapper): Deleted.
        * accessibility/AXTextStateChangeIntent.h: Added.
        (WebCore::AXTextStateChangeIntent::AXTextStateChangeIntent):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::passwordFieldOrContainingPasswordField):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isContainedByPasswordField):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::passwordFieldOrContainingPasswordField):
        (WebCore::AccessibilityObject::isPasswordField): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::setShouldRepostNotificationsForTests):
        (WebCore::AXPostNotificationWithUserInfo):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::textReplacementChangeDictionary):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (+[WebAccessibilityObjectWrapperBase accessibilitySetShouldRepostNotifications:]):
        (-[WebAccessibilityObjectWrapperBase accessibilityPostedNotification:]):
        (arrayRemovingNonJSONTypes):
        (dictionaryRemovingNonJSONTypes):
        (-[WebAccessibilityObjectWrapperBase accessibilityPostedNotification:userInfo:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (textMarkerRangeFromVisiblePositions):
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        (WebCore::sendAXTextChangedIgnoringLineBreaks):
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::applyBlockStyle): Deleted.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapplyEditType):
        (WebCore::CompositeEditCommand::CompositeEditCommand):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::insertParagraphSeparator):
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::appendNode):
        (WebCore::CompositeEditCommand::removeNodePreservingChildren):
        (WebCore::CompositeEditCommand::insertTextIntoNode):
        (WebCore::CompositeEditCommand::deleteTextFromNode):
        (WebCore::CompositeEditCommand::replaceTextInNode):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::EditCommandComposition::getNodesInCommand): Deleted.
        (WebCore::CompositeEditCommand::applyStyle): Deleted.
        (WebCore::CompositeEditCommand::insertLineBreak): Deleted.
        (WebCore::CompositeEditCommand::insertNodeAt): Deleted.
        (WebCore::CompositeEditCommand::removeChildrenInRange): Deleted.
        (WebCore::CompositeEditCommand::inputText): Deleted.
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand):
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        (WebCore::DeleteFromTextNodeCommand::deletedText):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::preservesTypingStyle): Deleted.
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::insertTextRunWithoutNewlines):
        (WebCore::DictationCommand::insertParagraphSeparator):
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        (WebCore::EditCommand::editingAction):
        (WebCore::EditCommand::applyEditType):
        (WebCore::EditCommand::unapplyEditType):
        (WebCore::SimpleEditCommand::SimpleEditCommand):
        (WebCore::SimpleEditCommand::notifyAccessibilityForTextChange):
        (WebCore::EditCommand::setParent): Deleted.
        * editing/EditCommand.h:
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::replaceSelectionWithText):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::transpose):
        (WebCore::Editor::changeSelectionAfterCommand):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertFragment):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo):
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::isBoundary):
        (WebCore::FrameSelection::textSelectionIntent):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::modifyMovingBackward): Deleted.
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Deleted.
        (WebCore::FrameSelection::selectionAtWordStart): Deleted.
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        (WebCore::FrameSelection::selection): Deleted.
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        (WebCore::InsertIntoTextNodeCommand::insertedText):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::InsertTextCommand):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::create):
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        * editing/ReplaceDeleteFromTextNodeCommand.cpp: Copied from Source/WebCore/editing/AppendNodeCommand.h.
        (WebCore::ReplaceDeleteFromTextNodeCommand::ReplaceDeleteFromTextNodeCommand):
        (WebCore::ReplaceDeleteFromTextNodeCommand::notifyAccessibilityForTextChange):
        * editing/ReplaceDeleteFromTextNodeCommand.h: Copied from Source/WebCore/editing/AppendNodeCommand.h.
        * editing/ReplaceInsertIntoTextNodeCommand.cpp: Added.
        (WebCore::ReplaceInsertIntoTextNodeCommand::ReplaceInsertIntoTextNodeCommand):
        (WebCore::ReplaceInsertIntoTextNodeCommand::notifyAccessibilityForTextChange):
        * editing/ReplaceInsertIntoTextNodeCommand.h: Copied from Source/WebCore/editing/RemoveNodePreservingChildrenCommand.h.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::InsertedNodes::didReplaceNode): Deleted.
        (WebCore::ReplaceSelectionCommand::insertAsListItems): Deleted.
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::DictationCommandIOS):
        * editing/ios/DictationCommandIOS.h:
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::setInitialKeyboardSelection):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):

2015-04-26  Darin Adler  <darin@apple.com>

        REGRESSION (r176751): line-height ignored in <button> elements
        https://bugs.webkit.org/show_bug.cgi?id=144234

        Reviewed by Antti Koivisto.

        Test: fast/forms/button-line-height.html

        The theme code was overriding line heights on all themed form controls.
        Instead it should have only overridden line height when the theme overrides the font.
        For <input type=button> on Mac, the theme always overrides the font, but for
        other elements like <button> it does not.

        * platform/Theme.h: Changed controlFont to return an Optional so we can tell
        when the theme is overriding the font. Otherwise if the font from the user-agent
        style sheet and the font from the theme are the same, we will think we are not
        overriding the font when we actually are.

        * platform/mac/ThemeMac.h: Updated controlFont to return Optional.
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlFont): Ditto.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Set line height only if the font is
        overriden by the theme, all the time for PushButtonPart on Mac, and not at all
        for other parts. Also tightened up the logic a little since RenderStyle's
        setFontDescription already does an "==" comparison; we don't have to do
        that twice.

2015-04-26  Darin Adler  <darin@apple.com>

        REGRESSION (r173801): Use after free in WebCore::NotificationCenter::~NotificationCenter
        https://bugs.webkit.org/show_bug.cgi?id=137163

        Reviewed by Andy Estes.

        Test: fast/notifications/request-notification-permission-while-reloading.html

        The test doesn't crash under WebKit2, but that's still OK for our purposes.

        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationCenter): Initialize m_timer.
        (WebCore::NotificationCenter::createNotification): Moved here from the header.
        (WebCore::NotificationCenter::requestPermission): Start the timer and ref the notification
        center when we need to defer a callback. Also use a lambda for the callback and changed
        the argument to match what the bindings actually pass. Before we said PassRefPtr, but the
        bindings were not transferring ownership of the VoidCallback. The new type is a little
        strange but it's consistent with how the bindings work right now.
        (WebCore::NotificationCenter::timerFired): Added. Calls all the callbacks, then does a deref
        to match the ref we did above.
        (WebCore::NotificationCenter::requestTimedOut): Deleted.
        (WebCore::NotificationCenter::NotificationRequestCallback::createAndStartTimer): Deleted.
        (WebCore::NotificationCenter::NotificationRequestCallback::NotificationRequestCallback): Deleted.
        (WebCore::NotificationCenter::NotificationRequestCallback::startTimer): Deleted.
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired): Deleted.

        * Modules/notifications/NotificationCenter.h: Reorganized the header to be a bit more tidy.
        Changed the argument type for requestPermission to match the reality of what's passed by the
        bindings. Removed NotificationRequestCallback and replaced the m_callbacks HashSet with a
        vector of std::function.

2015-04-26  Simon Fraser  <simon.fraser@apple.com>

        Modernize animations code
        https://bugs.webkit.org/show_bug.cgi?id=144196

        Reviewed by Darin Adler.
        
        General cleanup in animation-related code.
        
        Use C++ references where possible. Use modern loops. Make classes fast-allocated.
        Use C++11 member initialization. Order member variables to optimize packing.
        
        This removes some null checks in CompositeAnimation, but the values in m_transitions
        and m_keyframeAnimations can never be null.
        
        No behavior change.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::animationsMatch):
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::animation):
        (WebCore::AnimationBase::setAnimation):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensureCompositeAnimation):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::CompositeAnimation):
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::computeExtentOfTransformAnimation):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::create):
        (WebCore::CompositeAnimation::animationController):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::ImplicitAnimation):
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/ImplicitAnimation.h:
        (WebCore::ImplicitAnimation::create):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle):
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        (WebCore::KeyframeAnimation::overrideAnimations):
        (WebCore::KeyframeAnimation::resumeOverriddenAnimations):
        (WebCore::KeyframeAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.h:
        * platform/animation/Animation.cpp:
        (WebCore::Animation::animationsMatch):
        * platform/animation/Animation.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::performOverlapTests):
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeList::properties):
        (WebCore::KeyframeList::keyframes):
        (WebCore::KeyframeList::beginProperties): Deleted.
        (WebCore::KeyframeList::endProperties): Deleted.
        (WebCore::KeyframeList::operator[]): Deleted.
        * rendering/style/RenderStyle.h:

2015-04-25  Simon Fraser  <simon.fraser@apple.com>

        Expand compositing coverage rect when scrolling and animating
        https://bugs.webkit.org/show_bug.cgi?id=144214
        rdar://problem/20695926

        Reviewed by Darin Adler.
        
        r183300 added a secondary rect that gets mapped through graphics layers during
        layer flushing, which represents a rect, in layer coordinates, that represents
        the portion of this layer that's visible in the viewport.
        
        This patch extends that rect based on scrolling and animating, with the extended
        coverage rect being mapped into descendants (where it's used to determine whether
        they should detach their backing store). This required moving the responsibility for
        extending the coverage rect from TileController (where it was used to compute
        tiled extent), to GraphicsLayerCA. Thus, GraphicsLayerCA now owns the concept
        of coverage rect, and pushes it onto TileControllers.

        Test: compositing/tiling/transform-origin-tiled.html

        * platform/graphics/TiledBacking.h: Coverage rect is now pushed onto
        TiledBacking from outside; new functions reflect that.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): No need to pass
        old visible rect to commitLayerChangesBeforeSublayers.
        (WebCore::accumulatesTransform):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush): Now calls computeVisibleAndCoverageRect(),
        then adjustCoverageRect() which adjusts for scrolling and animations.
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect): Fetch the coverage rect from the
        TransformState, but we can only use this if mapping it through various transforms didn't clamp
        it (which can happen with severe rotations in perspective).
        (WebCore::GraphicsLayerCA::adjustCoverageRect): If this layer represents the page tiled backing,
        ask the TileController to do coverage adjustment (code which should move into here eventually).
        For other tiled layers, do motion-based adjustment. This should really be done for all layers
        (an animating non-tiled layer may contain a tiled layer).
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects): The VisibleRectChanged wasn't needed
        any more; layers only react to changed in coverage rect now.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): If adjustCoverageRect() changed the
        coverage rect, here we push the new rect back into the TransformState so it will affect
        descendants.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCoverage): Coverage and backing store attachment go
        hand-in-hand now.
        (WebCore::GraphicsLayerCA::changeLayerTypeTo):
        (WebCore::GraphicsLayerCA::computeVisibleRect): Deleted.
        (WebCore::GraphicsLayerCA::updateBackingStoreAttachment): Deleted.
        (WebCore::GraphicsLayerCA::updateVisibleRect): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setVisibleRect): Visible rect is only used for scroll performance
        logging now.
        (WebCore::TileController::setCoverageRect):
        (WebCore::TileController::tilesWouldChangeForCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::boundsForSize): This is required because when computeTileCoverageRect()
        is called at the top of committing the owning layer, we haven't yet pushed a new size to the
        underlying platform layer (which TileController::bounds() consults).
        (WebCore::TileController::bounds):
        (WebCore::TileController::computeTileCoverageRect): Have to push the new size in, since the
        underlying layer hasn't been updated yet.
        (WebCore::TileController::didRevalidateTiles):
        (WebCore::TileController::tilesWouldChangeForVisibleRect): Deleted.
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap): Add a layer to the tile map that shows 
        a dark blue outline for the coverage rect.
        (WebCore::TileCoverageMap::update): Fix some minor issues with map position when top
        content inset is non-zero.
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/TileGrid.cpp: Everything is in terms of coverage rect now.
        (WebCore::TileGrid::tilesWouldChangeForCoverageRect):
        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::tilesWouldChangeForVisibleRect): Deleted.
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=):
        (WebCore::TransformState::mappedQuad): Pass direction into mapQuad().
        (WebCore::TransformState::mappedSecondaryQuad): Ditto.
        (WebCore::TransformState::setLastPlanarSecondaryQuad): This function allows a caller
        to pass in a secondary quad, and get it mapped into the coordinate space of the last
        "flattening" state (since the TransformState may have in-flight XY offset, or transform).
        This mapping is achieved by re-using mapQuad(), but in the inverse direction.
        (WebCore::TransformState::mapQuad): Make direction a parameter.
        (WebCore::TransformState::flattenWithTransform): This code omitted to map the secondary
        quad. Failure was detected by tests.
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::isMappingSecondaryQuad):
        (WebCore::TransformState::direction):
        (WebCore::TransformState::inverseDirection):
        (WebCore::TransformState::lastPlanarSecondaryQuad): Deleted.

2015-04-25  Dan Bernstein  <mitz@apple.com>

        Updated expected bindings generation test results after r183343.

        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNondeterministic.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:

2015-04-25  Myles C. Maxfield  <mmaxfield@apple.com>

        font-synthesis's initial value is "style weight"
        https://bugs.webkit.org/show_bug.cgi?id=144195

        Reviewed by Darin Adler.

        Updated fast/css3-text/font-synthesis-parse.html.

        * rendering/style/RenderStyle.h:

2015-04-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183305.
        https://bugs.webkit.org/show_bug.cgi?id=144213

        Crashes on wikipedia (Requested by litherum on #webkit).

        Reverted changeset:

        "[Cocoa] FontPlatformData's equality check should always use
        reference URLs"
        https://bugs.webkit.org/show_bug.cgi?id=144168
        http://trac.webkit.org/changeset/183305

2015-04-25  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/20697966> Avoid using TBD as an argument to NS_AVAILABLE
        https://bugs.webkit.org/show_bug.cgi?id=144201

        Reviewed by Darin Adler.

        Instead of TBD, use the high version number to which it corresponds in CFAvailability.h,
        9876.5.

        * bindings/objc/WebKitAvailability.h: Added a definition of __NSi_9876_5, so that we can
        use 9876_5 in availability macros. Removed the definition of
        __AVAILABILITY_INTERNAL__MAC_TBD, which will no longer be used.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces): Use 9876_5 instead of TBD.

2015-04-25  Timothy Hatcher  <timothy@apple.com>

        Update localized strings.

        * English.lproj/Localizable.strings: Updated.

2015-04-25  Darin Adler  <darin@apple.com>

        Crash if IDBTransaction is aborted right after it's created
        https://bugs.webkit.org/show_bug.cgi?id=144199

        Reviewed by Simon Fraser.

        Test: storage/indexeddb/transaction-abort.html

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend): Don't start the
        transaction if it is already complete (has been aborted).

2015-04-25  Martin Robinson  <mrobinson@igalia.com>

        Rename ENABLE_3D_RENDERING to ENABLE_3D_TRANSFORMS
        https://bugs.webkit.org/show_bug.cgi?id=144182

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * WebCore.vcxproj/WebCoreCommon.props: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * WebCore.vcxproj/WebCoreTestSupportCommon.props: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * css/CSSComputedStyleDeclaration.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * css/MediaQueryEvaluator.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * platform/graphics/GraphicsContext.h: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * rendering/RenderLayer.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * rendering/RenderLayerCompositor.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.
        * rendering/RenderObject.cpp: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] FontPlatformData's equality check should always use reference URLs
        https://bugs.webkit.org/show_bug.cgi?id=144168

        Reviewed by Tim Horton.

        <rdar://problem/18985642> is not fixed, so we need to continue using the older
        objectForEqualityCheck().

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::objectForEqualityCheck):

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement parsing support for font-synthesis CSS property
        https://bugs.webkit.org/show_bug.cgi?id=144180
        <rdar://problem/20692791>
        <rdar://problem/20625024>

        Reviewed by Tim Horton.

        See http://www.w3.org/TR/css-fonts-3/#font-synthesis-prop

        This property allows web authors to opt out of font synthesis. This patch only
        implements parsing support for the property.

        Test: fast/css3-text/font-synthesis-parse.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fontSynthesisFromStyle): Create a CSSValue for the existing style object.
        (WebCore::ComputedStyleExtractor::propertyValue): Call fontSynthesisFromStyle().
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Call parseFontSynthesis().
        (WebCore::CSSParser::parseFontSynthesis): Accept the grammar
        "none | [ weight || style ]"
        * css/CSSParser.h: Function signature.
        * css/CSSPropertyNames.in: New CSS property name.
        * css/CSSValueKeywords.in: New CSS value names.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontSynthesis): Construct an internal
        representation of font-synthesis for a given CSSValue.
        * rendering/style/RenderStyle.h: Function signature.
        * rendering/style/RenderStyleConstants.h: Internal representation of
        font-synthesis.
        * rendering/style/StyleRareInheritedData.h: Where we actually store the bits
        related to this internal representation.

2015-04-24  Simon Fraser  <simon.fraser@apple.com>

        Have the web inspector report accurate memory use for layers with detached backing store
        https://bugs.webkit.org/show_bug.cgi?id=144179

        Reviewed by Dean Jackson.

        Only report memory use for layers whose backing store is attached.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCALayer.h: Add backingContributesToMemoryEstimate()
        which platforms can override if they allow backing store detaching.

2015-04-24  Simon Fraser  <simon.fraser@apple.com>

        Track a coverage rect through GraphicsLayerCA flushes, use it to mark backing store attached
        https://bugs.webkit.org/show_bug.cgi?id=144165

        Reviewed by Dean Jackson.
        
        Push in the clipRect as the secondary rect when doing a GraphicsLayerCA flush,
        which maps this rect through all the layers. Each layer tests intersection with
        this rect to determine if its backing store should be attached.
        
        This will cause us to drop backing store for layers that don't intersect the
        visible part of the view, which is too aggressive. A future patch will add
        some padding.

        Tests: compositing/visible-rect/coverage-clipped.html
               compositing/visible-rect/coverage-scrolling.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA): Remove initialization of things with
        C++11 initializers. Initialize the new m_intersectsCoverageRect bit.
        (WebCore::GraphicsLayerCA::flushCompositingState): Push the clipRect in as the
        secondary coverage rect. A future patch will inflate this on the way down the tree.
        (WebCore::GraphicsLayerCA::computeVisibleRect): If we're clipping, and
        we have a secondary coverage rect, that rect can be clipped to us too.
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateBackingStoreAttachment):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        * platform/graphics/ca/GraphicsLayerCA.h: New CoverageRectChanged bit.
        Use more C++11 initializers.
        (WebCore::GraphicsLayerCA::coverageRect):

2015-04-24  Dean Jackson  <dino@apple.com>

        AnimationController::scrollWasUpdated() shows up in scrolling profiles on pages that don't use scroll triggers
        https://bugs.webkit.org/show_bug.cgi?id=144173
        <rdar://problem/20526168>

        Reviewed by Simon Fraser.

        Keep a list of Animations that care about scroll updates, and only
        run the animation update if the list is not empty.

        Covered by existing tests.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Tell the AnimationController
        if this is an animation that depends on scrolling.
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::animationWillBeRemoved): Call the
        new removeFromAnimationsDependentOnScroll as this animation is deleted.
        (WebCore::AnimationControllerPrivate::addToAnimationsDependentOnScroll):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsDependentOnScroll):
        (WebCore::AnimationControllerPrivate::scrollWasUpdated): Only update if
        there are animations that care.
        (WebCore::AnimationController::wantsScrollUpdates): Helper to expose this
        value to FrameView.
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        (WebCore::AnimationControllerPrivate::wantsScrollUpdates):

2015-04-24  Tim Horton  <timothy_horton@apple.com>

        WKPDFView does not support password-protected PDFs
        https://bugs.webkit.org/show_bug.cgi?id=144162
        <rdar://problem/18411512>

        Reviewed by Andy Estes.

        * English.lproj/Localizable.strings:
        Add some localizable strings.

2015-04-24  David Kilzer  <ddkilzer@apple.com>

        Fix iOS EWS builds after updating to iOS 8.3 SDK

        * platform/spi/cocoa/CoreTextSPI.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        - Update __IPHONE_OS_VERSION_MIN_REQUIRED for these constants.

2015-04-24  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix; add declarations to AVKitSPI.h

        * platform/spi/cocoa/AVKitSPI.h:

2015-04-24  Enrica Casucci  <enrica@apple.com>

        Make rangeExpandedAroundPositionByCharacters to all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=144161

        Reviewed by Tim Horton.

        No change in functionality, simply making this available
        to all platforms.

        * editing/VisibleUnits.cpp:
        (WebCore::rangeExpandedAroundPositionByCharacters):
        * editing/VisibleUnits.h:
        * editing/mac/DataDetection.mm:
        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::rangeExpandedAroundPositionByCharacters): Deleted.

2015-04-24  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from NamedNodeMap.
        <https://webkit.org/b/144091>

        Reviewed by Antti Koivisto.

        Use RefPtr instead of PassRefPtr in NamedNodeMap.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::getNamedItem):
        (WebCore::NamedNodeMap::getNamedItemNS):
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        (WebCore::NamedNodeMap::setNamedItem):
        (WebCore::NamedNodeMap::setNamedItemNS):
        (WebCore::NamedNodeMap::item):
        * dom/NamedNodeMap.h:

2015-04-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183266.
        https://bugs.webkit.org/show_bug.cgi?id=144164

        Broke 32-bit build and a test. (Requested by ap on #webkit).

        Reverted changeset:

        "AX: richer text change notifications (142719)"
        https://bugs.webkit.org/show_bug.cgi?id=142719
        http://trac.webkit.org/changeset/183266

2015-04-24  Brady Eidson  <beidson@apple.com>

        Origin header is preserved on cross-origin redirects.
        https://bugs.webkit.org/show_bug.cgi?id=144157.

        Reviewed by Sam Weinig.

        Tests: http/tests/security/cors-post-redirect-301.html
               http/tests/security/cors-post-redirect-302.html
               http/tests/security/cors-post-redirect-307.html
               http/tests/security/cors-post-redirect-308.html

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest): Always clear any origin header for cross-origin redirects.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest): Ditto.

2015-04-24  Brent Fulgham  <bfulgham@apple.com>

        Immediate action not functional for embedded PDFs
        https://bugs.webkit.org/show_bug.cgi?id=143952
        <rdar://problem/19842365>        

        Reviewed by Tim Horton.

        Add a dictionary lookup method to allow us to retrieve
        relevant information for PDFs.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::dictionaryLookupForPDFSelection): Updated to properly handle cases
        where the Lookup engine selects a smaller range than the initial automatic
        selection performed on clicking.

2015-04-24  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to map a secondary quad through TransformState
        https://bugs.webkit.org/show_bug.cgi?id=144156

        Reviewed by Dean Jackson.

        A future patch will need to map two quads simultaneously through TransformState,
        so add the ability to provide an optional secondary quad.
        
        This patch also firms up the setQuad() contract, fixing webkit.org/b/106680,
        requiring the state to be flattened when setting the quad (and now, the secondary quad).
        Previously, setQuad implicitly flattened but failed to update m_mapPoint when
        doing so.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::computeVisibleRect): Now we have to explicitly flatten
        before setting the quad.
        * platform/graphics/ca/GraphicsLayerCA.h: Drive-up #include removal.
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=): Copy the secondary quad if we have one.
        (WebCore::TransformState::translateMappedCoordinates): Move the secondary quad
        if we have one.
        (WebCore::TransformState::mappedQuad): Code factored into mapQuad().
        (WebCore::TransformState::mappedSecondaryQuad): Return the secondary quad mapped
        into the state's current coordinate space.
        (WebCore::TransformState::mapQuad): Factored code.
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::setQuad): Make the contract more explicit with assertions.
        (WebCore::TransformState::setSecondaryQuad): Ditto when setting the secondary quad.
        (WebCore::TransformState::lastPlanarSecondaryQuad):
        (WebCore::TransformState::lastPlanarQuad): Deleted.

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Reimplement r182512 and r183153 in a cleaner way
        https://bugs.webkit.org/show_bug.cgi?id=144151

        Reviewed by Enrica Casucci.

        On iOS, we create FontPlatformData's ctFont() by round tripping it through a CGFontRef.
        This causes the resultant ctFont() to lose system-font-ness. Patches r182512 and r183153
        react to this fact by making users of a FontPlatformData use the original font passed in
        to the FontPlatformData instead of the FontPlatformData's ctFont(), but only if we
        detect that the FontPlatformData represents a system font (the underlying APIs have
        different behavior for system fonts and non-system-fonts).

        However, on OS X, we create a FontPlatformData's ctFont() directly from the original
        font passed in to the constructor. This preserves system-font-ness (because it no
        longer has the CGFontRef in the middle of the transformation). Therefore, OS X has the
        correct behavior regarding system fonts.

        The difference between the two ctFont() creation codepaths seems to be historical
        rather than intentional. Rather than change all the call sites of ctFont() to use a
        different platform font object if a system font is detected, a cleaner solution is to
        simply unify the two ctFont() creation codepaths to the version which preserves system-
        font-ness. Doing this will make all users of FontPlatformData automatically have the
        correct behavior with no updates.

        This patch reverts the relevant parts of r182512 and r183153 in favor of this new
        solution.

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformWidthForGlyph):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::ctFontSize):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes):

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Start cleaning up FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=144133

        Reviewed by Enrica Casucci.

        This is the start of a crusade to ultimately remove one of the CTFontRefs which we have inside
        FontPlatformData. This patch starts this effort out by removing the FontPlatformData
        constructor which accepts an NSFont. This constructor simply casts the NSFont to a CTFontRef,
        and forwards to another constructor. This patch moves this cast to callers of this constructor,
        thereby enumerating the places we have left that use NSFont with FontPlatformData.

        This patch also cleans up two of the constructors in FontPlatformData.cpp to forward on to
        a common constructor.

        This patch also collects places inside FontPlatformDataCocoa.mm where we check if a pointer is
        not 0 and not -1, and puts this common code inside a new function,
        FontPlatformData::isValidCTFontRef().

        No new tests because there is no behavior change.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Coalesce constructors.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isValidCTFontRef): Check if a pointer is not 0 and not -1.
        (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCreateScaledFont): Receive cast which has been hoisted from the deleted
        FontPlatformData constructor.
        (WebCore::Font::compositeFontReferenceFont): Ditto.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::~FontPlatformData): Use isValidCTFontRef().
        (WebCore::FontPlatformData::platformDataInit): Ditto.
        (WebCore::FontPlatformData::platformDataAssign): Ditto.
        (WebCore::FontPlatformData::platformIsEqual): Simplify preprocessor macros.
        (WebCore::FontPlatformData::allowsLigatures): Remove unnecessary NSFont use.
        (WebCore::FontPlatformData::FontPlatformData): Deleted.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Remove unnecessary
        NSFont use.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters): Receive cast which has been hoisted from the
        deleted FontPlatformData constructor.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/mac/DragImageMac.mm:
        (WebCore::fontFromNSFont): Ditto.
        (WebCore::widthWithFont): Ditto.
        (WebCore::drawAtPoint): Ditto.

2015-04-24  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType, postTextStateChangeNotification and postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content. Also implement a mechanism to post value changes in password form fields in coalesced ticks to thwart analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent, and an overload of postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content selection. Also block posting selection changes on password fields.

        Tests: platform/mac/accessibility/input-replacevalue-userinfo.html
               platform/mac/accessibility/selection-change-userinfo.html
               platform/mac/accessibility/value-change-userinfo.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::passwordNotificationPostTimerFired):
        (WebCore::AXObjectCache::showIntent):
        (WebCore::AXObjectCache::setTextSelectionIntent):
        (WebCore::isPasswordFieldOrContainedByPasswordField):
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::enqueuePasswordValueChangeNotification):
        (WebCore::AXObjectCache::rootWebArea):
        (WebCore::AXObjectCache::selectedChildrenChanged): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::postTextReplacementNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        (WebCore::AXObjectCache::textChangeForEditType):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::computedObjectAttributeCache): Deleted.
        (WebCore::AXObjectCache::getOrCreate): Deleted.
        (WebCore::AXObjectCache::attachWrapper): Deleted.
        * accessibility/AXTextStateChangeIntent.h: Added.
        (WebCore::AXTextStateChangeIntent::AXTextStateChangeIntent):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::passwordFieldOrContainingPasswordField):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isContainedByPasswordField):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::passwordFieldOrContainingPasswordField):
        (WebCore::AccessibilityObject::isPasswordField): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::textChangeForEditType):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        (WebCore::AXObjectCache::postPlatformNotification): Deleted.
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::setShouldRepostNotificationsForTests):
        (WebCore::AXPostNotificationWithUserInfo):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::postTextStateChangePlatformNotification):
        (WebCore::textReplacementChangeDictionary):
        (WebCore::AXObjectCache::postTextReplacementPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (+[WebAccessibilityObjectWrapperBase accessibilitySetShouldRepostNotifications:]):
        (-[WebAccessibilityObjectWrapperBase accessibilityPostedNotification:]):
        (arrayRemovingNonJSONTypes):
        (dictionaryRemovingNonJSONTypes):
        (-[WebAccessibilityObjectWrapperBase accessibilityPostedNotification:userInfo:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (textMarkerRangeFromVisiblePositions):
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        (WebCore::sendAXTextChangedIgnoringLineBreaks):
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand):
        (WebCore::ApplyStyleCommand::applyBlockStyle): Deleted.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapplyEditType):
        (WebCore::CompositeEditCommand::CompositeEditCommand):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::insertParagraphSeparator):
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::appendNode):
        (WebCore::CompositeEditCommand::removeNodePreservingChildren):
        (WebCore::CompositeEditCommand::insertTextIntoNode):
        (WebCore::CompositeEditCommand::deleteTextFromNode):
        (WebCore::CompositeEditCommand::replaceTextInNode):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::EditCommandComposition::getNodesInCommand): Deleted.
        (WebCore::CompositeEditCommand::applyStyle): Deleted.
        (WebCore::CompositeEditCommand::insertLineBreak): Deleted.
        (WebCore::CompositeEditCommand::insertNodeAt): Deleted.
        (WebCore::CompositeEditCommand::removeChildrenInRange): Deleted.
        (WebCore::CompositeEditCommand::inputText): Deleted.
        * editing/CompositeEditCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::DeleteFromTextNodeCommand):
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        (WebCore::DeleteFromTextNodeCommand::deletedText):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        (WebCore::DeleteSelectionCommand::preservesTypingStyle): Deleted.
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::insertTextRunWithoutNewlines):
        (WebCore::DictationCommand::insertParagraphSeparator):
        * editing/EditAction.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        (WebCore::EditCommand::editingAction):
        (WebCore::EditCommand::applyEditType):
        (WebCore::EditCommand::unapplyEditType):
        (WebCore::SimpleEditCommand::SimpleEditCommand):
        (WebCore::SimpleEditCommand::notifyAccessibilityForTextChange):
        (WebCore::EditCommand::setParent): Deleted.
        * editing/EditCommand.h:
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::replaceSelectionWithText):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::transpose):
        (WebCore::Editor::changeSelectionAfterCommand):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertFragment):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo):
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::isBoundary):
        (WebCore::FrameSelection::textSelectionIntent):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::modifyMovingBackward): Deleted.
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected): Deleted.
        (WebCore::FrameSelection::selectionAtWordStart): Deleted.
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        (WebCore::FrameSelection::selection): Deleted.
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::InsertIntoTextNodeCommand):
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        (WebCore::InsertIntoTextNodeCommand::insertedText):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::InsertParagraphSeparatorCommand):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::InsertTextCommand):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::create):
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::RemoveNodePreservingChildrenCommand):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        * editing/ReplaceDeleteFromTextNodeCommand.cpp: Copied from Source/WebCore/editing/AppendNodeCommand.h.
        (WebCore::ReplaceDeleteFromTextNodeCommand::ReplaceDeleteFromTextNodeCommand):
        (WebCore::ReplaceDeleteFromTextNodeCommand::notifyAccessibilityForTextChange):
        * editing/ReplaceDeleteFromTextNodeCommand.h: Copied from Source/WebCore/editing/AppendNodeCommand.h.
        * editing/ReplaceInsertIntoTextNodeCommand.cpp: Added.
        (WebCore::ReplaceInsertIntoTextNodeCommand::ReplaceInsertIntoTextNodeCommand):
        (WebCore::ReplaceInsertIntoTextNodeCommand::notifyAccessibilityForTextChange):
        * editing/ReplaceInsertIntoTextNodeCommand.h: Copied from Source/WebCore/editing/RemoveNodePreservingChildrenCommand.h.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        (WebCore::ReplaceSelectionCommand::InsertedNodes::didReplaceNode): Deleted.
        (WebCore::ReplaceSelectionCommand::insertAsListItems): Deleted.
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::DictationCommandIOS):
        * editing/ios/DictationCommandIOS.h:
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::setInitialKeyboardSelection):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):

2015-04-24  Darin Adler  <darin@apple.com>

        Convert OwnPtr and PassOwnPtr uses to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=128007

        Reviewed by Anders Carlsson.

        * PlatformEfl.cmake: Removed OwnPtrCairo source files.
        * PlatformGTK.cmake: Ditto.
        * PlatformWinCairo.cmake: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

        * platform/CrossThreadCopier.cpp: Removed OwnPtr specialization.
        * platform/CrossThreadCopier.h: Ditto.

        * platform/ScrollAnimatorNone.cpp: Removed unneeded include.
        * platform/ThreadGlobalData.cpp: Ditto.
        * platform/ThreadGlobalData.h: Ditto.
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h: Ditto.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::processNotification): Use unique_ptr.
        (WebCore::AVFWrapper::notificationCallback): Use make_unique.
        (WebCore::AVFWrapper::platformLayer): Ditto.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::appendPathToCairoContext): Use cairo_path_destroy directly
        instead of a smart pointer; the code path is simple enough that it is
        clear this way.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Use make_unique.
        * platform/graphics/cairo/ImageBufferDataCairo.h: Use unique_ptr.

        * platform/graphics/cairo/OwnPtrCairo.cpp: Removed.
        * platform/graphics/cairo/OwnPtrCairo.h: Removed.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path): Use cairo_path_destroy directly instead of a
        smart pointer; the code path is simple enough that it is clear this way.
        (WebCore::Path::operator=): Ditto.
        (WebCore::Path::addPath): Ditto.
        (WebCore::Path::apply): Ditto.
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::clipForPatternFilling): Ditto.

        * platform/graphics/freetype/FontCacheFreeType.cpp: Removed unneeded include.
        * platform/graphics/glx/GLContextGLX.cpp: Ditto.

        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLOffScreenSurface::EGLOffScreenSurface): Use make_unique.

        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        (WebCore::GLXConfigSelector::findMatchingConfig): Use unique_ptr with X11Deleter.
        (WebCore::GLXConfigSelector::findMatchingConfigWithVisualId): Ditto.
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface): Ditto.
        (WebCore::GLXOffScreenSurface::initialize): Ditto.

        * platform/graphics/surfaces/glx/OwnPtrX11.h: Removed.

        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createOffScreenWindow): Use unique_ptr with X11Deleter.
        (WebCore::X11Helper::createPixmap): Ditto.

        * platform/graphics/surfaces/glx/X11Helper.h: Added X11Deleter,
        which can be used with unique_ptr to make it call XFree instead of delete.

        * platform/graphics/win/FullScreenController.cpp: Use unique_ptr.
        (FullScreenController::FullScreenController): Use make_unique.
        (FullScreenController::enterFullScreen): Ditto.
        * platform/graphics/win/FullScreenController.h: Use unique_ptr.

        * platform/graphics/win/GraphicsContext3DWin.cpp: Removed unneeded includes.

        * platform/graphics/win/WKCAImageQueue.cpp:
        (WebCore::WKCAImageQueue::WKCAImageQueue): Use make_unique.
        * platform/graphics/win/WKCAImageQueue.h: Use unique_ptr.

        * platform/network/NetworkStorageSessionStub.cpp: Removed unneeded include.

        * platform/network/ResourceHandleInternal.h: Use unique_ptr.

        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::create): Deleted.
        * platform/network/curl/MultipartHandle.h: Deleted the create function.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback): Use make_unique.

2015-04-24  Per Arne Vollan  <peavo@outlook.com>

        [Win] Popup menu is not accessible.
        https://bugs.webkit.org/show_bug.cgi?id=141704

        Reviewed by Brent Fulgham.

        Get accessibility information for items in popup menus.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::onGetObject):
        (WebCore::PopupMenuWin::wndProc):
        (WebCore::AccessiblePopupMenu::AccessiblePopupMenu):
        (WebCore::AccessiblePopupMenu::~AccessiblePopupMenu):
        (WebCore::AccessiblePopupMenu::QueryInterface):
        (WebCore::AccessiblePopupMenu::AddRef):
        (WebCore::AccessiblePopupMenu::Release):
        (WebCore::AccessiblePopupMenu::GetTypeInfoCount):
        (WebCore::AccessiblePopupMenu::GetTypeInfo):
        (WebCore::AccessiblePopupMenu::GetIDsOfNames):
        (WebCore::AccessiblePopupMenu::Invoke):
        (WebCore::AccessiblePopupMenu::get_accParent):
        (WebCore::AccessiblePopupMenu::get_accChildCount):
        (WebCore::AccessiblePopupMenu::get_accChild):
        (WebCore::AccessiblePopupMenu::get_accName):
        (WebCore::AccessiblePopupMenu::get_accValue):
        (WebCore::AccessiblePopupMenu::get_accDescription):
        (WebCore::AccessiblePopupMenu::get_accRole):
        (WebCore::AccessiblePopupMenu::get_accState):
        (WebCore::AccessiblePopupMenu::get_accHelp):
        (WebCore::AccessiblePopupMenu::get_accKeyboardShortcut):
        (WebCore::AccessiblePopupMenu::get_accFocus):
        (WebCore::AccessiblePopupMenu::get_accSelection):
        (WebCore::AccessiblePopupMenu::get_accDefaultAction):
        (WebCore::AccessiblePopupMenu::accSelect):
        (WebCore::AccessiblePopupMenu::accLocation):
        (WebCore::AccessiblePopupMenu::accNavigate):
        (WebCore::AccessiblePopupMenu::accHitTest):
        (WebCore::AccessiblePopupMenu::accDoDefaultAction):
        (WebCore::AccessiblePopupMenu::put_accName):
        (WebCore::AccessiblePopupMenu::put_accValue):
        (WebCore::AccessiblePopupMenu::get_accHelpTopic):
        * platform/win/PopupMenuWin.h:
        * platform/win/ScrollbarThemeWin.h:
        (WebCore::ScrollbarThemeWin::hasButtons): Deleted.

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

        Memory cache live resources repeatedly purged during painting
        https://bugs.webkit.org/show_bug.cgi?id=144104
        <rdar://problem/20667695>

        Reviewed by Chris Dumez.

        On some PLT pages (like nytimes.com) we get into state where painting repeatedly purges live bitmaps.
        This slows down page loads significantly.

        This might have regressed because improvements in page caching keep more pages and so resources 'live'.

        With this path we do all regular cache pruning asynchronously. If memory is really critical
        the low memory handling code will still prune synchronously.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::didAccessDecodedData):

            prune() -> pruneSoon()

        * loader/cache/MemoryCache.cpp:

            Decrease the pruning size target from 0.95 to 0.8 so we don't need to prune so often.

        (WebCore::MemoryCache::needsPruning):

            Factor into a function.

        (WebCore::MemoryCache::prune):
        (WebCore::MemoryCache::pruneSoon):

            Prune asynchronously.

        * loader/cache/MemoryCache.h:

2015-04-24  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r183259.

        Wrong ChangeLog.

        Reverted changeset:

        "Memory cache live resources repeatedly purged during
        painting"
        https://bugs.webkit.org/show_bug.cgi?id=144104
        http://trac.webkit.org/changeset/183259

2015-04-24  Antti Koivisto  <antti@apple.com>

        CrashTracer: WebProcess at com.apple.WebCore: WebCore::toScriptElementIfPossible + 4
        https://bugs.webkit.org/show_bug.cgi?id=144050

        Reviewed by Chris Dumez.

        We are seeing null Element pointer crashes with this stack:

        47 com.apple.WebCore:  WebCore::toScriptElementIfPossible + 4 <==
        47 com.apple.WebCore:  WebCore::ScriptRunner::timerFired + 452
        47 com.apple.WebCore:  WebCore::ThreadTimers::sharedTimerFiredInternal + 175

        The most likely cause seems to be that this code

            ASSERT(m_pendingAsyncScripts.contains(scriptElement));
            m_scriptsToExecuteSoon.append(m_pendingAsyncScripts.take(scriptElement));

        in ScriptRunner::notifyScriptReady fails to find scriptElement and we are left with null entry in
        m_scriptsToExecuteSoon. However I haven't managed to repro this or find the exact path how this
        could happen. The related code is fragile with lot of state (especially in ScriptElement class)
        and involves many opportunities for re-entry via scripts.

        No repro, no test case.

        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):

            Paper this over by adding a null check. We could check m_pendingAsyncScripts.take() above
            but this also covers possibility this is caused by something else.

2015-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use a webkit subdirectory for the disk cache
        https://bugs.webkit.org/show_bug.cgi?id=144048

        Reviewed by Martin Robinson.

        Add a static method to SoupNetworkSession to clear a soup cache
        given its directory.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::strIsNumeric):
        (WebCore::SoupNetworkSession::clearCache):
        * platform/network/soup/SoupNetworkSession.h:

2015-04-23  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r183234.

        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::commitScaleChange):

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

        Fix Windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::setBackingStoreAttached):
        (PlatformCALayerWin::backingStoreAttached):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

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

        Make it possible to detach GraphicsLayerCA backing store
        https://bugs.webkit.org/show_bug.cgi?id=144140

        Reviewed by Tim Horton.

        This changes makes it possible to denote a GraphicsLayerCA's backing store
        as "attached" or not. When not attached, the backing store is made volatile
        and can be purged. This will be used in a future patch.

        * platform/graphics/ca/GraphicsLayerCA.h: Add updateBackingStoreAttachment().
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Stubs. In future, we could
        remove backing store on Mac and iOS WK1 too.
        (PlatformCALayerMac::setBackingStoreAttached):
        (PlatformCALayerMac::backingStoreAttached):

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

        Remove "layer" from GraphicsLayerCA member function names
        https://bugs.webkit.org/show_bug.cgi?id=144139

        Reviewed by Myles Maxfield.

        Rename "updateLayer*" to "update*" in GraphicsLayerCA.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateNames):
        (WebCore::GraphicsLayerCA::updateDrawsContent):
        (WebCore::GraphicsLayerCA::updateLayerNames): Deleted.
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:

2015-04-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20663758> Fix the build after AVPlayerViewController API change

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): Don’t pass a nil completion
        handler to -[AVPlayerViewController exitFullScreenAnimated:completionHandler:].

2015-04-23  Darin Adler  <darin@apple.com>

        Another round of removing use of OwnPtr, PassOwnPtr, and deleteOwnedPtr
        https://bugs.webkit.org/show_bug.cgi?id=144090

        Reviewed by Anders Carlsson.

        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h: Removed unneeded include.

        * Modules/navigatorcontentutils/NavigatorContentUtils.h: Removed include of
        RefCountedSupplement.h.

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        Pass data using rvalue references, and use new/delete to pass it across
        threads, rather than using PassOwnPtr.
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h: Pass data
        in an rvalue reference instead of PassOwnPtr.
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData): Take an rvalue reference
        instead of a PassOwnPtr.
        * Modules/websockets/WebSocket.h: Ditto.
        * Modules/websockets/WebSocketChannel.cpp: Ditto.
        (WebCore::WebSocketChannel::processFrame): Ditto.
        * Modules/websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveBinaryData): Ditto.
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        Ditto.
        * Modules/websockets/WorkerThreadableWebSocketChannel.h: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Removed RefCountedSupplement.h.

        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::monitorFileBackingStoreCreation): Fixed comment
        to not mention adoptPtr.

        * page/make_settings.pl:
        (generateInternalSettingsHeaderFile): Removed include of RefCountedSupplement.h.

        * platform/ColorChooserClient.h: Removed unneded include.
        * platform/ContextMenuItem.h: Ditto.

        * platform/RefCountedSupplement.h: Removed.

        * platform/ScrollAnimator.cpp: Removed unneeded include.
        * platform/ScrollAnimatorNone.h: Ditto.

        * platform/ThreadGlobalData.cpp: Added now-needed include of PassOwnPtr.h.

        * platform/graphics/GlyphMetricsMap.h: Ditto.
        * platform/graphics/MediaPlayer.h: Ditto.
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h: Ditto.
        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp: Ditto.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Ditto.
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h: Ditto.
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h: Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h: Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h: Ditto.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Use make_unique instead of adoptPtr.
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Return a RefPtr instead of a PassRefPtr.
        * platform/graphics/cg/ImageBufferDataCG.h: Streamlined the header a bit,
        use unique_ptr instead of OwnPtr and RefPtr instead of PassRefPtr.

        * platform/graphics/cocoa/IOSurface.h: Use unique_ptr instead of OwnPtr.
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::ensureGraphicsContext): Use make_unique instead of adoptPtr.

        * platform/graphics/egl/GLContextEGL.cpp: Removed unneeded includes.
        * platform/graphics/filters/FilterOperation.h: Ditto.
        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Ditto.
        * platform/ios/DeviceMotionClientIOS.h: Ditto.
        * platform/ios/DeviceOrientationClientIOS.h: Ditto.

        * platform/ios/LegacyTileCache.h: Use unique_ptr instead of OwnPtr.
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::LegacyTileCache): Use make_unique instead of
        a create function, and also get rid of unneeded initialization to null.
        (WebCore::LegacyTileCache::commitScaleChange): Ditto.

        * platform/ios/LegacyTileGrid.h: Made constructor public and got rid of create
        function. Made constructor take a reference to the tile cache, and make both
        tileCache() and m_tileCache be references too.

        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::LegacyTileGrid): Updated to use reference.
        (WebCore::LegacyTileGrid::visibleRect): Ditto.
        (WebCore::LegacyTileGrid::tileByteSize) Ditto.:
        (WebCore::LegacyTileGrid::dropDistantTiles): Ditto.
        (WebCore::LegacyTileGrid::updateTileOpacity): Ditto.
        (WebCore::LegacyTileGrid::updateTileBorderVisibility): Ditto.
        (WebCore::LegacyTileGrid::updateHostLayerSize): Ditto.
        (WebCore::LegacyTileGrid::invalidateTiles): Ditto.
        (WebCore::LegacyTileGrid::shouldUseMinimalTileCoverage): Ditto.
        (WebCore::LegacyTileGrid::tileDistance2): Ditto.
        (WebCore::LegacyTileGrid::createTiles): Ditto.
        * platform/ios/LegacyTileGridTile.mm:
        (WebCore::LegacyTileGridTile::LegacyTileGridTile): Ditto.
        (WebCore::LegacyTileGridTile::invalidateRect): Ditto.
        (WebCore::LegacyTileGridTile::showBorder): Ditto.
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]): Ditto.
        (-[LegacyTileLayer layoutSublayers]): Ditto.
        (-[LegacyTileLayer drawInContext:]): Ditto.

        * platform/ios/LegacyTileLayerPool.h: Removed unneeded include.
        * platform/ios/ScrollAnimatorIOS.mm: Ditto.
        * platform/mac/ScrollAnimatorMac.mm: Ditto.
        * platform/mac/WebVideoFullscreenController.h: Ditto.
        * platform/network/BlobData.cpp: Ditto.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle): Use make_unique instead of adoptPtr.
        * platform/network/ResourceHandle.h: Use unique_ptr instead of OwnPtr.

        * platform/network/ResourceHandleInternal.h: Added now-needed include.

        * platform/network/ResourceResponseBase.h: Removed unneeded includes and
        tweaked formatting a bit.

        * platform/network/SynchronousLoaderClient.h: Removed the create function and
        the private constructor. Used data member initialize to make the default
        empty constructor automatically get generated (and be public now).

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::formFinishFinalizationOnMainThread): Use delete instead of adoptPtr
        to delete the context argument.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::defaultNetworkStorageSession): Return a unique_ptr& instead of an OwnPtr&.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Use make_unique
        instead of adoptPtr.
        (WebCore::NetworkStorageSession::defaultStorageSession): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Use a
        SynchronousLoaderClient on the stack instead of putting one on the heap with adoptPtr.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously): Ditto.

        * platform/text/TextCodec.h: Removed unneeded include.
        * platform/win/CursorWin.cpp: Ditto.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects): Use move instead of release since
        we are using RefPtr&& instead of PassRefPtr.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::setRenderer): Use RefPtr&& instead of PassRefPtr.
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients): Streamlined to use
        modern for loops and auto.
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients): Ditto.

        * rendering/RenderLayerFilterInfo.h: Streamlined code and removed some stuff that
        I think is unneeded on iOS; there is no unused private field and I suspect the problem
        that led to the warning is gone. Deleted friending of deleteOwnedPtr.

        * rendering/RenderLayerMaskImageInfo.cpp: Removed unneeded includes. Moved private
        client classes in here from the header and made them members of MaskImageInfo.
        Streamlined them a bit in other ways.
        (WebCore::RenderLayer::MaskImageInfo::getIfExists): Use nullptr.
        (WebCore::RenderLayer::MaskImageInfo::MaskImageInfo): Use member initialization
        and also pass the layer in rather than the MaskImageInfo.
        (WebCore::RenderLayer::MaskImageInfo::notifyFinished): Deleted. Moved the code
        into the SVGDocumentClient.
        (WebCore::RenderLayer::MaskImageInfo::imageChanged): Deleted. Moved the code into
        the ImageClient.
        (WebCore::RenderLayer::MaskImageInfo::updateMaskImageClients): Streamlined a bit
        to use a for loop.
        (WebCore::RenderLayer::MaskImageInfo::removeMaskImageClients): Ditto.

        * rendering/RenderLayerMaskImageInfo.h: Reduced unneeded includes. Got rid of
        definitions of private member classes here in the header; they can be in the cpp
        file instead. Also cut down from three classes to two, and gave the classes less
        redundant names since they are already members of MaskImageInfo. Removed some
        unneeded functions and friending of deleteOwnedPtr.

        * testing/InternalSettings.cpp: Got rid of comment about RefCountedSupplement
        since no code anywhere was using it, so not using it here was not remarkable.

2015-04-23  Jer Noble  <jer.noble@apple.com>

        [iOS] Add a wrapper around the hosted AVPlayerLayer to intercept -setBounds:
        https://bugs.webkit.org/show_bug.cgi?id=144129

        Reviewed by Simon Fraser.

        When passing the hosted AVPlayerLayer to the fullscreen controller, the new superlayer will
        resize the hosted layer with a call to -setBounds:. But because this is a hosted layer, the
        bonuds change has no effect. Instead, wrap the CALayerHost in another CALayer whose job it is
        to intercept -setBounds: in the same way that WebAVVideoLayer did. In fact, we should just use
        that wrapper class inside WebAVVideoLayer as well, to avoid duplicating code.

        Drive-by Fix: Null-check m_videoElement in setVideoLayerFrame().

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebCALayerHostWrapper setVideoSublayer:]):
        (-[WebCALayerHostWrapper videoSublayer]):
        (-[WebCALayerHostWrapper setBounds:]): Moved from WebAVVideoLayer.
        (-[WebCALayerHostWrapper resolveBounds]): Ditto.
        (-[WebAVVideoLayer setBounds:]): Moved to WebCALayerHostWrapper.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Create the wrapper.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): Clear the wrapper.
        (-[WebAVVideoLayer resolveBounds]): Deleted. Moved to WebCALayerHostWrapper.
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoLayerFrame): Null-check m_videoElement.

2015-04-23  Tim Horton  <timothy_horton@apple.com>

        Yellow highlight has gray background color when invoking Lookup on an address in a Google Maps drop down
        https://bugs.webkit.org/show_bug.cgi?id=138737
        <rdar://problem/18904429>

        Reviewed by Simon Fraser.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        Other RenderObjects don't paint box decorations in the selection painting phase,
        so RenderReplaced probably shouldn't either. This fixes the case where, when doing
        selection-only painting of a bit of text over top of a RenderReplaced, the RenderReplaced
        would paint its background, filling the previously transparent bitmap with an unwanted color.

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

        Update media timeline controls when video is paused..
        https://bugs.webkit.org/show_bug.cgi?id=144122.
        <rdar://problem/20422927>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.drawTimelineBackground): Use timelineWidth because offsetWidth is 0 when display: none.
        (Controller.prototype.setPlaying): Show controls when pausing.
        (Controller.prototype.showControls): Update time and timeline when unhiding controls.

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

        Changing TiledBacking velocity should schedule a tile revalidation
        https://bugs.webkit.org/show_bug.cgi?id=144123

        Reviewed by Tim Horton.

        Changing the velocity parameters on the TileController affect the computed
        coverage rect, so whenever we make a change to velocity data that could
        affect the outcome (basically any non-zero old or new velocities),
        schedule a layer flush.

        * platform/graphics/TiledBacking.h:
        (WebCore::VelocityData::velocityOrScaleIsChanging):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setVelocity):

2015-04-23  Jer Noble  <jer.noble@apple.com>

        [Mac] Disable QTKit by default on future OS X.
        https://bugs.webkit.org/show_bug.cgi?id=144082

        Reviewed by Darin Adler.

        Settings::gQTKitEnabled defaults to false.

        * page/Settings.cpp:

2015-04-23  Daniel Bates  <dabates@apple.com>

        Clean up: Use references instead of pointers in more SVG files
        https://bugs.webkit.org/show_bug.cgi?id=144045

        Reviewed by Darin Adler.

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes): Pass reference instead of pointer.

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::recordTextFragment): Changed parameter textBox from pointer to reference.
        (WebCore::SVGTextLayoutEngine::layoutInlineTextBox): Ditto.
        (WebCore::SVGTextLayoutEngine::currentVisualCharacterMetrics): Changed parameter textBox from pointer to
        reference and made it const since this function does not modify textBox.
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath): Changed parameters from pointers to references.
        Also, removed comma from comment so that it reads well.
        * rendering/svg/SVGTextLayoutEngine.h: Updated declarations for the above functions.

        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift): Changed parameter style from pointer to reference.
        Added case BS_LENGTH to switch block and removed default case so that the compiler checks that we handle all cases.
        Renamed parameter contextElement to context since the name of its data type conveys that it is an element.
        (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift): Changed parameter textRenderer from
        pointer to reference and removed runtime assertion that textRenderer is non-null (since it well-formed reference
        cannot point to a non-existent object).
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle): Changed parameter style from pointer to reference
        removed runtime assertion that style is non-null.
        * rendering/svg/SVGTextLayoutEngineBaseline.h: Updated declarations for the above functions.

2015-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183194.
        https://bugs.webkit.org/show_bug.cgi?id=144121

        Made multiple tests flaky (Requested by ap_ on #webkit).

        Reverted changeset:

        "Memory cache live resources repeatedly purged during
        painting"
        https://bugs.webkit.org/show_bug.cgi?id=144104
        http://trac.webkit.org/changeset/183194

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

        Unreviewed. Missed a button in r182900.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-wireless-playback-picker-button:active):

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

        Unreviewed. Just shift some CSS around for code cleanup purposes.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel:hover):

2015-04-22  Alexey Proskuryakov  <ap@apple.com>

        [iOS] WebKit services should inherit environment variables for home
        https://bugs.webkit.org/show_bug.cgi?id=144078
        rdar://problem/20571678

        Reviewed by Dan Bernstein.

        Added an SPI header for a drive-by fix.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/cf/CFBundleSPI.h: Added.

2015-04-23  Alex Christensen  <achristensen@webkit.org>

        Use less memory when compiling content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=144051

        Reviewed by Darin Adler and Benjamin Poulain.

        No change in functionality, correctness already covered by existing tests.

        Before this patch, a DFANode contained a HashSet of transitions.
        Large vectors of DFANodes made many small HashSets, which was inefficient use of memory.
        We now put all the actions and transitions into one big compact Vector and each node owns ranges in that vector.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::recursiveMemoryUsed):
        (WebCore::ContentExtensions::CombinedURLFilters::memoryUsed):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::memoryUsed):
        (WebCore::ContentExtensions::DFANode::actions):
        (WebCore::ContentExtensions::DFANode::transitions):
        (WebCore::ContentExtensions::DFANode::fallbackTransitionDestination):
        (WebCore::ContentExtensions::DFANode::changeFallbackTransition):
        (WebCore::ContentExtensions::DFANode::addFallbackTransition):
        (WebCore::ContentExtensions::DFANode::containsTransition):
        (WebCore::ContentExtensions::DFANode::kill):
        (WebCore::ContentExtensions::DFA::minimize):
        (WebCore::ContentExtensions::DFA::DFA): Deleted.
        (WebCore::ContentExtensions::DFA::operator=): Deleted.
        * contentextensions/DFA.h:
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFAMinimizer.cpp:
        (WebCore::ContentExtensions::DFAMinimizer::minimize):
        * contentextensions/DFAMinimizer.h:
        * contentextensions/DFANode.h:
        (WebCore::ContentExtensions::DFANode::isKilled):
        (WebCore::ContentExtensions::DFANode::hasFallbackTransition):
        (WebCore::ContentExtensions::DFANode::hasActions):
        (WebCore::ContentExtensions::DFANode::transitionsLength):
        (WebCore::ContentExtensions::DFANode::actionsLength):
        (WebCore::ContentExtensions::DFANode::actionsStart):
        (WebCore::ContentExtensions::DFANode::setActions):
        (WebCore::ContentExtensions::DFANode::setTransitions):
        (WebCore::ContentExtensions::DFANode::resetTransitions):
        (WebCore::ContentExtensions::DFANode::transitionsStart):
        (WebCore::ContentExtensions::DFANode::setHasFallbackTransitionWithoutChangingDFA):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::memoryUsed):
        * contentextensions/NFA.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        (WebCore::ContentExtensions::getOrCreateDFANode):
        (WebCore::ContentExtensions::NFAToDFA::convert):

2015-04-23  David Hyatt  <hyatt@apple.com>

        Don't fire a bunch of mouse moveds during scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=99940

        Reviewed by Simon Fraser.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        Even for the short interval timer, make sure to cancel and restart it instead of allowing the original to
        complete. This has the effect of preventing fake mouse moves from firing until the scroll stops.

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

        Unreviewed, fix the release build.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): Add an UNUSED_PARAM.

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

        Remove m_isPageTiledBackingLayer data member from GraphicsLayerCA, just use the layer type instead
        https://bugs.webkit.org/show_bug.cgi?id=144108

        Reviewed by Dean Jackson.

        No need for the m_isPageTiledBackingLayer data member. We can just check the layer
        type instead.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter):
        (WebCore::GraphicsLayerCA::updateContentsScale):
        (WebCore::GraphicsLayerCA::getDebugBorderInfo):
        (WebCore::GraphicsLayerCA::requiresTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::isPageTiledBackingLayer):

2015-04-23  Brady Eidson  <beidson@apple.com>

        Content extension with oft-repeated rules can cause slowdown.
        rdar://problem/20618511 and https://bugs.webkit.org/show_bug.cgi?id=144010

        Reviewed by Alex Christensen.

        No new tests (Behavior covered by existing tests).

        * WebCore.xcodeproj/project.pbxproj:

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):

        Add the String identifier for the extension and the rule action ID to Actions:
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        (WebCore::ContentExtensions::Action::operator==):
        (WebCore::ContentExtensions::Action::setExtensionIdentifier):
        (WebCore::ContentExtensions::Action::extensionIdentifier):
        (WebCore::ContentExtensions::Action::actionID):
        (WebCore::ContentExtensions::Action::type): Deleted.

        Object to manage a CSSStyleSheet and selectors identified by ID:
        * contentextensions/ContentExtensionStyleSheet.cpp:
        (WebCore::ContentExtensions::ContentExtensionStyleSheet::ContentExtensionStyleSheet):
        (WebCore::ContentExtensions::ContentExtensionStyleSheet::addDisplayNoneSelector):
        * contentextensions/ContentExtensionStyleSheet.h:
        (WebCore::ContentExtensions::ContentExtensionStyleSheet::create):
        (WebCore::ContentExtensions::ContentExtensionStyleSheet::styleSheet):

        Instead of globbing selectors together into a String and making a new stylesheet,
        add new unique selectors to an already existing sheet:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::displayNoneCSSRule):

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::addDisplayNoneSelector):
        (WebCore::DocumentStyleSheetCollection::addContentExtensionUserSheet): Deleted.
        * dom/DocumentStyleSheetCollection.h:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::addPendingContentExtensionDisplayNoneSelector):
        (WebCore::DocumentLoader::addPendingContentExtensionSheet): Deleted.
        * loader/DocumentLoader.h:

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

        Memory cache live resources repeatedly purged during painting
        https://bugs.webkit.org/show_bug.cgi?id=144104
        <rdar://problem/20667695>

        Reviewed by Chris Dumez.

        On some PLT pages (like nytimes.com) we get into state where painting repeatedly purges live bitmaps.
        This slows down page loads significantly.

        This might have regressed because improvements in page caching keep more pages and so resources 'live'.

        With this path we do all regular cache pruning asynchronously. If memory is really critical
        the low memory handling code will still prune synchronously.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::didAccessDecodedData):

            prune() -> pruneSoon()

        * loader/cache/MemoryCache.cpp:

            Decrease the pruning size target from 0.95 to 0.8 so we don't need to prune so often.

        (WebCore::MemoryCache::needsPruning):

            Factor into a function.

        (WebCore::MemoryCache::prune):
        (WebCore::MemoryCache::pruneSoon):

            Prune asynchronously.

        * loader/cache/MemoryCache.h:

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

        Unreviewed, make a suggested change I overlooked in Darin's review of
        https://bugs.webkit.org/show_bug.cgi?id=144098

        * dom/Document.cpp:
        (WebCore::Document::removePlaybackTargetPickerClient): const auto& -> auto
        (WebCore::Document::showPlaybackTargetPicker): Ditto.
        (WebCore::Document::playbackTargetPickerClientStateDidChange): Ditto.
        (WebCore::Document::playbackTargetAvailabilityDidChange): Ditto.
        (WebCore::Document::setPlaybackTarget): Ditto.
        (WebCore::Document::setShouldPlayToPlaybackTarget): Ditto.

2015-04-23  Joonghun Park  <jh718.park@samsung.com>

        Use std::unique_ptr instead of OwnPtr in ThreadGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=141950

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * dom/EventNames.h:
        (WebCore::EventNames::create):
        * loader/cache/CachedResourceRequestInitiators.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        * platform/ThreadGlobalData.h:

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

        Some media tests assert after r183096
        https://bugs.webkit.org/show_bug.cgi?id=144098

        Reviewed by Darin Adler.

        * dom/Document.cpp:
        (WebCore::Document::removePlaybackTargetPickerClient): Don't assert if the client has already
            been removed from the map. This happens when a media element is removed from the document
            before its destructor runs and is not an error.
        (WebCore::Document::showPlaybackTargetPicker): It is an error to call this after the client 
            has been removed from the map so leave the assert in a debug build, but return early
            so a release build doesn't crash.
        (WebCore::Document::playbackTargetPickerClientStateDidChange): Ditto.
        (WebCore::Document::playbackTargetAvailabilityDidChange): Use "auto" for the map iterator variable.
        (WebCore::Document::setPlaybackTarget): Ditto.
        (WebCore::Document::setShouldPlayToPlaybackTarget): Ditto.
        * dom/Document.h: Fix map typedef names.

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

        DOM nodes should be allocated with fastMalloc().

        Unreviewed. This got lost in the TreeShared merge. :|

        * dom/Node.h:

2015-04-23  Chris Dumez  <cdumez@apple.com>

        [WK2] WebDiagnosticLoggingClient is leaking
        https://bugs.webkit.org/show_bug.cgi?id=144089
        <rdar://problem/19706214>

        Reviewed by Darin Adler.

        WebDiagnosticLoggingClient is leaking. It is constructed inside WebPage
        constructor but there is no code destroying it.

        This patch adds a new xxxDestroyed() virtual function to
        DiagnosticLoggingClient and that is overriden in
        WebDiagnosticLoggingClient to call "delete this". This is the same
        pattern as for other WK2 clients (e.g. WebFrameLoaderClient,
        WebProgressTrackerClient).

        * loader/EmptyClients.h:
        * page/DiagnosticLoggingClient.h:
        * page/MainFrame.cpp:
        (WebCore::MainFrame::~MainFrame):

2015-04-22  Antti Koivisto  <antti@apple.com>

        CrashTracer: WebProcess at com.apple.WebCore: WebCore::toScriptElementIfPossible + 4
        https://bugs.webkit.org/show_bug.cgi?id=144050
        rdar://problem/15534973

        Reviewed by Chris Dumez.

        We are seeing null Element pointer crashes with this stack:

        47 com.apple.WebCore:  WebCore::toScriptElementIfPossible + 4 <==
        47 com.apple.WebCore:  WebCore::ScriptRunner::timerFired + 452
        47 com.apple.WebCore:  WebCore::ThreadTimers::sharedTimerFiredInternal + 175

        The most likely cause seems to be that this code

            ASSERT(m_pendingAsyncScripts.contains(scriptElement));
            m_scriptsToExecuteSoon.append(m_pendingAsyncScripts.take(scriptElement));

        in ScriptRunner::notifyScriptReady fails to find scriptElement and we are left with a null entry in
        m_scriptsToExecuteSoon. However I haven't managed to repro this or find the exact path how this
        could happen. The related code is fragile with lot of state (in ScriptElement class)
        and involves many opportunities for re-entry via scripts.

        No repro, no test case.

        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):

            Paper this over by adding a null check. We could check m_pendingAsyncScripts.take() above
            but this also covers possibility this is caused by something else.

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

        Use a typedef for TileGrid tile validation policy flags
        https://bugs.webkit.org/show_bug.cgi?id=144085

        Reviewed by Tim Horton.

        Replace 'unsigned' with a typedef for the bitmask of TileValidationPolicyFlags.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileRevalidationTimerFired):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):
        * platform/graphics/ca/TileGrid.h:

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

        Slap Node's reference counting functions with ALWAYS_INLINE stick.

        Speculative fix for weird ~3% regression on Speedometer seen after TreeShared
        was merged into Node. Since the memory layout didn't change, failure to inline
        seems like a possible source of regression.

        * dom/Node.h:
        (WebCore::Node::ref):
        (WebCore::Node::deref):
        (WebCore::Node::hasOneRef):
        (WebCore::Node::refCount):

2015-04-22  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Move computeCoverageRect code from FrameView into TileController
        https://bugs.webkit.org/show_bug.cgi?id=144087

        Reviewed by Benjamin Poulain.
        
        There is code in four different places that adjusts tiling coverage rect:
        1. LegacyTileCache. This will remain unchanged.
        2. FrameView::computeTileCoverageRect(). This was added to do velocity-based
        page tiled coverage expansion for iOS WK2.
        3. TileController::computeTileCoverageRect(): this is used for the page tiles
        on Mac.
        4. GraphicsLayerCA::adjustTiledLayerVisibleRect(). This is used by non-page
        tiled layers on both iOS and Mac.
        
        This patch reduced this list to 3, coalescing FrameView::computeTileCoverageRect()
        and TileController::computeTileCoverageRect(). It removes the rect inflation that
        affects the visibleRect passed into rootLayer->flushCompositingState() for iOS,
        but the page tiles now do an identical coverage inflation. The visible rect
        change does affect visible rect computations for non-page tiled backings, but
        a future patch will restore that.

        * page/FrameView.cpp:
        (WebCore::FrameView::setScrollVelocity):
        (WebCore::FrameView::computeCoverageRect): Deleted.
        * page/FrameView.h:
        * platform/graphics/TiledBacking.h:
        (WebCore::VelocityData::VelocityData):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setVelocity):
        (WebCore::TileController::computeTileCoverageRect):
        * platform/graphics/ca/TileController.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2015-04-22  Darin Adler  <darin@apple.com>

        Remove OwnPtr and PassOwnPtr use from WebKit/cf, WebKit/mac, and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=143943

        Reviewed by Anders Carlsson.

        * editing/Editor.cpp:
        (WebCore::Editor::insertDictationPhrases): Changed this iOS-only
        function to take a Vector<Vector<String>>&& and not involve PassOwnPtr.
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Changed this iOS-only
        function to take a Vector<Vector<String>> and not involve PassOwnPtr. Also made
        it take a reference rather than a pointer to the element and simplify the code
        a bit using modern for loops and auto.
        * editing/Editor.h: Ditto.

        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::DictationCommandIOS): Take
        a Vector<Vector<String>>&& instead of a PassOwnPtr.
        (WebCore::DictationCommandIOS::~DictationCommandIOS): Deleted. No need to
        explicitly define this.
        (WebCore::DictationCommandIOS::doApply): Updated to use modern for loop and
        work with a Vector<Vector<String>> instead of an OwnPtr.
        * editing/ios/DictationCommandIOS.h: Updated to not use PassOwnPtr and OwnPtr.
        Also modernized a bit by using override.

        * platform/network/ios/QuickLook.h: Return an NSURLRequest * instead of a
        PassOwnPtr<ResourceRequest> from this iOS-specific function.
        * platform/network/ios/QuickLook.mm:
        (WebCore::registerQLPreviewConverterIfNeeded): Ditto.

2015-04-22  Jinwoo Song  <jinwoo7.song@samsung.com>

        Convert OwnPtr to std::unique_ptr in GraphicsContextCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=144033

        Reviewed by Darin Adler.

        Use unique_ptr for creating a copy of cairo_path_t and use lambda function
        for custom deleter, cairo_path_destroy().

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow): Use std::unique_ptr instead of OwnPtr.
        (WebCore::GraphicsContext::clip): Call cairo_path_destroy() immediately.
        * platform/graphics/cairo/OwnPtrCairo.cpp:
        (WTF::deleteOwnedPtr<cairo_path_t>): Deleted. Remove unnecessary deleter anymore.
        * platform/graphics/cairo/OwnPtrCairo.h: Ditto.

2015-04-22  Darin Adler  <darin@apple.com>

        Eliminate remaining uses of OwnPtr and PassOwnPtr in WebCore outside the editing and platform directories
        https://bugs.webkit.org/show_bug.cgi?id=143949

        Reviewed by Andreas Kling.

        * dom/ContainerNode.h: Removed unneeded includes and forward declarations.
        * dom/Document.h: Ditto.

        * dom/DocumentParser.h: Fixed comment to not mention PassOwnPtr.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::create): Return a Ref instead of a PassRefPtr.
        (WebCore::MediaControlTextTrackContainerElement::updateTextTrackRepresentation): Pass a reference
        rather than a pointer to TextTrackRepresentation::create.
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage): Return a
        RefPtr instead of a PassRefPtr.

        * html/shadow/MediaControlElements.h: Use unique_ptr for m_textTrackRepresentation.
        Also fix a couple uses of PassRefPtr.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader): Use make_unique.
        (WebCore::DocumentLoader::addAllArchiveResources): Ditto.
        (WebCore::DocumentLoader::addArchiveResource): Ditto.
        (WebCore::DocumentLoader::clearArchiveResources): Set to nullptr instead of calling clear.
        (WebCore::DocumentLoader::startLoadingMainResource): Use make_unique.
        * loader/DocumentLoader.h: Made m_archiveResourceCollection and
        m_applicationCacheHost use unique_ptr.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData): Use delete here instead
        of using OwnPtr to do the deletion. Matches the other code nearby.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader): Handle case where the host is
        null; this happens during the DocumentLoader destruction process since unique_ptr sets itself
        to null before it destroys the object it points to and OwnPtr does not.

        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::monitorFileBackingStoreCreation): Use delete instead of adoptPtr
        to delete a raw pointer.
        (WebCore::DiskCacheMonitor::DiskCacheMonitor): Use unique_ptr instead of OwnPtr.

        * page/DragController.h: Removed some unneeded forward declarations and changed the
        create function to return unique_ptr.

        * platform/LayoutUnit.h: Removed wtf_ceil workaround hack here. Not sure why we ever did it
        this way!

        * platform/graphics/FontCascade.cpp:
        (WTF::deleteOwnedPtr<WebCore::TextLayout>): Deleted.
        (WebCore::FontCascade::createLayout): Changed to return a unique_ptr.
        (WebCore::FontCascade::deleteLayout): Deleted.
        * platform/graphics/FontCascade.h: Made the above changes.

        * platform/graphics/ImageBuffer.h: Changed copyImage to return a RefPtr instead of a PassRefPtr.

        * platform/graphics/TextTrackRepresentation.cpp:
        (WebCore::TextTrackRepresentation::create): Use make_unique and return a unique_ptr.
        * platform/graphics/TextTrackRepresentation.h: Removed unneeded includes and forward declarations
        and made create return a unique_ptr.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyImage): Changed to return a RefPtr.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage): Changed to return a RefPtr.

        * platform/graphics/ios/TextTrackRepresentationIOS.h: Use reference instead of pointer,
        made more things private.
        * platform/graphics/ios/TextTrackRepresentationIOS.mm:
        (TextTrackRepresentation::create): Use make_unique.
        (TextTrackRepresentationIOS::TextTrackRepresentationIOS): Take a reference.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::FontCascade::createLayout): Return a unique_ptr with a custom destruction function.
        The custom destruction function eliminates the need to put TextLayout in a visible header.
        (WebCore::FontCascade::deleteLayout): Deleted. Use a lambda instead.
        (WebCore::roundCGFloat): Deleted. Old fashioned way to deal with multiple floating point sizes.
        Just use std::round instead.
        (WebCore::ceilCGFloat): Deleted. Same as above. Just use std::ceil instead.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Use std::round and std::ceil.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderTextInfo::RenderTextInfo): Deleted. Can compile constructor and destructor
        now thanks to use of unique_ptr with a custom deleter.
        (WebCore::RenderTextInfo::~RenderTextInfo): Deleted. Ditto.
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange): Updated for RenderTextInfo data member
        name change.

        * rendering/RenderView.h: Removed unneeded include.

        * rendering/line/BreakingContext.h: Removed unneeded include.
        (WebCore::BreakingContext::handleOutOfFlowPositioned): Updated for RenderTextInfo data member
        name change.
        (WebCore::BreakingContext::handleFloat): Ditto.
        (WebCore::BreakingContext::handleReplaced): Ditto.
        (WebCore::BreakingContext::handleText): Ditto.
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): Ditto.

        * rendering/line/LineBreaker.h: Made the RenderTextInfo struct more like a struct by taking
        off all the m_ prefixes from the data member names. Initialized all the values in the struct
        to defaults so we don't need an explicit constructor. We also don't need an explicit destructor
        any more due to use of a unique_ptr with a deleter.

2015-04-22  Roger Fong  <roger_fong@apple.com>

        Volume slider appears/doesn't appear at the wrong times.
        https://bugs.webkit.org/show_bug.cgi?id=144072.
        <rdar://problem/20576145>

        Reviewed by Dean Jackson.

        Set background divs to match volume box dimensions.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-volume-slider-container-background):
        (audio::-webkit-media-controls-volume-slider-container-tint):

        Draw the volume slider immediately on mousing over the mute box.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleMuteBoxOver):

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

        [Mac][MediaSource] Crash when SourceBuffer::provideMediaData() is called re-entrantly.
        https://bugs.webkit.org/show_bug.cgi?id=144023

        Reviewed by Darin Adler.

        Partially revert r183097 (as it was not sufficient to protect against re-entrancy). Instead,
        protect against re-entrancy in provideMediaData() directly by removing the first sample
        from the TrackBuffer's decodeQueue at a time. If provideMediaData() is called re-entrantly,
        or if any other method which modifies the decodeQueue is called from inside
        provideMediaData, no iterators will be invalidated.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):

2015-04-22  Zalan Bujtas  <zalan@apple.com>

        Create RenderRubyText for <rt> only when the parent renderer is a RenderRuby.
        https://bugs.webkit.org/show_bug.cgi?id=144035
        rdar://problem/20604467

        Reviewed by Darin Adler.

        This patch extends HTMLElement::createElementRenderer()
        with the render tree insertion point so that we can create different type
        of renderers based on the render tree context.

        Test: fast/ruby/ruby-rt-with-region-crash.html

        * CMakeLists.txt:
        * Modules/plugins/PluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::createElementRenderer):
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::createElementRenderer):
        * Modules/plugins/YouTubePluginReplacement.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::createElementRenderer):
        * dom/Element.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createElementRenderer):
        * html/HTMLAppletElement.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::createElementRenderer):
        * html/HTMLAttachmentElement.h:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::createElementRenderer):
        * html/HTMLBRElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::createElementRenderer):
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createElementRenderer):
        * html/HTMLCanvasElement.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createElementRenderer):
        * html/HTMLDetailsElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createElementRenderer):
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::createElementRenderer):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::createElementRenderer):
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::createElementRenderer):
        * html/HTMLFrameSetElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::createElementRenderer):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createElementRenderer):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createElementRenderer):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createElementRenderer):
        * html/HTMLMeterElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createElementRenderer):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createElementRenderer):
        * html/HTMLProgressElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::createElementRenderer):
        * html/HTMLSelectElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createElementRenderer):
        * html/HTMLSummaryElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createElementRenderer):
        * html/HTMLTextAreaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createElementRenderer):
        * html/HTMLVideoElement.h:
        * html/HTMLWBRElement.cpp:
        (WebCore::HTMLWBRElement::createElementRenderer):
        * html/HTMLWBRElement.h:
        * html/RubyElement.cpp:
        (WebCore::RubyElement::createElementRenderer):
        * html/RubyElement.h:
        * html/RubyTextElement.cpp:
        (WebCore::RubyTextElement::createElementRenderer):
        * html/RubyTextElement.h:
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::createElementRenderer):
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineContainerElement::createElementRenderer):
        (WebCore::MediaControlVolumeSliderContainerElement::createElementRenderer):
        (WebCore::MediaControlTextTrackContainerElement::createElementRenderer):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterInnerElement::createElementRenderer):
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::createElementRenderer):
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::createElementRenderer):
        (WebCore::SliderContainerElement::createElementRenderer):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::createElementRenderer):
        (WebCore::TextControlInnerTextElement::createElementRenderer):
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsButtonElementMac.h:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsRootElementMac.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::createElementRenderer):
        * html/track/VTTCue.h:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createElementRenderer):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::createElementRenderer):
        * mathml/MathMLMathElement.h:
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::createElementRenderer):
        * mathml/MathMLMencloseElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::createElementRenderer):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer):
        * mathml/MathMLTextElement.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):
        * rendering/RenderElement.cpp:
        * rendering/RenderRuby.h:
        (WebCore::isRuby):
        * style/RenderTreePosition.cpp: Added.
        (WebCore::RenderTreePosition::computeNextSibling):
        (WebCore::RenderTreePosition::invalidateNextSibling):
        (WebCore::RenderTreePosition::previousSiblingRenderer):
        (WebCore::RenderTreePosition::nextSiblingRenderer):
        (WebCore::RenderTreePosition::isRendererReparented):
        * style/RenderTreePosition.h: Added.
        (WebCore::RenderTreePosition::RenderTreePosition):
        (WebCore::RenderTreePosition::parent):
        (WebCore::RenderTreePosition::canInsert):
        (WebCore::RenderTreePosition::insert):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::createRendererIfNeeded):
        (WebCore::Style::invalidateWhitespaceOnlyTextSiblingsAfterAttachIfNeeded):
        (WebCore::Style::textRendererIsNeeded):
        (WebCore::Style::RenderTreePosition::parent): Deleted.
        (WebCore::Style::isRendererReparented): Deleted.
        (WebCore::Style::nextSiblingRenderer): Deleted.
        (WebCore::Style::RenderTreePosition::RenderTreePosition): Deleted.
        (WebCore::Style::RenderTreePosition::canInsert): Deleted.
        (WebCore::Style::RenderTreePosition::insert): Deleted.
        (WebCore::Style::RenderTreePosition::computeNextSibling): Deleted.
        (WebCore::Style::RenderTreePosition::invalidateNextSibling): Deleted.
        (WebCore::Style::previousSiblingRenderer): Deleted.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createElementRenderer):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::createElementRenderer):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::createElementRenderer):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::createElementRenderer):
        * svg/SVGClipPathElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::createElementRenderer):
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::createElementRenderer):
        * svg/SVGEllipseElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::createElementRenderer):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::createElementRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::createElementRenderer):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::createElementRenderer):
        * svg/SVGGElement.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::createElementRenderer):
        * svg/SVGGraphicsElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::createElementRenderer):
        * svg/SVGImageElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::createElementRenderer):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createElementRenderer):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::createElementRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createElementRenderer):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::createElementRenderer):
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::createElementRenderer):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::createElementRenderer):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createElementRenderer):
        * svg/SVGSVGElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::createElementRenderer):
        * svg/SVGStopElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::createElementRenderer):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::createElementRenderer):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::createElementRenderer):
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::createElementRenderer):
        * svg/SVGTSpanElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::createElementRenderer):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::createElementRenderer):
        * svg/SVGTextPathElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::createElementRenderer):
        * svg/SVGUseElement.h:

2015-04-22  Brent Fulgham  <bfulgham@apple.com>

        VisibleSelection should only accept Range by reference
        https://bugs.webkit.org/show_bug.cgi?id=144047

        Reviewed by Tim Horton.

        Update VisibleSelection to expect a Range reference argument, rather than a
        Range*. Also update all uses of VisibleSelection to pass a reference instead
        of a pointer.

        No change in behavior, so new tests.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::transpose):
        (WebCore::Editor::findString):
        (WebCore::Editor::rangeOfString):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectedRange):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::VisibleSelection):
        * editing/VisibleSelection.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceNodeFromPasteboard):
        * page/DragController.cpp:
        (WebCore::selectElement):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection):

2015-04-22  Roger Fong  <roger_fong@apple.com>

        Audio controls should render with a black background.
        https://bugs.webkit.org/show_bug.cgi?id=144074.
        <rdar://problem/20596939>

        Reviewed by Darin Adler.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel-background-container):
        (audio::-webkit-media-controls-panel .volume-box):

2015-04-22  Roger Fong  <roger_fong@apple.com>

        Inline media control icons scale down when video is too small.
        https://bugs.webkit.org/show_bug.cgi?id=144073.
        <rdar://problem/20659451>

        Reviewed by Darin Adler.

        Just make sure the buttons use min-width.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-panel .mute-box):
        (video::-webkit-media-controls-volume-max-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-button):

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

        Add new optimized fullscreen delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=144071

        Reviewed by Eric Carlson.

        AVPlayerViewController requires three new delegate methods to be implemented by WebKit which
        notify the delegates exactly when the owning view will enter and leave fullscreen mode. One
        of the delegate methods (-enterOptimizedFullScreenModeRedirectingVideoToLayer:) gives the
        delegate an opportunity to move the video sublayer into a new CALayer. The matching delegate
        (-leaveOptimizedFullScreenMode), allows us to return our sublayer back to its original parent.
        The third delegate (-isOptimizedFullscreenPossible) is required so the AVPlayerViewController
        knows whether to allow a standard -> optimized fullscreen transition.

        Drive-by fix: initialize ivars at declaration time.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController isOptimizedFullscreenPossible]):
        (-[WebAVVideoLayer enterOptimizedFullScreenModeRedirectingVideoToLayer:]):
        (-[WebAVVideoLayer leaveOptimizedFullScreenMode]):
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlayingOnExternalScreen]): Deleted.

2015-04-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Caret does not line up with text when using the system font
        https://bugs.webkit.org/show_bug.cgi?id=144076
        <rdar://problem/20578301>

        Reviewed by Enrica Casucci.

        Determining caret locations often uses the complex text codepath, which means
        the complex text codepath must know about custom tracking.

        This regression is due to r182512.

        Note that this patch is a short-term solution until I can solve the bigger issue of
        having two CTFontRefs and using each in their proper place.

        No new tests because there is no way to robustly test the system font.

        * platform/graphics/Font.h:
        (WebCore::Font::hasCustomTracking):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::canUseFastGlyphAdvanceGetter):
        (WebCore::Font::platformWidthForGlyph):
        (WebCore::hasCustomTracking): Deleted.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes):

2015-04-22  Brent Fulgham  <bfulgham@apple.com>

        Context menu doesn't account for selection semantics
        https://bugs.webkit.org/show_bug.cgi?id=143958
        <rdar://problem/19735706>

        Reviewed by Tim Horton.

        Before using the default word-only selection for context menus, check with the
        lookup service to see if we can get a semantically appropriate selection.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldSelectBasedOnDictionaryLookup): Added, so that we can
        behavior correctly when using non-Mac editing behavior.
        * editing/mac/DictionaryLookup.mm:
        (WebCore::rangeForDictionaryLookupAtHitTestResult): Modified to honor standard WebKit
        behavior when hit testing at end-of-line/end-of-paragraph, etc.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldAppendTrailingWhitespace): New helper function to share code.
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup): Added.
        (WebCore::EventHandler::selectClosestContextualWordFromMouseEvent): Added.
        (WebCore::EventHandler::selectClosestContextualWordOrLinkFromMouseEvent): Renamed from selectClosestWordOrLinkFromMouseEvent.
        Have this call the new 'selectClosestContextualWordFromMouseEvent' instead of the vanilla 'selectClosestWordFromMouseEvent'.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup): Added.

2015-04-21  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Extend action menus to support PDF
        https://bugs.webkit.org/show_bug.cgi?id=143895
        <rdar://problem/19003333>

        Reviewed by Tim Horton.

        Tested by TestWebKitAPI ActionMenus.mm.

        Add a new dictionary lookup method to support PDF Selections. This code replicates the
        DOM Range-based logic used for HTML documents, but does so using the PDFKit API and
        its support types.

        * Configurations/Base.xcconfig: Add PDFKit include path for build.
        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::expandSelectionByCharacters): Helper function for PDF support.
        (WebCore::dictionaryLookupForPDFSelection): Added.

2015-04-22  Zalan Bujtas  <zalan@apple.com>

        Move render ruby initialization logic from RenderElement::createFor() to *::createElementRenderer()
        https://bugs.webkit.org/show_bug.cgi?id=144058

        Reviewed by Darin Adler.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTagNames.in:
        * html/RubyElement.cpp: Added.
        (WebCore::RubyElement::RubyElement):
        (WebCore::RubyElement::create):
        (WebCore::RubyElement::createElementRenderer):
        * html/RubyElement.h: Added.
        * html/RubyTextElement.cpp: Added.
        (WebCore::RubyTextElement::RubyTextElement):
        (WebCore::RubyTextElement::create):
        (WebCore::RubyTextElement::createElementRenderer):
        * html/RubyTextElement.h: Added.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):

2015-04-22  Roger Fong  <roger_fong@apple.com>

        Show correct wireless play placard on iOS.
        <rdar://problem/20656596>

        Copy wireless player placard code from r182631 to iOS.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status):
        (audio::-webkit-media-controls-wireless-playback-text):
        (audio::-webkit-media-controls-wireless-playback-text-top):
        (audio::-webkit-media-controls-wireless-playback-text-bottom):
        (audio::-webkit-media-controls-wireless-playback-status.small):
        (audio::-webkit-media-controls-wireless-playback-text-top.small):
        (audio::-webkit-media-controls-wireless-playback-text-bottom.small):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls):
        (ControllerIOS.prototype.configureInlineControls):

2015-04-22  Roger Fong  <roger_fong@apple.com>

        Rollout part of r182263 that broke inline media controls on iOS.
        <rdar://problem/20654260>

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePanelTransitionEnd):
        (Controller.prototype.setPlaying):
        (Controller.prototype.showControls):
        (Controller.prototype.hideControls):

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

        Unreviewed post-review clean up after r183096.

        * Modules/mediasession/WebMediaSessionManagerClient.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:

2015-04-22  Nan Wang  <nanwang1101@yahoo.com>

        AX: WebKit does not expose text fields inside tree views.
        https://bugs.webkit.org/show_bug.cgi?id=142196

        Reviewed by Chris Fleizach.

        The problem is that any object in a tree which is not a static text 
        or treeitem will be ignored. Fixed it by exposing the children of treeitem.

        Test: accessibility/treeitem-child-exposed.html

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

2015-04-22  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement ReadableStreamController
        https://bugs.webkit.org/show_bug.cgi?id=143608

        Reviewed by Benjamin Poulain.

        Introducing ReadableStreamController, an abstraction to manage JS source stream queues.
        This new interface is not exposed to JS scripts as specified, using NoInterfaceObject.

        A controller is created at the time a ReadableJSStream is started and it is owned by it.
        The controller may outlive the stream but as its reference will be reset, the calls to
        its methods would result in exceptions.

        The constructor is not implemented yet.

        Change covered by existing tests and rebased expectations.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make: Added ReadableStreamController.idl related files.
        * Modules/streams/ReadableStreamController.h: Added.
        * Modules/streams/ReadableStreamController.idl: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp: Added ReadableStreamController.idl related files.
        * bindings/js/JSReadableStreamControllerCustom.cpp: Added.
        * bindings/js/ReadableStreamJSSource.cpp:
        * bindings/js/ReadableStreamJSSource.h: Removed custom controller implementation.

2015-04-22  Manuel Rego Casasnovas  <rego@igalia.com>

        Rename hasOverride{Height,Width}() to hasOverrideLogicalContent{Height,Width}()
        https://bugs.webkit.org/show_bug.cgi?id=143984

        Reviewed by Darin Adler.

        This patch is renaming these LayoutBox methods, because of their names
        don't match with the getters and setters, which is confusing. Specially
        now that we also have hasOverrideContainingBlockLogical{Height,Width}().

        No new tests (this is just a refactoring).

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasOverrideLogicalContentHeight):
        (WebCore::RenderBox::hasOverrideLogicalContentWidth):
        (WebCore::RenderBox::overrideLogicalContentWidth):
        (WebCore::RenderBox::overrideLogicalContentHeight):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        * rendering/RenderBox.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::contentWidthForChild):
        (WebCore::contentHeightForChild):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::adjustInlineDirectionLineBounds):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2015-04-21  Jer Noble  <jer.noble@apple.com>

        [Mac][MediaSource] Crash when SourceBuffer::provideMediaData() is called re-entrantly.
        https://bugs.webkit.org/show_bug.cgi?id=144023

        Reviewed by Eric Carlson.

        Fixes non-deterministic crash in media/media-source/media-source-stalled-holds-sleep-assertion.html.

        Platform changes have introduced a re-entrancy to provideMediaData().  Calling
        SourceBufferPrivate::enqueueSample() can result in a re-entrant call back into
        SourceBuffer::provideMediaData(). To protect against this, wrap the client call
        from SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples() to
        SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples() in a dispatch_async() to the
        main thread. This gives the original provideMediaData() a chance to finish before the next
        one begins.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):

2015-04-21  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Use one playback target for all web processes
        https://bugs.webkit.org/show_bug.cgi?id=144009

        Reviewed by Tim Horton.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateWirelessPlaybackStatus): Drive-by fix to show controls when
            we show the placeholder image.

        Instead of having each Page/Document pair manage access to the playback target for the videos
        in a web process, put all of the logic into a new class - WebMediaSessionManager. A singleton
        instance talks to the target picker and manages video element access for all web processes.
        All playback target logic was removed from Document, Page, and MediaSessionManager.

        * Modules/mediasession: Added.
        * Modules/mediasession/WebMediaSessionManager.cpp: Added.
        (WebCore::ClientState::ClientState):
        (WebCore::flagsAreSet):
        (WebCore::WebMediaSessionManager::WebMediaSessionManager):
        (WebCore::WebMediaSessionManager::~WebMediaSessionManager):
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients):
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        (WebCore::WebMediaSessionManager::clientStateDidChange):
        (WebCore::WebMediaSessionManager::setPlaybackTarget):
        (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring):
        (WebCore::WebMediaSessionManager::taskTimerFired):
        (WebCore::WebMediaSessionManager::find):
        (WebCore::WebMediaSessionManager::forEachClient):
        * Modules/mediasession/WebMediaSessionManager.h: Added.
        * Modules/mediasession/WebMediaSessionManagerClient.h: Added.
        (WebCore::WebMediaSessionManagerClient::~WebMediaSessionManagerClient):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::mediaState): Replaces isPlayingAudio.
        (WebCore::AudioContext::isPlayingAudio): Deleted.
        * Modules/webaudio/AudioContext.h:
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::addAudioProducer): Take a MediaProducer instead of an AudioProducer.
        (WebCore::Document::removeAudioProducer):
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::nextPlaybackTargetClientContextId):
        (WebCore::Document::addPlaybackTargetPickerClient):
        (WebCore::Document::removePlaybackTargetPickerClient):
        (WebCore::Document::showPlaybackTargetPicker):
        (WebCore::Document::playbackTargetPickerClientStateDidChange):
        (WebCore::Document::playbackTargetAvailabilityDidChange):
        (WebCore::Document::setPlaybackTarget):
        (WebCore::Document::setShouldPlayToPlaybackTarget):
        (WebCore::Document::configurePlaybackTargetMonitoring): Deleted.
        (WebCore::Document::requiresPlaybackTargetRouteMonitoring): Deleted.
        (WebCore::Document::didChoosePlaybackTarget): Deleted.
        * dom/Document.h:
        (WebCore::Document::mediaState):
        (WebCore::Document::isPlayingAudio): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::setMuted): 
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::registerWithDocument):
        (WebCore::HTMLMediaSession::unregisterWithDocument):
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker):
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::HTMLMediaSession::setPlaybackTarget):
        (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange):
        (WebCore::HTMLMediaSession::setShouldPlayToPlaybackTarget):
        (WebCore::HTMLMediaSession::mediaStateDidChange):
        (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Deleted.
        (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): Deleted.
        (WebCore::HTMLMediaSession::startPlayingToPlaybackTarget): Deleted.
        (WebCore::HTMLMediaSession::stopPlayingToPlaybackTarget): Deleted.
        * html/HTMLMediaSession.h:
        * page/AudioProducer.h: Removed.
        * page/ChromeClient.h:
        * page/MediaProducer.h: Copied from Source/WebCore/page/AudioProducer.h.
        (WebCore::MediaProducer::~MediaProducer):
        (WebCore::AudioProducer::~AudioProducer): Deleted.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::updateIsPlayingMedia):
        (WebCore::Page::addPlaybackTargetPickerClient):
        (WebCore::Page::removePlaybackTargetPickerClient):
        (WebCore::Page::showPlaybackTargetPicker):
        (WebCore::Page::playbackTargetPickerClientStateDidChange):
        (WebCore::Page::setPlaybackTarget):
        (WebCore::Page::playbackTargetAvailabilityDidChange):
        (WebCore::Page::setShouldPlayToPlaybackTarget):
        (WebCore::Page::playbackTarget): Deleted.
        (WebCore::Page::didChoosePlaybackTarget): Deleted.
        (WebCore::Page::configurePlaybackTargetMonitoring): Deleted.
        * page/Page.h:
        (WebCore::Page::mediaState):
        (WebCore::Page::isPlayingAudio): Deleted.
        (WebCore::Page::hasWirelessPlaybackTarget): Deleted.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::isPlayingToWirelessPlaybackTarget):
        (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring):
        (WebCore::MediaSessionClient::setShouldPlayToPlaybackTarget):
        (WebCore::MediaSession::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaSession::stopPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaSessionClient::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaSessionClient::stopPlayingToPlaybackTarget): Deleted.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        (WebCore::MediaSessionManager::sessionCanLoadMedia):
        (WebCore::MediaSessionManager::sessionShouldBeginPlayingToWirelessPlaybackTarget): Deleted.
        * platform/audio/MediaSessionManager.h:
        * platform/graphics/MediaPlaybackTargetClient.h: Copied from Source/WebCore/platform/graphics/MediaPlaybackTargetPickerClient.h.
        (WebCore::MediaPlaybackTargetClient::~MediaPlaybackTargetClient):
        (WebCore::MediaPlaybackTargetPickerClient::~MediaPlaybackTargetPickerClient): Deleted.
        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPicker::stopMonitoringPlaybackTargets):
        * platform/graphics/MediaPlaybackTargetPicker.h:
        * platform/graphics/MediaPlaybackTargetPickerClient.h: Removed.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayer::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayer::stopPlayingToPlaybackTarget): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateInterface::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateInterface::stopPlayingToPlaybackTarget): Deleted.
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp: Added.
        (WebCore::WebMediaSessionManagerMac::singleton):
        (WebCore::WebMediaSessionManagerMac::WebMediaSessionManagerMac):
        (WebCore::WebMediaSessionManagerMac::~WebMediaSessionManagerMac):
        (WebCore::WebMediaSessionManagerMac::targetPicker):
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::stopPlayingToPlaybackTarget): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::togglePlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::stopPlayingToPlaybackTarget): Deleted.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::setShouldPlayToPlaybackTarget):
        (WebCore::MediaPlayerPrivateQTKit::togglePlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::startPlayingToPlaybackTarget): Deleted.
        (WebCore::MediaPlayerPrivateQTKit::stopPlayingToPlaybackTarget): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::isPagePlayingAudio):

2015-04-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] When computing visible rects for tiling, stop searching at UIWindows
        https://bugs.webkit.org/show_bug.cgi?id=144022
        <rdar://problem/18327227>

        Reviewed by Simon Fraser.

        [WAKWindow _visibleRectRespectingMasksToBounds:] computes a visible rect which we use
        to determine which tiles to create. We do this by finding the frame of the _hostLayer,
        and then walking up the CALayer hierarchy converting each rect into its parent's
        coordinate system (all the while clipping to bounds if necessary). This walk up the
        layer hierarchy should stop at a layer associated with a UIWindow.

        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow _visibleRectRespectingMasksToBounds:]):

2015-04-21  Jinwoo Song  <jinwoo7.song@samsung.com>

        [Cairo] Implement Path::addPath
        https://bugs.webkit.org/show_bug.cgi?id=130580

        Reviewed by Dirk Schulze.

        Add support for addPath method for ports using cairo.
        This patch is originally authored by Jae Hyun Park <jaepark@webkit.org>.

        Test: fast/canvas/canvas-path-addPath.html

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addPath): Implement addPath for cairo.

2015-04-21  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * platform/spi/cg/CoreGraphicsSPI.h:

2015-04-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGAnimateElementBase::calculateAnimatedValue() asserts when reinserting an SVG animating element within the same animation limits
        https://bugs.webkit.org/show_bug.cgi?id=143994

        Reviewed by Simon Fraser.

        Make sure the SVG animation variables are reset cleanly such that if the
        animation restarts it can rebuild its limit values reliably and correctly.

        Tests: svg/animations/crash-reinsert-animate-length-same-limits.svg
               svg/animations/crash-reinsert-animate-transform-same-limits.svg

        * svg/SVGAnimateElementBase.h:
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType):
        Call the base class resetAnimatedPropertyType() from the derived class.

        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::resetAnimatedPropertyType):
        Make resetAnimatedPropertyType() virtual. The implementation of the base
        class of this function resets the values of the animation limits. When
        updateAnimation() is called, it will be forced to recalculate the animation
        limits by calling calculateFromAndToValues() even if the limits have not
        changed.

2015-04-21  Tim Horton  <timothy_horton@apple.com>

        Long pause under _takeViewSnapshot when screen updates are disabled
        https://bugs.webkit.org/show_bug.cgi?id=144017
        <rdar://problem/20548397>

        Reviewed by Simon Fraser.

        * platform/spi/cg/CoreGraphicsSPI.h:
        Add some SPI.

2015-04-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r183077.
        https://bugs.webkit.org/show_bug.cgi?id=144021

        broke a bunch of tests, bfulgham is going to try again
        (Requested by thorton on #webkit).

        Reverted changeset:

        "Context menu doesn't account for selection semantics"
        https://bugs.webkit.org/show_bug.cgi?id=143958
        http://trac.webkit.org/changeset/183077

2015-04-21  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Better account of resource revalidations in efficacy logging
        https://bugs.webkit.org/show_bug.cgi?id=144014

        Reviewed by Antti Koivisto.

        Add additional diagnostic logging key for network cache efficacy
        logging.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::needsRevalidationKey):
        * page/DiagnosticLoggingKeys.h:

2015-04-21  Brent Fulgham  <bfulgham@apple.com>

        Context menu doesn't account for selection semantics
        https://bugs.webkit.org/show_bug.cgi?id=143958
        <rdar://problem/19735706>

        Reviewed by Tim Horton.

        Before using the default word-only selection, check with the
        lookup service to see if we can get a semantically appropriate
        selection.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):

2015-04-21  Anders Carlsson  <andersca@apple.com>

        Get rid of an unneeded function from LoaderNSURLExtras.mm
        https://bugs.webkit.org/show_bug.cgi?id=144003

        Reviewed by Chris Dumez.

        Just use Vector::contains instead of vectorContainsString.

        * loader/mac/LoaderNSURLExtras.mm:
        (suggestedFilenameWithMIMEType):
        (vectorContainsString): Deleted.

2015-04-21  Chris Dumez  <cdumez@apple.com>

        Make Vector(const Vector<T, otherCapacity, otherOverflowBehaviour>&) constructor explicit
        https://bugs.webkit.org/show_bug.cgi?id=143970

        Reviewed by Darin Adler.

        Make Vector(const Vector<T, otherCapacity, otherOverflowBehaviour>&)
        constructor explicit as it copies the vector and it is easy to call it
        by mistake.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::setIndexesReady):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasClasses):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::nextGridItem):
        (WebCore::RenderGrid::GridIterator::isEmptyAreaEnough):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::paintTypesForPaintOrder):
        * rendering/style/SVGRenderStyle.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::fillStrokeMarkers):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendLigatureGlyphs):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2015-04-21  Chris Dumez  <cdumez@apple.com>

        Use ASSERT_WITH_SECURITY_IMPLICATION() for NoEventDispatchAssertion
        https://bugs.webkit.org/show_bug.cgi?id=143971

        Reviewed by Darin Adler.

        Use ASSERT_WITH_SECURITY_IMPLICATION() for NoEventDispatchAssertion as
        firing JS events can cause arbitrary JS execution which often leads to
        security bugs when event firing is forbidden. For e.g. firing events
        from ActiveDOMObject::suspend() means JS can construct or destroy
        ActiveDOMObjects while we are iterating over them.

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notify):
        * dom/Document.cpp:
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchWindowLoadEvent):
        * dom/Element.cpp:
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchDOMActivateEvent):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForPageCache):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::willDestroyActiveDOMObject):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::dispatchRegionOversetChangeEvent):

2015-04-21  Darin Adler  <darin@apple.com>

        Remove some stray uses of OwnPtr and PassOwnPtr in WTF (outside of the template definitions and traits)
        https://bugs.webkit.org/show_bug.cgi?id=143944

        Reviewed by Andreas Kling.

        * editing/ios/DictationCommandIOS.h: Added now-needed include of PassOwnPtr.h.

2015-04-20  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r177494): -webkit-mask-image: with data URI fails on non-local files
        https://bugs.webkit.org/show_bug.cgi?id=141857

        Reviewed by Dirk Schulze.
        
        r177494 regressed loading of data URIs in masks with remote content, triggering
        a cross-domain error which occurs because the mask loading happened via a separate
        SVGDocument.
        
        Fix by checking for data URIs at parsing time, which is what we used to do.

        Test: http/tests/css/data-uri-mask.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMaskImage):
        * svg/SVGURIReference.h:
        (WebCore::SVGURIReference::isExternalURIReference):

2015-04-20  Chris Dumez  <cdumez@apple.com>

        Crash when showing Web Inspector on page with 'multipart/x-mixed-replace' main resource
        https://bugs.webkit.org/show_bug.cgi?id=143979
        <rdar://problem/20594948>

        Reviewed by Timothy Hatcher.

        InspectorDOMAgent::m_document was updated only once per load, from
        FrameLoader::dispatchDidCommitLoad(). However, dispatchDidCommitLoad()
        is not called for follow-up multipart replacing loads. You can see this
        from the following check in DocumentLoader::commitData():
            if (!isMultipartReplacingLoad())
                frameLoader()->receivedFirstData();

        As a result, in the case of a 'multipart/x-mixed-replace' main resource
        InspectorDOMAgent::m_document would quickly get outdated as we create
        a new Document for each replacing load. This would lead to Web Inspector
        code using a Document without frame and causing crashes.

        This patch calls InspectorInstrumentation::frameDocumentUpdated() from
        Frame::setDocument() so that InspectorDOMAgent::m_document is always up
        to date.

        No new tests, not easily testable as the main resource needs to be
        'multipart/x-mixed-replace'.

        * dom/Document.cpp:
        (WebCore::Document::applyXSLTransform):
        Stop calling InspectorInstrumentation::frameDocumentUpdated() here as
        XSLTProcessor::createDocumentFromSource() will call Frame::setDocument()
        and frameDocumentUpdated() will be called there.

        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        Call InspectorInstrumentation::frameDocumentUpdated() to make sure
        InspectorDOMAgent::m_document gets updated.

2015-04-20  Alex Christensen  <achristensen@webkit.org>

        Overwrite existing files with moveFile.
        https://bugs.webkit.org/show_bug.cgi?id=143968

        Reviewed by Brady Eidson and Anders Carlsson.

        * platform/mac/FileSystemMac.mm:
        (-[WebFileManagerDelegate fileManager:shouldProceedAfterError:movingItemAtURL:toURL:]):
        (WebCore::moveFile):
        r182932 introduced moveFile instead of renameFile.  In order to preserve behavior, it should overwrite existing files.

2015-04-20  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix after r183031.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::lookupOpenGLFunctionAddress):
        Windows needs an explicit cast converting LChar* to const char*.
        Also, add a FIXME comment for sketchy behavior.

2015-04-20  Joseph Pecoraro  <pecoraro@apple.com>

        Cleanup some StringBuilder use
        https://bugs.webkit.org/show_bug.cgi?id=143550

        Reviewed by Darin Adler.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::youTubeURL):
        * css/CSSAnimationTriggerScrollValue.cpp:
        (WebCore::CSSAnimationTriggerScrollValue::customCSSText):
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::customCSSText):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS):
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS):
        (WebCore::CaptionUserPreferencesMediaAF::cssPropertyWithTextEdgeColor):
        (WebCore::CaptionUserPreferencesMediaAF::colorPropertyCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::lookupOpenGLFunctionAddress):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::generateHashedName):
        * platform/text/DateTimeFormat.cpp:
        (WebCore::DateTimeFormat::quoteAndAppendLiteral):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):
        * testing/MicroTaskTest.cpp:
        (WebCore::MicroTaskTest::run):
        * testing/MockContentFilterSettings.cpp:
        (WebCore::MockContentFilterSettings::unblockRequestURL):

2015-04-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGFitToViewBox::viewBoxToViewTransform() has to count for zero physical width and height before calling SVGPreserveAspectRatio::getCTM()
        https://bugs.webkit.org/show_bug.cgi?id=143903

        Reviewed by Daniel Bates.

        Ensure that the SVG viewBoxToView transformation is always invertible.
        CG path drawing functions crash if the context is transformed to non-
        invertible matrix.

        Tests: svg/css/crash-path-zero-height-viewbox.svg
               svg/css/crash-path-zero-width-viewbox.svg

        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        Do not call SVGPreserveAspectRatio::getCTM() if the physical width or the
        physical height is zero.

        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):
        Ensure that we are not dividing by zero in this function.

2015-04-20  Chris Dumez  <cdumez@apple.com>

        CSSParser::parseValue() copies the m_parsedProperties vector at addParsedProperties()
        https://bugs.webkit.org/show_bug.cgi?id=143925

        Reviewed by Simon Fraser.

        Update MutableStyleProperties::addParsedProperties() to use
        CSSParser::ParsedPropertyVector type (i.e. Vector<CSSProperty, 256>)
        instead of Vector<CSSProperty> so that the properties vector is no
        longer copied unnecessarily to convert one type to the other.

        * css/CSSParser.h:
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::addParsedProperties):
        * css/StyleProperties.h:

2015-04-20  Beth Dakin  <bdakin@apple.com>

        Should remove mouseForceClick and mouseForceCancelled from DOM force events
        https://bugs.webkit.org/show_bug.cgi?id=143904
        -and corresponding-
        rdar://problem/20578842

        Reviewed by Dan Bernstein.

        After more thought and discussion, we decided to remove mouseForceClick and 
        mouseForceCancelled from DOM force events. mouseForceClick is confusing and 
        redundant. mouseForceCancelled is confusing as it is currently implemented, and 
        all of its functionality can be filled by exisiting events such as mouseup, 
        mouseout, etc.

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseForceWillBegin):
        (WebCore::Element::dispatchMouseForceClick): Deleted.
        (WebCore::Element::dispatchMouseForceCancelled): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * html/HTMLBodyElement.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * page/DOMWindow.idl:

2015-04-20  Simon Fraser  <simon.fraser@apple.com>

        Setting inline style to the same value it already has triggers a style recalc
        https://bugs.webkit.org/show_bug.cgi?id=143922

        Reviewed by Antti Koivisto.

        MutableStyleProperties::setProperty() was taking the result of CSSParser::parseValue()
        to mean "parsing changed the style", but it actually just means "parsing succeeded".
        Add a new out param, piped through various parser functions, to indicate whether
        parsing actually changed style, and instead return that from setProperty().

        Add internals.startTrackingStyleRecalcs() and internals.styleRecalcCount() so
        we can write tests for style recalc.

        Test: fast/css/set-inline-style-recalc.html

        * WebCore.xcodeproj/project.pbxproj: Let Xcode have it's way.
        * css/CSSParser.cpp:
        (WebCore::parseColorValue):
        (WebCore::parseSimpleLengthValue):
        (WebCore::parseKeywordValue):
        (WebCore::parseTranslateTransformValue):
        (WebCore::CSSParser::parseFontFaceValue):
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/CSSProperty.h:
        (WebCore::StylePropertyMetadata::operator==):
        (WebCore::CSSProperty::operator==):
        * css/DOMWindowCSS.cpp:
        (WebCore::DOMWindowCSS::supports):
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::setProperty):
        (WebCore::MutableStyleProperties::appendPrefixingVariantProperty):
        (WebCore::MutableStyleProperties::addParsedProperties):
        (WebCore::MutableStyleProperties::addParsedProperty):
        * css/StyleProperties.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::startTrackingStyleRecalcs):
        (WebCore::Document::styleRecalcCount):
        * dom/Document.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * testing/Internals.cpp:
        (WebCore::Internals::startTrackingStyleRecalcs):
        (WebCore::Internals::styleRecalcCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-04-20  Brady Eidson  <beidson@apple.com>

        Crash in StyleResolver::invalidateMatchedPropertiesCache() when using content extensions.
        <rdar://problem/20554405> and https://bugs.webkit.org/show_bug.cgi?id=143892

        Reviewed by Chris Dumez.

        Test: http/tests/contentextensions/style-resolver-changed-reentrancy.html

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::addContentExtensionUserSheet): Call styleResolverChanged on a delay.
        (WebCore::DocumentStyleSheetCollection::maybeAddContentExtensionSheet): Ditto.
        (WebCore::DocumentStyleSheetCollection::styleResolverChangedTimerFired):
        * dom/DocumentStyleSheetCollection.h:

2015-04-20  Per Arne Vollan  <peavo@outlook.com>

        Favicons are not always loaded.
        https://bugs.webkit.org/show_bug.cgi?id=143880

        Reviewed by Darin Adler.

        If the favicon link element(s) in the document does not have a mime type,
        the favicon is loaded from the domain root (/favicon.ico). If no favicon
        exists at this location, the favicon loading will fail. This can be solved
        by not demanding that the link element has a mime type.

        Test: fast/dom/icon-url-without-mimetype.html

        * loader/icon/IconController.cpp:
        (WebCore::iconFromLinkElements): Return the chosen icon URL instead of a vector of URLs.
        (WebCore::IconController::url):
        (WebCore::iconsFromLinkElements): Deleted.

2015-04-20  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Include ICU unconditionally on the source lists
        https://bugs.webkit.org/show_bug.cgi?id=143900

        Reviewed by Darin Adler.

        No new tests. This is just a build file change.

        * CMakeLists.txt: Integrate ICU source files, includes, and libraries into the main
        sections. They are shared by all platforms.
        * PlatformGTK.cmake: Eliminate build rules that are duplicated from the main CMakeLists.txt.

2015-04-20  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Text input field ignores value of read-only and aria-readonly attributes
        https://bugs.webkit.org/show_bug.cgi?id=143946

        Reviewed by Mario Sanchez Prada.

        Expose an existing method for determining whether the value can be set to the iOS accessibility platform.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanSetValue]):

2015-04-20  Andreas Kling  <akling@apple.com>

        Merge TreeShared into Node.
        <https://webkit.org/b/143942>

        Reviewed by Darin Adler.

        Node was the only remaining user of TreeShared, so just fold the class into Node.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::Node::Node):
        (WebCore::Node::~Node):
        * dom/Node.h:
        (WebCore::Node::ref):
        (WebCore::Node::deref):
        (WebCore::Node::hasOneRef):
        (WebCore::Node::refCount):
        (WebCore::adopted):
        (WebCore::Node::hasTreeSharedParent): Deleted.
        * platform/TreeShared.h: Removed.

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

        Improve the feature.json files

        * features.json:

2015-04-18  Jon Lee  <jonlee@apple.com>

        [Mac] Time elapsed should be right-aligned
        https://bugs.webkit.org/show_bug.cgi?id=143927

        Reviewed by Eric Carlson.

        Current time is left-aligned, which is visually jarring when going from < 1 hour to > 1 hour.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-current-time-display): Set justify-content to flex-end.
        (audio::-webkit-media-controls-time-remaining-display): Explicitly set justify-content to flex-start.

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

        REGRESSION (r181656): Animated tiled layers are missing content
        https://bugs.webkit.org/show_bug.cgi?id=143911
        rdar://problem/20596328

        Reviewed by Darin Adler.

        After r181656, all requestAnimationFrame was falling back to timers, and not
        using the platform's DisplayRefreshMonitor, because of a Nullopt vs nullptr
        fumble. As a result, GraphicsLayerUpdater (which updates tiled layers during
        animations) was failing to do any updates.
        
        Replace this confusing Optional<> code with simpler code that just forces the
        clients to make a DisplayRefreshMonitor if they can, first asking
        ChromeClient, and then falling back to createDefaultDisplayRefreshMonitor().
        
        Make lots of things into references, and use C++11 initialization in some places.
        
        Add Internals API to allow a test to get the number of layer flushes that have
        occurred.
        
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::windowScreenDidChange):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::createDisplayRefreshMonitor):
        * dom/ScriptedAnimationController.h:
        * page/ChromeClient.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::create):
        (WebCore::DisplayRefreshMonitor::addClient):
        (WebCore::DisplayRefreshMonitor::removeClient):
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorClient.cpp:
        (WebCore::DisplayRefreshMonitorClient::~DisplayRefreshMonitorClient):
        * platform/graphics/DisplayRefreshMonitorClient.h:
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::createMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::registerClient):
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        (WebCore::DisplayRefreshMonitorManager::scheduleAnimation):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):
        (WebCore::DisplayRefreshMonitorManager::windowScreenDidChange):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::scheduleUpdate):
        (WebCore::GraphicsLayerUpdater::screenDidChange):
        (WebCore::GraphicsLayerUpdater::displayRefreshFired):
        (WebCore::GraphicsLayerUpdater::createDisplayRefreshMonitor):
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::notifyFlushBeforeDisplayRefresh):
        (WebCore::RenderLayerCompositor::flushLayersSoon):
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor):
        (WebCore::RenderLayerCompositor::startTrackingLayerFlushes):
        (WebCore::RenderLayerCompositor::layerFlushCount):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::startTrackingLayerFlushes):
        (WebCore::Internals::layerFlushCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-04-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        Large values for line-height cause integer overflow in RenderStyle::computedLineHeight
        https://bugs.webkit.org/show_bug.cgi?id=143863

        Reviewed by Rob Buis.

        When we compute huge values for line-height through percentage or CSS
        calc, we'll overflow the integer and later on
        ShapeOutsideInfo::computeDeltasForContainingBlockLine will ASSERT
        because it expects non-negative line height.  So for the computed
        line-height, clamp to an integer range to avoid overflow. Note that
        the code path for percentages here is safe because LayoutUnit clamps
        to an int on conversion.

        This is based on a Blink patch by Rob Buis.

        Test: fast/shapes/shape-outside-floats/shape-outside-negative-line-height-crash.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::computedLineHeight): Clamp line-height to an
            int to avoid overflow.

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

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        This patch moves all of the code to dispatch mouseforcedown, mouseforceup, and 
        mouseforcechanged into normal mouse event dispatching code. This patch leaves 
        behind the cancel and click events because we plan to remove those, and it also 
        leaves mouseforcewillbegin because that is necessarily a very different event more 
        tied to the NSImmediateActionGestureRecognizer than these other events which are 
        tied to NSResponder’s pressureChangeWithEvent.

        New helper functions.
        * dom/Document.cpp:
        (WebCore::Document::hasListenerTypeForEventType):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::isForceEvent):

        Move the code to ensure the force events have listeners in order to fire to 
        dispatchMouseEvent, and delete the old implementations.
        (WebCore::Element::dispatchMouseEvent):
        (WebCore::Element::dispatchMouseForceChanged): Deleted.
        (WebCore::Element::dispatchMouseForceDown): Deleted.
        (WebCore::Element::dispatchMouseForceUp): Deleted.
        * dom/Element.h:

        Perform a hit test and pipe the events through dispatchMouseEvent(). 
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseForceEvent):
        * page/EventHandler.h:

        New types for the new events.
        * platform/PlatformEvent.h:

        Forward to EventHandler. 
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::handleMouseForceEvent):
        * replay/UserInputBridge.h:

2015-04-17  Zalan Bujtas  <zalan@apple.com>

        RenderTableCell::computeCollapsed*Border() should check if the cell is still attached to the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=143887
        rdar://problem/20568989

        Reviewed by Simon Fraser.

        Detached table cell has no access to its parent table. This is a speculative fix to
        avoid dereferencing the invalid table pointer.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedStartBorder):
        (WebCore::RenderTableCell::computeCollapsedEndBorder):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder):

2015-04-16  Roger Fong  <roger_fong@apple.com>

        Update fullscreen button visibility on fullscreen change.
        https://bugs.webkit.org/show_bug.cgi?id=143861.
        <rdar://problem/20143218>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): There is no need for hasVisualMedia to be a class variable.
        (Controller.prototype.handleReadyStateChange):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.updateFullscreenButtons):

2015-04-17  Daniel Bates  <dabates@apple.com>

        REGRESSION: SVG does not support link dragging
        https://bugs.webkit.org/show_bug.cgi?id=141597

        Reviewed by Darin Adler.

        Fixes an issue where a SVG hyperlink cannot be dragged. We should support
        dragging an SVG A element just as we support dragging an HTML A element.

        Test: fast/events/drag-and-drop-link.html

        * page/DragController.cpp: Removed explicit include of header Element.h as it will
        be ultimately included by HTMLAnchorElement.h, among other headers.
        (WebCore::isDraggableLink): Added. Extracted code from HitTestResult::isLiveLink().
        (WebCore::DragController::draggableElement): Call WebCore::isDraggableLink() to
        determine whether a element is a hyperlink that can be dragged.
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): Write code in terms of
         WebCore::isDraggableLink().
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isLiveLink): Deleted.
        * rendering/HitTestResult.h:

2015-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182912 and r182920.
        https://bugs.webkit.org/show_bug.cgi?id=143881

        Build breakage in some configurations (Requested by ap on
        #webkit).

        Reverted changesets:

        "Force mouse events should go through normal mouse event
        handling code paths"
        https://bugs.webkit.org/show_bug.cgi?id=143749
        http://trac.webkit.org/changeset/182912

        http://trac.webkit.org/changeset/182920

2015-04-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Fix review comments for https://bugs.webkit.org/show_bug.cgi?id=143590
        following http://trac.webkit.org/changeset/182876.

        Reviewed by Daniel Bates.

        * ChangeLog:
        Fixed typo.
        
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize):
        Fixed a typo in an enum definition and changed the name of an argument.

2015-04-17  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Silent WebAudio buffers support
        https://bugs.webkit.org/show_bug.cgi?id=143869

        Reviewed by Carlos Garcia Campos.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Set gap flag on silent buffers. The audio
        sink can then drop them and avoid un-necessary buffer processing.

2015-04-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Redirect to non HTTP destination is broken
        https://bugs.webkit.org/show_bug.cgi?id=143866

        Reviewed by Sergio Villar Senin.

        This is because we are passing true unconditionally as
        isHTTPFamilyRequest parameter of
        createSoupRequestAndMessageForHandle in continueAfterWillSendRequest.
        We don't actually need to pass isHTTPFamilyRequest parameter to
        createSoupRequestAndMessageForHandle, since it can simply check
        that from the given request.

        Covered by unit tets and also cache/disk-cache/disk-cache-redirect-to-data.html.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::continueAfterWillSendRequest):
        (WebCore::createSoupRequestAndMessageForHandle):
        (WebCore::ResourceHandle::start):

2015-04-16  Alex Christensen  <achristensen@webkit.org>

        Use less memory when compiling content extensions
        https://bugs.webkit.org/show_bug.cgi?id=143857

        Reviewed by Benjamin Poulain.

        When compiling a content extension, we convert the rule list into several intermediate forms:

        1) A String.
        2) A JSValue from JSONParse in loadEncodedRules.
        3) A Vector of ContentExtensionRules.
        4) A CombinedURLFilters object representing the pieces of the regular expressions from the triggers.
        5) A Vector of NFAs.
        6) A DFA for each NFA.
        7) A Vector of DFABytecode.
        
        Each one of these contains all the information contained in the content extension,
        so we do not need to keep them all in memory at the same time like we are doing now.
        When we are done with one, we can free that memory to greatly reduce the maximum memory usage while compiling.
        The next step will be to reduce the copies of the original JSON String and to generate NFAs one at a time.

        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::clear):
        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Clear structures when finished using them.

2015-04-16  Brady Eidson  <beidson@apple.com>

        Compiling a content extension fails when user's home directory is on a different volume from /var/tmp.
        https://bugs.webkit.org/show_bug.cgi?id=143834

        Reviewed by Anders Carlsson.

        - Add moveFile() for a WK2 call site to use.
        - Remove renameFile() as it is now dead code.

        * platform/FileSystem.h:

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::renameFile): Deleted.

        * platform/mac/FileSystemMac.mm:
        (WebCore::moveFile):

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::renameFile): Deleted.

        * platform/win/FileSystemWin.cpp:
        (WebCore::renameFile): Deleted.

2015-04-16  Roger Fong  <roger_fong@apple.com>

        Media element time displays shouldn't wrap.
        https://bugs.webkit.org/show_bug.cgi?id=143854.
        <rdar://problem/20284766>

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsApple.css:
        (::-webkit-media-controls): Don't wrap any text.
        (audio::-webkit-media-controls-time-remaining-display): Also increase remaining time display width by 1.
        (audio::-webkit-media-controls-time-remaining-display.five-digit-time): Ditto.
        (audio::-webkit-media-controls-time-remaining-display.six-digit-time): Ditto.

2015-04-16  Chris Dumez  <cdumez@apple.com>

        Add assertions to make sure ActiveDOMObject::suspend() / resume() / stop() overrides don't fire events
        https://bugs.webkit.org/show_bug.cgi?id=143850

        Reviewed by Alexey Proskuryakov.

        Add assertions to make sure ActiveDOMObject::suspend() / resume() / stop()
        overrides don't fire events as this is not allowed. This would cause
        arbitrary JS execution which would be very dangerous in these stages.

        Firing JS events from these functions is a common source of crashes.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::suspend):
        (WebCore::WebSocket::resume):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::suspend):
        (WebCore::XMLHttpRequest::resume):
        (WebCore::XMLHttpRequest::stop):

2015-04-16  Brady Eidson  <beidson@apple.com>

        Media element can manipulate DOM during Document destruction.
        rdar://problem/20553898 and https://bugs.webkit.org/show_bug.cgi?id=143780

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureMediaControls): Bail if the element has no active document.

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [iOS] When simultaneously exiting-and-entering fullscreen, WebVideoFullscreenManager/Proxy becomes confused about what video element it represents.
        https://bugs.webkit.org/show_bug.cgi?id=143680

        Reviewed by Simon Fraser.

        Add getters for the video's fullscreen layer, and be more tolerant about the order in which setVideoElement() and 
        setWebVideoFullscreenInterface are called.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::videoFullscreenLayer): Added simple getter.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        (WebCore::WebVideoFullscreenModelVideoElement::videoElement): Added simple getter.
        (WebCore::WebVideoFullscreenModelVideoElement::setWebVideoFullscreenInterface): Deleted. Moved to .mm file.
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::WebVideoFullscreenModelVideoElement): Initialize ivars in the .h file.
        (WebVideoFullscreenModelVideoElement::setWebVideoFullscreenInterface): Call those methods skipped in setVideoElement()
            if m_videoFullscreenInterface had not yet been set.
        (WebVideoFullscreenModelVideoElement::setVideoElement): Null-check m_videoFullscreenInterface.

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

        Force mouse events should go through normal mouse event handling code paths
        https://bugs.webkit.org/show_bug.cgi?id=143749
        -and corresponding-
        rdar://problem/20472895

        Reviewed by Dean Jackson.

        This patch moves all of the code to dispatch mouseforcedown, mouseforceup, and 
        mouseforcechanged into normal mouse event dispatching code. This patch leaves 
        behind the cancel and click events because we plan to remove those, and it also 
        leaves mouseforcewillbegin because that is necessarily a very different event more 
        tied to the NSImmediateActionGestureRecognizer than these other events which are 
        tied to NSResponder’s pressureChangeWithEvent.

        New helper functions.
        * dom/Document.cpp:
        (WebCore::Document::hasListenerTypeForEventType):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::isForceEvent):

        Move the code to ensure the force events have listeners in order to fire to 
        dispatchMouseEvent, and delete the old implementations.
        (WebCore::Element::dispatchMouseEvent):
        (WebCore::Element::dispatchMouseForceChanged): Deleted.
        (WebCore::Element::dispatchMouseForceDown): Deleted.
        (WebCore::Element::dispatchMouseForceUp): Deleted.
        * dom/Element.h:

        Perform a hit test and pipe the events through dispatchMouseEvent(). 
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseForceEvent):
        * page/EventHandler.h:

        New types for the new events.
        * platform/PlatformEvent.h:

        Forward to EventHandler. 
        * replay/UserInputBridge.cpp:
        (WebCore::UserInputBridge::handleMouseForceEvent):
        * replay/UserInputBridge.h:

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

        Sites with both width=device-width and height=device-height load zoomed out
        https://bugs.webkit.org/show_bug.cgi?id=143795
        <rdar://problem/20369671>

        Reviewed by Ben Poulain.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::shouldIgnoreVerticalScalingConstraints):
        Some sites specify both width=device-width and height=device-height, and
        then lay out to device width but with a large amount of vertically scrollable content
        (so, height=device-height was a lie).

        In all other cases where we use device-width and device-height, we prefer
        width=device-width over height=device-height, but in the code to ignore scaling constraints,
        the two paths were completely separate. On sites that specify both, this
        resulted in us attempting to zoom out to fit the entire height of the very tall page,
        which isn't at all what we wanted. So, ignore height=device-height if a width is specified.

2015-04-16  Chris Dumez  <cdumez@apple.com>

        Regression(r182517): WebSocket::suspend() causes error event to be fired
        https://bugs.webkit.org/show_bug.cgi?id=143806
        <rdar://problem/20559812>

        Reviewed by Alexey Proskuryakov.

        WebSocket::suspend() causes an error event to be fired after r182517.
        This is not allowed as firing the event could trigger arbitrary JS
        execution, which is no longer allowed at this point.

        This patch delays the error event firing until after
        WebSocket::resume() is called, similarly to what we already do for
        the close event.

        Also add assertions in WebSocket::suspend() / WebSocket::resume()
        that will be hit if JS events are fired from within these functions.
        The pre-existing closed-when-entering-page-cache.html test is hitting
        one of these assertions without the fix above.

        Tests:
          - http/tests/websocket/tests/hybi/closed-when-entering-page-cache.html
          - http/tests/websocket/tests/hybi/stop-on-resume-in-error-handler.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::suspend):
        (WebCore::WebSocket::resume):
        (WebCore::WebSocket::resumeTimerFired):
        (WebCore::WebSocket::stop):
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOrQueueEvent):
        * Modules/websockets/WebSocket.h:

2015-04-15  Roger Fong  <roger_fong@apple.com>

        Adjustments to button graphics for media controls.
        https://bugs.webkit.org/show_bug.cgi?id=143797.
        <rdar://problem/20083708>

        Reviewed by Dean Jackson.

        These changes are visual in nature and mainly affect the buttons.
        I've gotten rid of the text-shadow for all the buttons,
        used plus-lighter blending mode and changed the button opacity to reflect the specs,
        and made all the buttons turn opaque white when active.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel button):
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (video::-webkit-media-controls-volume-max-button):
        (video::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-volume-min-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-closed-captions-container li.selected:hover::before):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button.exit):
        (audio::-webkit-media-controls-status-display):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-volume-max-button):
        (video:-webkit-full-screen::-webkit-media-controls-volume-min-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button.paused):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button):
        (video::-webkit-media-controls-volume-max-button:active):
        (video::-webkit-media-controls-volume-min-button:active):
        (audio::-webkit-media-controls-toggle-closed-captions-button:active):
        (audio::-webkit-media-controls-rewind-button:active):
        (audio::-webkit-media-controls-play-button:active):
        (video:-webkit-full-screen::-webkit-media-controls-volume-max-button:active):
        (video:-webkit-full-screen::-webkit-media-controls-volume-min-button:active):
        (video:-webkit-full-screen::-webkit-media-controls-play-button:active):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button:active):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button:active):
        (audio::-webkit-media-controls-fullscreen-button:active):

        Using the pseudo id itself here currently does not work, which is why we rely on the button.* selector for these.
        (video:-webkit-full-screen::-webkit-media-controls-panel button.paused:active):
        (audio::-webkit-media-controls-panel button.paused:active):
        (audio::-webkit-media-controls-panel button.exit:active):
 
        Draw volume slider knob as opaque white when active.
        Adjust colors of timeline and volume sliders now that we are using plus-lighter blending.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):
        (Controller.prototype.createControls):
        (Controller.prototype.handleVolumeSliderMouseDown):
        (Controller.prototype.handleVolumeSliderMouseUp):
        (Controller.prototype.drawTimelineBackground):
        (Controller.prototype.drawVolumeBackground):

2015-04-15  Simon Fraser  <simon.fraser@apple.com>

        Pull emoji-position adjustment code into its own function
        https://bugs.webkit.org/show_bug.cgi?id=143592

        Reviewed by Myles C. Maxfield.

        First step to cleaning up FontCascade::drawGlyphs(). Pull iOS-only code related to
        emoji positioning into its own function.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::pointAdjustedForEmoji):
        (WebCore::FontCascade::drawGlyphs):

2015-04-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Delete hardcoded font fallback tables
        https://bugs.webkit.org/show_bug.cgi?id=143583

        Reviewed by Darin Adler

        Instead of hardcoding which font to use for a particular character, use
        CTFontCreatePhysicalFontDescriptorForCharactersWithLanguage().

        Updated test expected results:
            editing/selection/vertical-rl-rtl-extend-line-backward-br.html
            editing/selection/vertical-rl-rtl-extend-line-backward-p.html
            editing/selection/vertical-rl-rtl-extend-line-forward-br.html
            editing/selection/vertical-rl-rtl-extend-line-forward-p.html
            fast/text/international/danda-space.html
            fast/text/international/thai-baht-space.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/spi/cocoa/CoreTextSPI.h:

2015-04-16  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Compile error when environment variable WEBKITLIBRARIESDIR is not defined.
        https://bugs.webkit.org/show_bug.cgi?id=143828

        Reviewed by Brent Fulgham.

        Python throws an exception when calling os.environ['WEBKITLIBRARIESDIR'] and
        WEBKITLIBRARIESDIR is not defined. WEBKITLIBRARIESDIR is obsolete, we can remove it.

        * AVFoundationSupport.py:
        (lookFor):

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

        Minor AudioContext cleanup
        https://bugs.webkit.org/show_bug.cgi?id=143816

        Reviewed by Jer Noble.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::derefNode):
        (WebCore::AudioContext::scheduleNodeDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::stopDispatch): Deleted.
        (WebCore::AudioContext::deleteMarkedNodesDispatch): Deleted.
        * Modules/webaudio/AudioContext.h:

        * Modules/webaudio/AudioNode.cpp: (WebCore::AudioNode::~AudioNode):

2015-04-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Windows build after r182881.

        Add missing header include.

        * page/PageConsoleClient.h:

2015-04-16  Chris Dumez  <cdumez@apple.com>

        Tests introduced in r182877 are flaky
        https://bugs.webkit.org/show_bug.cgi?id=143784

        Reviewed by Alexey Proskuryakov.

        Tests introduced in r182877 are flaky as the line number sometimes
        appears in the console messages. This patch updates the console
        logging code so that no Document is provided when logging. Therefore,
        no line number will ever be displayed. In this case, I don't think
        having the line number is terribly useful anyway.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):

2015-04-15  Simon Fraser  <simon.fraser@apple.com>

        We should dump GraphicsLayer's anchorPoint z component
        https://bugs.webkit.org/show_bug.cgi?id=143815

        Reviewed by Tim Horton.

        We didn't include the z component of a layer's anchor point when dumping.
        Dump if it's non-zero (to avoid having to change lots of test output).
        No test with non-zero z appears to dump layers.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin): Remove a FIXME which, on further consideration,
        is wrong.

2015-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Disable "Save to Downloads" option for local files
        https://bugs.webkit.org/show_bug.cgi?id=143794

        Reviewed by Tim Horton.

        Disable the Image and Media download options if the download
        target is a local file. We can only download web resources;
        anything else is actually a no-op.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Disable
        menu item if appropriate.

2015-04-15  Chris Dumez  <cdumez@apple.com>

        Add a console message when a stylesheet is not parsed due to invalid MIME type
        https://bugs.webkit.org/show_bug.cgi?id=143784

        Reviewed by Joseph Pecoraro.

        After r180020, we no longer have a quirks mode exception for CSS MIME
        types. This means that we'll start rejecting stylesheets that were
        previously accepted due to this quirk. In this case we log a console
        message to help Web developers understand why their stylesheet is being
        rejected.

        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::setCSSStyleSheet):

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        - Initialize hasValidMIMEType to true so that it ends up being false
          only when canUseSheet(hasValidMIMEType) is called and we've determined
          the MIME type is indeed invalid. Otherwise, hasValidMIMEType would
          also be false when m_data is null or empty in
          CachedCSSStyleSheet::sheetText() and we don't want to display the MIME
          type error in this case.
        - If hasValidMIMEType is false, display the console message and abort
          early. We don't need to execute the rest of the function in this case
          as sheetText is a null String and there is no point in trying to parse
          it.
        - Drop handling of !hasValidMIMEType && !hasSyntacticallyValidCSSHeader()
          as this can no longer be reached. This handling no longer makes sense
          after r180020 as sheetText() will now always return a null String if
          the MIME type is invalid (as we no longer support the CSS MIME type
          quirks mode).

        * css/StyleSheetContents.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2015-04-15  Said Abou-Hallawa  <said@apple.com>

        Minimum font size pref breaks SVG text very badly.
        https://bugs.webkit.org/show_bug.cgi?id=143590.

        Reviewed by Simon Fraser.

        When enabling the minimum font size perf, the computed font size is set
        to the minimum font size if the computed value is smaller than the minimum.
        The bug happens because the SVG text element applies its scaling on the
        computed value after applying the minimum font size rule. This means the
        final computed value for the font size will be the scaling of the minimum
        font size and not minimum font size itself. What we need is to postpone
        applying the minimum font size rules, till the SVG scaling is applied.

        Tests: svg/text/font-small-enlarged-minimum-larger.svg
               svg/text/font-small-enlarged-minimum-smaller.svg

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle): Call
        computedFontSizeFromSpecifiedSizeForSVGInlineText() even if scalingFactor
        is 1. We need to make sure the minimum font size rules are applied. This
        function was assuming the mininum font size rule was applied when resolving
        the style. This is not true anymore for the SVG text.

        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize): Do not apply the
        minimum size rules for the SVG element until it applies its scaling to
        the font size.

2015-04-15  Mark Lam  <mark.lam@apple.com>

        Remove obsolete VMInspector debugging tool.
        https://bugs.webkit.org/show_bug.cgi?id=143798

        Reviewed by Michael Saboff.

        No new tests needed.  Just removing obsolete code.

        * ForwardingHeaders/interpreter/VMInspector.h: Removed.

2015-04-15  Timothy Horton  <timothy_horton@apple.com>

        Custom CSS cursors do not use -webkit-image-set on retina displays
        https://bugs.webkit.org/show_bug.cgi?id=120783
        <rdar://problem/14921432>

        Reviewed by Beth Dakin.
        Patch by Evan Wallace <evan.exe@gmail.com>.

        Scale NSCursor images correctly so custom CSS cursors work with
        -webkit-image-set on retina displays.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        (WebCore::Cursor::ensurePlatformCursor):

2015-04-15  Alexey Proskuryakov  <ap@apple.com>

        No thread safety when passing ThreadableLoaderOptions from a worker thread
        https://bugs.webkit.org/show_bug.cgi?id=143790

        Reviewed by Geoffrey Garen.

        * loader/ThreadableLoader.h:
        * loader/ThreadableLoader.cpp: (WebCore::ThreadableLoaderOptions::isolatedCopy): Added.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Don't just send
        a structure with strings to a different thread, that's bad.

        * platform/CrossThreadCopier.h: I think that this is dead code, but for this bug,
        just removing a clearly wrong specialization.

2015-04-15  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143785

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2015-04-15  Daniel Bates  <dabates@apple.com>

        Clean up: Have SVGTextLayoutEngine::beginTextPathLayout() take a reference to a
        RenderSVGTextPath instead of a pointer
        https://bugs.webkit.org/show_bug.cgi?id=143787

        Reviewed by Andreas Kling.

        SVGTextLayoutEngine::beginTextPathLayout() assumes that the passed RenderObject is a
        non-null pointer to a RenderSVGTextPath object. Instead we should have this function take a
        reference to a RenderSVGTextPath object to help callers catch bad usage and better document
        the expectation of a valid RenderSVGTextPath object.

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes): Downcast the renderer of the
        inline box to a RenderSVGTextPath object and pass it to SVGTextLayoutEngine::beginTextPathLayout().
        We ensured that this cast is safe earlier in this function.
        SVGTextLayoutEngine::beginTextPathLayout().
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout): Change type of first parameter from
        RenderObject* to RenderSVGTextPath. Remove ASSERT() that was checking for a non-null
        RenderObject pointer since we are passing the renderer by reference and a well-formed
        reference must refer to a valid object.
        * rendering/svg/SVGTextLayoutEngine.h: Substitute RenderSVGTextPath& for RenderObject*.

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] ChromeClient::exitVideoFullscreen() should take a pointer to a HTMLVideoElement.
        https://bugs.webkit.org/show_bug.cgi?id=143674

        Reviewed by Darin Adler.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen): Pass a reference.
        (WebCore::HTMLMediaElement::exitFullscreen): exitVideoFullscreen() -> exitVideoFullscreenForVideoElement(...).
        * page/ChromeClient.h:

2015-04-14  Anders Carlsson  <andersca@apple.com>

        Make creating send rights from shared memory more robust
        https://bugs.webkit.org/show_bug.cgi?id=143730
        rdar://problem/16595870

        Reviewed by Darin Adler.

        Add a bool conversion operator to MachSendRight and tidy up the default constructor.

        * platform/cocoa/MachSendRight.h:
        (WebCore::MachSendRight::operator bool):
        (WebCore::MachSendRight::MachSendRight): Deleted.

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

        Generalize "isPlayingAudio" to include other media characteristics
        https://bugs.webkit.org/show_bug.cgi?id=143713

        Reviewed by Jer Noble.

        No new functionality.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::stop): updateIsPlayingAudio -> updateIsPlayingMedia.
        (WebCore::AudioContext::isPlayingAudioDidChange): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::addAudioProducer): Ditto.
        (WebCore::Document::removeAudioProducer): Ditto.
        (WebCore::Document::updateIsPlayingMedia): Renamed.
        (WebCore::Document::updateIsPlayingAudio): Deleted.
        * dom/Document.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): updateIsPlayingAudio -> updateIsPlayingMedia.
        (WebCore::HTMLMediaElement::setPlaying): Ditto.

        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingMedia): Renamed.
        (WebCore::Page::updateIsPlayingAudio): Deleted.
        * page/Page.h:

2015-04-15  Joonghun Park  <jh718.park@samsung.com>

        Fix Debug build error 'comparison of unsigned expression >= 0 is always true [-Werror=type-limits]'
        https://bugs.webkit.org/show_bug.cgi?id=143751

        Reviewed by Csaba Osztrogonác.

        No new tests, no new behaviors.

        * rendering/svg/SVGTextChunk.cpp:
        (WebCore::SVGTextChunk::SVGTextChunk):

2015-04-14  Zalan Bujtas  <zalan@apple.com>

        Make inline continuation style change logic consistent.
        https://bugs.webkit.org/show_bug.cgi?id=143737
        rdar://problem/20486596

        Reviewed by Simon Fraser.

        Do not force RenderBlock type-casting on the first sibling of the continuation's container.
        The first sibling of the container of a continuation should be handled as the rest of the siblings.

        Test: fast/inline/inline-with-column-span-and-remove-block-child-crash.html

        * rendering/RenderInline.cpp:
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::styleDidChange):

2015-04-14  Chris Dumez  <cdumez@apple.com>

        Regression(r180020): Web Inspector crashes on pages that have a stylesheet with an invalid MIME type
        https://bugs.webkit.org/show_bug.cgi?id=143745
        <rdar://problem/20243916>

        Reviewed by Joseph Pecoraro.

        After r180020, we are stricter and no longer accept CSS resources that
        are not served with a CSS MIME type. Showing Web inspector on a page
        with such bad resource would crash because
        InspectorPageAgent::cachedResourceContent() would return true but
        the result String would be null. This null String would then later
        be passed to the Yarr interpreter and crash on a String::is8Bit()
        call.

        cachedResourceContent() calls CachedCSSStyleSheet::sheetText(). Before
        r180020, it would return the text, even if the MIME type was incorrect.
        However, this is no longer the case and we now need to make sure that
        cachedResourceContent() returns false if sheetText() returns a null
        String.

        Test: http/tests/inspector/css/bad-mime-type.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):

2015-04-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        textPath layout performance improvement.
        https://bugs.webkit.org/show_bug.cgi?id=141570.

        Reviewed by Darin Adler.

        The bottleneck of the text-on-path performance is the position and angle
        calculations for every single character. If the number of characters is
        'n' and the number of path elements is 'm', the total number of processing
        the path elements is O(2 x n x m). What makes it really worse is, for every
        curve we keep splitting the curve till the split curve is almost a straight
        line. The changes we need to do are:
        1. Merge the position and the angle traversals in one pass since they are
           returning info for the same length on the path. There is a degenerate
           case for the starting point when calculating the angle. The original
           code was solving this problem by passing an epsilon instead of zero but
           because traversing the path for position and angle are now merged, we
           will pass zero for the starting point as is. All we need is to move one
           step ahead without moving the position. We need the extra step forward
           to calculate the slope of the path at the starting point.
        2. We need to add a new mode to traversing a path. The new mode will take
           a vector of lengths and returns a vector of arrow vectors. Every arrow
           vector represents a position and an angle on the path at a certain length.
           This requires changing the SVGTextLayoutEngine to calculate the lengths
           of the characters on the curve first and then passing all of them to the
           path traversal function. Instead of traversing the path for every length,
           we are going to get the required point and angle from the vector of arrow
           vectors.

        This patch is addressing the first fix only. The second one will require
        refactoring the SVGTextLayoutEngine so I am going to address it in a
        different patch.

        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction): It is cleaner to move the function
        of this method to PathTraversalState::processPathElement().
        
        (WebCore::Path::length): Use new enum Action value and access methods.
        
        (WebCore::Path::traversalStateAtLength): New function which returns the
        traversalState at a certain length on a path.
        
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength): Use traversalStateAtLength() to get
        the traversalState and from it return either the position or the angle.
        
        * platform/graphics/Path.h: Define traversalStateAtLength().
        
        * platform/graphics/PathTraversalState.cpp:
        (WebCore::distanceLine): Code clean up.
        
        (WebCore::curveLength): Make the setting of m_previous and m_current happens
        only in this function.
        
        (WebCore::PathTraversalState::PathTraversalState): Add an optional parameter
        for the desired length and move the initialization of the other members to
        the class definition.
        
        (WebCore::PathTraversalState::closeSubpath):
        (WebCore::PathTraversalState::moveTo):
        (WebCore::PathTraversalState::lineTo): Add the distance to the m_totalLength
        instead of returning it since this is what all the callers were doing.
        
        (WebCore::PathTraversalState::quadraticBezierTo):
        (WebCore::PathTraversalState::cubicBezierTo): Add the distance to the
        m_totalLength. Move the setting of m_previous and m_current to curveLength().
        Remove unused members m_control1 and m_control2.

        (WebCore::PathTraversalState::processSegment): Deleted.        
        (WebCore::PathTraversalState::finalizeAppendPathElement): Create a new
        name for the function. Handle the case of the angle at the starting point
        where m_desiredLength is set to zero. The new flag m_isZeroVector will be
        set to notify the caller that the  next iteration will be the last one and
        it is only needed for the calculating the angle of a zero vector. m_current
        should not change by this last iteration.
        
        (WebCore::PathTraversalState::appendPathElement): This code is moved from
        pathLengthApplierFunction().
        
        (WebCore::PathTraversalState::processPathElement): This function is used
        by the class Path. It is a wrapper for appendPathElement(). If m_isZeroVector
        is set we append the new element to a copy for the PathTraversalState just
        to get the angle for the zero vector.

        * platform/graphics/PathTraversalState.h: Change the enum values to not
        not include the class or the enum class. Make the data members private and
        expose the needed ones through access methods. Make all the internal methods
        to be private.
        
        (WebCore::PathTraversalState::processPathElement):  Another wrapper for
        appendPathElement() which is used by SVGPathTraversalStateBuilder.
        
        (WebCore::PathTraversalState::action):
        (WebCore::PathTraversalState::setAction):
        (WebCore::PathTraversalState::desiredLength):
        (WebCore::PathTraversalState::setDesiredLength):
        (WebCore::PathTraversalState::success):
        (WebCore::PathTraversalState::totalLength):
        (WebCore::PathTraversalState::current):
        (WebCore::PathTraversalState::normalAngle): New access methods which are now
        needed after making the data members private.
        
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes): Make the casting
        of the renderer on the caller side.
        
        * rendering/svg/SVGTextChunk.cpp:
        (WebCore::SVGTextChunk::SVGTextChunk): The constructor should append the
        elements of m_boxes instead of making this from outside the class.
        
        (WebCore::SVGTextChunk::totalCharacters):
        (WebCore::SVGTextChunk::totalLength):
        (WebCore::SVGTextChunk::calculateLength): Deleted.
        Replace calculateLength() by totalCharacters() and totalLength() to make
        the interface cleaner.
        
        (WebCore::SVGTextChunk::totalAnchorShift):
        (WebCore::SVGTextChunk::calculateTextAnchorShift): Deleted.
        Rename the function name.
        
        (WebCore::SVGTextChunk::layout):
        (WebCore::SVGTextChunk::processTextLengthSpacingCorrection):
        (WebCore::SVGTextChunk::buildBoxTransformations):
        (WebCore::SVGTextChunk::boxSpacingAndGlyphsTransform):
        (WebCore::SVGTextChunk::processTextAnchorCorrection):
        Move the chunk layout code from SVGTextChunkBuilder::layoutTextChunks()
        to the SVGTextChunk::layout(). Move all the helper functions as well.
        
        * rendering/svg/SVGTextChunk.h:
        (WebCore::SVGTextChunk::hasTextAnchor):
        (WebCore::SVGTextChunk::boxes): Deleted.
        Add the new methods and change most of the public methods to be private.
        
        * rendering/svg/SVGTextChunkBuilder.cpp:
        (WebCore::SVGTextChunkBuilder::totalCharacters):
        (WebCore::SVGTextChunkBuilder::totalLength):
        (WebCore::SVGTextChunkBuilder::totalAnchorShift): This code is moved from
        SVGTextLayoutEngine. It scans the boxes stored in the SVGTextChunkBuilder
        and sums up the total values.
        
        (WebCore::SVGTextChunkBuilder::transformationForTextBox):
        (WebCore::SVGTextChunkBuilder::buildTextChunks):
        (WebCore::SVGTextChunkBuilder::layoutTextChunks): Code clean up.
        
        (WebCore::SVGTextChunkBuilder::addTextChunk): Deleted.
        (WebCore::SVGTextChunkBuilder::processTextChunk): Deleted.
        (WebCore::SVGTextChunkBuilder::processTextLengthSpacingCorrection): Deleted.
        (WebCore::SVGTextChunkBuilder::processTextAnchorCorrection): Deleted.
        (WebCore::SVGTextChunkBuilder::buildSpacingAndGlyphsTransform): Deleted.
        This code now lives in SVGTextChunk.
        
        * rendering/svg/SVGTextChunkBuilder.h: Add new methods for code which was
        moved from SVGTextLayoutEngine and remove methods for code which was removed
        to SVGTextChunk.
        
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout): Use the sum up methods
        from SVGTextChunkBuilder instead of looping through the chunks. Also get a
        clean order for defining variables and doing the calculations.
        
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices): Code clean up.
        
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath): Do a single path
        traversal to get the position and the angle for a length on a path.
        
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::buildTransformForProgress): Do a single
        path traversal to get the position and the angle at a length on a path.
        
        * svg/SVGPathTraversalStateBuilder.cpp:
        (WebCore::SVGPathTraversalStateBuilder::SVGPathTraversalStateBuilder):
        (WebCore::SVGPathTraversalStateBuilder::moveTo):
        (WebCore::SVGPathTraversalStateBuilder::lineTo):
        (WebCore::SVGPathTraversalStateBuilder::curveToCubic):
        (WebCore::SVGPathTraversalStateBuilder::closePath):
        (WebCore::SVGPathTraversalStateBuilder::setDesiredLength):
        (WebCore::SVGPathTraversalStateBuilder::continueConsuming):
        (WebCore::SVGPathTraversalStateBuilder::totalLength):
        (WebCore::SVGPathTraversalStateBuilder::currentPoint):
        (WebCore::SVGPathTraversalStateBuilder::incrementPathSegmentCount): Deleted.
        (WebCore::SVGPathTraversalStateBuilder::pathSegmentIndex): Deleted.
        * svg/SVGPathTraversalStateBuilder.h:
        (WebCore::SVGPathTraversalStateBuilder::pathSegmentIndex):
        Code clean up.
        
        * svg/SVGPathUtilities.cpp:
        (WebCore::getSVGPathSegAtLengthFromSVGPathByteStream):
        (WebCore::getTotalLengthOfSVGPathByteStream):
        (WebCore::getPointAtLengthOfSVGPathByteStream): Use new TraversalState::Action
        enum values.

2015-04-14  Simon Fraser  <simon.fraser@apple.com>

        Re-enable custom dilation for antialiased fonts
        https://bugs.webkit.org/show_bug.cgi?id=143738

        Reviewed by Tim Horton.
        
        Enabling custom dilation for antialised fonts broke layout tests, so re-land it,
        but disable in WebKitTestRunner and DumpRenderTree. The latter requires adding
        a private WebKit pref. This pref defaults to YES, enabling the feature by default
        in WK1 as we do for WK2.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::dilationSizeForTextColor):
        (WebCore::FontCascade::drawGlyphs):

2015-04-14  Andy Estes  <aestes@apple.com>

        [Content Filtering] Use ASSERT_WITH_SECURITY_IMPLICATION for verifying types from NEFilterSource
        https://bugs.webkit.org/show_bug.cgi?id=143742

        Reviewed by David Kilzer.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (replacementDataFromDecisionInfo): ASSERT_WITH_SECURITY_IMPLICATION that decisionInfo is really a NSDictionary.
        (WebCore::NetworkExtensionContentFilter::handleDecision): ASSERT_WITH_SECURITY_IMPLICATION that replacementData is really a NSData.

2015-04-14  Brent Fulgham  <bfulgham@apple.com>

        Correct layering violation in DumpRenderTree Build
        https://bugs.webkit.org/show_bug.cgi?id=143732

        Reviewed by Simon Fraser.

        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::monitorWheelEvents): Added. Provides a wrapper around
        the internal WebCore objects needed to implement this function.
        (WebCoreTestSupport::setTestCallbackAndStartNotificationTimer): Ditto.
        * testing/js/WebCoreTestSupport.h:

2015-04-14  Brady Eidson  <beidson@apple.com>

        Make sure media element loads hit content filter extensions.
        <rdar://problem/20014012> and https://bugs.webkit.org/show_bug.cgi?id=143731

        Reviewed by Jer Noble.

        Tests: http/tests/contentextensions/media-filtered.html
               http/tests/contentextensions/text-track-blocked.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Skip loads that are filtered.

2015-04-14  Brian Weinstein  <bweinstein@apple.com>

        Add SPI to clear HSTS hosts added since a date.
        https://bugs.webkit.org/show_bug.cgi?id=143726
        and
        rdar://problem/16664597

        Declare _CFNetworkResetHSTSHostsSinceDate in CFNetworkSPI.h.

        Reviewed by Anders Carlsson.

        * platform/spi/cf/CFNetworkSPI.h:

2015-04-14  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Time numbers on media controls move as they update on OSX.
        <rdar://problem/20141790>.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display):
        Don't bother justifying content to end. We size the box to fit the time displays exactly anyways.

2015-04-14  Roger Fong  <roger_fong@apple.com>

        Insert volume control in correct place after exiting wireless play.
        https://bugs.webkit.org/show_bug.cgi?id=143721.
        <rdar://problem/20526106>

        Reviewed by Darin Adler.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateWirelessPlaybackStatus):

2015-04-14  Brady Eidson  <beidson@apple.com>

        Media elements not in a page shouldn't load.
        https://bugs.webkit.org/show_bug.cgi?id=143720

        Reviewed by Jer Noble.

        No new tests (Theoretical problem noticed in code review).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Make sure the frame is in a page.

2015-04-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Clean up registration of layers with the ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=143725

        Reviewed by Tim Horton.

        Simplify a couple of bits of code related to the registration of layers with
        the ScrollingCoordinator in RenderLayerCompositor.

        First, RenderLayerBacking was using ScrollingNodeTypes to choose which scrolling
        roles a layer has, which let to ambiguous code where we hardcoded a ScrollingNodeType
        with knowledge of what RenderLayerBacking did with it. Clean up by using LayerScrollCoordinationRole,
        which is moved to RenderLayer.h so that RenderLayerCompositor.h and RenderLayerBacking.h
        both see it.

        Secondly, avoid having both detachFromScrollingCoordinator() and detachFromScrollingCoordinatorForRole()
        by passing in the bitmask of roles.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollLayerID):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinatorForRole): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::removeFromScrollCoordinatedLayers):
        (WebCore::scrollCoordinationRoleForNodeType):
        (WebCore::RenderLayerCompositor::attachScrollingNode):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayerForRole): Deleted.
        * rendering/RenderLayerCompositor.h:

2015-04-14  Benjamin Poulain  <benjamin@webkit.org>

        Add a conservative DFA minimizer for the content extension matcher
        https://bugs.webkit.org/show_bug.cgi?id=143501

        Reviewed by Alex Christensen.

        This patch adds a simple minimizer for DFA graphs. It is not a perfect minimizer:
        some indistinguishable are not merged, but no two distinguishable are merged.

        The general idea of the algorithm is to put all the state into a single set
        and partition iteratively until it is impossible to split any subset by using
        a transition to distinguish two states.

        Let's ignore fallback transition for now, and I'll explain later how they fit in
        the big picture.


        The first thing we do is create a partition of the transition by grouping every
        transition by the same character in the same subset. This partition of transitions
        is the base by which we will partition the states.

        Each subset in the transition partition is a "distinguisher" by which we can
        separate the state partition.

        We also create a second partition, the state partition. This is where we keep
        all the subsets of states that have been split so far.

        Let say we have the following graph.

            1 --a--> 2
            1 --b--> 3
            2 --c--> 4 (final)
            3 --c--> 4 (final)

        The partition of transition would start with:
        Set 0:
            1 --a--> 2
        Set 1:
            1 --b--> 3
        Set 2:
            2 --c--> 4
            3 --c--> 4

        The state partition would have a single set with { 1, 2, 3, 4 }.


        Next, we split the state partition by distinguishable final states. In this case,
        we would split it into { 1, 2, 3 }, { 4 }.

        We then refine the transition partition by splitting it by the states that have
        been distinguished. Here, the only transitions to 4 are both is the same set (set 2),
        so the transition partition remains the same.


        We can now execute the main loop of the algorithm:
        1) Split the states by the transitions.
        2) Split the transitions that are now reaching two different sets of the state partition.
        3) Add any newly discovered "distinguisher" (the ones we split) to the list of "distinguisher"
           to process.

        In this case, we just iterate over the partition set in order, and add newly split transitions
        to the end of the list.

        In the example, we would first visit set 0. We have that state 1 is distinguishable
        by "a", and the state partition would become { 1 }, { 2, 3 }, { 4 }.

        We then visit transition set 1, it distinguishes state 1 which is already alone -> nothing to do.

        Finally, we process the transition set 2, it distinguishes 2 and 3, they are already in the same
        set -> nothing to do.

        There is no more transition to process, we have 3 unique subsets and we should merge 2 and 3.

        ---

        Okay, now how to we fit fallback transition in this model. In this patch, I take the conservative
        approach: we split everything assuming fallback transition do not exist, then we refine
        by the fallback transitions.

        Let's take the following example:
            1 --a--> 3
            2 --a--> 3
            1 -[f]-> 4
            2 -[f]-> 5

        and at this stage in the algorithm, we have the sets { 1, 2 }, { 3 }, { 4 }, { 5 }.
        The states 1 and 2 are together because they cannot be distinguished by 'a', but
        the fallback transition distinguishes them.

        Since we have done every other split, we have one useful property: we know that every
        state in every set transition with the exact set of characters within that set.
        If that was not true, there would be one "distinguisher" 'x' that could spit the set
        into two subsets: the one with the transition 'x' and the ones without.

        Since all the transitions are the same, there is no overlap between the defined transition
        and the fallback transition. Consequently, we can use the fallback transition as a whole
        transition and use it to distinguish the states.

        The fallback transitions are handled like any other transition, we have a partition of such
        transitions and split by each of them. BUT, we can only use them after every unique transition
        has been covered.

        This trick is also what makes the minimization imperfect: it should be possible to merge
        states with overlap in their fallback transitions but we would split them.

        ---

        Antti Valmari, Petri Lehtinen, Marie-Pierre Béal and Maxime Crochemore deserve credit for their indirect
        work on this patch. Thanks for your wonderful papers about DFA minimization.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::minimize):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/DFA.h:
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        * contentextensions/DFAMinimizer.cpp: Added.
        (WebCore::ContentExtensions::DFAMinimizer::simplifyTransitions):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::initialize):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::markElementInCurrentGeneration):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::refineGeneration):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::iterateSet):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::setIndex):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::firstElementInSet):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::size):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::SetDescriptor::indexAfterMarkedElements):
        (WebCore::ContentExtensions::DFAMinimizer::Partition::SetDescriptor::end):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::FullGraphPartition):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::markNode):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::refinePartitions):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::splitByUniqueTransitions):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::splitByFallbackTransitions):
        (WebCore::ContentExtensions::DFAMinimizer::FullGraphPartition::nodeReplacement):
        (WebCore::ContentExtensions::DFAMinimizer::ActionKey::ActionKey):
        (WebCore::ContentExtensions::DFAMinimizer::ActionKey::isEmptyValue):
        (WebCore::ContentExtensions::DFAMinimizer::ActionKey::isDeletedValue):
        (WebCore::ContentExtensions::DFAMinimizer::ActionKeyHash::hash):
        (WebCore::ContentExtensions::DFAMinimizer::ActionKeyHash::equal):
        (WebCore::ContentExtensions::DFAMinimizer::minimize):
        * contentextensions/DFAMinimizer.h: Copied from Source/WebCore/contentextensions/DFA.h.
        * contentextensions/DFANode.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NFAToDFA::convert):
        (WebCore::ContentExtensions::simplifyTransitions): Deleted.

2015-04-14  Chris Dumez  <cdumez@apple.com>

        ASSERT(frame().view() == this) assertion hit in FrameView::windowClipRect() on Windows bots
        https://bugs.webkit.org/show_bug.cgi?id=143723

        Reviewed by Brent Fulgham.

        ASSERT(frame().view() == this) in FrameView::windowClipRect() can be hit
        if the post layout timer timer fires after the page has entered page
        cache. Upon entering page cache, we call FrameView::unscheduleRelayout()
        to stop the layout timer if it is active, however, we don't stop the
        post-layout timer. Therefore, there was nothing preventing the
        post-layout timer from firing after entering page cache.

        In this patch, we unschedule the post-layout timer in
        FrameView::unscheduleRelayout() to protect ourselves against this.

        I think we were only seeing the assertion hit on Windows because this
        timer probably gets scheduled more frequently on Windows. On Mac, I
        rarely see it getting scheduled.

        No new tests, should fix crashing tests on the bots.

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

2015-04-14  Chris Dumez  <cdumez@apple.com>

        FrameView::m_frame should be a Ref<Frame>
        https://bugs.webkit.org/show_bug.cgi?id=143716

        Reviewed by Andreas Kling.

        FrameView::m_frame should be a Ref<Frame> instead of a RefPtr<Frame> as
        it can never be null.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::updateCanBlitOnScrollRecursively):
        (WebCore::FrameView::setIsOverlapped):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::renderedCharactersExceed):
        (WebCore::FrameView::updateLayerFlushThrottling):
        (WebCore::FrameView::serviceScriptedAnimations):
        (WebCore::FrameView::updateBackgroundRecursively):
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        (WebCore::FrameView::paintContentsForSnapshot):
        (WebCore::FrameView::notifyWidgetsInAllFrames):
        (WebCore::FrameView::setExposedRect):
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        * page/FrameView.h:

2015-04-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Interactive elements of developer.apple.com are broken
        https://bugs.webkit.org/show_bug.cgi?id=143692
        rdar://problem/19320087

        Reviewed by Sam Weinig.
        
        When a composited RenderLayer had nodes in the scrolling tree by virtue of
        both position and overflow:scroll, and one of those reasons disappeared,
        we'd fail to remove the corresponding node from the scrolling tree. This
        could leave an overflow:scroll element behaving as if it were position:fixed.
        
        Fix by having RenderLayerCompositor::updateScrollCoordinationForThisFrame()
        detach the layer on a per-role basis.

        Test: platform/ios-simulator-wk2/scrolling/remove-scrolling-role.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinatorForRole):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayerForRole):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer): Just moved.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Call detachScrollCoordinatedLayerForRole()
        if the layer doesn't have the relevant scrolling reasons.
        * rendering/RenderLayerCompositor.h:

2015-04-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182794.
        https://bugs.webkit.org/show_bug.cgi?id=143714

        readable-stream-templated.html fails on Debug bots (Requested
        by youenn on #webkit).

        Reverted changeset:

        "[Streams API] ReadableStream constructor start function
        should be able to close the stream"
        https://bugs.webkit.org/show_bug.cgi?id=143363
        http://trac.webkit.org/changeset/182794

2015-04-14  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Unreviewed build fix after r182707.

        * platform/network/curl/MultipartHandle.cpp:
        (WebCore::MultipartHandle::didReceiveResponse):

2015-04-14  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] ReadableStream constructor start function should be able to close the stream
        https://bugs.webkit.org/show_bug.cgi?id=143363

        Reviewed by Benjamin Poulain.

        Implements https://streams.spec.whatwg.org/#close-readable-stream.
        When the "close" JS function is called, the stream is getting closed.
        The stream state is changed to close and if it has a reader, the reader gets closed as well:
        The reader resolves the closed promise and release the stream.

        Enabled the possibility to resolve a promise with any JS value.
        This is used to resolve closed promise with jsUndefined and will be used for read promises.

        Covered by reference tests that are now passing.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::changeStateToClosed): Called by the JS function 'close'.
        * Modules/streams/ReadableStream.h:
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::ReadableStreamReader):
        (WebCore::ReadableStreamReader::initialize): Added to handle state change at constructor time (in particular closed/errored state).
        (WebCore::ReadableStreamReader::releaseStream):
        (WebCore::ReadableStreamReader::closed): Storing the closed promise callbacks.
        (WebCore::ReadableStreamReader::changeStateToClosed): Resolution of closed promise.
        * Modules/streams/ReadableStreamReader.h:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve<JSC::JSValue>):
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::JSReadableStreamReader::closed):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::readableStreamSlotName):
        (WebCore::getReadableJSStream): Helper function to retrieve the stream from the exec state.
        (WebCore::closeReadableStreamFunction):
        (WebCore::createReadableStreamCloseFunction):
        (WebCore::createReadableStreamController):
        (WebCore::ReadableStreamJSSource::start):
        (WebCore::ReadableJSStreamReader::ReadableJSStreamReader): Deleted.

2015-04-13  Joonghun Park  <jh718.park@samsung.com>

        Use modern for-loops in Document
        https://bugs.webkit.org/show_bug.cgi?id=143600

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::processBaseElement):
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        (WebCore::Document::updateRangesAfterChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        (WebCore::Document::documentWillSuspendForPageCache):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::mediaVolumeDidChange):
        (WebCore::Document::privateBrowsingStateDidChange):
        (WebCore::Document::captionPreferencesChanged):
        (WebCore::Document::validateAutoSizingNodes):
        (WebCore::Document::resetAutoSizingNodes):
        (WebCore::Document::webkitExitFullscreen):
        (WebCore::Document::absoluteRegionForEventTargets):

2015-04-13  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Columns set in percentages collapse to auto width
        https://bugs.webkit.org/show_bug.cgi?id=141435

        Reviewed by David Hyatt.

        Based on a patch by Sergio Villar Senin  <svillar@igalia.com>.

        This patch adds 2 new new methods in RenderBox to determine if the grid
        has a definite size or not.

        RenderGrid::gridTrackSize() was not checking properly if the grid has or
        not an indefinite size.
        The condition was including auto which is not indefinite per se. For
        example, auto is definite if the containing block is definite.
        As the new method is more expensive, we just call it when it's really
        needed to avoid performance regressions.

        Finally we were setting the override logical width/height to -1 (no
        possible resolution) for all the items regardless if they've a relative
        width/height or a fixed one.
        Added the condition, including not only items with percentage logical
        width/height but also relative, to avoid overriding the value for items
        with fixed width/height as it's not needed.

        Tests: fast/css-grid-layout/grid-item-with-percent-height-in-auto-height-grid-resolution.html
               fast/css-grid-layout/percent-intrinsic-track-breadth.html
               fast/css-grid-layout/percent-track-breadths-regarding-container-size.html

        * rendering/RenderBox.cpp:
        (WebCore::logicalWidthIsResolvable):
        (WebCore::RenderBox::hasDefiniteLogicalWidth):
        (WebCore::RenderBox::percentageLogicalHeightIsResolvableFromBlock):
        (WebCore::RenderBox::hasRelativeLogicalWidth):
        * rendering/RenderBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::hasDefiniteLogicalSize):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        * rendering/RenderGrid.h:

2015-04-13  Chris Dumez  <cdumez@apple.com>

        Regression: Scrolling on popsci.com spends too much time in FrameView::viewportsContentsChanged()
        https://bugs.webkit.org/show_bug.cgi?id=143675

        Reviewed by Simon Fraser.

        Optimize resumeVisibleImageAnimationsIncludingSubframes() so that the FrameViews'
        windowClipRect gets computed less often:
        - Cache the FrameView's windowClipRect before resuming image animations in subframes
          as calling windowClipRect() on those subframes' view is going to call windowClipRect()
          on their ancestors. This avoids a lot of unnecessary windowClipRect recomputations
          in deep frame trees.
        - Stop traversing the Frame tree if the current frame does not have a content
          renderer, as this means the subframes won't have one either.
        - Stop traversing the Frame tree if the current frame's view has an empty
          windowClipRect() as this means the windowClipRect will be empty for those
          subframes as well.

        On popsci.com, this cuts down the number of uncached windowClipRect() calls by
        approximately half. I see viewportsContentsChanged() at ~0.4% when scrolling
        on popsci.com after this change.

        * page/FrameView.cpp:
        (WebCore::FrameView::resumeVisibleImageAnimationsIncludingSubframes):
        (WebCore::FrameView::windowClipRect):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::resumePausedImageAnimationsIfNeeded):
        * rendering/RenderView.h:

2015-04-13  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Set the title text of the placard added in r182631.
        https://bugs.webkit.org/show_bug.cgi?id=143585.
        <rdar://problem/12067439>

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateWirelessPlaybackStatus):

2015-04-10  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143286
        <rdar://problem/20375516>

        Reviewed by Simon Fraser.

        No new functionality.

        This series of changes adds a new singleton class, 'WheelEventTestTrigger', which encapsulates a
        function object to be fired when scroll events are finished. The object also keeps track of reasons
        why the test should not yet fire (e.g., 'rubberbanding' is active) so that tests do not incorrectly
        check rendering state in the middle of an animation.

        This code is not yet hooked up to the rendering system, and so does not have any effect on behavior.

        * CMakeLists.txt: Add new WheelEventTestTrigger files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame): Add new member to constructor.
        (WebCore::MainFrame::testTrigger): Added.
        (WebCore::MainFrame::ensureTestTrigger): Added.
        (WebCore::MainFrame::clearTrigger): Added.
        * page/MainFrame.h:
        * page/WheelEventTestTrigger.cpp: Added.
        (WebCore::WheelEventTestTrigger::WheelEventTestTrigger):
        (WebCore::WheelEventTestTrigger::createWeakPtr):
        (WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
        (WebCore::WheelEventTestTrigger::setTestNotificationCallback):
        (WebCore::WheelEventTestTrigger::deferTestsForReason):
        (WebCore::WheelEventTestTrigger::removeTestDeferralForReason):
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired):
        * page/WheelEventTestTrigger.h: Added.

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [iOS] When entering optimized fullscreen, standard fullscreen view should exit.
        https://bugs.webkit.org/show_bug.cgi?id=143615

        Reviewed by Simon Fraser.

        When entering optimized fullscreen from standard fullscreen, the original fullscreen
        view should animate out.

        The original method for entering optimized fullscreen is deprecated, so replace it with
        the new method (which doesn't take completion blocks) and use delegate methods to detect
        when the animation transition completes.

        * platform/Logging.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (boolString): Added; use for logging boolean parameters.
        (-[WebAVPlayerController playerViewControllerWillStartOptimizedFullscreen:]): Pass to WebVideoFullscreenInterfaceAVKit.
        (-[WebAVPlayerController playerViewControllerDidStartOptimizedFullscreen:]): Ditto.
        (-[WebAVPlayerController playerViewControllerWillStopOptimizedFullscreen:]): Ditto.
        (-[WebAVPlayerController playerViewControllerDidStopOptimizedFullscreen:]): Ditto.
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscreen:]): Ditto.
        (-[WebAVPlayerController playerViewControllerDidCancelOptimizedFullscreen:]): Ditto.
        (-[WebAVPlayerController playerViewController:restoreUserInterfaceForOptimizedFullscreenStopWithCompletionHandler:]): Ditto.
        (-[WebAVVideoLayer setPlayerViewController:]): Remove the KVO registration; now handled by above delegate methods.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Add logging.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized): Use new -startOptimizedFullscreen method.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard): Add logging.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): Use hasMode() & isMode() rather than checking m_mode directly.
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline): Callback now stored on this object rather than the WebAVPlayerController.
        (WebVideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoOptimized): Moved.
        (WebVideoFullscreenInterfaceAVKit::fullscreenMayReturnToInline): Added; store the passed callback.
        (WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen): Exit out of standard fullscreen mode if necessary.
        (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen): Moved from the start lambda in enterFullscreenOptimized().
        (WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen): Call the model's requestExitFullscreen() method.
        (WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen): Moved from the stop lambda in enterFullscreenOptimized().
        (WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen): Call the model's requestExitFullscreen() method.
        (WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen): Moved from the stop lambda in enterFullscreenOptimized().
        (WebVideoFullscreenInterfaceAVKit::prepareForOptimizedFullscreenStopWithCompletionHandler): Moved from -playerViewController:shouldExitFullScreenWithReason:.
        (WebVideoFullscreenInterfaceAVKit::setMode): Added; Call fullscreenModeChanged() if necessary.
        (WebVideoFullscreenInterfaceAVKit::clearMode): Ditto.
        (-[WebAVVideoLayer observeValueForKeyPath:ofObject:change:context:]): Deleted.
        (WebVideoFullscreenInterfaceAVKit::setIsOptimized): Deleted.

2015-04-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed fix after r182757.

        * platform/win/FileSystemWin.cpp:
        (WebCore::renameFile): Checked in wrong version.

2015-04-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed fix after r182161.

        The change caused Windows to lose Media UI, since the new 'getFileSize'
        signature was being improperly used for a 'UInt8'-based string.

        Fix was to provide implementations for the two new methods, and to make
        sure RenderThemeWin was using the proper signature.

        This should actually be a little more efficient, since we have the file
        handle when we call this new method. Previously, a Windows 'find file' was
        being done with the requested path, which was unnecessary work.

        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileSizeFromByHandleFileInformationStructure): Added helper function.
        (WebCore::getFileSize): Provide implementation.
        (WebCore::renameFile):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::stringWithContentsOfFile): Use the file handle to
        get the file size, rather than using the path-based size lookup (which involves
        performing an unnecessary file search.

2015-04-13  Brady Eidson  <beidson@apple.com>

        Share sheets from Share menus appear outside the browser window.
        <rdar://problem/20455592> and https://bugs.webkit.org/show_bug.cgi?id=143620

        Reviewed by Darin Adler.

        * page/ContextMenuController.h:
        (WebCore::ContextMenuController::client):

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

        Rebaseline bindings tests.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [iOS] Treat a 'not found' media option index as the 'off' track.
        https://bugs.webkit.org/show_bug.cgi?id=143672

        Reviewed by Eric Carlson.

        The UIProcess will pass in UINT64_MAX for the index of the legible option to select. Treat this
        as if the captionOffMenuItem() had been selected to avoid a null dereference.

        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::selectLegibleMediaOption):

2015-04-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        list-style-image with SVG image renders at incorrect size.
        https://bugs.webkit.org/show_bug.cgi?id=141367.

        Reviewed by Darin Adler.
        
        This patch imports https://codereview.chromium.org/197203003.

        When using an SVG as list marker image, don't unconditionally set the
        dimensions to a square with the dimensions of ascent / 2, but rather
        determine a suitable size using intrinsic dimensions (and ratio).

        Test: svg/as-list-image/svg-list-image-intrinsic-size-1.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::updateContent):

2015-04-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Canvas drawImage() has a security hole when the image isn't yet fully loaded.
        https://bugs.webkit.org/show_bug.cgi?id=58681.

        Reviewed by Darin Adler.

        There is a race condition which may happen if an image from a different
        origin is drawn on a canvas before it finishes loading. The check to taint
        the canvas comes before drawing it. This check returns false if the image
        is not completely loaded because we check the URL of the resource response.
        If after this check and before the drawing, the image finishes loading, the
        canvas will not be tainted but the image will be drawn.
        
        The fix is to move the check to taint the canvas after drawing the image.
        The only problem with this solution is basically the opposite of this bug:
        we will become stricter than before with images which are from a different
        origin and before they finish loading. The image has not finished loading,
        so we do not draw it. Before we check for tainting, the image finishes
        loading. So we decide to taint the canvas even the image is not drawn.
        
        But this should not be a security issue anymore. I personally do not know
        if it is even a correctness issue or not.

        Test: http/tests/canvas/canvas-tainted-after-draw-image.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2015-04-13  Beth Dakin  <bdakin@apple.com>

        Add force property to MouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=143569
        -and corresponding-
        rdar://problem/20472954

        Reviewed by Darin Adler.

        This patch removes WebKitMouseForceEvent and uses a MouseEvent everywhere that it 
        was used. That’s possible because this patch also adds a force property to all 
        MouseEvents and to PlatformMouseEvent.

        Remove WebKitMouseForceEvent.
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:

        Create MouseEvents with the appropriate force instead of WebKitMouseForceEvents. 
        This patch also gets rid of the PlatformMouseEvent parameter for these events. 
        They were re-using the cached mousedown event before, which they never should have 
        done. Instead, we create PlatformMouseEvents inside these functions and then use 
        that to make MouseEvents.
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseForceWillBegin):
        (WebCore::Element::dispatchMouseForceChanged):
        (WebCore::Element::dispatchMouseForceDown):
        (WebCore::Element::dispatchMouseForceUp):
        (WebCore::Element::dispatchMouseForceClick):
        (WebCore::Element::dispatchMouseForceCancelled):
        * dom/Element.h:

        No More WebKitMouseForceEvent.
        * dom/EventNames.in:

        Add force to MouseEvent.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::cloneFor):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::force):
        (WebCore::MouseEvent::setForce):
        * dom/MouseEvent.idl:

        No More WebKitMouseForceEvent.
        * dom/WebKitMouseForceEvent.cpp: Removed.
        * dom/WebKitMouseForceEvent.h: Removed.
        * dom/WebKitMouseForceEvent.idl: Removed.

        PlatformMouseEvent now takes a force parameter.
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenuAt):
        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):

        We don’t need lastMouseDownEvent() anymore. We were using it to avoid creating new 
        PlatformMouseEvents for the force events, but we fix that in this patch.
        (WebCore::EventHandler::lastMouseDownEvent): Deleted.
        * page/EventHandler.h:

        At force to PlatformMouseEvent.
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        (WebCore::PlatformMouseEvent::force):
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PlatformMouseEvent>::encodeValue):
        (JSC::EncodingTraits<PlatformMouseEvent>::decodeValue):

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

        Don't segregate heap objects based on Structure immortality.
        <https://webkit.org/b/143638>

        Reviewed by Darin Adler.

        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:

2015-04-13  Simon Fraser  <simon.fraser@apple.com>

        Fixed position element is truncated if moved onscreen by a transform
        https://bugs.webkit.org/show_bug.cgi?id=143655
        rdar://problem/15020044

        Reviewed by Darin Adler.
        
        Our "don't do layout if transform changes" code was too aggressive.
        If an element changes between having a transform and not having one, we
        really need to do a layout since so much else depends on transforms. In
        this particular case, we clip position:fixed elements to the viewport if
        they are not transformed, and were failing to re-evaluate this when a
        transform was added. Doing a layout fixes this.

        Test: compositing/geometry/fixed-transformed.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/StyleTransformData.h:
        (WebCore::StyleTransformData::hasTransform):

2015-04-12  Darin Adler  <darin@apple.com>

        [Cocoa] Localizable strings are inconsistent and need to be regenerated
        https://bugs.webkit.org/show_bug.cgi?id=143661
        rdar://problem/19634388

        Reviewed by Dan Bernstein.

        * English.lproj/Localizable.strings: Updated by running the
        update-webkit-localizable-strings script.

2015-04-13  Darin Adler  <darin@apple.com>

        Remove needless recreation of URL in NavigationScheduler::scheduleLocationChange
        https://bugs.webkit.org/show_bug.cgi?id=143662

        Reviewed by Sam Weinig.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange): Removed unnecessary code
        to convert a URL to a String and then back into a URL.

2015-04-13  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Add ENABLE(ATTACHMENT_ELEMENT) to the build system
        https://bugs.webkit.org/show_bug.cgi?id=143664

        Reviewed by Gyuyoung Kim.

        * page/efl/DragControllerEfl.cpp:
        (WebCore::DragController::declareAndWriteAttachment): Added stub implementation to fix the build.
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::declareAndWriteAttachment): Added stub implementation to fix the build.

2015-04-13  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Curl] Small improvements to CurlCacheEntry::parseResponseHeaders()
        https://bugs.webkit.org/show_bug.cgi?id=143597

        Reviewed by Csaba Osztrogonác.

        Most lines of code in CurlCacheEntry::parseResponseHeaders() don't need to be
        executed if the response has "no-cache" or "no-store" directive, but we are
        checking these conditions in the middle of the method. We can move this to the
        beginning of the method for efficiency.

        No new tests, no behavior change.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::parseResponseHeaders):

2015-04-13  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, build fix after r182704.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):

2015-04-13  Joonghun Park  <jh718.park@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr for ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=143056

        Reviewed by Gyuyoung Kim.

        No new tests, no behavior changes.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        * platform/CrossThreadCopier.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):

2015-04-10  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support marking/unmarking tracks as infinitely growable
        https://bugs.webkit.org/show_bug.cgi?id=141431

        Reviewed by Darin Adler.

        As explained here
        http://lists.w3.org/Archives/Public/www-style/2014Mar/0512.html we
        sometimes need to consider that some tracks are infinitely
        growable even when they are really not, in order to produce more
        "natural" results.

        For example the following case:
          grid-template-columns: auto auto;
          item 1 in column 1 with min-content = max-content = 10px;
          item 2 in columns 1-2 with min-content = 30, max-content = 100px;

        will produce (45px, 55px) without this patch. But considering the
        second column as infinitely growable the result is (10px, 90px), a
        more "natural" result because column 1 just needs to be 10px to
        accommodate item 1. From now on we can flag GridTracks so that
        they can infinitely grow even when the growth limit is finite.

        Apart from that distributeSpaceToTracks() is now unconditionally
        called even though the extra space is 0. That's because it
        computes the plannedSize value.

        Test: fast/css-grid-layout/mark-as-infinitely-growable.html

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::infiniteGrowthPotential):
        (WebCore::GridTrack::infinitelyGrowable):
        (WebCore::GridTrack::setInfinitelyGrowable):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::trackSizeForTrackSizeComputationPhase): Updated with new phase.
        (WebCore::RenderGrid::shouldProcessTrackForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::updateTrackSizeForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::currentItemSizeForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::markAsInfinitelyGrowableForTrackSizeComputationPhase):
        New helper method which does the mark/unmark just for growth limits.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::sortByGridTrackGrowthPotential): Use
        infiniteGrowthPotential() for sorting.
        (WebCore::RenderGrid::distributeSpaceToTracks):
        * rendering/RenderGrid.h:

2015-04-12  Benjamin Poulain  <benjamin@webkit.org>

        Legacy scroll behavior on HTMLBodyElement should only apply to the first body element of a document
        https://bugs.webkit.org/show_bug.cgi?id=143651

        Reviewed by Sam Weinig.

        WebKit has some very weird behaviors for the scroll methods on body. This patch
        address the first bug: only the first body element should have the legacy behavior.

        The relevant text in spec:
        -http://dev.w3.org/csswg/cssom-view/#dom-element-scrollleft
        -http://dev.w3.org/csswg/cssom-view/#dom-element-scrolltop
        -http://dev.w3.org/csswg/cssom-view/#dom-element-scrollwidth
        -http://dev.w3.org/csswg/cssom-view/#dom-element-scrollheight

        Tests: fast/dom/Element/body-scrollHeight-basics-quirks.html
               fast/dom/Element/body-scrollLeft-basics-quirks.html
               fast/dom/Element/body-scrollTop-basics-quirks.html
               fast/dom/Element/body-scrollWidth-basics-quirks.html
               fast/dom/Element/detached-body-element-does-not-scroll-main-frame-with-scrollLeft.html
               fast/dom/Element/detached-body-element-does-not-scroll-main-frame-with-scrollTop.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::isFirstBodyElementOfDocument):
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):
        * html/HTMLBodyElement.h:

2015-04-12  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix trival typos related to the word "coordinate".
        https://bugs.webkit.org/show_bug.cgi?id=143644

        Reviewed by Alexey Proskuryakov.

        No new tests, no behavior change.

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

2015-04-12  Simon Fraser  <simon.fraser@apple.com>

        Scrollbars in composited overflow and iframes fail to render on Mac
        https://bugs.webkit.org/show_bug.cgi?id=143647
        rdar://problem/20340544

        Reviewed by Darin Adler.

        When adding support for drawing scrollbars on the scrolling thread, we inadvertently
        disabled scrollbar drawing in other composited, main-thread scrolling configurations.
        
        Fix by having Scrollbar::supportsUpdateOnSecondaryThread() only return true if
        the scrollable area is using async scrolling.
        
        Sadly, we can't layout-test this.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

2015-04-12  Simon Fraser  <simon.fraser@apple.com>

        Selects don't scroll at some aspect ratios
        https://bugs.webkit.org/show_bug.cgi?id=143649
        rdar://problem/19365694

        Reviewed by Darin Adler.
        
        Fix width/height flip in RenderListBox which caused us to fail to scroll when
        the list was wider than the scroll height.
        
        We're generally confused about RenderListBox scroll offsets (webkit.org/b/143648)
        but this fixes the immediate problem.

        Test: fast/forms/listbox-visible-size.html

        * rendering/RenderListBox.h:

2015-04-12  Simon Fraser  <simon.fraser@apple.com>

        Too much repainting on scrolling with fixed backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=143637
        rdar://problem/20245243

        Reviewed by Darin Adler.
        
        FrameView::scrollContentsSlowPath() would repaint the entire viewport if there were
        any slow-repaint objects (those with background-attachment: fixed) and the contents
        were using compositing for scrolling.
        
        This is wrong; we only need to issue repaint for the slow-repaint renderers,
        and, if the frame is hosted in a compositing layer and not using compositing for scrolling,
        repaint that hosting layer.

        Tests: compositing/repaint/iframes/composited-iframe-with-fixed-background-doc-repaint.html
               compositing/repaint/iframes/compositing-iframe-scroll-repaint.html
               compositing/repaint/iframes/compositing-iframe-with-fixed-background-doc-repaint.html
               platform/mac-wk2/tiled-drawing/fixed-background-scroll-repaint.html

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

2015-04-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: create content view and details sidebar for Frames timeline
        https://bugs.webkit.org/show_bug.cgi?id=143533

        Reviewed by Timothy Hatcher.

        Refactoring: RunLoop prefix changed to RenderingFrame.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::toProtocol):
        * inspector/InspectorTimelineAgent.h:

2015-04-11  Chris Dumez  <cdumez@apple.com>

        Stop referring to outdated RFC2616 in CacheValidation.cpp
        https://bugs.webkit.org/show_bug.cgi?id=143619

        Reviewed by Darin Adler.

        Stop referring to outdated RFC2616 in CacheValidation.cpp and refer to
        the newer RFC7230 & RFC7234. Also update some variables to match the
        naming in the RFC for clarity.

        No behavior change.

        * platform/network/CacheValidation.cpp:
        (WebCore::updateResponseHeadersAfterRevalidation):
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        (WebCore::isCacheHeaderSeparator):
        (WebCore::parseCacheControlDirectives):

2015-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit places caret in front of pasted Numbers cells instead of behind
        https://bugs.webkit.org/show_bug.cgi?id=143627

        Reviewed by Darin Adler.

        The bug was caused by Position::downstream not respecting modern position types inside a table.
        Fixed it by using Position::atStartOfNode which respects before/after positions.

        This bug doesn't reproduce when there is no whitespace after td element in the pasted content
        because positionAtEndOfInsertedContent() will be inside the last pasted cell inside
        ReplaceSelectionCommand::completeHTMLReplacement in those cases. This related but separate bug
        is tracked in https://webkit.org/b/143628.

        Tests: editing/pasteboard/paste-table-with-unrendered-text-nodes.html

        * dom/Position.cpp:
        (WebCore::Position::downstream):

2015-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Enable Symbol in web pages
        https://bugs.webkit.org/show_bug.cgi?id=143375

        Reviewed by Ryosuke Niwa.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):

2015-04-10  Roger Fong  <roger_fong@apple.com>

        Hide volume controls when playing wirelessly.
        https://bugs.webkit.org/show_bug.cgi?id=143621.
        <rdar://problem/20490673>

        Reviewed by Darin Adler.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateWirelessPlaybackStatus):

2015-04-10  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Make LaunchServicesSPI.h a private header
        instead of project, as it's used in WebKit.

2015-04-08  Sam Weinig  <sam@webkit.org>

        Allow LaunchServices to handle URLs on link navigations
        <rdar://problem/19446826>
        https://bugs.webkit.org/show_bug.cgi?id=143544

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/ios/LaunchServicesSPI.h: Added.
        Add new SPI header.

2015-04-10  Bem Jones-Bey  <bjonesbe@adobe.com>

        Unreviewed, added CSS Shapes to features.json file.

        * features.json:

2015-04-10  Andy Estes  <aestes@apple.com>

        [Content Filtering] Support modifying request URLs
        https://bugs.webkit.org/show_bug.cgi?id=143599
        rdar://problem/20442560

        Reviewed by Darin Adler.

        Tests: contentfiltering/modify-request-url.html
               http/tests/contentfiltering/modify-redirect-request-url.html

        Allow NEFilterSource to modifiy request URLs. Also teach MockContentFilter to do the same for testing.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::willSendRequest): If NEFilterSource provided a string representing a
        valid URL in decisionInfo[NEFilterSourceOptionsRedirectURL], then used that as the request URL.
        * platform/spi/cocoa/NEFilterSourceSPI.h: Temporarily defined NEFilterSourceOptionsRedirectURL.
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::willSendRequest): If settings() has a valid modifiedRequestURL, use it as the
        request URL. Only do so once MockContentFilter has reached its decision point so that both initial requests and
        redirect requests can be tested.
        * testing/MockContentFilterSettings.h: Added modifiedRequestURL.
        (WebCore::MockContentFilterSettings::modifiedRequestURL): Ditto.
        (WebCore::MockContentFilterSettings::setModifiedRequestURL): Ditto.
        * testing/MockContentFilterSettings.idl: Ditto.

2015-04-10  Zalan Bujtas  <zalan@apple.com>

        showRenderTree: Include the render object to the inlinebox output.
        https://bugs.webkit.org/show_bug.cgi?id=143610

        This helps to match the inlinebox and its renderer.

        Reviewed by Antti Koivisto.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineBox):

2015-04-09  Roger Fong  <roger_fong@apple.com>

        Update wireless player placard for OSX.
        https://bugs.webkit.org/show_bug.cgi?id=143585.
        <rdar://problem/12067439>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css:
        Adjust button positioning and svg.
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button.playing):
        Style the wireless playback status placard, small and big versions.
        (audio::-webkit-media-controls-wireless-playback-status):
        (audio::-webkit-media-controls-wireless-playback-text):
        (audio::-webkit-media-controls-wireless-playback-text-top):
        (audio::-webkit-media-controls-wireless-playback-text-bottom):
        (audio::-webkit-media-controls-wireless-playback-status.small):
        (audio::-webkit-media-controls-wireless-playback-text-top.small):
        (audio::-webkit-media-controls-wireless-playback-text-bottom.small):
        * Modules/mediacontrols/mediaControlsApple.js:
        Add new wireless player placard elements.
        (Controller.prototype.createControls):
        (Controller.prototype.configureInlineControls):
        Make sure to switch between small and big placards when switching between fullscreen and small videos.
        (Controller.prototype.configureFullScreenControls):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.updateWirelessPlaybackStatus):

2015-04-10  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Refactor MediaPlaybackTarget
        https://bugs.webkit.org/show_bug.cgi?id=143571

        Reviewed by Jer Noble.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::addPlaybackTargetPickerClient): Don't call client if page playback target
            is NULL.
        (WebCore::Document::didChoosePlaybackTarget): MediaPlaybackTarget is passed as a Ref<>
        * dom/Document.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): MediaPlaybackTarget is passed as a Ref<>
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession): Don't initialize m_playbackTarget.
        (WebCore::HTMLMediaSession::didChoosePlaybackTarget): MediaPlaybackTarget is passed as a Ref<>
        * html/HTMLMediaSession.h:

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::playbackTarget): m_playbackTarget is a RefPtr<MediaPlaybackTarget>
        (WebCore::Page::didChoosePlaybackTarget): Ditto.
        * page/Page.h:

        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::setWirelessPlaybackTarget): Take a Ref<MediaPlaybackTarget>&&.

        Make MediaPlaybackTarget RefCounted, and don't require it to be serializable so it can be
        subclassed to keep port-specific iformation out of the base class.
        * platform/graphics/MediaPlaybackTarget.h: 
        (WebCore::MediaPlaybackTarget::targetType):
        (WebCore::MediaPlaybackTarget::targetContext):
        (WebCore::MediaPlaybackTarget::hasActiveRoute):
        (WebCore::MediaPlaybackTarget::MediaPlaybackTarget):
        (WebCore::MediaPlaybackTarget::setDevicePickerContext): Deleted.
        (WebCore::MediaPlaybackTarget::devicePickerContext): Deleted.

        MediaPlaybackTargetContext is the struct that is serialized to pass across the process boudary.
        It has union to hold port-specific data.
        * platform/graphics/MediaPlaybackTargetContext.h: Added.

        * platform/graphics/MediaPlaybackTargetPicker.h: didChoosePlaybackTarget takes a Ref<MediaPlaybackTarget>&&
        * platform/graphics/MediaPlaybackTargetPickerClient.h: Ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setWirelessPlaybackTarget): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget):

        * platform/graphics/avfoundation/MediaPlaybackTargetMac.h: Added.
        (WebCore::MediaPlaybackTargetMac::targetType):
        (WebCore::MediaPlaybackTargetMac::outputContext):
        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        (WebCore::MediaPlaybackTargetMac::create):
        (WebCore::MediaPlaybackTargetMac::MediaPlaybackTargetMac):
        (WebCore::MediaPlaybackTargetMac::~MediaPlaybackTargetMac):
        (WebCore::MediaPlaybackTargetMac::targetContext):
        (WebCore::MediaPlaybackTargetMac::hasActiveRoute):
        (WebCore::toMediaPlaybackTargetMac):
        (WebCore::MediaPlaybackTarget::encode): Deleted.
        (WebCore::MediaPlaybackTarget::decode): Deleted.
        (WebCore::MediaPlaybackTarget::hasActiveRoute): Deleted.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Allocate and pass a MediaPlaybackTargetMac
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Take a Ref<MediaPlaybackTarget&&

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setWirelessPlaybackTarget): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::setWirelessPlaybackTarget): Ditto.

2015-04-09  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix raw function pointer usages
        https://bugs.webkit.org/show_bug.cgi?id=143481

        Reviewed by Antti Koivisto.

        The argument list of
        resolveContentBasedTrackSizingFunctionsForItems() became too long
        and rather incomprehensible as it included up to 6 function
        pointers. This replaces all of them by an enum which describes the
        phase of the algorithm that is currently running. With that phase
        we have enough information to select the right function to call.

        In order not to tangle up too much the method, the new explicit
        switch statements where moved to static helper functions.

        No new tests as this is just a code refactoring.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::trackSizeForTrackSizeComputationPhase): New helper function.
        (WebCore::RenderGrid::shouldProcessTrackForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::trackShouldGrowBeyondGrowthLimitsForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::updateTrackSizeForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::currentItemSizeForTrackSizeComputationPhase): Ditto.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        * rendering/RenderGrid.h:

2015-04-10  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Remove AudioStreamTrack and VideoStreamTrack (removed in spec)
        https://bugs.webkit.org/show_bug.cgi?id=143336

        Reviewed by Philippe Normand.

        The specific MediaStreamTrakc types (AudioStreamTrack and VideoStreamTrack) have been
        removed from the Media Capture and Streams [1] specification.

        [1] http://w3c.github.io/mediacapture-main/archives/20150324/getusermedia.html

        There are no test for this feature to remove.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/AudioStreamTrack.cpp: Removed.
        * Modules/mediastream/AudioStreamTrack.h: Removed.
        * Modules/mediastream/AudioStreamTrack.idl: Removed.
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::addRemoteTrack):
        (WebCore::MediaStream::active): Deleted.
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::create):
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind):
        (WebCore::MediaStreamTrack::clone):
        (WebCore::MediaStreamTrack::trackEnded): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/VideoStreamTrack.cpp: Removed.
        * Modules/mediastream/VideoStreamTrack.h: Removed.
        * Modules/mediastream/VideoStreamTrack.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:

2015-04-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a HAVE(AVKIT) and use it
        https://bugs.webkit.org/show_bug.cgi?id=143593

        Reviewed by David Kilzer.

        * page/Settings.h: Only defined setAVKitEnabled() if HAVE(AVKIT).
        * platform/ios/WebVideoFullscreenControllerAVKit.mm: Only compiled if HAVE(AVKIT).
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Ditto.

2015-04-09  Simon Fraser  <simon.fraser@apple.com>

        Some CSS3 filters tests crash under iOS testing
        https://bugs.webkit.org/show_bug.cgi?id=143594
        rdar://problem/20491140

        Reviewed by David Kilzer.

        Some tests disable accelerated compositing via testRunner.overridePreference(). In this case,
        we'd not create a root scrolling tree node, so null-check it in AsyncScrollingCoordinator::updateNonFastScrollableRegion().

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateNonFastScrollableRegion):

2015-04-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add <br> support.
        https://bugs.webkit.org/show_bug.cgi?id=139012

        This patch enables RenderBlockFlows to use simple line layout on text content when <br> is present.
        Simple text with <br> is a fairly common pattern on discussion(forum)-like web pages. This patch reduces memory usage
        and speeds up layout for such content.

        PerformanceTest/layout/line-layout-simple.html shows more than 2x speedup, when each paragraph is modified by appending <br> to the end.
        With <br> support enabled:
          mean: 70.02391461289068 runs/s
          median: 70.47986488932318 runs/s

        While with <br> support disabled:
          mean: 30.417295049468184 runs/s
          median: 30.36517778760357 runs/s

        Reviewed by Antti Koivisto.

        Test: fast/text/simple-line-with-br.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setSelectionState):
        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::simpleLineLayout):
        (WebCore::ensureLineBoxes):
        (WebCore::RenderLineBreak::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderLineBreak::positionForPoint):
        (WebCore::RenderLineBreak::setSelectionState):
        (WebCore::RenderLineBreak::linesBoundingBox):
        (WebCore::RenderLineBreak::absoluteRects):
        (WebCore::RenderLineBreak::absoluteQuads):
        (WebCore::RenderLineBreak::collectSelectionRects):
        * rendering/RenderLineBreak.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::containsCaretOffset):
        (WebCore::RenderText::hasRenderedText):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::consumeLineBreakIfNeeded):
        (WebCore::SimpleLineLayout::skipWhitespaceIfNeeded):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::forceFragmentToLine):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):
        (WebCore::SimpleLineLayout::FlowContents::segmentForRenderer): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::inQuirksMode):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator--):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isLastInRenderer):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isEmpty):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isSoftLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isHardLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isLineBreak): Deleted.

2015-04-09  Chris Dumez  <cdumez@apple.com>

        Regression(r182603): editing/selection/selection-invalid-offset.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=143591

        Reviewed by Ryosuke Niwa.

        Add missing null-check for m_frame->editor().client() in
        FrameSelection::updateAndRevealSelection().

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAndRevealSelection):

2015-04-09  Sungmann Cho  <sungmann.cho@navercorp.com>

        Minor cleanups to WebCore/plugins
        https://bugs.webkit.org/show_bug.cgi?id=143509

        Reviewed by Anders Carlsson.

        1. Remove unnecessary #includes.
        2. Fix some wrong namespace comments for consistency.

        No new tests, no behavior change.

        * plugins/DOMMimeType.cpp:
        * plugins/DOMMimeType.h:
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.h:
        * plugins/PluginData.cpp:
        * plugins/PluginData.h:
        * plugins/PluginMainThreadScheduler.cpp:
        * plugins/PluginViewBase.h:

2015-04-09  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Implement justify-self and justify-item css properties.
        https://bugs.webkit.org/show_bug.cgi?id=133281

        Reviewed by David Hyatt.

        Implement the new property 'justify-items', defined in the CSS Box Alignment
        specification to describe the container's alignment behavior, in the same way
        the 'align-items' property does. The 'justify-self' 'auto' value of any relative
        positioned element will be resolved to its container's 'justify-items' value.

        Test: fast/css/parse-justify-items.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::resolveContainerAlignmentAuto): Function to resolve 'auto' values for 'align-items' or 'justify-items'.
        (WebCore::resolveSelfAlignmentAuto): Function to resolve 'auto' values for 'align-self' or 'justify-self'.
        (WebCore::valueForItemPositionWithOverflowAlignment): Take into account the 'legacy' keyword.
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::resolveAlignmentAuto): Deleted (renamed to resolveContainerAlignmentAuto).
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Refactoring to share logic between justify-xxx and align-xxx properties.
        (WebCore::CSSParser::parseLegacyPosition): Parsing logic of 'legacy' keyword,
        (WebCore::CSSParser::parseItemPositionOverflowPosition): Take into account the 'legacy' keyword.
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritJustifyItems): Added.
        (WebCore::StyleBuilderCustom::applyInitialJustifyItems): Added.
        (WebCore::StyleBuilderCustom::applyValueJustifyItems): Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Resolve 'auto' values for justify-items when parents have the 'legacy' keyword.
        * rendering/style/RenderStyle.h: Managing the new ItemPositionType fields.
        * rendering/style/RenderStyleConstants.h: Added the ItemPositionType enumeration for handling the 'legacy' keyword.
        * rendering/style/StyleRareNonInheritedData.cpp: Managing the new ItemPositionType fields.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2015-04-09  Anders Carlsson  <andersca@apple.com>

        Make it possible to create an application cache storage with custom directories
        https://bugs.webkit.org/show_bug.cgi?id=143588

        Reviewed by Sam Weinig.

        Add cache directory and flat file directory name parameters to ApplicationCacheStorage::create.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        (WebCore::ApplicationCacheStorage::flatFileAreaSize):
        (WebCore::ApplicationCacheStorage::ApplicationCacheStorage):
        (WebCore::ApplicationCacheStorage::create):
        (WebCore::ApplicationCacheStorage::singleton):
        * loader/appcache/ApplicationCacheStorage.h:

2015-04-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Text-combine erroneously draws vertically after non-layout-causing style change
        https://bugs.webkit.org/show_bug.cgi?id=143461
        <rdar://problem/19285490>

        Reviewed by Darin Adler.

        RenderCombineText::styleDidChange() unconditionally uncombines its text. Layout then
        recombines it. However, if there is a style change that does not cause layout, the
        RenderCombineText will be left uncombined until the next layout.

        Test: fast/text/text-combine-style-change-no-layout.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):

2015-04-09  Simon Fraser  <simon.fraser@apple.com>

        Revert part of 182516: it broke tests
        https://bugs.webkit.org/show_bug.cgi?id=143568
        rdar://problem/20484578

        Reviewed by Myles Maxfield.

        Revert the FontCascadeCocoa parts of r182516, since it broke some CSS shapes tests.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::dilationSizeForTextColor): Deleted.

2015-04-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout(regression): Calling innerText on RenderFlow with multiple children is slow.
        https://bugs.webkit.org/show_bug.cgi?id=143554

        Reviewed by Antti Koivisto.

        Initialize render flow's segments only when the render flow changes in TextIterator.
        The included performance test shows 6x speedup. (from ~10 runs/sec to ~60 runs/sec)

        Test: PerformanceTests/Layout/simple-line-layout-innertext.html.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        * editing/TextIterator.h:
        * rendering/SimpleLineLayoutFlowContents.cpp: Instruments log shows that vector's expandCapacity could be expensive when flow has large amount of children.
        (WebCore::SimpleLineLayout::initializeSegments):

2015-04-09  Chris Dumez  <cdumez@apple.com>

        [WK2][iOS] editorState() should not cause a synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=142536
        <rdar://problem/20041506>

        Reviewed by Enrica Casucci.

        Add didChangeSelectionAndUpdateLayout() callback to EditorClient
        that is called at the end of FrameSelection::updateAndRevealSelection().

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::updateAndRevealSelection):
        * loader/EmptyClients.h:
        * page/EditorClient.h:

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Give each cache group a storage and use it in place of the singleton
        https://bugs.webkit.org/show_bug.cgi?id=143540

        Reviewed by Sam Weinig.

        This is another step towards making the cache storage be per page.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::makeObsolete):
        (WebCore::ApplicationCacheGroup::didReachMaxAppCacheSize):
        (WebCore::ApplicationCacheGroup::recalculateAvailableSpaceInQuota):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):

2015-04-09  Andy Estes  <aestes@apple.com>

        Try to fix the Mac build after r182596.

        I was wrong to replace PLATFORM(IOS) with HAVE(PARENTAL_CONTROLS) in ContentFilterUnblockHandler.
        The conditional should be HAVE(PARENTAL_CONTROLS) && PLATFORM(IOS).

        * platform/ContentFilterUnblockHandler.h:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::wrapWithDecisionHandler):
        (WebCore::ContentFilterUnblockHandler::needsUIProcess):
        (WebCore::ContentFilterUnblockHandler::encode):
        (WebCore::ContentFilterUnblockHandler::decode):
        (WebCore::ContentFilterUnblockHandler::canHandleRequest):
        (WebCore::ContentFilterUnblockHandler::requestUnblockAsync):

2015-04-09  Andy Estes  <aestes@apple.com>

        [Content Filtering] Add a HAVE(PARENTAL_CONTROLS) and use it
        https://bugs.webkit.org/show_bug.cgi?id=143559

        Reviewed by David Kilzer.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::types): Only registered ParentalControlsContentFilter if HAVE(PARENTAL_CONTROLS).
        * platform/ContentFilterUnblockHandler.h: Changed PLATFORM(IOS) to HAVE(PARENTAL_CONTROLS).
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::wrapWithDecisionHandler): Ditto.
        (WebCore::ContentFilterUnblockHandler::needsUIProcess): Ditto.
        (WebCore::ContentFilterUnblockHandler::encode): Ditto.
        (WebCore::ContentFilterUnblockHandler::decode): Ditto.
        (WebCore::ContentFilterUnblockHandler::canHandleRequest): Ditto.
        (WebCore::ContentFilterUnblockHandler::requestUnblockAsync): Ditto.
        * platform/cocoa/ParentalControlsContentFilter.mm: Wrapped the file with HAVE(PARENTAL_CONTROLS)

2015-04-09  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, added CSS Grid Layout to features.json file.

        * features.json:

2015-04-08  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Support the start function parameter in ReadableStream constructor
        https://bugs.webkit.org/show_bug.cgi?id=141160

        Reviewed by Benjamin Poulain.

        Stores the JS source object in ReadableStreamJSSource and calls its "start" function.
        This function takes a controller object that has three JS functions as members: close, enqueue and error.
        This controller is stored in ReadableStreamJSSource as it will be reused as "pull" parameter.
        All three JS functions do not currently do anything.

        Test: streams/readablestream-start.html

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::start): Place holder for step 11 of https://streams.spec.whatwg.org/#rs-constructor.
        * Modules/streams/ReadableStream.h:
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::constructJSReadableStream):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::getPropertyFromObject): Helper function to get a public property from an object.
        (WebCore::setPropertyToObject): Helper function to set a public property to an object.
        (WebCore::callFunction): Helper function to call a JS function from C++.
        (WebCore::ReadableStreamJSSource::ReadableStreamJSSource):
        (WebCore::notImplementedFunction):
        (WebCore::createReadableStreamEnqueueFunction): Creates the JS function for enqueue.
        (WebCore::createReadableStreamCloseFunction): Creates the JS function for close.
        (WebCore::createReadableStreamErrorFunction): Creates the JS function for error.
        (WebCore::startReadableStreamAsync): Equivalent of promise resolution for start.
        (WebCore::ReadableStreamJSSource::start): Calls the "start" function of the JS source with all three JS functions (enqueue, close, error) as parameters.
        * bindings/js/ReadableStreamJSSource.h:

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Unreviewed test fix after r182584
        https://bugs.webkit.org/show_bug.cgi?id=143452

        Correct bit comparison to use the correct value for the Control-key

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::typeForEvent):

2015-04-08  Simon Fraser  <simon.fraser@apple.com>

        Add a debug assertion that will fire if we try to paint layer contents on a background thread
        https://bugs.webkit.org/show_bug.cgi?id=143547

        Reviewed by Alexey Proskuryakov.

        New assertion to catch cases where other frameworks erroneously trigger painting
        on a non-main (or non-Web) thread.

        * platform/graphics/mac/WebLayer.mm:
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] WebKit is not honoring OS preferences for secondary click behaviors
        https://bugs.webkit.org/show_bug.cgi?id=143452
        <rdar://problem/20437483>

        Reviewed by Tim Horton.

        We cannot rely on the event's button number to decide behavior. The OS settings might have
        mapped middle button to context menu, etc. Instead, we should ask the OS (via NSMenu) what
        the proper button press behavior is.

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::mouseButtonForEvent): Ask NSMenu what kind of button press we have received.

2015-04-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fix -Wformat in AnimationBase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=143541

        Reviewed by Simon Fraser.

        * page/animation/AnimationBase.cpp:
        (WebCore::nameForStateInput): Added. Converts an AnimationBase::AnimationStateInput to a
        string.
        (WebCore::AnimationBase::updateStateMachine): Print AnimationBase::AnimationStateInput as a
        string, instead of passing it to %d and assuming that works, to silence GCC's -Wformat.

2015-04-08  Brady Eidson  <beidson@apple.com>

        Expose the "Share" menu for links, images, and media.
        <rdar://problem/20435340> and https://bugs.webkit.org/show_bug.cgi?id=143502

        Reviewed by Tim Horton.

        * loader/EmptyClients.h:
        * page/ContextMenuClient.h:
        (WebCore::ContextMenuClient::shareSelectedTextMenuItem): Deleted.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        (WebCore::selectionContainsPossibleWord): Deleted.
        * page/ContextMenuController.h:
        (WebCore::ContextMenuController::page):

        * platform/ContextMenuItem.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::isNull):
        (WebCore::ContextMenuItem::shareMenuItem):
        (WebCore::ContextMenuItem::supportsShareMenu): Deleted.
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Deleted.
        * platform/ContextMenuItem.h:

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::shareMenuItem): Return a null item.
        (WebCore::ContextMenuItem::supportsShareMenu): Deleted.
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Deleted.

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::shareMenuItem): Create a full-featured Share menu item instead of just for selected text.
        (WebCore::ContextMenuItem::supportsShareMenu): Deleted.
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Deleted.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::selectedText): Instead of calculating selected text outside the HitTestResult, let the
          HitTestResult do what it does best: Calculate things!
        * rendering/HitTestResult.h:

2015-04-08  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Compile error in CurlCacheEntry::parseResponseHeaders method.
        https://bugs.webkit.org/show_bug.cgi?id=143531

        Reviewed by Alex Christensen.

        Cache related methods in ResourceResponse have changed return type.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::parseResponseHeaders):

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Remove ApplicationCacheGroup::m_isCopy
        https://bugs.webkit.org/show_bug.cgi?id=143536

        Reviewed by Tim Horton.

        Code that used to set m_isCopy to true is long gone.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::~ApplicationCache):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::~ApplicationCacheGroup):
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::isCopy): Deleted.

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Delete ApplicationCache static member functions
        https://bugs.webkit.org/show_bug.cgi?id=143534

        Reviewed by Tim Horton.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::deleteCacheForOrigin): Deleted.
        (WebCore::ApplicationCache::deleteAllCaches): Deleted.
        (WebCore::ApplicationCache::diskUsageForOrigin): Deleted.
        * loader/appcache/ApplicationCache.h:

2015-04-08  Alex Christensen  <achristensen@webkit.org>

        Block popups from content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=143497

        Reviewed by Brady Eidson.

        Test: http/tests/contentextensions/popups.html

        * loader/ResourceLoadInfo.cpp:
        (WebCore::readResourceType):
        * loader/ResourceLoadInfo.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::actionsForResourceLoad):
        * page/UserContentController.h:
        Check content extensions before opening a window.

2015-04-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Properly handle negative reference box widths and center coordinates
        https://bugs.webkit.org/show_bug.cgi?id=142610

        Reviewed by Rob Buis.

        Fix a few cases where values that should not be negative end up that
        way.

        This patch is based on a couple of Blink patches by Rob Buis.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-circle-negative-radius-crash.html
               fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-negative-width-crash.html

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computeDeltasForContainingBlockLine): A
            negative margin box width means that the shape has no extent, so
            clamp to zero.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox): When computing
            the radii, take the absolute value, since the radii is based on
            the distance, which is always positive.
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox): Ditto.

2015-04-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182522.
        https://bugs.webkit.org/show_bug.cgi?id=143529

        Not needed any more (Requested by ap on #webkit).

        Reverted changeset:

        "Fix the build."
        http://trac.webkit.org/changeset/182522

2015-04-08  Beth Dakin  <bdakin@apple.com>

        Force events should not require preventDefault in order to fire
        https://bugs.webkit.org/show_bug.cgi?id=143503
        -and corresponding-
        rdar://problem/20458916

        Reviewed by Tim Horton.

        Since these events will fire whether or not preventDefault was set on the 
        willBegin event, we should make sure we only send them when there are registered 
        event listeners. These are new events, so we don’t want to spam the vast majority 
        of web content that doesn’t use them yet.
        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseForceWillBegin):
        (WebCore::Element::dispatchMouseForceChanged):
        (WebCore::Element::dispatchMouseForceDown):
        (WebCore::Element::dispatchMouseForceUp):
        (WebCore::Element::dispatchMouseForceClick):
        (WebCore::Element::dispatchMouseForceCancelled):

2015-04-08  Jer Noble  <jer.noble@apple.com>

        [Mac][WebAudio] Update the AVAudioMix in the AudioSourceProviderAVFObjC when the list of enabled audio tracks change.
        https://bugs.webkit.org/show_bug.cgi?id=143332

        Reviewed by Eric Carlson.

        Some media assets (notably, mp3s) will not have an enabled audio track when the AVAsset is
        first loaded, so the AVAudioMix will have no trackID in it's parameters. Whenever the list
        of enabled tracks change, recreate the AVAudioMix with the new first enabled audio trackID.

        To facilitate this, add a new setter to AudioSourceProviderAVFObjC taking an AVAssetTrack to
        use with the AVAudioMix. Whenever this parameter changes, the AVAudioMix is destroyed and
        recreated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Drive-by fix: when the media
            player switches engines, re-associate the audio source node with its provider.
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::setPlayerItem): Only create the mix if there is a valid AVPlayerItem and AVAssetTrack
        (WebCore::AudioSourceProviderAVFObjC::setAudioTrack): Ditto.
        (WebCore::AudioSourceProviderAVFObjC::createMix): Don't iterate over the AVPlayerItem's tracks,
            just use the one passed in through setAudioTrack().
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Clear the provider's track.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Set the provider's track.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::audioSourceProvider): Ditto.

2015-04-08  Anders Carlsson  <andersca@apple.com>

        Move some ApplicationCache static member functions to ApplicationCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=143524

        Reviewed by Antti Koivisto.

        This is yet another step towards eliminating ApplicationCacheStorage::singleton() and making the storage be per page instead.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::deleteCacheForOrigin):
        (WebCore::ApplicationCache::deleteAllCaches):
        (WebCore::ApplicationCache::diskUsageForOrigin):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::deleteAllCaches):
        (WebCore::ApplicationCacheStorage::deleteCacheForOrigin):
        (WebCore::ApplicationCacheStorage::diskUsageForOrigin):
        * loader/appcache/ApplicationCacheStorage.h:

2015-04-08  ChangSeok Oh  <changseok.oh@collabora.com>

        Fill list style background with same color with that of list background.
        https://bugs.webkit.org/show_bug.cgi?id=143483

        Reviewed by Simon Fraser.

        LayoutListMarker does not have a node so its selectionBackgroundColor alway returns
        the default theme color for selection. We can make it more natural by filling
        the same color with that of LayoutListItem into it.

        Tests: fast/backgrounds/selection-background-color-of-image-list-style.html
               fast/backgrounds/selection-background-color-of-list-style.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2015-04-08  Alex Christensen  <achristensen@webkit.org> and Patrick Gansterer  <paroga@webkit.org>

        Add CMake build system for WinCairo port.
        https://bugs.webkit.org/show_bug.cgi?id=115944

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2015-04-08  Chris Dumez  <cdumez@apple.com>

        Rename ActiveDOMObject::canSuspend() to canSuspendForPageCache() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=143513

        Reviewed by Andreas Kling.

        Rename ActiveDOMObject::canSuspend() to canSuspendForPageCache() for
        clarity as it is only used for the page cache. Also rename the
        'DocumentWillBecomeInactive' value of the ReasonForSuspension enum to
        'PageCache' as it is only used by CachedFrame for the page cache and it
        is a lot more understandable.

2015-04-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182536.
        https://bugs.webkit.org/show_bug.cgi?id=143523

        Made accessibility/table-sections.html time out on debug bots
        (Requested by ap on #webkit).

        Reverted changeset:

        "Simple line layout: Add <br> support."
        https://bugs.webkit.org/show_bug.cgi?id=139012
        http://trac.webkit.org/changeset/182536

2015-04-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in DOMObjectCache when a wrapped object owned by the cache is unreffed by the user
        https://bugs.webkit.org/show_bug.cgi?id=143521

        Reviewed by Martin Robinson.

        This is a case we claim to support, but it only works if the
        object has only one reference. In that case, when the user unrefs
        it, the weak ref notify callback removes the object from the
        cache. However, if the object has more than one ref, the cache
        doesn't know the user unreffed it, and when clearing the cache we
        try to remove more references than what the object actually has,
        causing a crash in g_object_unref.

        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::DOMObjectCacheData::clearObject):

2015-04-08  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add <br> support.
        https://bugs.webkit.org/show_bug.cgi?id=139012

        This patch enables RenderBlockFlows to use simple line layout on text content when <br> is present.
        Simple text with <br> is a fairly common pattern on discussion(forum)-like web pages. This patch reduces memory usage
        and speeds up layout for such content.

        PerformanceTest/layout/line-layout-simple.html shows more than 2x speedup, when each paragraph is modified by appending <br> to the end.
        With <br> support enabled:
          mean: 70.02391461289068 runs/s
          median: 70.47986488932318 runs/s
    
        While with <br> support disabled: 
          mean: 30.417295049468184 runs/s
          median: 30.36517778760357 runs/s

        Reviewed by Antti Koivisto.

        Test: fast/text/simple-line-with-br.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setSelectionState):
        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::simpleLineLayout):
        (WebCore::ensureLineBoxes):
        (WebCore::RenderLineBreak::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderLineBreak::positionForPoint):
        (WebCore::RenderLineBreak::setSelectionState):
        (WebCore::RenderLineBreak::linesBoundingBox):
        (WebCore::RenderLineBreak::absoluteRects):
        (WebCore::RenderLineBreak::absoluteQuads):
        (WebCore::RenderLineBreak::collectSelectionRects):
        * rendering/RenderLineBreak.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::consumeLineBreakIfNeeded):
        (WebCore::SimpleLineLayout::skipWhitespaceIfNeeded):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::forceFragmentToLine):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):
        (WebCore::SimpleLineLayout::FlowContents::segmentForRenderer): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::inQuirksMode):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator--):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::EndOfSegmentSetter::EndOfSegmentSetter):
        (WebCore::SimpleLineLayout::EndOfSegmentSetter::~EndOfSegmentSetter):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isLastInRenderer):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isEmpty):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isSoftLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isHardLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isLineBreak): Deleted.

2015-04-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] compress property for the HTTP source element
        https://bugs.webkit.org/show_bug.cgi?id=143518

        Reviewed by Carlos Garcia Campos.

        Added a compress property so the default behavior or not
        requesting content encoded to the server can be overridden if
        needed. This is useful for adaptive streaming playback.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStart):

2015-04-08  Joonghun Park  <jh718.park@samsung.com>

        Remove CSS functions min() and max() which had been dropped from specification
        https://bugs.webkit.org/show_bug.cgi?id=143440

        Reviewed by Darin Adler.

        No new tests, No Behavior changes.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcValue::create):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::isCalculation):

2015-04-07  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] extra-headers and keep-alive properties for HTTP source element
        https://bugs.webkit.org/show_bug.cgi?id=143480

        Reviewed by Carlos Garcia Campos.

        Keep the resource loader around when persistent HTTP connection
        support is enabled. The keep-alive property is set to false by
        default. Also before sending the HTTP request we now check the
        contents of the extra-headers GstStructure and set additional
        headers based on the structure contents.

        Patch inspired by GStreamer's souphttpsrc element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcFinalize):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop): Clear resource loader only for non-persistent connections.
        (webKitWebSrcSetExtraHeader): Utility function to append headers
        to an existing request based on a GValue contents.
        (webKitWebSrcProcessExtraHeaders): Parse a GValue and set headers
        based on its contents.
        (webKitWebSrcStart): Extra headers and persistent connection
        support. The resource loader is now lazily initialized here.

2015-04-07  Simon Fraser  <simon.fraser@apple.com>

        Fix the build.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        * platform/spi/cg/CoreGraphicsSPI.h:

2015-04-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, another iOS build fix after r182516.

        I missed another use of __MAC_OS_X_VERSION_MIN_REQUIRED without a
        PLATFORM(MAC) check.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:

2015-04-07  Michael Peechatt  <mpeechatt@gmail.com>

        Bug 142887 - role progress bar does not support indeterminate state
        https://bugs.webkit.org/show_bug.cgi?id=142887

        Reviewed by Chris Fleizach.

        Test: platform/mac/accessibility/progressbar-indeterminate.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        When getting min or max value of an indeterminate progress indicator, return 0.
        This is so VoiceOver will recognize it as indeterminate.

2015-04-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, speculative iOS build fix after r182516.

        Add #if PLATFORM(MAC) checks.

        * platform/spi/cg/CoreGraphicsSPI.h:

2015-04-07  Simon Fraser  <simon.fraser@apple.com>

        Try to fix incremental builds by forcing *InternalSettings* to get
        regenerated.

        * testing/InternalSettings.idl:

2015-04-07  Chris Dumez  <cdumez@apple.com>

        Open WebSockets should not prevent a page from entering PageCache
        https://bugs.webkit.org/show_bug.cgi?id=143505
        <rdar://problem/19923085>

        Reviewed by Alexey Proskuryakov.

        Open WebSockets should not prevent a page from entering PageCache. This
        is currently causing mobile.nytimes.com to not be page-cacheable.

        In this patch, We close open WebSockets when entering the page cache
        and fire the "close" events after resuming, similarly to what we did
        for XMLHttpRequest in r181480. This gives a chance for the content to
        handle the 'close' event (with wasClean being false and code being
        1006) in order to reopen the connection if necessary.

        Test: http/tests/websocket/tests/hybi/closed-when-entering-page-cache.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::canSuspend):
        (WebCore::WebSocket::suspend):
        (WebCore::WebSocket::resume):
        (WebCore::WebSocket::resumeTimerFired):
        (WebCore::WebSocket::didClose):
        * Modules/websockets/WebSocket.h:

2015-04-07  Simon Fraser  <simon.fraser@apple.com>

        Add experimental code to use custom font dilation when rendering into non-opaque contexts
        https://bugs.webkit.org/show_bug.cgi?id=143508

        Reviewed by Sam Weinig.

        Add GraphicsContext::setAntialiasedFontDilationEnabled(), and set it to true
        when rendering into a compositing layer which is not opaque (at the same location
        where we disable font smoothing).

        If Settings::antialiasedFontDilationEnabled() is true, when rendering non-smoothed
        text (and if CSS hasn't opted into antialiased mode), use custom font dilation
        parameters, chosen using a light/medium/dark heuristic, to make this text
        match more closely with LCD-smoothed text.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAntialiasedFontDilationEnabled): Set global state
        in FontCascade (which can't easily get at Settings). This it not ideal,
        but is temporary.
        * page/Settings.h:
        (WebCore::Settings::antialiasedFontDilationEnabled):
        * page/Settings.in: Can't autogenerate this setting any more.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::setAntialiasedFontDilationEnabled): Set the global.
        (WebCore::FontCascade::antialiasedFontDilationEnabled):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setAntialiasedFontDilationEnabled): Set graphics state
        to say that we should do dilation of antialiased text.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContext::antialiasedFontDilationEnabled):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::drawLayerContents): If the layer is not opaque, enable the
        dilated text code path.
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::dilationSizeForTextColor): Heuristic (values chosen empirically) to
        computed custom dilation based on foreground color.
        (WebCore::FontCascade::drawGlyphs): Set the custom dilation parameters, and the
        antialiasing state if we're not doing smoothing, and CSS hasn't opted into the
        antialiased path.
        * platform/spi/cg/CoreGraphicsSPI.h: New SPI.

2015-04-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182511.
        https://bugs.webkit.org/show_bug.cgi?id=143507

        caused debug test failures (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "Block popups from content extensions."
        https://bugs.webkit.org/show_bug.cgi?id=143497
        http://trac.webkit.org/changeset/182511

2015-04-07  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] System fonts do not get correct tracking
        https://bugs.webkit.org/show_bug.cgi?id=143395

        Reviewed by Ryosuke Niwa.

        Inside FontPlatformData, we have two CTFonts. If the user has specified
        -webkit-system-font, we will pass in a CTFont, and the FontPlatformData
        will wrap it. However, we will then roundtrip through CGFont in order
        to create a second CTFont. We were basing our tracking and system
        font knowledge off of this round-tripped font instead of the original font.

        Note that this design is terrible and needs to be overhauled.
        FontPlatformData should only have a single platform font inside it.

        This patch also caches whether or not a font is a system font.

        No new tests because it is impossible to test the tracking of the
        system font in a robust way.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font): Rearrange member variables.
        * platform/graphics/Font.h: Move member variables around for better
        packing, and cache whether or not the font is a system font.
        * platform/graphics/FontData.h: Add comment
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit): Cache whether or not the font is a system
        font.
        (WebCore::hasCustomTracking): Use cached value.
        (WebCore::canUseFastGlyphAdvanceGetter):
        (WebCore::Font::platformWidthForGlyph):

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        Block popups from content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=143497

        Reviewed by Brady Eidson.

        Test: http/tests/contentextensions/popups.html

        * loader/ResourceLoadInfo.cpp:
        (WebCore::readResourceType):
        * loader/ResourceLoadInfo.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::open):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::actionsForResourceLoad):
        * page/UserContentController.h:
        Check content extensions before opening a window.

2015-04-07  Benjamin Poulain  <benjamin@webkit.org>

        Get the features.json files ready for open contributions
        https://bugs.webkit.org/show_bug.cgi?id=143436

        Reviewed by Darin Adler.

        * features.json:

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        More unreviewed fixing API tests.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Don't check for javascript protocol.

2015-04-07  Eric Carlson  <eric.carlson@apple.com>

        [Mac] never update caption user style sheet during parsing
        https://bugs.webkit.org/show_bug.cgi?id=143499

        Reviewed by Jer Noble.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        (WebCore::CaptionUserPreferencesMediaAF::captionPreferencesChanged):  Ignore a
            "preferences changed" notification fired while registering for said notification, we 
            already create and insert the style sheet after a brief delay anyway.
        * page/CaptionUserPreferencesMediaAF.h:

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r182494.

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem): Deleted.

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        Unreviewed fixing API tests.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * platform/URL.cpp:
        (WebCore::URL::init):
        * platform/URL.h:
        (WebCore::URL::protocolIsData):
        (WebCore::URL::protocolIsJavaScript): Deleted.
        Revert part of r182492 that changed URL.h.

2015-04-07  Anders Carlsson  <andersca@apple.com>

        More work on making the application cache storage be per page
        https://bugs.webkit.org/show_bug.cgi?id=143498

        Reviewed by Andreas Kling.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::create):
        (WebCore::ApplicationCacheStorage::singleton):
        * loader/appcache/ApplicationCacheStorage.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::applicationCacheStorage):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration): Deleted.
        * page/PageConfiguration.h:

2015-04-07  Matthew Mirman  <mmirman@apple.com>

        Source and stack information should get appended only to native errors
        and should be added directly after construction rather than when thrown.
        This fixes frozen objects being unfrozen when thrown while conforming to 
        ecma script standard and other browser behavior.
        rdar://problem/19927293
        https://bugs.webkit.org/show_bug.cgi?id=141871
        
        Reviewed by Geoffrey Garen.

        Covered by existing tests.
        
        Sets line, column, source and stack information for DOMExceptions as 
        expected by the webinspector for native errors.
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):

2015-04-07  Brady Eidson  <beidson@apple.com>

        ContextMenuItem refactoring
        https://bugs.webkit.org/show_bug.cgi?id=143485

        Reviewed by Beth Dakin.

        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuItem::isNull):

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::platformDescription):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::releasePlatformDescription): Deleted.
        (WebCore::ContextMenuItem::getPlatformDescription): Deleted.

        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::insertItem):
        (WebCore::platformMenuDescription):

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):

2015-04-07  Alex Christensen  <achristensen@webkit.org>

        Optimize content extensions interpreting speed.
        https://bugs.webkit.org/show_bug.cgi?id=143490

        Reviewed by Brady Eidson.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Measure total time added by content extensions.
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        When jumping to the root, don't re-add all the actions.
        * contentextensions/DFABytecodeCompiler.h:
        * platform/URL.cpp:
        (WebCore::URL::init):
        * platform/URL.h:
        (WebCore::URL::protocolIsJavaScript): Added.

2015-04-07  Simon Fraser  <simon.fraser@apple.com>

        Add a new setting, AntialiasedFontDilationEnabled, exposed via WK2.
        https://bugs.webkit.org/show_bug.cgi?id=143495

        Reviewed by Tim Horton.

        Add a new Setting, antialiasedFontDilationEnabled, which defaults to true. This 
        will be used in an upcoming patch.

        * page/Settings.in:

2015-04-07  Andy Estes  <aestes@apple.com>

        [Content Filtering] Add logging
        https://bugs.webkit.org/show_bug.cgi?id=143470

        Reviewed by Daniel Bates.

        Added a new ContentFiltering logging channel, and started logging some useful diagnostic messages.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::~ContentFilter):
        (WebCore::ContentFilter::willSendRequest):
        (WebCore::ContentFilter::startFilteringMainResource):
        (WebCore::ContentFilter::responseReceived):
        (WebCore::ContentFilter::dataReceived):
        (WebCore::ContentFilter::notifyFinished):
        (WebCore::ContentFilter::didDecide):
        * platform/Logging.h:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::canHandleRequest):
        (WebCore::ContentFilterUnblockHandler::requestUnblockAsync):
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::enabled):
        (WebCore::NetworkExtensionContentFilter::unblockHandler):
        (WebCore::NetworkExtensionContentFilter::handleDecision):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::enabled):
        (WebCore::ParentalControlsContentFilter::updateFilterState):
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::enabled):
        (WebCore::MockContentFilter::unblockHandler):
        (WebCore::MockContentFilter::maybeDetermineStatus):

2015-04-07  Eric Carlson  <eric.carlson@apple.com>

        [Mac] video playing to external device should not be interrupted
        https://bugs.webkit.org/show_bug.cgi?id=143492

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePanelTransitionEnd):  Drive-by fix to make sure the controls are 
            not hidden if the opacity timer is primed before they go into a state where they should
            never be hidden.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayToWirelessPlaybackTarget): Make it const.
        (WebCore::HTMLMediaElement::isPlayingToWirelessPlaybackTarget): New.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::canPlayToWirelessPlaybackTarget): New. Short-circuit call to
            client when we already know the answer.
        (WebCore::HTMLMediaSession::isPlayingToWirelessPlaybackTarget): Ditto.
        (WebCore::HTMLMediaSession::startPlayingToPlaybackTarget): Ditto.
        (WebCore::HTMLMediaSession::stopPlayingToPlaybackTarget): Ditto.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::canPlayToWirelessPlaybackTarget): Deleted, moved inline and neutered
            because only HTMLMediaSession needs to use them.
        (WebCore::MediaSession::startPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaSession::stopPlayingToPlaybackTarget): Ditto.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::canPlayToWirelessPlaybackTarget):
        (WebCore::MediaSession::isPlayingToWirelessPlaybackTarget):
        (WebCore::MediaSession::startPlayingToPlaybackTarget):
        (WebCore::MediaSession::stopPlayingToPlaybackTarget):
        (WebCore::MediaSessionClient::canPlayToWirelessPlaybackTarget):
        (WebCore::MediaSessionClient::isPlayingToWirelessPlaybackTarget):

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::sessionShouldBeginPlayingToWirelessPlaybackTarget): New.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Don't interrupt an active session
            playing to a target device.
        * platform/audio/MediaSessionManager.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isPlayingToWirelessPlaybackTarget): New, passthrough.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::isPlayingToWirelessPlaybackTarget):

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayToWirelessPlaybackTarget):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Explicitly call 
            when passed a nil or inactive target context.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::startPlayingToPlaybackTarget): Add logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::stopPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isPlayingToWirelessPlaybackTarget): New. Return
            true when playing with an active context.
        (WebCore::playerKVOProperties): "outputContext" is not observable.

2015-04-07  Sam Weinig  <sam@webkit.org>

        Re-add JSReadableStream and JSReadableStreamReader the Xcode project to
        make Xcode happy.

        * WebCore.xcodeproj/project.pbxproj:

2015-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Update track sizes after distributing extra space
        https://bugs.webkit.org/show_bug.cgi?id=141422

        Reviewed by Antti Koivisto.

        Both old and new tracks sizing algorithms instruct us to update
        the sizes of the content sized tracks only after distributing the
        extra space for all the items in the same span group. So far we
        were doing it inside distributeSpaceToTracks(), i.e., once for
        every single item. That is wrong because it makes the algorithm
        order dependent.

        Our old implementation looked something like this (pseudocode):

        resolveContentBasedTrackSizingFunctions()
          foreach item
            resolveContentBasedTrackSizingFunctionsForItems() (x4)
              distributeSpaceToTracks()
                updateTrackSizes()

        Now it's done this way (pseudocode):

        resolveContentBasedTrackSizingFunctions()
          foreach spanGroup
            resolveContentBasedTrackSizingFunctionsForItems() (x4)
              foreach item in spanGroup
                distributeSpaceToTracks()
              updateTrackSizes()

        As it can be seen the update of track sizes only happens after
        processing all the items of a given span group. In order to
        accomplish this a new field was added to GridTrack called
        tempIncrease which stores per-track increases while distributing
        the extra space among the items in the same span group. That
        temporal increase could eventually be used to update the
        plannedIncrease which is the one we use to finally set the new
        size of the track.

        This change makes our implementation closer to the spec, removes
        the order dependency and ensures that every track satisfies their
        min track sizing functions before starting to consider the max
        track sizing functions.

        Test: fast/css-grid-layout/grid-update-sizes-after-distributing-all.html

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::plannedSize):
        (WebCore::GridTrack::setPlannedSize): New setter.
        (WebCore::GridTrack::tempSize): New attribute.
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        RenderGrid::distributeSpaceToTracks() no longer updates the track
        sizes so we have to do it after the call returns.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Call RenderGrid::resolveContentBasedTrackSizingFunctionsForItems()
        passing a span group instead of a single item.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        It now receives a span group instead of a single item. Apart from
        that we need an extra function to get the unaltered track size (as
        the current one returns the base size whenever the growth limit is
        infinity).
        (WebCore::RenderGrid::distributeSpaceToTracks): This no longer
        updates track sizes but only the track's planned size;
        * rendering/RenderGrid.h:

2015-04-06  Chris Dumez  <cdumez@apple.com>

        Bing video search result pages are not PageCacheable
        https://bugs.webkit.org/show_bug.cgi?id=143463
        <rdar://problem/20440916>

        Reviewed by Alexey Proskuryakov.

        Bing video search result pages are not PageCacheable (tested on iOS).
        It both:
        - is bad for power usage as it causes a reload when clicking one of the
          results then navigating back in history.
        - degrades user experience because the results page uses infinite
          scrolling and the scroll position is not properly restored when
          navigating back, not to mention the user has to wait for the reload
          to complete.

        The issue was that the bing search page was doing a ping load when
        clicking on one of the search results. The ping load was done by
        create an image and its 'src' attribute to the ping URL. This load
        usually did not have time to complete when navigating away so we would
        cancel it and the main document would end up with an error that would
        prevent the page from entering the page cache. We already have code
        making sure load cancellations do not prevent page caching as long as
        the loads are for XHR or images. However, the latter check was broken
        in the case where the ResourceRequest's cachePartition was non-empty.
        This is because the check was using the MemoryCache::ResourceForUrl()
        API which rarely does what we want because it will request a dummy
        ResourceRequest (without cachePartition) and then call
        MemoryCache::resourceForRequest(). This patch updates the check
        to use resourceForRequest() directly as we have the ResourceRequest
        at this point.

        This patch also gets rid of the  MemoryCache::ResourceForUrl() API as
        it rarely does what we want and it is bug prone. It was only used in
        2 places, one of them causing this bug and the other in Internals.

        Tests: http/tests/navigation/page-cache-pending-image-load-cache-partition.html
               http/tests/navigation/page-cache-pending-image-load.html

        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable):
        Use MemoryCache::resourceForRequest() instead of resourceForUrl() as
        we have the ResourceRequest and calling resourceForUrl() would loose
        the cachePartition.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::resourceForURL): Deleted.
        Drop this API as it is bug prone and rarely does what we want.

        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):
        Update call to create a dummy ResourceRequest and call
        resourceForRequest() instead of resourceForUrl(), as this API no
        longer exists. The new code also set the cachePartition on the
        dummy request so that this function actually behaves as expected
        if the cachePartition in the memory cache is non-empty.


2015-04-06  Jer Noble  <jer.noble@apple.com>

        Synchronize fullscreen animation between processes.
        https://bugs.webkit.org/show_bug.cgi?id=143131

        Reviewed by Simon Fraser.

        Rather than attempt to synchcronize animations across the WebProcess / UIProcess boundary,
        do the bounds-change animation in-process by applying a sublayer transformation to the
        video layer. This gives the same visual effect as a synchronized bounds animation, but
        without needing a synchronization fence. Resolve the difference between the transformation
        and bounds by doing a fence-synchronized bounds change after the current animation is
        scheduled to complete.

        To do this calculation correctly, WebAVPlayer needs to query both the effective
        videoLayerFrame and the videoLayerGravity. To that end, add getter methods for
        videoLayerFrame() and videoLayerGravity().

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::videoFullscreenGravity):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer dealloc]): Cancel outstanding performSelector requests.
        (-[WebAVVideoLayer setBounds:]): Add a scale transform to simulate a bonuds change.
        (-[WebAVVideoLayer resolveBounds]): Reset the scale transform and set the bounds.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Set the initial video frame bounds.
        (-[WebAVPlayerController layoutSublayersOfLayer:]): Deleted.
        * platform/ios/WebVideoFullscreenModel.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::videoLayerFrame): Added; simple getter.
        (WebVideoFullscreenModelVideoElement::videoLayerGravity): Ditto.

2015-04-06  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: RunResolver::Iterator class cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=143445

        Reviewed by Antti Koivisto.

        1. SimpleLineLayout::Run is an intermediate structure and should not be publicly accessible through RunResolver::Iterator.
        RunResolver::Run is the class to use to access run properties.
        2. Also move advance()/advanceLine() to private. Callers should use LineResolver to advance on lines.

        No change in functionality.

        * rendering/SimpleLineLayoutResolver.h:

2015-04-06  Simon Fraser  <simon.fraser@apple.com>

        Use a RenderObject bit for isRenderFlowThread()
        https://bugs.webkit.org/show_bug.cgi?id=143439

        Reviewed by Darin Adler.

        Turning isRenderFlowThread() into a bit in rare data rather than a virtual function reduces
        the time under RenderLayer::scrollTo() on a large overflow:scroll table from 56% to 44%.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        * rendering/RenderFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setIsRenderFlowThread):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isDragging):
        (WebCore::RenderObject::hasReflection):
        (WebCore::RenderObject::isRenderFlowThread):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):

2015-04-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [Win] [SVG -> OTF Converter] Support the SVG -> OTF Font Converter
        https://bugs.webkit.org/show_bug.cgi?id=143402

        Reviewed by Darin Adler.

        There are a few pieces to the converter that Windows requires that we haven't already
        implemented:
        1. Checksums were being calculated with the wrong endianness
        2. Windows requires a format 4 'cmap' subtable in addition to the format 12 one we already
        were using
        3. Windows requires a reference to a Private DICT inside the CFF table, even if the DICT
        is of 0 length.

        Covered by all our existing SVG font tests.

        * svg/SVGFontFaceElement.h: Add capHeight accessor.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::capHeight): Ditto.
        * svg/SVGToOTFConversion.cpp: Update the conversion process according to the above
        requirements.
        (WebCore::SVGToOTFFontConverter::appendFormat12CMAPTable):
        (WebCore::SVGToOTFFontConverter::appendFormat4CMAPTable):
        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Use helpers.
        (WebCore::SVGToOTFFontConverter::appendHHEATable): Use member variables.
        (WebCore::SVGToOTFFontConverter::appendOS2Table): Update to version 2.
        (WebCore::SVGToOTFFontConverter::appendCFFTable): Create a reference to a
        zero-sized Private DICT
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Populate member
        variables.
        (WebCore::SVGToOTFFontConverter::calculateChecksum): Flip endianness

2015-04-06  Yusuke Suzuki  <utatane.tea@gmail.com>

        Return Optional<uint32_t> from PropertyName::asIndex
        https://bugs.webkit.org/show_bug.cgi?id=143422

        Reviewed by Darin Adler.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::put):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::put):

2015-04-06  Žan Doberšek  <zdobersek@igalia.com>

        FileList constructor should move the passed-in Vector<> rvalue reference into the member variable
        https://bugs.webkit.org/show_bug.cgi?id=143412

        Reviewed by Darin Adler.

        * fileapi/FileList.h:
        (WebCore::FileList::FileList): An explicit move of the passed-in rvalue
        reference into the member variable is required, otherwise a copy is
        performed since an rvalue reference is just an lvalue.

2015-04-06  Žan Doberšek  <zdobersek@igalia.com>

        UserScript, UserStyleSheet constructors should take in Vector<String> rvalue references
        https://bugs.webkit.org/show_bug.cgi?id=143411

        Reviewed by Darin Adler.

        Have the UserScript and UserStyleSheet constructors take in Vector<String>
        rvalue references for the whitelist and blacklist parameters. Both classes
        store these Vector<String> objects, so the referenced objects can simply be
        moved into the member variable.

        Because the constructor is now demanding an rvalue, it's up to the caller
        to move in the desired object if possible, or create an explicit copy
        otherwise.

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

2015-04-05  Andy Estes  <aestes@apple.com>

        [Content Filtering] Only pass http(s) requests to -[NEFilterSource willSendRequest:...]
        https://bugs.webkit.org/show_bug.cgi?id=143437

        Reviewed by Dan Bernstein.

        No new tests. We can't test NEFilterSource directly.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::willSendRequest): Immediately allow requests with url schemes other than http and https.

2015-04-05  Darin Adler  <darin@apple.com>

        FrameView code uses page() without null checking
        https://bugs.webkit.org/show_bug.cgi?id=143425
        rdar://problem/18920601

        Reviewed by Anders Carlsson.

        While we don't have tests that cover this, we are seeing crashes coming in
        that indicate the shouldEnableSpeculativeTilingDuringLoading function is
        being called when the page is null. This patch adds null checks to all the
        places in FrameView that use page() without doing null checking.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout): If page is null, don't try to do the
        auto-sizing logic that involves the textAutosizingWidth value from the page.
        (WebCore::FrameView::setFixedVisibleContentRect): Get settings from the
        frame rather than the page to avoid possible null-dereference.
        (WebCore::FrameView::scrollPositionChanged): Check the page for null when
        getting the event throttling delay.
        (WebCore::FrameView::updateLayerFlushThrottling): Check the page for null,
        and return early if it is null.
        (WebCore::shouldEnableSpeculativeTilingDuringLoading): Check the page for
        null, and return false if it is null.
        (WebCore::FrameView::performPostLayoutTasks): Guard the code that calls
        didLayout on the page client by a check if the page is null.
        (WebCore::FrameView::pagination): Don't call Page::pagination on a null
        page here.
        (WebCore::FrameView::visibleContentScaleFactor): Use a scale factor of 1
        if the page is null.
        (WebCore::FrameView::setVisibleScrollerThumbRect): Don't call through to
        the page client if the page is null.
        (WebCore::FrameView::scrollbarStyleChanged): Ditto.
        (WebCore::FrameView::setScrollPinningBehavior): Check the page for null
        before asking it for the scrolling coordinator.

2015-04-05  Simon Fraser  <simon.fraser@apple.com>

        Free up some bits in RenderObject by moving rarely used bits into a side table
        https://bugs.webkit.org/show_bug.cgi?id=143432

        Reviewed by Darin Adler.
        
        Add a side table (global hash) on RenderObject to store data that is rarely
        used. Move the "isDragging" and "hasReflection" bits there. Re-use one of
        those bits for "hasRareData", and leave the other unused (I have plans for it).
        
        * rendering/RenderBlock.cpp:
        (WebCore::getBlockRareData): Renamed for consistency.
        (WebCore::ensureBlockRareData): Renamed to avoid conflict with RenderObject::ensureRareData().
        (WebCore::RenderBlock::cachedFlowThreadContainingBlock):
        (WebCore::RenderBlock::cachedFlowThreadContainingBlockNeedsUpdate):
        (WebCore::RenderBlock::setCachedFlowThreadContainingBlockNeedsUpdate):
        (WebCore::RenderBlock::updateCachedFlowThreadContainingBlock):
        (WebCore::RenderBlock::locateFlowThreadContainingBlock):
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::setPageLogicalOffset):
        (WebCore::getRareData): Deleted.
        (WebCore::ensureRareData): Deleted.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::~RenderObject): Assert that rare data hasn't been resurrected
        since willBeDestroyed().
        (WebCore::RenderObject::willBeDestroyed): Clear the rare data.
        (WebCore::RenderObject::setIsDragging): If setting, ensure that we have rare data and
        set the bit. Otherwise, only clear the bit of we have rare data.
        (WebCore::RenderObject::setHasReflection): Ditto.
        (WebCore::RenderObject::rareDataMap):
        (WebCore::RenderObject::rareData):
        (WebCore::RenderObject::ensureRareData):
        (WebCore::RenderObject::clearRareData):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isDragging): Fast-fail on the hasRareData() bit, then do the
        slower lookup in rare data.
        (WebCore::RenderObject::hasReflection): Ditto.
        (WebCore::RenderObject::setEverHadLayout): Moved up to group with other bit setters.
        (WebCore::RenderObject::hasRareData):
        (WebCore::RenderObject::setHasRareData):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::RenderObjectRareData::RenderObjectRareData):
        (WebCore::RenderObject::setHasReflection): Deleted. Out of line now.
        (WebCore::RenderObject::setIsDragging): Deleted. Ditto.

2015-04-05  Darin Adler  <darin@apple.com>

        REGRESSION (r181778): Crash after scrolling Google search result page
        https://bugs.webkit.org/show_bug.cgi?id=143431

        Reviewed by Simon Fraser.

        I can't reproduce this crash, nor was I able to make a regression test,
        but the crash data makes it clear this is a null dereference.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::scrollWasUpdated): Check the result
        of Frame::view for null. We know this is only called when there is a
        valid FrameView, but it can be called after Frame::m_view is already null.

2015-04-05  Andy Estes  <aestes@apple.com>

        [Content Filtering] Tell the filter about requests and redirects
        https://bugs.webkit.org/show_bug.cgi?id=143414
        rdar://problem/19239549

        Reviewed by Darin Adler.

        Tests: contentfiltering/allow-after-will-send-request.html
               contentfiltering/block-after-will-send-request.html
               http/tests/contentfiltering/allow-after-redirect.html
               http/tests/contentfiltering/block-after-redirect.html

        NEFilterSource supports making filter decisions based on NSURLRequests, so this patch adds support for telling
        ContentFilter about the original main resource request as well as redirect requests.

        * bindings/js/JSMockContentFilterSettingsCustom.cpp: Updated decisionPoint values to include AfterWillSendRequest and AfterRedirect.
        (WebCore::JSMockContentFilterSettings::decisionPoint):
        (WebCore::JSMockContentFilterSettings::setDecisionPoint):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::willSendRequest): Called willSendRequest() on each filter using forEachContentFilterUntilBlocked().
        (WebCore::ContentFilter::redirectReceived): Called willSendRequest().
        * loader/ContentFilter.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Called ContentFilter::willSendRequest() if there is a content filter.
        Asserted that this is not a redirect, and that ContentFilter does not set the request to null.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): Called redirectReceived() instead of willSendRequest().
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::redirectReceived): Renamed from willSendRequest(), since this function is only called during redirects.
        (WebCore::CachedRawResource::willSendRequest): Deleted.
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::redirectReceived): Renamed from willSendRequest(), since this function is only called during redirects.
        (WebCore::CachedResource::willSendRequest): Deleted.
        * loader/cache/CachedResource.h:
        * platform/PlatformContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::willSendRequest): Called responseReceived() if there was a redirectResponse.
        Then called -[NEFilterSource willSendRequest:decisionHandler:].
        * platform/cocoa/ParentalControlsContentFilter.h:
        * platform/spi/cocoa/NEFilterSourceSPI.h: Added a #define for NEFilterSourceOptionsPageData.
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::willSendRequest): Added support for willSendRequest.
        * testing/MockContentFilter.h: Added decision points for AfterWillSendRequest and AfterRedirect.
        * testing/MockContentFilterSettings.h:
        * testing/MockContentFilterSettings.idl:

2015-04-05  Sungmann Cho  <sungmann.cho@navercorp.com>

        Remove DocumentLoader::requestURL().
        https://bugs.webkit.org/show_bug.cgi?id=140001

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::documentURL):
        (WebCore::DocumentLoader::requestURL): Deleted.
        * loader/DocumentLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):

2015-04-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use constants of sqlite3 directly for status of SQL result in webdatabase
        https://bugs.webkit.org/show_bug.cgi?id=143329

        Reviewed by Darin Adler.

        In webdatabase, it has used own constant vairables as well as using sqlite3 constants directly.
        It causes to use if~else statement which consumes more cpu cycles compared to switch~case. This
        patch makes to use constants of sqlite3. Additionally if~else statment is changed to switch~case
        to save cpu cycles.

        No new tests, no behavior changes.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::performGetTableNames):
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOriginNoLock):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::quotaForOriginNoLock):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::execute):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::runCurrentStatementAndGetNextState):
        Change to use a reference instead of a pointer in arguemnt of execute().
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::verifySchemaVersion):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::storeUpdatedType):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        (WebCore::ApplicationCacheStorage::storeNewestCache):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::remove):
        (WebCore::ApplicationCacheStorage::getManifestURLs):
        (WebCore::ApplicationCacheStorage::cacheGroupSize):
        (WebCore::ApplicationCacheStorage::deleteCacheGroupRecord):
        (WebCore::ApplicationCacheStorage::checkForMaxSizeReached):
        (WebCore::ApplicationCacheStorage::checkForDeletedResources):
        (WebCore::ApplicationCacheStorage::flatFileAreaSize):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::checkIntegrity):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::pruneUnretainedIcons):
        (WebCore::readySQLiteStatement):
        (WebCore::IconDatabase::setIconIDForPageURLInSQLDatabase):
        (WebCore::IconDatabase::removePageURLFromSQLDatabase):
        (WebCore::IconDatabase::getIconIDForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::addIconURLToSQLDatabase):
        (WebCore::IconDatabase::getImageDataForIconURLFromSQLDatabase):
        (WebCore::IconDatabase::removeIconFromSQLDatabase):
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::getFileNameForNewDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):
        (WebCore::SQLiteStatement::returnIntResults):
        (WebCore::SQLiteStatement::returnInt64Results):

2015-04-05  Simon Fraser  <simon.fraser@apple.com>

        Remove "go ahead and" from comments
        https://bugs.webkit.org/show_bug.cgi?id=143421

        Reviewed by Darin Adler, Benjamin Poulain.

        Remove the phrase "go ahead and" from comments where it doesn't add
        anything (which is almost all of them).

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOriginLockFor):
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat):
        * css/CSSPrimitiveValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performURLImport):
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::fadeAnimationTimerFired):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollContents):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::create):
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRefresh):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::blockSelectionGaps):
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::absoluteQuads):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::insertFloatingObject):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleWillChange):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::dirtyRange):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleText):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveLocal):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):

2015-04-04  Andy Estes  <aestes@apple.com>

        [Content Filtering] Blocked page is not always displayed when it should be
        https://bugs.webkit.org/show_bug.cgi?id=143410
        rdar://problem/20211099

        Reviewed by Andreas Kling.

        These tests now pass: contentfiltering/block-after-add-data.html
                              contentfiltering/block-after-response.html

        There were several problems with how ContentFilter loaded replacement data:
        (1) Replacement data was delivered to DocumentLoader as if it were the original document's data. This assumes
            that the original data was a UTF-8 encoded HTML document, which is not always true. We had a way to reset
            the encoding, but not the content type.
        (2) Replacement data was never delivered when the filter blocks in DocumentLoader::responseReceived().
        (3) The main resource load was cancelled before the replacement data could be rendered when the filter blocks
            in DocumentLoader::dataReceived().
        The result was that only when the load was blocked after DocumentLoader::notifyFinished() would the replacement
        data be shown properly, and only when problem (1) wasn't occurring.

        This patch addresses these issues by using the substitute data mechanism to deliver replacement data. By using
        substitute data, we can ensure that the original load is cancelled at the earliest opportunity and that the
        replacement data is loaded with the proper content type and encoding.

        Accomplishing this required changing the way ContentFilter interacts with DocumentLoader. Instead of placing
        ContentFilter hooks throughout DocumentLoader, this patch makes ContentFilter itself the client of the
        CachedRawResource for the duration of the filtering. If the filter decides to allow the load, DocumentLoader
        adds itself as a client causing CachedRawResource to deliver to it the response and buffered data. If the
        filter decides to block the load, DocumentLoader schedules a substitute data load. An added benefit of this
        approach is that ContentFilter can reuse CachedRawResource's original data buffer instead of keeping its own.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::createIfNeeded): Changed to take a DecisionFunction rather than a ResourceResponse and DocumentLoader.
        (WebCore::ContentFilter::ContentFilter): Ditto.
        (WebCore::ContentFilter::~ContentFilter): Removed ourself as a CachedRawResource client if needed.
        (WebCore::ContentFilter::startFilteringMainResource): Became the client of the CachedRawResource in order to start the filtering process.
        (WebCore::ContentFilter::unblockHandler): Returned the unblock handler.
        (WebCore::ContentFilter::replacementData): Returned the replacement data.
        (WebCore::ContentFilter::unblockRequestDeniedScript): Returned the unblock request denied script.
        (WebCore::ContentFilter::responseReceived): Called responseReceived() on each filter using forEachContentFilterUntilBlocked().
        (WebCore::ContentFilter::dataReceived): Ditto for dataReceived().
        (WebCore::ContentFilter::notifyFinished): Ditto for finishedLoading().
        (WebCore::ContentFilter::forEachContentFilterUntilBlocked): For each filter that needs more data, called the function.
        If the filter blocked the load, called didDecide() with State::Blocked.
        If all filters allowed the load, called didDecide() with State::Allowed.
        (WebCore::ContentFilter::didDecide): Set m_state and called m_decisionFunction().
        (WebCore::ContentFilter::addData): Deleted.
        (WebCore::ContentFilter::finishedAddingData): Deleted.
        (WebCore::ContentFilter::needsMoreData): Deleted.
        (WebCore::ContentFilter::didBlockData): Deleted.
        (WebCore::ContentFilter::getReplacementData): Deleted.
        * loader/ContentFilter.h:
        (WebCore::ContentFilter::type):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader): Called ContentFilter::createIfNeeded() if not loading substitute data.
        (WebCore::DocumentLoader::finishedLoading): Removed old ContentFilter code.
        (WebCore::DocumentLoader::responseReceived): Ditto.
        (WebCore::DocumentLoader::commitData): Ditto.
        (WebCore::DocumentLoader::dataReceived): Ditto.
        (WebCore::DocumentLoader::detachFromFrame): Set m_contentFilter to nullptr.
        (WebCore::DocumentLoader::startLoadingMainResource): Called becomeMainResourceClientIfFilterAllows() instead of
        becoming m_mainResource's client.
        (WebCore::DocumentLoader::clearMainResource): Set m_contentFilter to nullptr.
        (WebCore::DocumentLoader::becomeMainResourceClientIfFilterAllows): If ContentFilter is initialized, called
        ContentFilter::startFilteringMainResource(). Otherwise added ourself as a client of m_mainResource.
        (WebCore::DocumentLoader::installContentFilterUnblockHandler): Added a helper for creating and notifying
        FrameLoaderClient of the unblock handler.
        (WebCore::DocumentLoader::contentFilterDidDecide): Set m_contentFilter to nullptr. If the content filter
        allowed the load, then added ourself as the CachedRawResource's client. Otherwise, installed the unblock handler
        and scheduled a substitute data load with the replacement data.
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart): Removed call to PolicyChecker::prepareForLoadStart().
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledSubstituteDataLoad::ScheduledSubstituteDataLoad): Added a ScheduledNavigation subclass that
        calls FrameLoader::load() with a FrameLoadRequest containing substitute data.
        (WebCore::NavigationScheduler::scheduleSubstituteDataLoad): Scheduled a substitute data load.
        * loader/NavigationScheduler.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Reset m_contentFilterUnblockHandler if it couldn't handle the request.
        (WebCore::PolicyChecker::prepareForLoadStart): Deleted.
        * loader/PolicyChecker.h:
        * platform/ContentFilterUnblockHandler.h:
        (WebCore::ContentFilterUnblockHandler::unreachableURL):
        (WebCore::ContentFilterUnblockHandler::setUnreachableURL):
        (WebCore::ContentFilterUnblockHandler::unblockURLScheme): Renamed to ContentFilter::urlScheme().
        * platform/PlatformContentFilter.h:
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::wrapWithDecisionHandler): Added a helper to wrap the unblock handler with an outer DecisionHandlerFunction.
        (WebCore::ContentFilterUnblockHandler::encode): Added m_unreachableURL to the encoding.
        (WebCore::ContentFilterUnblockHandler::decode): Ditto for the decoding.
        (WebCore::ContentFilterUnblockHandler::canHandleRequest): Changed to call ContentFilter::urlScheme().
        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (replacementDataFromDecisionInfo): Added a helper to extract replacement data from the decisionInfo dictionary.
        (WebCore::NetworkExtensionContentFilter::enabled): Renamed from canHandleReponse(); only checks if the filter is enabled.
        (WebCore::NetworkExtensionContentFilter::create): Created a new object.
        (WebCore::NetworkExtensionContentFilter::NetworkExtensionContentFilter): Created a NEFilterSource immediately when using the modern API.
        (WebCore::NetworkExtensionContentFilter::responseReceived): Created a NEFilterSource when using the legacy API.
        Called -[NEFilterSource receivedResponse:decisionHandler:] when using the modern API.
        (WebCore::NetworkExtensionContentFilter::addData): Stopped buffering the original data.
        (WebCore::NetworkExtensionContentFilter::replacementData): Returned a SharedBuffer instead of a char* and int&.
        (WebCore::NetworkExtensionContentFilter::canHandleResponse): Deleted.
        (WebCore::createNEFilterSource): Deleted.
        (WebCore::NetworkExtensionContentFilter::getReplacementData): Deleted.
        * platform/cocoa/ParentalControlsContentFilter.h:
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::enabled): Renamed from canHandleReponse(); only checks if the filter is enabled.
        (WebCore::ParentalControlsContentFilter::create): Created a new object.
        (WebCore::ParentalControlsContentFilter::ParentalControlsContentFilter): Initialized m_filterState to kWFEStateBuffering.
        (WebCore::canHandleResponse): Added a helper to check if the response can be filtered.
        (WebCore::ParentalControlsContentFilter::responseReceived): If !canHandleResponse(), set m_filterState to kWFEStateAllowed and return.
        Otherwise created a new WebFilterEvaluator with the response.
        (WebCore::ParentalControlsContentFilter::addData): Called updateFilterState().
        (WebCore::ParentalControlsContentFilter::finishedAddingData): Ditto.
        (WebCore::ParentalControlsContentFilter::needsMoreData): Changed to check m_filterState.
        (WebCore::ParentalControlsContentFilter::didBlockData): Ditto.
        (WebCore::ParentalControlsContentFilter::replacementData): Returned a SharedBuffer instead of a char* and int&.
        (WebCore::ParentalControlsContentFilter::updateFilterState): Updated m_filterState by calling -[WebFilterEvaluator filterState].
        (WebCore::ParentalControlsContentFilter::canHandleResponse): Deleted.
        (WebCore::ParentalControlsContentFilter::getReplacementData): Deleted.
        * platform/spi/cocoa/NEFilterSourceSPI.h:
        * platform/spi/cocoa/WebFilterEvaluatorSPI.h:
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::enabled): Renamed from canHandleReponse(); only checks if the filter is enabled.
        (WebCore::MockContentFilter::create): Created a new object.
        (WebCore::MockContentFilter::responseReceived): Called maybeDetermineStatus().
        (WebCore::MockContentFilter::addData): Stopped buffering the original data.
        (WebCore::MockContentFilter::replacementData): Returned a SharedBuffer instead of a char* and int&.
        (WebCore::MockContentFilter::unblockHandler): Asserted that we blocked data.
        (WebCore::MockContentFilter::canHandleResponse): Deleted.
        (WebCore::MockContentFilter::MockContentFilter): Deleted.
        (WebCore::MockContentFilter::getReplacementData): Deleted.
        * testing/MockContentFilter.h:
        * testing/MockContentFilterSettings.cpp:
        (WebCore::MockContentFilterSettings::unblockRequestURL): Changed to use a StringBuilder.

2015-04-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Heuristic: Avoid exposing an element as clickable if mouse event delegation is handled on an AXElement with more than one descendant AXElement
        https://bugs.webkit.org/show_bug.cgi?id=136247

        Reviewed by Mario Sanchez Prada.

        Modify the logic for determining whether an element supports the press action by trying to filter out objects being handled by event delegation.
        The heuristic is if an element handles click actions and has more than one of a {static text, image, control, link, heading}, then we think
        it's using event delegation, and do not expose the press action.

        Test: platform/mac/accessibility/press-action-not-exposed-for-event-delegation.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsPressAction):

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

        More const in CSSToStyleMap
        https://bugs.webkit.org/show_bug.cgi?id=143409

        Reviewed by Andreas Kling.

        The CSSValues passed to CSSToStyleMap functions can mostly be treated
        as |const|, except for CSSImageValues which have special behavior.
        
        This makes it clearer what the inputs and outputs of these
        functions are.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeDegrees):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::computeTime):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillAttachment):
        (WebCore::CSSToStyleMap::mapFillClip):
        (WebCore::CSSToStyleMap::mapFillComposite):
        (WebCore::CSSToStyleMap::mapFillBlendMode):
        (WebCore::CSSToStyleMap::mapFillOrigin):
        (WebCore::CSSToStyleMap::mapFillRepeatX):
        (WebCore::CSSToStyleMap::mapFillRepeatY):
        (WebCore::CSSToStyleMap::mapFillSize):
        (WebCore::CSSToStyleMap::mapFillXPosition):
        (WebCore::CSSToStyleMap::mapFillYPosition):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType):
        (WebCore::CSSToStyleMap::mapAnimationDelay):
        (WebCore::CSSToStyleMap::mapAnimationDirection):
        (WebCore::CSSToStyleMap::mapAnimationDuration):
        (WebCore::CSSToStyleMap::mapAnimationFillMode):
        (WebCore::CSSToStyleMap::mapAnimationIterationCount):
        (WebCore::CSSToStyleMap::mapAnimationName):
        (WebCore::CSSToStyleMap::mapAnimationPlayState):
        (WebCore::CSSToStyleMap::mapAnimationProperty):
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        (WebCore::CSSToStyleMap::mapAnimationTrigger):
        * css/CSSToStyleMap.h:

2015-04-04  Dan Bernstein  <mitz@apple.com>

        Tried to fix the build.

        * loader/icon/IconController.cpp:
        (WebCore::iconsFromLinkElements):

2015-04-02  Darin Adler  <darin@apple.com>

        Streamline icon-related code, mostly unused
        https://bugs.webkit.org/show_bug.cgi?id=143306

        Reviewed by Antti Koivisto.

        I started on this path because Document::iconURLs had a poor implementation,
        storing results in a data member with no benefit, using HTMLCollection for
        iteration of the children of the head element instead of using the simpler
        faster technique we use inside the engine. Then, I discovered this function was
        mostly-unused code left over from before the Blink fork. I removed most of it.
        We can add this back later if someone finds a use for it, but if we do we
        should do a higher quality implementation without the quirks of the old one.

        Refactoring also made it clear that logic isn't exactly sensible. There's a
        set of rules about what order to return the list in that is not followed by
        the code that tries to find the "default touch icon". Later we could add some
        more test coverage and tighten up the logic. But the reality is that at this
        time, with some small exceptions, icon logic is in the web browsers, not in WebKit.

        * CMakeLists.txt: Removed IconURL.cpp.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.

        * dom/Document.cpp:
        (WebCore::Document::evaluate): Tweaked formatting.
        (WebCore::Document::shortcutIconURLs): Removed. Unused function.
        (WebCore::Document::iconURLs): Removed. Moved code to IconController.
        (WebCore::Document::addIconURL): Removed. Moved code to LinkLoader.

        * dom/Document.h: Removed shortcutIconURLs, iconURLs, addIconURL,
        and m_iconURLs.

        * dom/IconURL.cpp: Removed.
        * dom/IconURL.h: Removed everything from this header except for the
        IconType enum. Added a FIXME about possibly renaming the header.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement): Pass a reference when creating
        the link loading.
        (WebCore::HTMLLinkElement::setDisabledState): Access members of the struct
        LinkRelElement without "m_" prefix.
        (WebCore::HTMLLinkElement::parseAttribute): Changed to use early return style,
        and made the part of this for parsing title use a more normal idiom.
        (WebCore::HTMLLinkElement::process): Removed many unneeded arguments, made the
        logic of the code a little easier to follow.
        (WebCore::HTMLLinkElement::removedFrom): Removed a call to a function that had
        an empty body.
        (WebCore::HTMLLinkElement::iconType): Updated for change to LinkRelElement.
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs): Ditto.
        * html/HTMLLinkElement.h: More of the same.

        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute): Initialize data members in the
        struct itself. Got rid of "m_" prefix since this is a struct, not a class.
        Changed code to use modern for loop; even better would be to eliminate the
        splitting into a vector entirely and use StringView (do that next time).
        * html/LinkRelAttribute.h: See above.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::relAttributeIsStyleSheet):
        Updated for chnages to LinkRelAttribute and give the local variable a clearer name.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeIcons): Removed.
        * loader/FrameLoader.h: Removed didChangeIcons.

        * loader/FrameLoaderClient.h: Added include for String since it's no longer
        taken care of by IconURLs.h.

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::LinkLoader): Take a reference instead of a pointer.
        (WebCore::LinkLoader::linkLoadTimerFired): Use m_client reference instead of pointer.
        (WebCore::LinkLoader::linkLoadingErrorTimerFired): Ditto.
        (WebCore::LinkLoader::notifyFinished): Use nullptr.
        (WebCore::LinkLoader::loadLink): Tweak formatting. Move the dispatchDidChangeIcons
        call in here instead of going through Document to FrameLoader and then FrameLoader to
        FrameLoaderClient, and passing extra unused arguments, the way the old code did.
        Use a reference instead of a pointer for the document.
        (WebCore::LinkLoader::released): Removed. Empty function.

        * loader/LinkLoader.h: Changed constructor argument to be a reference. Made more
        things private. Removed empty released function.

        * loader/icon/IconController.cpp:
        (WebCore::IconController::IconController): Moved initialization of data members to
        the class definition in the header.
        (WebCore::iconsFromLinkElements): Added. This function replaces the existing
        Document::iconURLs function, but has a simpler implementation and interface.
        It focuses on exactly what the code in this file needs. If we want to add some
        more features to the icon controller we might make this more complex again.
        Even now, building a vector is not necessarily helpful; the only client of this
        function ends up extracting only one of the URLs this function returns.
        (WebCore::IconController::url): Rewrote this. It's the only function actually
        using the icon URLs. This contains a combination of the logic from the various
        functions in this class before, including iconURL, urlsForTypes, appendToIconURLs,
        and defaultURL. Among other improvements, replaced the unusual code to construct
        the icon URL with a call to Document::completeURL.
        (WebCore::IconController::startLoader): Refactored a bit to remove a local variable.
        (WebCore::IconController::continueLoadWithDecision): Ditto.

        * loader/icon/IconController.h: Removed unneeded includes, unneeded use of
        WTF_MAKE_NONCOPYABLE (since classes with data members of reference type are
        automatically noncopyable), unused fucntions. Also initialize m_waitingForLoadDecision.

        * testing/Internals.cpp:
        (WebCore::Internals::iconURLs): Removed.
        (WebCore::Internals::shortcutIconURLs): Left this in place since it is used by
        tests. Changed it to return the actual value from the IconController::url function,
        since that's the interface to our icon machinery that is actually exposed on some
        platforms. That means this returns only a single URL.
        (WebCore::Internals::allIconURLs): Removed.
        * testing/Internals.h: Removed allIconURLs and iconURLs.
        * testing/Internals.idl: Removed allIconURLs.

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

        Fix EFL and Gtk build.

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

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

        Crash under Document::absoluteRegionForEventTargets on build.webkit.org/dashboard
        https://bugs.webkit.org/show_bug.cgi?id=143406
        rdar://problem/20407080

        Reviewed by Ryosuke Niwa.
        
        We failed to remove elements from Document's m_wheelEventTargets HashSet when the
        elements were destroyed with wheel handlers still on them. Fix by removing the
        node from the set via Node::willBeDeletedFrom().

        Tests: platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/destroy-element-with-multiple-handlers-crash.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/destroy-wheel-element-crash.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/destroy-wheel-element-parent-crash.html

        * dom/Document.cpp:
        (WebCore::removeHandlerFromSet): Helper to remove one or all handlers on the given node.
        (WebCore::Document::didRemoveWheelEventHandler): Add a parameter to specify whether we're
        removing all handlers on the given node.
        (WebCore::Document::didRemoveTouchEventHandler): Use removeHandlerFromSet().
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom): Tell the document we're removing all handlers
        for this node.

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

        REGRESSION (r182215): Feedly crashes when closing article
        https://bugs.webkit.org/show_bug.cgi?id=143405
        rdar://problem/20382734, rdar://problem/20395497

        Reviewed by Tim Horton.
        
        Calling computeNonFastScrollableRegion() eagerly when scrollable areas come and go
        is bad, because it can cause FrameView::layout() to get called in the middle of
        RenderObject destruction, which leaves the render tree in a bad state.
        
        Fix by calling computeNonFastScrollableRegion() lazily, just before scrolling tree commit.
        
        AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged() now just sets
        a flag to say that the non-fast region needs to be recomputed, and that schedules
        a scrolling tree commit. When the commit happens, we recompute the region. If the
        region didn't change, and no other changes are pending, there's no need to commit.

        Test: platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/compute-region-inside-delete-renderer-crash.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionDirty):
        (WebCore::AsyncScrollingCoordinator::willCommitTree):
        (WebCore::AsyncScrollingCoordinator::updateNonFastScrollableRegion):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText): Need to eagerly update
        the non-fast scrollable region.
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::nonFastScrollableRegionDirty):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::willCommitTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

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

        Differentiate between composited scrolling, and async scrolling
        https://bugs.webkit.org/show_bug.cgi?id=143291

        Reviewed by Sam Weinig.
        
        ScrollableArea::usesCompositedScrolling() meant "uses aysnc scrolling", but
        FrameView::contentsInCompositedLayer() covered a related concept, that scrolling
        happens by moving compositing layers around.
        
        Make the difference between these more explicit by adding ScrollableArea::usesAsyncScrolling(),
        which means that scrolling for that ScrollableArea is asynchronous and managed
        by a ScrollingCoordinator. This is the meaning that ScrollingCoordinator::computeNonFastScrollableRegion()
        understands.
        
        ScrollableArea::usesCompositedScrolling() is now repurposed to mean "scrolling
        occurs by moving layers around, not requiring repaint". FrameView::contentsInCompositedLayer()
        is renamed to usesCompositedScrolling(), and overrides the base class function.

        This only changes behavior in tests that call setScrollingTreeIncludesFrames(true).

        * page/FrameView.cpp:
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::usesCompositedScrolling):
        (WebCore::FrameView::usesAsyncScrolling):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::contentsInCompositedLayer): Deleted.
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::usesAsyncScrolling):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::usesAsyncScrolling):
        * rendering/RenderLayer.h:

2015-04-04  Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Collecting a ReadableStreamReader should not unlock its stream
        https://bugs.webkit.org/show_bug.cgi?id=143333

        Reviewed by Benjamin Poulain.

        This patch stores as a boolean whether the stream is locked to a reader.
        In case the reader forget to unlock the stream, the reader can be collected and destructor called.
        In that case, the link between reader and stream will be reset but the stream will remain in locked state.

        Covered by new test in streams/readablestreamreader-constructor.html.

        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::isLocked):
        (WebCore::ReadableStream::lock):
        (WebCore::ReadableStream::release):
        (WebCore::ReadableStream::releaseButKeepLocked): Introduced to cut the link between reader and stream but stil keeping the stream locked.
        * Modules/streams/ReadableStreamReader.cpp:
        (WebCore::ReadableStreamReader::~ReadableStreamReader):
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::getReader):
        * bindings/js/JSReadableStreamReaderCustom.cpp:
        (WebCore::constructJSReadableStreamReader):

2015-04-03  Zan Dobersek  <zdobersek@igalia.com>

        MediaDevices possesses a vtable despite using ImplementationLacksVTable IDL attribute
        https://bugs.webkit.org/show_bug.cgi?id=143367

        Reviewed by Eric Carlson.

        * Modules/mediastream/MediaDevices.idl: MediaDevices ends up with a vtable
        because of inheriting from ContextDestructionObserver. This collides with
        the ImplementationLacksVTable IDL attribute, causing compilation errors
        with Clang. Since MediaDevices isn't being inherited from, but will still
        end up with a vtable, the IDL attribute should be removed.

2015-04-03  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add memory reporting.
        https://bugs.webkit.org/show_bug.cgi?id=143386

        Reviewed by Benjamin Poulain.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        * contentextensions/CompiledContentExtension.h:
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):
        * contentextensions/ContentExtension.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        * contentextensions/ContentExtensionsDebugging.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::DFABytecodeInterpreter):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::~DFABytecodeInterpreter):
        Keep track of which memory pages in the bytecode are being hit if CONTENT_EXTENSIONS_MEMORY_REPORTING is 1.
        When CONTENT_EXTENSIONS_MEMORY_REPORTING is 0, this makes an empty vector in ContentExtension
        and passes some pointers on the stack, many of which can be optimized out by the C++ compiler.

2015-04-03  Brent Fulgham  <bfulgham@apple.com>

        Expand test infrastructure to support scrolling tests
        https://bugs.webkit.org/show_bug.cgi?id=143383

        Reviewed by Darin Adler.

        No new tests: No change in behavior.

        This is an initial set of changes that clean up a few things I noticed while extending testing support
        for scroll animations and wheel event gestures.
        1. Reduce the amount of #ifdef code in EventHandler{Mac}.
        2. Consolidate the idea of an "End Gesture" in the PlatformWheelEvent class.
        3. Remove a number of unneeded null checks in EventHandler.
        4. ScrollController must always have a client, so hold a reference instead of using a pointer.

        * WebCore.vcxproj/WebCore.vcxproj: Add new WheelEventTestTrigger files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformNotifyIfEndGesture): Renamed from 'platformNotifySnapIfNecessary'.
        (WebCore::EventHandler::handleWheelEvent): Call 'platformNotifySnapIfNecessary' at method exit points.
        (WebCore::EventHandler::platformNotifySnapIfNecessary): Deleted.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformCompleteWheelEvent):  Remove unneeded null checks for 'view'. Remove
        CSS_SNAP-specific call to 'platformNotifySnapIfNecessary'. This logic is now handled in the new
        'platformNotifyIfEndGesture' method.
        (WebCore::EventHandler::platformNotifyIfEndGesture): Renamed from 'platformNotifySnapIfNecessary'.
        (WebCore::EventHandler::platformNotifySnapIfNecessary): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac): Pass 'this' as
        reference to ScrollController constructor.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::shouldResetLatching): Call new 'isEndGesture' method.
        (WebCore::PlatformWheelEvent::isEndGesture): Added method to encapsulate some code that was duplicated
        in a number of places.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator): Pass 'this' as reference to ScrollController constructor.
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::ScrollController): Update to reflect m_client is now a reference.
        (WebCore::ScrollController::handleWheelEvent): Ditto.
        (WebCore::ScrollController::snapRubberBandTimerFired): Ditto. Also, a drive-by fix for ending rubberband
        snapping. This end-state wasn't deactivating the timer (even when the animation finished). This isn't a
        huge problem, but I (will) rely on the state of the animation timer in a future patch to decide if
        tests should run or continue waiting.
        (WebCore::ScrollController::isRubberBandInProgress): Ditto.
        (WebCore::ScrollController::startSnapRubberbandTimer): Ditto.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Ditto.
        (WebCore::ScrollController::shouldRubberBandInHorizontalDirection): Ditto.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Ditto.
        (WebCore::ScrollController::startScrollSnapTimer): Ditto.
        (WebCore::ScrollController::stopScrollSnapTimer): Ditto.
        (WebCore::ScrollController::scrollSnapAnimationUpdate): Ditto.
        (WebCore::ScrollController::beginScrollSnapAnimation): Ditto.
        (WebCore::ScrollController::computeSnapDelta): Ditto.
        (WebCore::ScrollController::computeGlideDelta): Ditto.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::gestureShouldBeginSnap): Use new PlatformWheelEvent::isEndGesture() method.

2015-04-03  Chris Fleizach  <cfleizach@apple.com>

        AX: Toggling check box state not speaking using plain space, not VO space.
        https://bugs.webkit.org/show_bug.cgi?id=143356

        Reviewed by Darin Adler.

        The checkbox state change needs to result in a value change being generated, otherwise accessibility won't know the value has changed through keyboard usage.
  
        Test: platform/mac/accessibility/checkbox-posts-value-change-notification-after-activation-with-space.html

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2015-04-03  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use pre-computed simple line runs to produce innerText content.
        https://bugs.webkit.org/show_bug.cgi?id=143351

        Reviewed by Antti Koivisto.

        This is in preparation to cover <br> with simple line layout.
        Runs provide line layout information that can be used to cover hard line break cases.
        (similar to TextIterator::handleTextBox())

        Covered by existing tests.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::emitCharacter):
        (WebCore::TextIterator::emitText):
        * editing/TextIterator.h:
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::isEndOfLine):

2015-04-03  Antti Koivisto  <antti@apple.com>

        Add non-counting bloom filter class
        https://bugs.webkit.org/show_bug.cgi?id=143366

        Reviewed by Sam Weinig.

        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::setupParentStack):
        * css/SelectorFilter.h:

        Update names.

2015-04-03  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Gyuyoung Kim.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::openDateTimeChooser): Deleted.
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::openDateTimeChooser): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        Remove ChromeClient::openDateTimeChooser.

2015-04-03  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, fixing Clang builds of the GTK port on Linux.

        * Modules/mediastream/MediaDevices.h:
        Include the <functional> header for uses of std::function<>.

2015-04-01 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Split ReadableStream/Reader implementation according source type (JS vs native)
        https://bugs.webkit.org/show_bug.cgi?id=143130

        Reviewed by Benjamin Poulain.

        Introduce ReadableJSStream and ReadableJSStreamReader as subclasses of ReadableStream and ReadableStreamReader.
        These classes manage JS based sources: ReadableStream JS constructor instantiates ReadableJStream.
        These classes are expected to handle JS source specific handling, in particular JSValue error storage and JSValue chunk queue.
        Making ReadableStream and ReadableStreamReader abstract, to be subclassed for native sources.

        Current tests cover the changes.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::ReadableStream): Moved suspendIfNeeded inside constructor to ease subclassing.
        (WebCore::ReadableStream::create): Deleted as ReadableStream is now abstarct.
        * Modules/streams/ReadableStream.h: Made createReader virtual pure.
        * Modules/streams/ReadableStream.idl: Skipping VTable validation as subclasses of ReadableStream may be JS wrapped.
        * Modules/streams/ReadableStreamReader.cpp: Removed ReadableStreamReader::create.
        * Modules/streams/ReadableStreamReader.h: Ditto.
        * Modules/streams/ReadableStreamReader.idl: Skipping VTable validation as subclasses of ReadableStreamReader may be JS wrapped.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::constructJSReadableStream): Instantiating ReadableJSStream in lieu of ReadableStream within JS constructor.
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::ReadableJSStream::create):
        (WebCore::ReadableJSStream::createReader): Instantiating ReadableJSStreamReader.
        (WebCore::ReadableJSStream::ReadableJSStream):
        (WebCore::ReadableJSStreamReader::create):
        (WebCore::ReadableJSStreamReader::ReadableJSStreamReader):
        * bindings/js/ReadableStreamJSSource.h: Definition of ReadableJSStream and ReadableJSStreamReader.

2015-04-02  Timothy Horton  <timothy_horton@apple.com>

        Scrollbars are left in the wrong position when resizing a fixed layout view
        https://bugs.webkit.org/show_bug.cgi?id=143360

        Reviewed by Beth Dakin.

        Test: fast/fixed-layout/fixed-layout.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFrameRect):
        Update scrollbars when the ScrollView frameRect changes. We were previously
        depending on the layout that always happens after this to update scrollbars,
        but with fixed layout mode, there won't be a layout! Also, FrameView's
        setFrameRect override will sync this scrollbar update with the scrollbar
        layers (via RenderLayerCompositor::frameViewDidChangeSize) immediately afterwards.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Turn off fixed layout when resetting state.

        (WebCore::Internals::setUseFixedLayout):
        (WebCore::Internals::setFixedLayoutSize):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add internals functions to set the fixed layout size and to turn on fixed layout.

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

        Unreviewed: Reapplied Change after rollout.

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        * page/ContextMenuClient.h:
        (WebCore::ContextMenuClient::shareSelectedTextMenuItem):

        * page/ContextMenuContext.h:
        (WebCore::ContextMenuContext::setSelectedText):
        (WebCore::ContextMenuContext::selectedText):

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate): Add a Share menu item returned from the client.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):

        * platform/ContextMenuItem.cpp:
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):

        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuItem::supportsShareMenu):

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::getPlatformDescription):
        (WebCore::ContextMenuItem::supportsShareMenu):
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Use NSMenu SPI to get the Share menu.

        * platform/spi/mac/NSMenuSPI.h: Forward declare instead of #include

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

        Unreviewed, rolling out r182293.
        https://bugs.webkit.org/show_bug.cgi?id=143355

        Broke GTK and EFL builds. (Requested by bfulgham on #webkit).

        Reverted changeset:

        "Expose the "Share" menu for text selections on platforms
        where it's available."
        https://bugs.webkit.org/show_bug.cgi?id=143318
        http://trac.webkit.org/changeset/182293

2015-04-02  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION: Caption Menus show language codes instead of display names.
        https://bugs.webkit.org/show_bug.cgi?id=143350
        <rdar://problem/20094145>

        Reviewed by Jer Noble.

        The generic caption/track label handling in CaptionUserPreferences does not convert language codes
        (e.g. 'fr-CA') into display names (e.g., 'French (Canada)'). Because we did not have an AudioTrack
        override to process these types of menu items, they were being handled using the generic code.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::buildStringForTrackBase): Helper function to share code with the two flavors
        of 'trackDisplayName'.
        (WebCore::trackDisplayName): Add a version to support AudioTracks, and modify the TextTrack
        version to use the new 'buildStringForTrackBase' function.
        (WebCore::CaptionUserPreferencesMediaAF::displayNameForTrack): Add an AudioTrack override so
        our AVFoundation tracks are processed in our CaptionUserPreferencesMediaAF implementation, not the
        generic version.
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu): Add an AudioTrack override so
        that the menu items are sorted in order of display name, not language code.
        * page/CaptionUserPreferencesMediaAF.h:

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

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        Reviewed by Sam Weinig.

        * page/ContextMenuClient.h:
        (WebCore::ContextMenuClient::shareSelectedTextMenuItem):

        * page/ContextMenuContext.h:
        (WebCore::ContextMenuContext::setSelectedText):
        (WebCore::ContextMenuContext::selectedText):

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate): Add a Share menu item returned from the client.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):

        * platform/ContextMenuItem.cpp:
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):

        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuItem::supportsShareMenu):

        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::getPlatformDescription):
        (WebCore::ContextMenuItem::supportsShareMenu):
        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Use NSMenu SPI to get the Share menu.

        * platform/spi/mac/NSMenuSPI.h: Forward declare instead of #include

2015-04-02  Jer Noble  <jer.noble@apple.com>

        [Mac] Only pass in the AVURLAssetClientBundleIdentifierKey on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=143347

        Reviewed by Brent Fulgham.

        Only pass in the main app bundle id into AVURLAsset via the AVURLAssetClientBundleIdentifierKey option
        on iOS. On OS X, setting this key can cause media playback to fail.

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

2015-04-02  Roger Fong  <roger_fong@apple.com>

        Show audio media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=143346.
        <rdar://problem/20306240>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel:hover):
        Revert part of r180893.

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

        Disallow ruby base from having leading or trailing expansions
        https://bugs.webkit.org/show_bug.cgi?id=142608

        Reviewed by David Hyatt.

        If we determine that a ruby base should have either a leading or trailing expansion,
        we shunt that expansion over to the neighboring RenderText, assuming one exists. This
        requires that we teach RenderText how to force leading or trailing expansions if one
        wouldn't naturally be present.

        Tests: fast/ruby/ruby-expansion-cjk-2.html
               fast/ruby/ruby-expansion-cjk-3.html
               fast/ruby/ruby-expansion-cjk-4.html
               fast/ruby/ruby-expansion-cjk-5.html
               fast/ruby/ruby-expansion-cjk.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::removeChild): Delete contentIsKnownToFollow.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::expansionBehavior): Support forced leading and trailing
        expansions.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior): Moved to .cpp
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText): Perform relayout even if
        there are no expansions left. This is so that ruby bases with no expansions will get
        centered.
        (WebCore::expansionBehaviorForInlineTextBox): Update to inspect neighboring rubies.
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment): Use updated
        expansionBehaviorForInlineTextBox(). Also center ruby bases if they have no expansion
        opportunities.
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns): Use nullptr.
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange): Ditto.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText): Delete contentIsKnownToFollow.
        * rendering/RenderText.h:
        (WebCore::RenderText::contentIsKnownToFollow): Deleted.
        (WebCore::RenderText::setContentIsKnownToFollow): Deleted.

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

        Clean up access checks in JSHistoryCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=143227

        Reviewed by Sam Weinig.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::putDelegate):
        (WebCore::JSHistory::deleteProperty):
        (WebCore::JSHistory::deletePropertyByIndex):
        (WebCore::JSHistory::getOwnPropertyNames):
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):

2015-04-02  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Only add unique universal action locations.
        https://bugs.webkit.org/show_bug.cgi?id=143325

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Use a HashSet instead of a Vector for the universal action locations to remove duplicates.

2015-04-01  Roger Fong  <roger_fong@apple.com>

        Fix slider colors for media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=143328.
        <rdar://problem/20357858>

        Reviewed by Darin Adler.

        Fill in bottom portion of volume slider.
        Adjust colors to make slider controls look better. Will likely be tweaked later.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.drawTimelineBackground):
        (Controller.prototype.drawVolumeBackground):

2015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up EnumerationMode to easily extend
        https://bugs.webkit.org/show_bug.cgi?id=143276

        Reviewed by Geoffrey Garen.

        Use default EnumerationMode().

        * bindings/js/Dictionary.cpp:
        (WebCore::Dictionary::getOwnPropertiesAsStringHashMap):
        (WebCore::Dictionary::getOwnPropertyNames):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSFloat64Array.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):

2015-04-02  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Implement the correct paint order for blocks inside inlines.
        https://bugs.webkit.org/show_bug.cgi?id=143320

        Reviewed by Darin Adler.

        Added new tests in fast/block/inside-inlines.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.h:
        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::paint):
        (WebCore::InlineElementBox::nodeAtPoint):
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/InlineTextBox.h:
        The HitTestAction has to be passed to nodeAtPoint so that hit test actions can be honored. All the nodeAtPoint
        functions have been patched to include this argument. Painting and hit testing have been patched for InlineElementBox
        to honor phases/actions when the element is an anonymous inline block.

        The phase filter on RenderLineBoxList has been pushed in to InlineFlowBox::paint and InlineFlowBox::nodeAtPoint so that
        we can respect it properly when inlines are painting by themselves (e.g., because they have a layer).

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxes):
        (WebCore::RenderBlockFlow::constructLine):
        Go ahead and include all of the inline flow boxes between the root and the anonymous inline block if it turns out they
        need to be constructed. This will end up being relevant for outlines and for self-painting layers (e.g., opacity).

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        Remove the filters here, since they get pushed in to InlineFlowBox.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::nodeAtPoint):
        * rendering/RootInlineBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        * rendering/svg/SVGInlineTextBox.h:
        More patching to pass the HitTestAction into nodeAtPoint.

2015-04-02  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        WebRTC: Add support for Promise-based MediaDevices.getUserMedia()
        https://bugs.webkit.org/show_bug.cgi?id=143255

        Reviewed by Eric Carlson.

        The MediaDevices object collects functionality related to local media
        devices. This patch adds the Promise-based version of getUserMedia()
        (unprefixed). Other functionality, like enumerateDevices(), will be
        added in later patches.

        The old callback-based webkitGetUserMedia() (on Navigator) is kept for
        legacy purposes (according to the Media Capture and Streams API spec [1]).
        Both versions of getUserMedia are backed up by UserMediaRequest where
        the callbacks from the callback-based version are wrapped inside c++
        lambda functions. The new Promise-based getUserMedia() uses the lambda
        functions directly as created by the Promise bindings.

        [1] http://w3c.github.io/mediacapture-main/archives/20150324/getusermedia.html#navigatorusermedia-interface-extensions

        Test: fast/mediastream/MediaDevices-getUserMedia.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/MediaDevices.cpp: Added.
        (WebCore::MediaDevices::create):
        (WebCore::MediaDevices::MediaDevices):
        (WebCore::MediaDevices::~MediaDevices):
        (WebCore::MediaDevices::document):
        (WebCore::MediaDevices::getUserMedia):
        * Modules/mediastream/MediaDevices.h: Added.
        * Modules/mediastream/MediaDevices.idl: Added.
        * Modules/mediastream/NavigatorMediaDevices.cpp: Added.
        (WebCore::NavigatorMediaDevices::NavigatorMediaDevices):
        (WebCore::NavigatorMediaDevices::~NavigatorMediaDevices):
        (WebCore::NavigatorMediaDevices::from):
        (WebCore::NavigatorMediaDevices::mediaDevices):
        (WebCore::NavigatorMediaDevices::supplementName):
        * Modules/mediastream/NavigatorMediaDevices.h: Added.
        * Modules/mediastream/NavigatorMediaDevices.idl: Added.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError):
        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError):
        * Modules/mediastream/UserMediaRequest.h:
        * PlatformGTK.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMediaDevicesCustom.cpp: Added.
        (WebCore::JSMediaDevices::getUserMedia):

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

        [iOS] Fix AirPlay problem caused by r182240
        https://bugs.webkit.org/show_bug.cgi?id=143337

        Reviewed by Jer Noble.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::wirelessVideoPlaybackDisabled): Return false if the legacy attribute
            "x-webkit-airplay" has the value "allow".
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Don't call webkitWirelessVideoPlaybackDisabled when
            processing "x-webkit-airplay" and "x-webkit-wirelessvideoplaybackdisabled", just consider
            the attribute/value.

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

        Unreviewed, rolling out r182265.
        https://bugs.webkit.org/show_bug.cgi?id=143338

        Caused an assertion on
        http/tests/contentextensions/whitelist.html (Requested by ap
        on #webkit).

        Reverted changeset:

        "[Content Extensions] Only add unique universal action
        locations."
        https://bugs.webkit.org/show_bug.cgi?id=143325
        http://trac.webkit.org/changeset/182265

2015-04-01  Antti Koivisto  <antti@apple.com>

        Use std::chrono types to represent time in response and cache classes
        https://bugs.webkit.org/show_bug.cgi?id=143316

        Reviewed by Andreas Kling.

        Use std::chrono::system_clock::time_point to represent clock times and std::chrono::microseconds to
        represent durations. Also use WTF::Optional for optional values (instead of coding them as NaNs).

        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::freshnessLifetime):
        (WebCore::CachedResource::responseReceived):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * loader/cache/CachedResource.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        (WebCore::updateRedirectChainStatus):
        (WebCore::redirectChainAllowsReuse):
        (WebCore::parseCacheControlDirectives):
        * platform/network/CacheValidation.h:
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPDate):
        (WebCore::parseDate): Deleted.
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::cacheControlMaxAge):
        (WebCore::parseDateValueInHeader):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        * platform/network/ResourceResponseBase.h:

2015-04-02  Joonghun Park  <jh718.park@samsung.com>

        [CSS MultiColumn] Parse "columns: auto <length>" shorthand property value properly
        https://bugs.webkit.org/show_bug.cgi?id=143248

        Reviewed by Darin Adler.

        Test: fast/multicol/columns-shorthand-parsing-2.html

        The two longhands for the 'columns' property ('column-count' and
        'column-width') may both take 'auto' as a value. When we encounter
        'auto' during parsing the value list of a declaration, we cannot just
        make a guess at which property/properties that's meant for. Instead,
        don't assign anything to 'auto' right away, but wait until all values
        have been processed and at that point set the still unassigned
        properties to 'auto'. If 'auto' isn't in the value list at all, set
        unassigned properties to 'initial' for the 'columns' property, just
        like we do for any other property.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColumnWidth):
        (WebCore::CSSParser::parseColumnCount):
        (WebCore::CSSParser::parseColumnsShorthand):
        * css/CSSParser.h:

2015-04-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182247.
        https://bugs.webkit.org/show_bug.cgi?id=143326

        unfortunately broke some tests (Requested by dino on #webkit).

        Reverted changeset:

        "Async loading of image resources"
        https://bugs.webkit.org/show_bug.cgi?id=134488
        http://trac.webkit.org/changeset/182247

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Only add unique universal action locations.
        https://bugs.webkit.org/show_bug.cgi?id=143325

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Use a HashSet instead of a Vector for the universal action locations to remove duplicates.

2015-04-01  Roger Fong  <roger_fong@apple.com>

        Fixes to material of inline media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=143317
        <rdar://problem/20357847>

        Reviewed by Dean Jackson.

        There are many existing tests for the media controls appearance.
        They are currently skipped while we are still updating the controls.

        Expand backgrounds of control panel and volume box.
        Clip the darker edges away.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-panel-background-container):
        (audio::-webkit-media-controls-panel-tint):
        (audio::-webkit-media-controls-panel-background):
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-volume-slider-container-background):
        (audio::-webkit-media-controls-volume-slider-container-tint):
        (audio::-webkit-media-controls-panel .volume-box:active):
        (video::-webkit-media-controls-volume-slider): 
        This needs to be above the background so it can be interacted with.
        (video:-webkit-full-screen::-webkit-media-controls-panel .volume-box):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Create a new div for the control material.
        We need to clip the material and not the controls themselves.
        (Controller.prototype.configureInlineControls): Use new div.
        Remove some unnecessary logic involving hiding materials here.
        It just causes the materials to turn on and off at the wrong times. 
        (Controller.prototype.handlePanelTransitionEnd):
        (Controller.prototype.setPlaying):
        (Controller.prototype.showControls):
        (Controller.prototype.hideControls):

2015-04-01  Eric Carlson  <eric.carlson@apple.com>

        Media controls should not always auto-hide
        https://bugs.webkit.org/show_bug.cgi?id=143322

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Intialize new properties.
        (Controller.prototype.hideControls): Do nothing if controlsAlwaysVisible() returns true;
        (Controller.prototype.controlsAlwaysVisible): New.
        (Controller.prototype.controlsAreHidden): Consult controlsAlwaysVisible().
        (Controller.prototype.currentPlaybackTargetIsWireless): Use new properties.
        (Controller.prototype.updateWirelessTargetAvailable): Cache video.webkitCurrentPlaybackTargetIsWireless
            and video.webkitWirelessVideoPlaybackDisabled because we know when they change and
            use them frequently.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.controlsAlwaysVisible): New.
        * platform/graphics/MediaPlaybackTarget.h:

2015-04-01  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r182121): SVG animation macros cause warnings in MSVC
        https://bugs.webkit.org/show_bug.cgi?id=143313

        Reviewed by Darin Adler.

        * svg/SVGExternalResourcesRequired.h: Undo the change that caused a type mismatch.

2015-04-01  Eric Carlson  <eric.carlson@apple.com>

        Another attempt to fixi the iOS build after r182240.

        Reviewed by Dean Jackson.

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::MediaPlaybackTarget::hasActiveRoute):

2015-04-01  Eric Carlson  <eric.carlson@apple.com>

        Fix the iOS build after r182240.

        * platform/graphics/MediaPlaybackTarget.h:

2015-04-01  Yoav Weiss  <yoav@yoav.ws>

        Async loading of image resources
        https://bugs.webkit.org/show_bug.cgi?id=134488

        Reviewed by Dean Jackson.

        This patch changes image loading to be asynchronous (per spec), in order
        for it to be agnostic to property setting order when it comes to src, srcset and crossorigin,
        as well as to enable future hooking of the <picture>-based selection logic on top of it.

        Tests: fast/dom/HTMLImageElement/image-load-post-onload.html
        fast/dom/HTMLImageElement/sizes/image-sizes-js-change-reverse.html

        * WebCore.xcodeproj/project.pbxproj: Change MicroTask.h to be private.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Add a microtask checkpoint after event handling.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute): Add a microtask checkpoint after running of a scheduled action.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::didMoveToNewDocument): Add the old document to call of elementDidMoveToNewDocument.
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished): Avoid a crash when notifyFinished is called and there's no CachedImage.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::didMoveToNewDocument): Add the old document to call of elementDidMoveToNewDocument.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didMoveToNewDocument): Add the old document to call of elementDidMoveToNewDocument.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didMoveToNewDocument): Add the old document to call of elementDidMoveToNewDocument.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd): Add a microtask checkpoint.
        * loader/ImageLoader.cpp: Move image resource loading to be asynchronous.
        (WebCore::ImageLoader::ImageLoaderTask::create):
        (WebCore::ImageLoader::ImageLoaderTask::run): Run the image loading microtask and called doUpdateFromElement.
        (WebCore::ImageLoader::ImageLoaderTask::ImageLoaderTask):
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::doUpdateFromElement): This is split from the previous updateFromElement, and performs the actual resource loading.
        (WebCore::ImageLoader::updateFromElement): Now only prepares the stage for the actual image resource loading.
        (WebCore::ImageLoader::shouldLoadImmediately): If this returns true, the image resource is loaded immediately, without queueing a microtask.
        (WebCore::ImageLoader::notifyFinished): Add asserts.
        (WebCore::ImageLoader::elementDidMoveToNewDocument): Handle document load event counters decrementing and incrementing.
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::imageComplete): Make sure that the image is complete only if there aren't any pending tasks.
        (WebCore::ImageLoader::hasPendingActivity): Make sure that pending activity takes pending tasks into account.
        (WebCore::ImageLoader::hasPendingTask): Getter to know if an ImageLoader has a pending task. (Used by the image loading microtask)
        (WebCore::ImageLoader::createWeakPtr): Create a weakPtr to be used by the microtask, so it can called back the loader if it's still alive.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag and act upon it.
        (WebCore::CachedResourceLoader::requestImage): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag.
        (WebCore::CachedResourceLoader::requestResource): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag.
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::canRequest): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag and act upon it.
        (WebCore::CachedResourceLoader::requestImage): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag.
        (WebCore::CachedResourceLoader::requestResource): Add a 'shouldBypassMainWorldContentSecurityPolicy' flag.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didMoveToNewDocument): Add the old document to call of elementDidMoveToNewDocument.
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end): Add a microtask checkpoint after XML finishes parsing.

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix when using content extensions performance reporting.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Time how long it takes to build the DFAs.

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Windows and Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143293

        Reviewed by Filip Pizlo.

        * PlatformMac.cmake:
        Tell open source builders where to find unicode headers.
        * PlatformWin.cmake:
        Include PlatformWinCairo.cmake.
        * PlatformWinCairo.cmake:
        Added from bug 115944 by Patrick Gansterer.
        * bindings/js/JSDOMStringListCustom.cpp:
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSMessageChannelCustom.cpp:
        * bindings/js/JSPopStateEventCustom.cpp:
        * bindings/js/JSReadableStreamCustom.cpp:
        * bindings/js/ReadableStreamJSSource.cpp:
        * bindings/js/ScriptController.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * dom/Attr.cpp:
        * dom/CollectionIndexCache.cpp:
        * platform/graphics/ANGLEWebKitBridge.h:
        Fixed include quirks.

2015-03-31  Simon Fraser  <simon.fraser@apple.com>

        Remove scrolling tree dependency on wheel event handler counts, and use fast scrolling even when there are wheel handlers
        https://bugs.webkit.org/show_bug.cgi?id=143288
        rdar://problem/16049624

        Reviewed by Beth Dakin.

        Remove the wheel event counting that Document does, and passes into the scrolling tree.
        The ScrollingTree now just uses the non-fast scrollable region to determine when to
        fast scroll on pages with wheel event handlers.
        
        If a handler includes position:fixed renderers, we just cover the whole document
        with the slow-scrolling region currently. This could be improved.
        
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::wheelEventHandlersChanged):
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):
        (WebCore::Document::wheelEventHandlerCount):
        (WebCore::Document::touchEventHandlerCount):
        (WebCore::Document::absoluteRegionForEventTargets): Changed to return a pair<Region, bool>
        where the bool indicates whether any handler includes position:fixed content.
        (WebCore::pageWheelEventHandlerCountChanged): Deleted.
        (WebCore::wheelEventHandlerCountChanged): Deleted.
        * dom/Document.h:
        (WebCore::Document::wheelEventHandlerCount): Deleted.
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/DebugPageOverlays.cpp:
        (WebCore::MouseWheelRegionOverlay::updateRegion):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::computeCurrentWheelEventHandlerCount): Deleted.
        (WebCore::ScrollingCoordinator::frameViewWheelEventHandlerCountChanged): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setWheelEventHandlerCount): Deleted.
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateTiledScrollingIndicator):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):
        (WebCore::logWheelEventHandlerCountChanged): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::touchEventHandlerCount):

2015-04-01  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Floats need to be allowed to intrude into anonymous inline-blocks.
        https://bugs.webkit.org/show_bug.cgi?id=143307

        Reviewed by Dean Jackson.

        Added fast/block/inside-inlines/basic-float-intrusion.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        Make sure to exclude the margins of an anonymous inline-block when considering the height of the line.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight):
        (WebCore::RenderBlock::baselinePosition):
        Anonymous inline-block lines ignore line-height and just return the height of the block. For baseline position, the baseline
        is considered to be at the bottom border edge of the anonymous inline-block.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::addIntrudingFloats):
        * rendering/RenderBlockFlow.h:
        Patch float intrusion to handle the case of anonymous inline-blocks. Instead of collecting the floats from our parent(), we
        collect them from the containingBlock() in the anonymous inline-block case. Patch addIntrudingFloats to pass in the container
        that acts as the "parent", since it is not the parent() in the anonymous inline-block case.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        Make sure to use the full available width for content always in the anonymous inline-block case, since we don't avoid the
        floats, but instead let them intrude into the inline-block.

        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        Patch callers of updateLogicalInlinePositions to pass in the root line box that we're checking for.

        (WebCore::RenderBlockFlow::layoutLineBoxes):
        Defer the layout of anonymous inline-blocks, since they need to only lay out once the vertical position to lay them out
        at is known.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createsNewFormattingContext):
        (WebCore::RenderBox::avoidsFloats):
        Anonymous inline-blocks do not establish a new block formatting context, nor do they avoid floats.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleReplaced):
        Add code to do a just-in-time layout of the anonymous inline-block at the time it is being examined (after the break before
        it was handled).

2015-04-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Do not include route button if element does not support target playback
        https://bugs.webkit.org/show_bug.cgi?id=143251

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.currentPlaybackTargetIsWireless): Return false if target playback is disabled.
        (Controller.prototype.updateWirelessTargetAvailable): Do not show the picker if target 
            playback is disabled.
        (Controller.prototype.handleWirelessPlaybackChange): Call updateWirelessTargetAvailable.

        * dom/Document.cpp:
        (WebCore::Document::showPlaybackTargetPicker): Update for Page::showPlaybackTargetPicker change.
        (WebCore::Document::didChoosePlaybackTarget): Notify clients in vector-order, lower level code
            now tracks which one requested the picker.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Don't call applyMediaPlayerRestrictions, it is done
            in mediaPlayerEngineFailedToLoad.
        (WebCore::HTMLMediaElement::setReadyState): Enqueue a target availability event if there are
            listeners readyState reaches HAVE_METADATA so controls are setup correctly.
        (WebCore::HTMLMediaElement::mediaPlayerEngineFailedToLoad): Call applyMediaPlayerRestrictions.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Enqueue a target availability event in so controls
            have a chance to hide the picker.
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsSupported): New, passthrough to the
            media engine.
        (WebCore::HTMLMediaElement::canPlayToWirelessPlaybackTarget): Ditto.
        (WebCore::HTMLMediaElement::startPlayingToPlaybackTarget): Ditto.
        (WebCore::HTMLMediaElement::stopPlayingToPlaybackTarget): Ditto.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession): Initialize m_playbackTarget.
        (WebCore::HTMLMediaSession::currentPlaybackTargetIsSupported): New.
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker): Pull logic from showingPlaybackTargetPickerPermitted 
            inline. Don't refuse to show a picker if the element doesn't support target playback, it is up
            to script to decide which elements can display a picker.
        (WebCore::HTMLMediaSession::wirelessVideoPlaybackDisabled): Return true if there is no player.
        (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Call startPlayingToPlaybackTarget or 
            stopPlayingToPlaybackTarget because setWirelessPlaybackTarget doesn't apply the target.
        (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange): Add logging.
        (WebCore::HTMLMediaSession::showingPlaybackTargetPickerPermitted): Deleted.
        * html/HTMLMediaSession.h:

        * page/Page.cpp:
        (WebCore::Page::Page): Initialize m_playbackTarget.
        (WebCore::Page::showPlaybackTargetPicker): Don't set m_documentRequestingPlaybackTargetPicker.
        (WebCore::Page::didChoosePlaybackTarget): Notify Pages in vector-order, lower level code
            now tracks which one requested the picker.
        (WebCore::Page::configurePlaybackTargetMonitoring): Don't track m_requiresPlaybackTargetMonitoring, it
            is too easy for it to get out of sync with the UI process state.
        * page/Page.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::canPlayToWirelessPlaybackTarget): New, client passthrough.
        (WebCore::MediaSession::startPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaSession::stopPlayingToPlaybackTarget): Ditto.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::canPlayToWirelessPlaybackTarget):
        (WebCore::MediaSessionClient::startPlayingToPlaybackTarget):
        (WebCore::MediaSessionClient::stopPlayingToPlaybackTarget):

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Call startPlayingToPlaybackTarget &
            stopPlayingToPlaybackTarget as necessary.
        * platform/audio/MediaSessionManager.h:

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::MediaPlaybackTarget::hasActiveRoute): New.
        * platform/graphics/MediaPlaybackTargetPickerClient.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::isCurrentPlaybackTargetSupported): New, engine passthrough.
        (WebCore::MediaPlayer::canPlayToWirelessPlaybackTarget): Ditto.
        (WebCore::MediaPlayer::startPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayer::stopPlayingToPlaybackTarget): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::isCurrentPlaybackTargetSupported):
        (WebCore::MediaPlayerPrivateInterface::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::canPlayToWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateInterface::startPlayingToPlaybackTarget):
        (WebCore::MediaPlayerPrivateInterface::stopPlayingToPlaybackTarget):

        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        (WebCore::MediaPlaybackTarget::hasActiveRoute): New.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayToWirelessPlaybackTarget):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Use playerKVOProperties. Drive-by
            code cleanup.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Use playerKVOProperties.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName): Implement for Mac.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled): Delay callbacks
            while setting AVPlayer property.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Add logging. Don't set
            the AVPlayer outputContext immediately.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::startPlayingToPlaybackTarget): New.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::stopPlayingToPlaybackTarget): New.
        (WebCore::playerKVOProperties): New.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Notify when
            allowsExternalPlayback changes.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isCurrentPlaybackTargetSupported): New.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setWirelessPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::togglePlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::stopPlayingToPlaybackTarget): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::isCurrentPlaybackTargetSupported): Ditto.
        (WebCore::MediaPlayerPrivateQTKit::setWirelessPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateQTKit::togglePlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateQTKit::startPlayingToPlaybackTarget): Ditto.
        (WebCore::MediaPlayerPrivateQTKit::stopPlayingToPlaybackTarget): Ditto.

2015-04-01  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Properly handle regexes that match everything.
        https://bugs.webkit.org/show_bug.cgi?id=143281

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Make sure we always have at least one NFA for rule lists with triggers that all match everything.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretAppendAction):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpretTestFlagsAndAppendAction):
        Add helper functions to reduce duplicate code.
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        Get all actions without flags from the DFA root.
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Remove branches when interpreting.
        * contentextensions/DFABytecodeInterpreter.h:
        Add helper functions to reduce duplicate code.

2015-04-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments.
        https://bugs.webkit.org/show_bug.cgi?id=143292

        Unreviewed.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::leadingExpansionOpportunity):
        (WebCore::FontCascade::trailingExpansionOpportunity):

2015-04-01  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Link errors, unresolved texture mapper methods.
        https://bugs.webkit.org/show_bug.cgi?id=143308

        Reviewed by Alex Christensen.

        New texture mapper files should be included in the project.

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

2015-04-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Support forcing expansion opportunities at the beginning and ending of a run
        https://bugs.webkit.org/show_bug.cgi?id=143292

        Reviewed by David Hyatt.

        Migrate ExpansionBehavior to an enum comprised of two values: one for leading behavior
        and one for trailing behavior. Each of these two values can take on a value of
        "force," "forbid," and neither. All calls that interact with justification are
        migrated to use this new structure.

        Note that in this terminology, "leading" and "trailing" are with respect to the order
        that elements get laid out in a line. Therefore, leading is always on the left, since
        lines get laid out that way regardless of their bidi attributes.

        This is getting ready for https://bugs.webkit.org/show_bug.cgi?id=142608

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::expansionOpportunityCountInternal): Migrate to these new
        values.
        (WebCore::FontCascade::expansionOpportunityCount): Ditto.
        (WebCore::FontCascade::leadingExpansionOpportunity): Returns whether one is present
        or not.
        (WebCore::FontCascade::trailingExpansionOpportunity): Ditto.
        * platform/graphics/FontCascade.h:
        * platform/graphics/GlyphBuffer.h: New leading expansion field.
        (WebCore::GlyphBuffer::setLeadingExpansion):
        (WebCore::GlyphBuffer::leadingExpansion):
        * platform/graphics/TextRun.h: m_expansionBehavior needs more bits.
        (WebCore::TextRun::expansionBehavior):
        (WebCore::TextRun::allowsLeadingExpansion): Deleted.
        (WebCore::TextRun::allowsTrailingExpansion): Deleted.
        * platform/graphics/WidthIterator.cpp: Update to support new type.
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::expansionLocation): Where should we insert expansions?
        (WebCore::WidthIterator::advanceInternal): Use expansionLocation()
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::adjustSelectionRectForComplexText):
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText):
        * platform/graphics/mac/ComplexTextController.cpp: Same as WidthIterator
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::advance):
        (WebCore::expansionLocation):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::leadingExpansion):
        * platform/text/TextFlags.h: Add new enum values
        * rendering/InlineBox.h: Update to include new values.
        (WebCore::InlineBox::InlineBoxBitfields::InlineBoxBitfields):
        (WebCore::InlineBox::canHaveTrailingExpansion):
        (WebCore::InlineBox::setCanHaveTrailingExpansion):
        (WebCore::InlineBox::setForceTrailingExpansion):
        (WebCore::InlineBox::forceTrailingExpansion):
        (WebCore::InlineBox::setForceLeadingExpansion):
        (WebCore::InlineBox::forceLeadingExpansion):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockLineLayout.cpp: Update to use new FontCascade signatures.
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::applyExpansionBehavior):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):

2015-04-01  Zalan Bujtas  <zalan@apple.com>

        Lots of time spent querying table cell borders, when there are none.
        https://bugs.webkit.org/show_bug.cgi?id=143277

        Reviewed by Simon Fraser.

        This patch speeds up collapsed border queries by using existing collapsed border
        cache to calculate repaint rects and by introducing a fast path for zero width collapsed borders.

        It reduces the number of calls to recompute collapsed borders from 36 000 to 1 600, while loading a page with a table of 400 rows (1 cell per row).
        When scrolling the same page all the way down to the bottom, the number of calls to recompute collapsed borders falls from 290 000 to 0.

        Covered by existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange): This moves invalidation time from RenderTable::layout() to styleDidChange(). 
        (WebCore::RenderTable::invalidateCollapsedBorders):
        (WebCore::RenderTable::recalcCollapsedBorders):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::collapsedBordersAreValid):
        (WebCore::RenderTable::invalidateCollapsedBorders): Deleted.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::willBeRemovedFromTree): Invalidate caches so that when repaint rect is calculated, we don't end up using stale values.
        (WebCore::RenderTableCell::styleDidChange): Same as willBeRemovedFromTree.
        (WebCore::RenderTableCell::collapsedStartBorder): Check if collapsed border is zero -also query cache. 
        (WebCore::RenderTableCell::collapsedEndBorder):
        (WebCore::RenderTableCell::collapsedBeforeBorder):
        (WebCore::RenderTableCell::collapsedAfterBorder):
        (WebCore::RenderTableCell::cachedCollapsedLeftBorder):
        (WebCore::RenderTableCell::cachedCollapsedRightBorder):
        (WebCore::RenderTableCell::cachedCollapsedTopBorder):
        (WebCore::RenderTableCell::cachedCollapsedBottomBorder):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::cellAtLeft): Deleted.
        (WebCore::RenderTableCell::cellAtRight): Deleted.
        (WebCore::RenderTableCell::cellAtTop): Deleted.
        (WebCore::RenderTableCell::cellAtBottom): Deleted.
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::invalidateHasEmptyCollapsedBorders):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::styleDidChange):
        (WebCore::RenderTableSection::clearCachedCollapsedBorders): This is just an extra safety to invalidate collapsed border cache. This is always
        called together with RenderTable::invalidateCollapsedBorders() -and that should prevent the RenderCells to use the cache.  
        (WebCore::RenderTableSection::removeCachedCollapsedBorders):
        (WebCore::RenderTableSection::setCachedCollapsedBorder):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderTableSection.h:

2015-04-01  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake][GTK] Use the right variable to include the Wayland headers.
        https://bugs.webkit.org/show_bug.cgi?id=143304

        Reviewed by Carlos Garcia Campos.

        No new tests, no behavior changes.

        * PlatformGTK.cmake: Use the right variable WAYLAND_INCLUDE_DIRS.

2015-03-30  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Move synchronous message handler to MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=143218

        Reviewed by Carlos Garcia Campos.

        Moved the pipeline pointer to the base class, sub-classes should
        now invoke setPipeline() when loading a resource. The base class
        now takes care of configuring the GL shared context, this is more
        logical because video rendering is also managed by this class.

        No new tests, this is only a code refactoring.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::pause):
        (WebCore::MediaPlayerPrivateGStreamer::duration):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::paused):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamer::cancelLoad):
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):
        (WebCore::MediaPlayerPrivateGStreamer::cacheDuration):
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering):
        (WebCore::MediaPlayerPrivateGStreamer::audioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        (WebCore::MediaPlayerPrivateGStreamer::simulateAudioInterruption):
        (WebCore::mediaPlayerPrivateSyncMessageCallback): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): Deleted.
        (WebCore::MediaPlayerPrivateGStreamer::ensureGstGLContext): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::mediaPlayerPrivateNeedContextMessageCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::setPipeline):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleNeedContextMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2015-03-24  Philippe Normand  <philn@igalia.com>

        [GStreamer] GstGL support in the video sink
        https://bugs.webkit.org/show_bug.cgi?id=138562

        Use GStreamer's glimagesink for video rendering instead of our
        custom video sink if a recent-enough version of GstGL is found
        during the build. When glimagesink is used it passes a texture to
        the media player which then wraps it inside a TextureMapper
        texture later used for actual rendering.

        Using this new code path will allow us to remove our custom sink
        entirely in the long term.

        Reviewed by Carlos Garcia Campos.

        No new test, existing media tests cover video rendering already.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::mediaPlayerPrivateDrawCallback): client-draw signal callback.
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize): Better
        check for sample validity.
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint): Trigger a
        repaint and wait its completion.
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToTextureMapper):
        Extract texture ID and video dimensions from the sample and do actual paint.
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink): Use
        glimagesink if GstGL is available.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2015-04-01  Joonghun Park  <jh718.park@samsung.com>

        nullptr cleanup in StyleResolver
        https://bugs.webkit.org/show_bug.cgi?id=143260

        Reviewed by Ryosuke Niwa.

        No new tests, no behavior changes

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::findFromMatchedPropertiesCache):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyPropertyToStyle):
        (WebCore::StyleResolver::MatchedProperties::MatchedProperties):
        * css/StyleResolver.h:
        (WebCore::PseudoStyleRequest::PseudoStyleRequest):
        (WebCore::StyleResolverParentPusher::StyleResolverParentPusher):

2015-03-31  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to compute a region for elements on the page that have wheel event handlers
        https://bugs.webkit.org/show_bug.cgi?id=142807

        Reviewed by David Hyatt.
        
        Make it possible to compute a region that covers the elements on the page that have
        a wheel event handler. This region may overestimate, but must not underestimate the area.
        
        Elements with wheel handlers are registered on the document, and when a document gains
        its first wheel handler, it registers the ownerElement in the parent document. Thus, on 
        the main frame, the region encompasses elements with handlers, and iframes whose subdocuments
        have handlers.
        
        Element gains some functions that allow it to return a rect which is the bounds of the element's
        renderer, and renders for its descendant elements, which is the size or larger than the event
        handling region for that element. Some configurations (e.g. position:fixed) require special
        treatment.
        
        Document::absoluteRegionForEventTargets() can then iterate over all elements in the given set,
        and build a Region for those (short-circuiting if the document itself has a handler).
        
        The new code is exercised for the debug MouseWheelRegionOverlay, and also added to the
        non-fast scrollable region, used by threaded scrolling.

        Tests: platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/handlers-in-iframes.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-fixed-child.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-in-columns.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-in-region.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-inside-fixed.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-on-document.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-on-fixed.html
               platform/mac-wk2/tiled-drawing/scrolling/non-fast-region/wheel-handler-region-basic.html

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::absoluteEventHandlerBounds): Base class implementation; returns empty rect.
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Unregister from the parent document.
        (WebCore::Document::didAddWheelEventHandler): Add to the wheel handler set. Tell the parent
        document if we are adding wheel handlers for the first time. Eventually the wheelEventHandlerCountChanged()
        code will be removed, now we have the set. Tell debug overlays that we changed.
        (WebCore::Document::didRemoveWheelEventHandler): Remove from the set, and unregister with the parent
        document if necessary. Tell debug overlays that we changed.
        (WebCore::Document::didAddTouchEventHandler): Minor cleanup.
        (WebCore::Document::didRemoveTouchEventHandler): Ditto.
        (WebCore::Document::didRemoveEventTargetNode): Remove from wheel targets.
        (WebCore::Document::absoluteEventHandlerBounds): Implementation of the ContainerNode
        function, just return the document bounds.
        (WebCore::Document::absoluteRegionForEventTargets): Iterate over the given event targets,
        and call absoluteEventHandlerBounds() on each.
        * dom/Document.h:
        (WebCore::Document::wheelEventTargets):
        * dom/Element.cpp:
        (WebCore::layoutOverflowRectContainsAllDescendants): Return true if we can determine that the
        layoutOverflow bounds of the given renderer contains the renderers of all descendant elements.
        (WebCore::Element::eventBounds): Get the "event handling" bounds of this element (excluding
        descendants), and while doing so, compute whether any descendants are position:fixed, and whether
        these bounds are known to include descendants.
        (WebCore::Element::eventBoundsOfElementAndDescendants): Recursive function that short-circuits
        if it can determine that descendants are enclosed by the bounds.
        (WebCore::Element::absoluteEventHandlerBounds):
        * dom/Element.h:
        * page/DebugPageOverlays.cpp:
        (WebCore::MouseWheelRegionOverlay::updateRegion): Ask the document for the region of wheel
        event handlers.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion): Add the wheel handler region
        to the non-fast scrollable region.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Overflow scrolling needs to dirty event regions.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRect): Need to pass the "wasFixed" flag out
        of this function.
        (WebCore::RenderObject::localToAbsolute): Ditto.
        * rendering/RenderObject.h:

2015-03-31  Alexey Proskuryakov  <ap@apple.com>

        Fix bindings tests results after <http://trac.webkit.org/changeset/182205>.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjReplaceableAttribute):

2015-03-31  Benjamin Poulain  <bpoulain@apple.com>

        Content Extensions: split the state machines to minimize prefix states
        https://bugs.webkit.org/show_bug.cgi?id=143253

        Reviewed by Alex Christensen.

        With this patch, we refine how the URLs are partitioned to make
        multiple small machines instead of a big one.

        Here, considering each pattern as a language, I took the simplest
        partitioning: take the union minimizing the states
        that differentiate languages.

        The idea is the following: every time a subgraph can be skipped
        or repeated, it is an opportunity for a merged language to start
        with a distinguishable state.
        To avoid accumulating those differences, we only merge languages
        that share the exact same "variable" subgraph as a prefix.

        A side effect is that we could create as many machines as we have patterns.
        We'll have to address that in a follow-up by merging small machines
        until they reach a certain size.
        In the common cases, patterns look very much alike so that is not a problem
        at the moment.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/CombinedURLFilters.cpp: Added.
        I moved the prefix tree and graph construction out of URLFilterParser for clarity.

        CombinedURLFilters maintain the term prefix tree. Instead of generating on the fly
        as we build the prefix tree, we first generate the entire tree of terms, then generate
        NFAs for each branch without a variable prefix.

        (WebCore::ContentExtensions::CombinedURLFilters::CombinedURLFilters):
        (WebCore::ContentExtensions::CombinedURLFilters::~CombinedURLFilters):

        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        Note here that we keep track of which subtree contains a any variable length term.
        Instead of anotating the edges, the destination vertex is anotated with the information
        from the edge.

        The flag "inVariableLengthPrefix" is there to simplify traversal.

        (WebCore::ContentExtensions::generateNFAForSubtree):
        (WebCore::ContentExtensions::CombinedURLFilters::createNFAs):
        Since we are traversing a tree generated by string, using the stack for recursion
        is out of the question.

        Fortunately, the entire state is very simple when going depth first: we only need
        the active vertex and edge, and traverse the edges in order.

        To do keep track of the edges, I used the HashTable iterator on the current term.
        Since no vertex is modified for generation, storing the iterators is safe.

        * contentextensions/CombinedURLFilters.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::setActions):
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        (WebCore::ContentExtensions::NFA::setFinal): Deleted.
        (WebCore::ContentExtensions::NFA::addRuleId): Deleted.
        * contentextensions/NFA.h:
        * contentextensions/NFAGraphBuilder.cpp: Added.
        * contentextensions/NFAGraphBuilder.h: Added.
        * contentextensions/NFANode.h:
        * contentextensions/Term.h: Added.
        Move the Term to its own file since it is now shared between the parser
        and the CombinedURLFilters.

        (WebCore::ContentExtensions::Term::CharacterSet::operator==):
        (WebCore::ContentExtensions::Term::CharacterSet::hash):
        (WebCore::ContentExtensions::Term::Group::operator==):
        (WebCore::ContentExtensions::Term::Group::hash):
        (WebCore::ContentExtensions::TermHash::hash):
        (WebCore::ContentExtensions::TermHash::equal):
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::~Term):
        (WebCore::ContentExtensions::Term::isValid):
        (WebCore::ContentExtensions::Term::addCharacter):
        (WebCore::ContentExtensions::Term::extendGroupSubpattern):
        (WebCore::ContentExtensions::Term::quantify):
        (WebCore::ContentExtensions::Term::Term::generateGraph):
        (WebCore::ContentExtensions::Term::isEndOfLineAssertion):
        (WebCore::ContentExtensions::Term::matchesAtLeastOneCharacter):
        (WebCore::ContentExtensions::Term::isKnownToMatchAnyString):
        (WebCore::ContentExtensions::Term::hasFixedLength):
        (WebCore::ContentExtensions::Term::operator=):
        (WebCore::ContentExtensions::Term::operator==):
        (WebCore::ContentExtensions::Term::hash):
        (WebCore::ContentExtensions::Term::isEmptyValue):
        (WebCore::ContentExtensions::Term::isDeletedValue):
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        (WebCore::ContentExtensions::Term::destroy):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::PatternParser):
        (WebCore::ContentExtensions::PatternParser::finalize):
        (WebCore::ContentExtensions::PatternParser::assertionBOL):
        (WebCore::ContentExtensions::URLFilterParser::URLFilterParser):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        (WebCore::ContentExtensions::Term::Term): Deleted.
        (WebCore::ContentExtensions::Term::~Term): Deleted.
        (WebCore::ContentExtensions::Term::isValid): Deleted.
        (WebCore::ContentExtensions::Term::addCharacter): Deleted.
        (WebCore::ContentExtensions::Term::extendGroupSubpattern): Deleted.
        (WebCore::ContentExtensions::Term::quantify): Deleted.
        (WebCore::ContentExtensions::Term::generateGraph): Deleted.
        (WebCore::ContentExtensions::Term::isEndOfLineAssertion): Deleted.
        (WebCore::ContentExtensions::Term::matchesAtLeastOneCharacter): Deleted.
        (WebCore::ContentExtensions::Term::isKnownToMatchAnyString): Deleted.
        (WebCore::ContentExtensions::Term::operator=): Deleted.
        (WebCore::ContentExtensions::Term::operator==): Deleted.
        (WebCore::ContentExtensions::Term::hash): Deleted.
        (WebCore::ContentExtensions::Term::isEmptyValue): Deleted.
        (WebCore::ContentExtensions::Term::isDeletedValue): Deleted.
        (WebCore::ContentExtensions::Term::isUniversalTransition): Deleted.
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom): Deleted.
        (WebCore::ContentExtensions::Term::destroy): Deleted.
        (WebCore::ContentExtensions::Term::CharacterSet::operator==): Deleted.
        (WebCore::ContentExtensions::Term::CharacterSet::hash): Deleted.
        (WebCore::ContentExtensions::Term::Group::operator==): Deleted.
        (WebCore::ContentExtensions::Term::Group::hash): Deleted.
        (WebCore::ContentExtensions::TermHash::hash): Deleted.
        (WebCore::ContentExtensions::TermHash::equal): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::finalize): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::assertionBOL): Deleted.
        * contentextensions/URLFilterParser.h:

2015-03-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Move ExpansionBehaviorFlags and TextDirection to their own file
        https://bugs.webkit.org/show_bug.cgi?id=143273

        Reviewed by Simon Fraser.

        This is a mechanical change. It just moves code around.

        This is getting ready for https://bugs.webkit.org/show_bug.cgi?id=142608

        No new tests because there is no behavior change.

        * Modules/notifications/Notification.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSProperty.h:
        * dom/Position.h:
        * editing/VisiblePosition.h:
        * editing/VisibleUnits.h:
        * editing/htmlediting.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/LengthBox.h:
        * platform/PopupMenuStyle.h:
        * platform/graphics/FontCascade.h:
        * platform/graphics/LayoutBoxExtent.h:
        * platform/graphics/TextRun.h:
        * platform/ios/SelectionRect.h:
        * platform/text/BidiResolver.h:
        * platform/text/StringWithDirection.h:
        * platform/text/TextHelpers.h: Renamed from Source/WebCore/platform/text/TextDirection.h.
        (WebCore::isLeftToRightDirection):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.h:
        * rendering/InlineBox.h:
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::updateOptionsWidth):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAverageCharWidth):
        * rendering/RenderThemeIOS.mm:
        * rendering/style/RenderStyle.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):

2015-03-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up Identifier factories to clarify the meaning of StringImpl*
        https://bugs.webkit.org/show_bug.cgi?id=143146

        Reviewed by Filip Pizlo.

        Just change Identifier creations.

        1. If the code creates Identifier from StringImpl*
        which is treated as symbol or string(unique id), use Identifier::fromUid.
        2. If the code creates Identifier from string, use Identifier::fromString.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::getJSListenerFunctions):
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getProperty):
        (WebCore::getHashAlgorithm):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON):
        (WebCore::getStringFromJSON):
        (WebCore::getBooleanFromJSON):
        (WebCore::addToJSON):
        (WebCore::buildJSONForRSAComponents):
        (WebCore::addBoolToJSON):
        (WebCore::addUsagesToJSON):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineOwnProperty):
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::DialogHandler::returnValue):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::readAccelerationArgument):
        (WebCore::readRotationRateArgument):
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::tryGetProperty):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::all):
        (WebCore::JSHTMLDocument::setAll):
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::namedItem):
        * bindings/js/JSIDBDatabaseCustom.cpp:
        (WebCore::JSIDBDatabase::createObjectStore):
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        (WebCore::JSIDBObjectStore::createIndex):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::populateContextMenuItems):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::setInternalSlotToObject):
        (WebCore::getInternalSlotFromObject):
        * bindings/js/ScriptGlobalObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::deserialize):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject hasWebScriptKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjReplaceableAttribute):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::identifierFromNPIdentifier):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/testbindings.cpp:
        (main):
        * bridge/testbindings.mm:
        (main):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2015-03-31  Jer Noble  <jer.noble@apple.com>

        [Mac] Songza.com fails to play; QTKit path reports it is always "seeking".
        https://bugs.webkit.org/show_bug.cgi?id=143274

        Rubber-stamped by Eric Carlson.

        MediaTime::invalidTime() is always greater than any valid time. So when
        checking to see if MediaPlayerPrivateQTKit is seeking, first check if the
        m_seekTo time is valid before checking whether it's > 0.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::seeking):

2015-03-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        border-image with 'fill' keyword does not fill the middle area unless the border width is greater than zero.
        https://bugs.webkit.org/show_bug.cgi?id=142650.

        Reviewed by Simon Fraser.

        The decoration of a RenderBox, a RenderTable or an InlineFlowBox should be
        drawn if its RenderStyle has a non-zero width border or the border-image
        has the keyword fill.

        Tests: fast/borders/border-image-fill-inline-no-border.html
               fast/borders/border-image-fill-no-border.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasBoxDecorationStyle):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::hasFill):
        * rendering/style/RenderStyle.h:

2015-03-31  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
        Don't include inspector files twice in debug builds.
        InspectorAllInOne.cpp is now used on debug builds.

2015-03-31  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Anonymous inline-blocks should size as though they are block-level.
        https://bugs.webkit.org/show_bug.cgi?id=143271

        Reviewed by Dean Jackson.

        Added fast/block/inside-inlines/block-width-check.html.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesLogicalWidthToFitContent):
        Return false when an anonymous inline-block is encountered, since we want to treat it like a regular
        block instead.

2015-03-31  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r182186.
        https://bugs.webkit.org/show_bug.cgi?id=143270

        it crashes all the WebGL tests on the Debug bots (Requested by
        dino on #webkit).

        Reverted changeset:

        "Web Inspector: add 2D/WebGL canvas instrumentation
        infrastructure"
        https://bugs.webkit.org/show_bug.cgi?id=137278
        http://trac.webkit.org/changeset/182186

2015-03-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in CGContextShowGlyphsWithAdvances when passing kCGFontIndexInvalid
        https://bugs.webkit.org/show_bug.cgi?id=143114

        This is a workaround for <rdar://problem/20230073>. Please remove when it is no longer necessary.

        Reviewed by Alexey Proskuryakov.

        Covered by:
        compositing/regions/floated-region-with-transformed-child.html
        compositing/regions/floated-region-with-transformed-child-expected.html
        fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-005.html
        fast/regions/counters/extract-ordered-lists-in-regions-explicit-counters-005-expected.html
        fast/regions/overflow/overflow-content-transform-rotate.html
        fast/regions/overflow/overflow-content-transform-rotate-expected.html

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::shrink): Performing shaping may remove glyphs, so we need to shrink the GlyphBuffer.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms): Filter out kCGFontIndexInvalid.
        (WebCore::WidthIterator::advanceInternal): Moved code into applyFontTransforms, and trigger the
        shrink of the GlyphBuffer.

2015-03-31  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r173484): Reducing content of scrollable region does not reset scroll 
        position
        https://bugs.webkit.org/show_bug.cgi?id=138525
        -and corresponding-
        rdar://problem/18166043

        Reviewed by Simon Fraser.

        The change that caused this regression was correct. That change does not allow 
        RenderLayer to update scroll position after a layout if a rubber-band is currently 
        happening. The change caused this regression because all of the member variables 
        in ScrollController that attempt to keep track of the current state of the scroll 
        gesture (m_inScrollGesture, m_momentumScrollInProgress, and 
        m_snapRubberbandTimerIsActive) all indicated that a momentum scroll gesture was 
        still in action for this div even though it very much is not when the bug happens. 
        Those variables were never properly re-set because the 
        PlatformWheelEventPhaseEnded events never got dispatched to the ScrollController, 
        which brought the investigation back to Element.

        We must still dispatch events that have zero delta so that the default event 
        handlers can handle them, but we should stopPropagation() so that these events are 
        not sent to the DOM. Websites will break if they get wheel events with no delta.
        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):

2015-03-31  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed debug build fix after r182186.

        * WebCore.vcxproj/WebCore.vcxproj:
        Include InspectorAllInOne.cpp in debug builds.

2015-03-30  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Make sure line breaks occur before and after the anonymous inline-block.
        https://bugs.webkit.org/show_bug.cgi?id=143238.

        Reviewed by Dean Jackson.

        Added fast/blocks/inside-inlines/breaking-behavior.html (and new-model equivalent).

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::hasAnonymousInlineBlock):
        (WebCore::InlineFlowBox::setHasAnonymousInlineBlock):
        Add a bit to root line boxes (stored in the InlineFlowBox since it has free bits) that indicates whether
        or not a line is an anonymous inline-block line.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        Patch the preferred logical width computation to break both before and after an anonymous inline-block.
        Also make sure to strip trailing spaces from the line before the anonymous inline-block.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::constructLine):
        Patch line construction so that no intermediate boxes are constructed between the InlineBox for the anonymous
        inline-block and the root line box.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        The height of a "line" that holds an anonymous inline-block should ignore line-box-contain and also make sure
        that the margins of the replaced element are "outside" the line, since those margins will collapse.

        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleReplaced):
        Patch handleReplaced to make sure breaks occur both before and after an anonymous inline-block. In the case of
        a break after the block, we setPreviousLineBrokeCleanly to true so that <br>s that follow the anonymous inline-block
        are respected.

2015-03-31  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Add nullptr check to GraphicsContext3D::makeContextCurrent()
        https://bugs.webkit.org/show_bug.cgi?id=143214

        Reviewed by Žan Doberšek.

        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::makeContextCurrent):

2015-03-31  Matt Baker  <mattbaker@apple.com>

        Web Inspector: add 2D/WebGL canvas instrumentation infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=137278

        Reviewed by Timothy Hatcher.

        Added backend agent for canvas inspection. A canvas is instrumented once its CanvasRenderingContext has been
        created. WebGLRenderingContext is instrumented to track the lifetime of shader program objects.

        To instrument off-screen rendering contexts (CSS canvases and detached canvas elements), the canvas agent must
        track all CanvasRenderingContexts as they are created, even in the absense of the frontend. As far as I know,
        there is no practical way to identify rendering contexts belonging to a frame that are not in the DOM. In the
        absence of the inspector frontend the agent does only the minimum required to track the lifetime of rendering
        contexts and their resources, to avoid creating a negative performance impact.

        Tests: inspector/canvas/canvas-add-remove-events.html
               inspector/canvas/canvas-context-attributes.html
               inspector/canvas/canvas-css-name.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        Instrumentation for CSS canvases.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        Instrumentation for context creation.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::attachShader):
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::deleteProgram):
        (WebCore::WebGLRenderingContextBase::detachShader):
        Instrumentation for programs and shaders.

        * inspector/InspectorAllInOne.cpp:

        * inspector/InspectorCanvasAgent.cpp: Added.
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::didAttachShader):
        (WebCore::InspectorCanvasAgent::didDetachShader):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::didDeleteProgram):
        (WebCore::InspectorCanvasAgent::getCanvases):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::canvasDestroyedTimerFired):
        (WebCore::InspectorCanvasAgent::reset):
        (WebCore::InspectorCanvasAgent::getCanvasEntry):
        (WebCore::InspectorCanvasAgent::getProgramEntry):
        (WebCore::InspectorCanvasAgent::removeShaderFromShaderMap):
        (WebCore::InspectorCanvasAgent::contextTypeJson):
        (WebCore::InspectorCanvasAgent::buildObjectForCanvas):
        * inspector/InspectorCanvasAgent.h: Added.
        New backend agent.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        Support for new backend agent.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):
        (WebCore::InspectorInstrumentation::didAttachShaderImpl):
        (WebCore::InspectorInstrumentation::didDetachShaderImpl):
        (WebCore::InspectorInstrumentation::didCreateProgramImpl):
        (WebCore::InspectorInstrumentation::didDeleteProgramImpl):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForRenderingContext):
        Plumbing for canvas instrumentation.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::didAttachShader):
        (WebCore::InspectorInstrumentation::didDetachShader):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::didDeleteProgram):

        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorCanvasAgent):
        (WebCore::InstrumentingAgents::setInspectorCanvasAgent):
        Support for new backend agent.

2015-03-31  Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Implement a barebone ReadableStreamReader interface
        https://bugs.webkit.org/show_bug.cgi?id=142866

        Reviewed by Benjamin Poulain.

        This patch implements a barebone ReadableStreamReader as described in https://streams.spec.whatwg.org/#reader-class.
        It implements the IDL without implementing most of the functionality behind.
        It implements ReadableStreamReader JS constructor and the link with ReadableStream.getReader:
        - Raise an error if stream is already locked
        - Set the stream reader to the newly created ReadableStreamReader instance.

        Test: streams/readablestreamreader-constructor.html

        * CMakeLists.txt: Adding ReadableStreamReader files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::createReader): Used by JS binding to get access to the reader.
        * Modules/streams/ReadableStream.h: Declaration of createReader, reader and lock.
        (WebCore::ReadableStream::reader):
        (WebCore::ReadableStream::lock):
        * Modules/streams/ReadableStream.idl: Cleaning-up the IDL.
        * Modules/streams/ReadableStreamReader.cpp: Added.
        (WebCore::ReadableStreamReader::create):
        (WebCore::ReadableStreamReader::ReadableStreamReader):
        (WebCore::ReadableStreamReader::~ReadableStreamReader):
        (WebCore::ReadableStreamReader::closed):
        (WebCore::ReadableStreamReader::activeDOMObjectName):
        (WebCore::ReadableStreamReader::canSuspend):
        * Modules/streams/ReadableStreamReader.h: Added.
        (WebCore::ReadableStreamReader::stream):
        * Modules/streams/ReadableStreamReader.idl: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::getReader):
        * bindings/js/JSReadableStreamReaderCustom.cpp: Added.
        (WebCore::JSReadableStreamReader::read):
        (WebCore::getOrCreatePromiseDeferredFromObject):
        (WebCore::closedPromiseSlotName):
        (WebCore::JSReadableStreamReader::closed):
        (WebCore::JSReadableStreamReader::cancel):
        (WebCore::JSReadableStreamReader::releaseLock):
        (WebCore::constructJSReadableStreamReader):

2015-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] DnD icon/widget has odd background
        https://bugs.webkit.org/show_bug.cgi?id=143217

        Reviewed by Martin Robinson.

        Remove DragIcon class since it's no longer needed with GTK+3 and
        the GTK+2 code there is unused. GTK+ knows what to do with a cairo
        surface, I guess we migrated the GTK+2 code to GTK+3 without
        realizing that using the surface was enough.

        * PlatformGTK.cmake:
        * platform/gtk/DragIcon.cpp: Removed.
        * platform/gtk/DragIcon.h: Removed.

2015-03-30  Alex Christensen  <achristensen@webkit.org>

        Unreviewed build fix after r182168.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Explicitly cast to unsigned.

2015-03-30  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Correctly handle regular expressions matching everything
        https://bugs.webkit.org/show_bug.cgi?id=143235

        Reviewed by Benjamin Poulain.

        Test: http/tests/contentextensions/whitelist.html

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        Global actions can have non-css actions.  Only put the selectors into the list of selectors.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeSelector):
        (WebCore::ContentExtensions::serializeActions):
        Merge sequential css selectors with identical triggers (usually .*) into one action to reduce the number of actions.
        (WebCore::ContentExtensions::compileRuleList):
        Fail if a regular expression matches everything after ignore-previous-rules.
        * contentextensions/ContentExtensionError.cpp:
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h:
        Add more failure cases.
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::operator==):
        Allow comparing of Triggers to determine if sequential triggers are equal.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Put non-css actions that match everything into the list of actions if ignore-previous-rules was not hit.
        These actions will be out of order, but order only matters when determining if ignore-previous-rules, and this case is handled correctly.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Added an assertion that all actions that match everything should be in the first DFA root.
        We should catch them all with URLFilterParser::MatchesEverything.

2015-03-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow building on Windows without Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=143219

        Reviewed by Brent Fulgham.

        * AVFoundationSupport.py: Renamed from Source/WebCore/WebCore.vcxproj/MigrateScripts.
        Move logic from DerivedSources.make to its own script
        (lookFor):
        * DerivedSources.make: Paths like /usr/bin don't exist on Windows.
        Windows uses del instead of rm -f
        Windows doesn't have printf
        * WebCore.vcxproj/WebCoreGenerated.make: Pass the CC executable to
        build-generated-files.pl
        * WebCore.vcxproj/build-generated-files.pl: Export the CC executable as an environment
        variable. Don't use /usr/bin.
        * WebCore.vcxproj/migrate-scripts.pl: Deleted the MigrateScripts makefile. We don't
        need a whole Makefile just to copy 5 files. Moved this logic into migrate-scripts.pl.
        (copyFile):
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor): Support passing preprocessing flags to the Visual Studio
        compiler.
        * dom/make_names.pl: Ditto.

2015-03-30  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/spi/mac/AVFoundationSPI.h:

2015-03-30  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Flesh out the UserContentExtensionStore
        https://bugs.webkit.org/show_bug.cgi?id=143123

        Reviewed by Benjamin Poulain.

        - Adds a variant of getFileSize() that takes a PlatformFileHandle.
        - Adds a new file system function, rename() which operates as the POSIX
          rename function does.

        * platform/FileSystem.h:
        Add new functions.

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::renameFile):
        (WebCore::getFileSize):
        Add implementations.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::renameFile):
        (WebCore::getFileSize):
        * platform/win/FileSystemWin.cpp:
        (WebCore::getFileSize):
        (WebCore::renameFile):
        Add stubs.

2015-03-30  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Crash when closing window while video is loading
        https://bugs.webkit.org/show_bug.cgi?id=143088

        Reviewed by Mark Lam.

        When the media player is destroyed, we have to cancel possible calls on the
        main thread made by a worker thread. Otherwise the destroyed media player
        will be accessed when performing the call.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySet):
        (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySetCallback):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-03-30  Gwang Yoon Hwang  <yoon@igalia.com>

        [Threaded Compositor] Crash when animation changes frequently.
        https://bugs.webkit.org/show_bug.cgi?id=143213

        Reviewed by Simon Fraser.

        CompositingCoordinator copies CoordinatedGraphicsLayerState when
        flushing GraphicsLayer changes, and ThreadedCoordinatedCompositor passes
        it to compositing thread.

        To ensure thread-safety, we need to provide copy constructor to copy
        Animation object in TextureMapperAnimation instead of referencing it.

        Since TimingFunction and TransformOperation used by KeyframeValueList are
        not ThreadSafeRefCounted, these should be cloned also.

        No new tests needed.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue::AnimationValue):
        (WebCore::FloatAnimationValue::FloatAnimationValue):
        (WebCore::TransformAnimationValue::TransformAnimationValue):
        (WebCore::FilterAnimationValue::FilterAnimationValue):
        Adds deep copy constructor.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        Because the name of the animation can be AtomicString, we need to create
        isolated version of string to ensure thread safty.

        * platform/graphics/texmap/TextureMapperAnimation.h:
        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TranslateTransformOperation.h:
        Adds TransformOperation::clone() for threadsafety.

2015-03-30  Chris Dumez  <cdumez@apple.com>

        Cached "Expires" header is not updated upon successful resource revalidation
        https://bugs.webkit.org/show_bug.cgi?id=143228
        <rdar://problem/20348059>

        Reviewed by Antti Koivisto.

        Cached "Expires" header was not updated upon successful resource
        revalidation. This affected both our disk cache and our memory cache.
        This was caused by shouldUpdateHeaderAfterRevalidation() in
        CacheValidation.cpp returning false for the "Expires" header.

        There is a comment there stating that the list of ignored headers
        matches Chromium's net library but that's not the case, at least not
        anymore:
        http://osxr.org/android/source/external/chromium/net/http/http_response_headers.cc

        HTTP servers such as Apache return an "Expires" header in their 304
        responses and the "Expires" header is potentially a new one. However,
        our caches were ignoring the updated expiration date and kept using the
        old one, which meant that the cached resource expired sooner than it
        should have.

        See the following Apache bugs that explain the issue:
        https://bz.apache.org/bugzilla/show_bug.cgi?id=24884
        https://bz.apache.org/bugzilla/show_bug.cgi?id=25123

        Test: http/tests/cache/disk-cache/disk-cache-revalidation-new-expire-header.html

        * platform/network/CacheValidation.cpp:

2015-03-30  Antti Koivisto  <antti@apple.com>

        Don't cache resources that are very unlikely to be reused
        https://bugs.webkit.org/show_bug.cgi?id=143226
        <rdar://problem/20347160>

        Reviewed by Geoff Garen.

        Allow overriding resource load priorities via Internals for testing.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::clearTestingOverrides):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setOverrideResourceLoadPriorityForTesting):
        (WebCore::FrameLoader::clearOverrideCachePolicyForTesting): Deleted.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::unlikelyToReuseKey):
        * page/DiagnosticLoggingKeys.h:

            Add a key.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::stringToResourceLoadPriority):
        (WebCore::Internals::setOverrideResourceLoadPriority):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-03-30  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Upgrade align-self and align-items parsing to CSS 3
        https://bugs.webkit.org/show_bug.cgi?id=133359

        Reviewed by David Hyatt.

        From Blink r164817 and r165264 by <jchaffraix@chromium.org>

        Broaden justify-self's parsing name

        This is in preparation of migrating align-self, align-items
        and justify-items to the CSS 3 Alignment syntax.

        The current naming was too tied to justify-self and needs to
        be broadened. This will reduce the follow-up implementations'
        patches.

        Upgrade align-self and align-items parsing to CSS 3

        This change migrates the 2 properties to the CSS 3 Alignment
        parsing. The new parsing is identical to how we parse
        'justify-self'. The 2 properties need to be migrated together
        as they are used in tandem in CSSComputedStyleDeclaration.

        This change also removes EAlignItems as it is now unused.

        Tests: css3/parse-align-items.html
               css3/parse-align-self.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::resolveAlignmentAuto): Added. Resolves the "auto" value for the alignment properties.
        (WebCore::valueForItemPositionWithOverflowAlignment): Added. Builds the CSSValue for the for the alignment properties.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
         (WebCore::isValidKeywordPropertyAndValue): Removed align-self, align-items and justify-items.
        (WebCore::isKeywordPropertyID): Removed align-self, align-items and justify-items.
        (WebCore::isBaselinePositionKeyword): Added. Set of keywords related to baseline value.
        (WebCore::CSSParser::parseItemPositionOverflowPosition): Generic parsing fuction for the alignment properties.
        (WebCore::CSSParser::parseJustifySelf): Deleted.
        (WebCore::CSSParser::parseValue): Added align-items and align-self to the list and call to the generic parsing fuction for the alignment properties.
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added.
        (WebCore::CSSPrimitiveValue::operator ItemPosition): Added. Replace the old EAlignItems enumeration.
        (WebCore::CSSPrimitiveValue::operator OverflowAlignment): Added.
        (WebCore::CSSPrimitiveValue::operator EAlignItems): Deleted.
        (WebCore::CSSPrimitiveValue::operator EJustifySelf): Deleted.
        (WebCore::CSSPrimitiveValue::operator EJustifySelfOverflowAlignment): Deleted.
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritAlignSelf): Added.
        (WebCore::StyleBuilderCustom::applyInitialAlignSelf): Added.
        (WebCore::StyleBuilderCustom::applyValueAlignSelf): Added.
        (WebCore::StyleBuilderCustom::applyInheritAlignItems): Added.
        (WebCore::StyleBuilderCustom::applyInitialAlignItems): Added.
        (WebCore::StyleBuilderCustom::applyValueAlignItems): Added.
        (WebCore::StyleBuilderCustom::applyInheritJustifySelf): Added.
        (WebCore::StyleBuilderCustom::applyInitialJustifySelf): Added.
        (WebCore::StyleBuilderCustom::applyValueJustifySelf): Added.
        (WebCore::StyleBuilderCustom::applyValueWebkitJustifySelf): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): isDisplayFlexibleOrGridBox now a RenderStyle function.
        (WebCore::isDisplayFlexibleBox): Deleted. Moved to RenderStyle.
        (WebCore::isDisplayGridBox): Deleted. Moved to RenderStyle.
        (WebCore::isDisplayFlexibleOrGridBox): Deleted. Moved to RenderStyle.
        * rendering/RenderBox.cpp:
        (WebCore::flexItemHasStretchAlignment): Adapted to the new ItemPostition enum.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::firstLineBaseline): Adapted to the new ItemPostition enum.
        (WebCore::RenderFlexibleBox::styleDidChange): Adapted to the new ItemPostition enum.
        (WebCore::RenderFlexibleBox::alignmentForChild): Adapted to the new ItemPostition enum.
        (WebCore::RenderFlexibleBox::needToStretchChild): Adapted to the new ItemPostition enum.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Adapted to the new ItemPostition enum.
        (WebCore::RenderFlexibleBox::alignChildren): Adapted to the new ItemPostition enum.
        (WebCore::resolveAlignment): Deleted. Moved to RenderStyle.
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle): Adapted to the new ItemPostition enum.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Adapted to the new ItemPostition enum.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::updateStyle): Adapted to the new ItemPostition enum.
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair): Adapted to the new ItemPostition enum.
        (WebCore::RenderMathMLScripts::fixAnonymousStyles): Adapted to the new ItemPostition enum.
        * rendering/style/ContentData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::resolveAlignment): Added.
        * rendering/style/RenderStyle.h: Adapted to the new ItemPostition enum.
        * rendering/style/RenderStyleConstants.h: Adapted to the new ItemPostition enum.
        * rendering/style/StyleRareNonInheritedData.cpp: Adapted to the new ItemPostition enum.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Adapted to the new ItemPostition enum.
        (WebCore::StyleRareNonInheritedData::operator==): Adapted to the new ItemPostition enum.
        * rendering/style/StyleRareNonInheritedData.h: Adapted to the new ItemPostition enum.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange): Changes in the alignItems property cause a Detach.

2015-03-27  David Hyatt  <hyatt@apple.com>

        [New Block-Inside-Inline Model] Create anonymous inline blocks to hold blocks-inside-inlines.
        https://bugs.webkit.org/show_bug.cgi?id=143145

        Reviewed by Dean Jackson.

        Added fast/block/inside-inlines/ tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::renderName):
        Add support for labeling anonymous inline-blocks when dumped by the render tree.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        When the pref is set to use the new block-inside-inline model, create an anonymous inline block to
        hold block children of RenderInlines instead of splitting flows or creating continuations.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousInlineBlock):
        Add the definition of isAnonymousInlineBlock (note the exclusion of Ruby, since Ruby creates anonymous
        inline-blocks also).

2015-03-30  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] Add support for "Cache-Control: max-stale" request header
        https://bugs.webkit.org/show_bug.cgi?id=143159
        <rdar://problem/20333296>

        Reviewed by Antti Koivisto.

        Add support for "Cache-Control: max-stale" request header:
        https://tools.ietf.org/html/rfc7234#section-5.2.1.2

        Test: http/tests/cache/disk-cache/disk-cache-request-max-stale.html

        * platform/network/CacheValidation.cpp:
        (WebCore::parseCacheControlDirectives):
        * platform/network/CacheValidation.h:

2015-03-30  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS internal build after r182132.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):

2015-03-30  Jer Noble  <jer.noble@apple.com>

        [iOS] When Web Audio is interrupted by a phone call, it cannot be restarted.
        https://bugs.webkit.org/show_bug.cgi?id=143190

        Reviewed by Darin Adler.

        Tests: webaudio/audiocontext-state-interrupted.html
               webaudio/audiocontext-state.html

        Implement the following methods and properties from the Web Audio spec:
        close(), suspend(), resume(), onstatechange.

        AudioContext will take more responsibility for tracking state and interruptions (and
        AudioDestination will give up that responsibility). This means AudioContext must be a
        MediaSessionClient, and own its own MediaSession. In return, AudioDestinationIOS and 
        AudioDestinationMac relinquish both.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext): Set default values in header.
        (WebCore::AudioContext::uninitialize): Call setState() instead of setting m_state.
        (WebCore::AudioContext::addReaction): Added. Append the callback to the appropriate vector for the state.
        (WebCore::AudioContext::setState): Added. Fire events and resolve the appropriate reaction callbacks for the new state.
        (WebCore::AudioContext::state): Return a string representing the context's state.
        (WebCore::AudioContext::stop): Close the event queue.
        (WebCore::AudioContext::startRendering): Call setState().
        (WebCore::AudioContext::fireCompletionEvent): Call setState().
        (WebCore::AudioContext::suspendContext): Added. Add reaction callback and call suspend() on the destination node.
        (WebCore::AudioContext::resumeContext): Added. Add reaction callback and call resume() on the destination node.
        (WebCore::AudioContext::closeContext): Added. Add reaction callback and call close() on the destination node.
        (WebCore::AudioContext::suspendPlayback): Added. Suspend playback and set state to interrupted.
        (WebCore::AudioContext::mayResumePlayback): Added. Conditionally resume playback.
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::suspend): Added. Create and return a new Promise object.
        (WebCore::JSAudioContext::resume): Ditto.
        (WebCore::JSAudioContext::close): Ditto.
        * Modules/webaudio/AudioContext.idl: Add new methods and properties.

        Extensive organizational changes were made to AudioContext.h to group instance
        variables together and add C++11 initializers in their declarations:

        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::mediaType): Moved from AudioDestinationNode.
        (WebCore::AudioContext::presentationType): Ditto.
        (WebCore::AudioContext::canReceiveRemoteControlCommands): Ditto.
        (WebCore::AudioContext::didReceiveRemoteControlCommand): Ditto.
        (WebCore::AudioContext::overrideBackgroundPlaybackRestriction): Ditto.
        
        Other changes to support the new AudioContext methods:

        * Modules/webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::resume): Add empty default virtual method.
        (WebCore::AudioDestinationNode::suspend): Ditto.
        (WebCore::AudioDestinationNode::close): Ditto.
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::resume): Added. Pass to AudioDestination.
        (WebCore::DefaultAudioDestinationNode::suspend): Ditto.
        (WebCore::DefaultAudioDestinationNode::close): Ditto.
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve): Add an overload for a nullptr resolve value.
        * dom/EventNames.h: Added 'statechange'.
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::Task::Task): Add a constructor which takes a void() callback.

        Modify MediaSession, AudioSession, and MediaSessionManager to support the new
        interruption behavior.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspendPlayback): Renamed from pausePlayback().
        (WebCore::HTMLMediaElement::mayResumePlayback): Renamed from resumePlayback().
        * html/HTMLMediaElement.h:
        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::tryToSetActive): Renamed from setActive. Return true by default.
        (WebCore::AudioSession::setActive): Deleted.
        * platform/audio/AudioSession.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): pausePlayback() was renamed to suspendPlayback().
        (WebCore::MediaSession::endInterruption): Always notify the client, telling it whether to resume.
        (WebCore::MediaSession::clientWillBeginPlayback): Bail early if reentrant.  Check the (new) 
            return value of sessionWillBeginPlayback() and remember to resume once the interruption ends.
        (WebCore::MediaSession::clientWillPausePlayback): Bail early if reentrant.
        (WebCore::MediaSession::pauseSession): pausePlayback() was renamed to suspendPlayback().
        * platform/audio/MediaSession.h:
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Return false if not allowed to break interruption or 
            if activating the audio session failed. Otherwise, end the interruption.
        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestinationIOS::AudioDestinationIOS): m_mediaSession was removed.
        (WebCore::AudioDestinationIOS::start): Ditto.
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::tryToSetActive): Renamed from setActive. Return false if the AVAudioSession could not be activated.
        (WebCore::AudioSession::setActive): Deleted.
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback): Do not update the now playing info if session playback was blocked.
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): m_mediaSession was removed.
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::tryToSetActive): Renamed from setActive(). Return true by default.
        (WebCore::AudioSession::setActive): Deleted.
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): No longer attempt to activate the session, as this is done
            MediaSessionManager::sessionWillBeginPlayback().
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Add "InterruptedPlaybackNotPermitted".

2015-03-25 Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet <youenn.fablet@crf.canon.fr>

        [Streams API] Error storage should be moved from source to stream/reader
        https://bugs.webkit.org/show_bug.cgi?id=143048

        Reviewed by Benjamin Poulain.

        This patch removes error storage from the source as it should be stored at the stream level as error access goes through the reader.
        It removes abstract ReadableStreamSource::isErrored and the storage of JavaScript errors from ReadableStreamJSSource.

        Existing tests cover most of the changes.
        Added test case for creating readable stream from empty JS object.

        * Modules/streams/ReadableStreamSource.h: Removing isErrored().
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::constructJSReadableStream): Added JS stream constructor parameters checking.
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::ReadableStreamJSSource::ReadableStreamJSSource): Removed JS stream constructor parameters checking.
        (WebCore::ReadableStreamJSSource::start): Changed prototype of start so that start can throw errors directly.
        (WebCore::ReadableStreamJSSource::setInternalError): Deleted.
        * bindings/js/ReadableStreamJSSource.h: Removed m_error, setInternalError and updated start declaration.

2015-03-30  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] More GL shared context fixes
        https://bugs.webkit.org/show_bug.cgi?id=143216

        Reviewed by Carlos Garcia Campos.

        Moved the GLX/EGL context tests to be done at runtime rather than
        using build-time macros because in the GTK port at least, both EGL
        and GLX support are mutually exclusive. Also fixed a couple wrong
        defines (USE(GLES2) doesn't exist).

        * platform/graphics/GLContext.h: Simple utility method to check if
        the platform context is compatible with EGL APIs or not.
        * platform/graphics/egl/GLContextEGL.h:
        (WebCore::GLContextEGL::isEGLContext):
        * platform/graphics/glx/GLContextGLX.h:
        (WebCore::GLContextGLX::isEGLContext):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::ensureGstGLContext): Do
        runtime checks and properly ensure GLES2/GL API usage.

2015-03-30  Marcos Chavarría Teijeiro  <chavarria1991@gmail.com>

        Add support for deleting emoji on GTK
        https://bugs.webkit.org/show_bug.cgi?id=141419

        Reviewed by Gustavo Noronha Silva.

        The code for deleting special group of characters was specific for
        COCOA and EFL platforms. The fix consists on add GTK to the #if
        preprocessor directive.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::previousOffsetForBackwardDeletion):

2015-03-30  Benjamin Poulain  <benjamin@webkit.org>

        Start the features.json files
        https://bugs.webkit.org/show_bug.cgi?id=143207

        Reviewed by Darin Adler.

        * features.json: Added.

2015-03-29  Simon Fraser  <simon.fraser@apple.com>

        Convert arguments to ScrollingCoordinator functions to references
        https://bugs.webkit.org/show_bug.cgi?id=143198

        Reviewed by Darin Adler.

        Convert all the FrameView* and ScrollableArea* arguments to ScrollingCoordinator functions to
        references, and use references in a few other places.

        * dom/Document.cpp:
        (WebCore::wheelEventHandlerCountChanged):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::updateRegion):
        * page/Frame.cpp:
        (WebCore::Frame::willDetachPage):
        * page/FrameView.cpp:
        (WebCore::FrameView::prepareForDetach):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::addViewportConstrainedObject):
        (WebCore::FrameView::removeViewportConstrainedObject):
        (WebCore::FrameView::requestScrollPositionUpdate):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::scrollableAreaSetChanged):
        (WebCore::FrameView::wheelEvent):
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        * page/Page.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateMainFrameScrollLayerPosition):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::pageDestroyed):
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::frameViewWheelEventHandlerCountChanged):
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewFixedObjectsDidChange):
        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView):
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        (WebCore::ScrollingCoordinator::counterScrollingLayerForFrameView):
        (WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
        (WebCore::ScrollingCoordinator::contentShadowLayerForFrameView):
        (WebCore::ScrollingCoordinator::rootContentLayerForFrameView):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates):
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingCoordinator::replaySessionStateDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h: Align the bitmask enums to make mistakes easier to spot.
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        (WebCore::ScrollingCoordinator::willDestroyScrollableArea):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::willDestroyScrollableArea):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::requestScrollPositionUpdate):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::hasCoordinatedScrolling):
        (WebCore::RenderLayerCompositor::scrollingLayerDidChange):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::destroyRootLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::nonFastScrollableRects):

2015-03-29  Benjamin Poulain  <benjamin@webkit.org>

        Use :matches() instead of :-webkit-any() for the sections and headings default style
        https://bugs.webkit.org/show_bug.cgi?id=143197

        Reviewed by Darin Adler.

        We no longer need to use the :-webkit-any() hack in the default stylesheet.

        The pseudo class :matches() also support correct specificity. This is not observable
        since those selector do not conflict with any other rule in the default stylesheet.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/html.css:
        (:matches(article, aside, nav, section) h1):
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) h1):
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1):
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1):
        (:matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1):
        (:-webkit-any(article,aside,nav,section) h1): Deleted.
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1): Deleted.
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1): Deleted.
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1): Deleted.
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1): Deleted.

2015-03-29  Benjamin Poulain  <benjamin@webkit.org>

        `currentColor` computes to the same colour on all elements, even if 'color' is inherited differently
        https://bugs.webkit.org/show_bug.cgi?id=133420

        Reviewed by Darin Adler.

        When resolving a style with the help of the property cache, we were
        completely ignoring currentColor.

        Since you can set currentColor on properties that are not inherited,
        those properties would just be copied from the cached style, which
        may have a completely different inherited color.

        This pacth fixes the issue by preventing any MatchResult from hitting
        the cache if it contains any non-inherited property that would require
        resolution by the cache:
        -Using the inherit value.
        -Using the currentColor value.

        Tests: fast/css/currentColor-on-before-after-pseudo-elements.html
               fast/css/currentColor-style-update-reftest.html
               fast/css/currentColor-value-style-update.html

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addElementStyleProperties):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::matchUARules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchResult::addMatchedProperties):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::findFromMatchedPropertiesCache):
        (WebCore::StyleResolver::addToMatchedPropertiesCache):
        (WebCore::extractDirectionAndWritingMode):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::CascadedProperties::addStyleProperties):
        (WebCore::StyleResolver::CascadedProperties::addMatches):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::MatchResult::matchedProperties):

2015-03-29  Benjamin Poulain  <benjamin@webkit.org>

        Enable :any-link by default
        https://bugs.webkit.org/show_bug.cgi?id=143201

        Reviewed by Sam Weinig.

        The pseudo class :any-link has been stable for a while. This patch enables
        it by default and remove the -webkit- prefix on the default style.

        * css/CSSDefaultStyleSheets.cpp:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::isCommonPseudoClassSelector):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/html.css:
        (a:any-link):
        (a:any-link:active):
        (:any-link img):
        (a:-webkit-any-link): Deleted.
        (a:-webkit-any-link:active): Deleted.
        (:-webkit-any-link img): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementLinkMatching):

2015-03-29  Joonghun Park  <jh718.park@samsung.com>

        nullptr cleanup in RenderFooBox classes
        https://bugs.webkit.org/show_bug.cgi?id=143182

        Reviewed by Ryosuke Niwa.

        No new tests, no behavior changes

        Replace 0 with nullptr in RenderFooBox classes.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::paintFillLayer):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore::RenderBox::renderBoxRegionInfo):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::createAnonymousBoxWithSameTypeAs):
        (WebCore::RenderBox::setInlineBoxWrapper):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::firstLetterRemainingText):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveAllChildrenTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::reset):
        (WebCore::FlexBoxIterator::next):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::firstLineBaseline):
        (WebCore::RenderFlexibleBox::computeMainAxisExtentForChild):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::deleteLineBoxTree):
        (WebCore::RenderLineBoxList::extractLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxes):
        (WebCore::RenderLineBoxList::checkConsistency):
        * rendering/RenderLineBoxList.h:
        (WebCore::RenderLineBoxList::RenderLineBoxList):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::enclosingScrollableArea):
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderListBox.h:

2015-03-29  Darin Adler  <darin@apple.com>

        HTMLCollection caches incorrect length if item(0) is called before length on an empty collection
        https://bugs.webkit.org/show_bug.cgi?id=143203
        rdar://problem/18460462

        Reviewed by Antti Koivisto.

        Test: fast/dom/htmlcollection-length-after-item-2.html

        * dom/CollectionIndexCache.h:
        (CollectionIndexCache::nodeAt): If we hit the end looking for index 0, cache a length
        of 0, not a length of 1.

2015-03-29  Darin Adler  <darin@apple.com>

        Remove unneeded SVG code, including most isSupportedAttribute functions
        https://bugs.webkit.org/show_bug.cgi?id=143194

        Reviewed by Antti Koivisto.

        - Removed most implementations of isSupportedAttribute. Others can be removed in
          future patches. The ones left behind are now all private static member functions.
          It's dangerous for them to be public because they tend to indicate which attributes
          are supported at a particular level in the class hierarchy and they are not virtual
          functions; might want to rethink the function name if we keep any of these long term.

        - Removed unneeded includes, especially of Attr.h and Attribute.h.

        - Changed most parseAttribute and svgAttributeChanged functions so they no longer
          rely on checking attribute names against a set. Also removed lots of unneeded calls
          to SVGLangSpace::parseAttribute, which is called by SVGElement::parseAttribute and
          need not be called by derived classes.

        - Removed return values from parseAttribute functions. Skipping other parseAttribute
          logic is not an important optimization and makes functions needlessly complex.

        - Moved use of InstanceInvalidationGuard closer to where they are needed. Eventually
          we may be able to remove many of these.

        - Used auto in a few places where the same type is repeated twice on the same line of
          code, and auto makes it a bit smaller.

        - Got rid of protected sections in some final classes; doesn't make sense to combine
          these two. Also moved a few functions from protected to private in other classes.

        - Made a number of functions into static member functions in the base classes such
          as SVGLangSpace; they were not making any use of the object, and so it was wasteful
          to compile them as non-static member functions.

        * rendering/svg/RenderSVGImage.cpp: Removed unneeded includes.
        * svg/SVGAElement.cpp: Removed unneeded includes.
        (WebCore::SVGAElement::isSupportedAttribute): Deleted.
        (WebCore::SVGAElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGAElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGAElement.h: Removed isSupportedAttribute.
        * svg/SVGAnimateMotionElement.cpp: Removed unneeded includes.
        (WebCore::SVGAnimateMotionElement::isSupportedAttribute): Deleted.
        (WebCore::SVGAnimateMotionElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGAnimateMotionElement.h: Removed isSupportedAttribute.
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::isSupportedAttribute): Deleted.
        (WebCore::SVGAnimateTransformElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGAnimateTransformElement.h: Removed isSupportedAttribute.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::isSupportedAttribute): Deleted.
        (WebCore::SVGCircleElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGCircleElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGCircleElement.h: Removed isSupportedAttribute.
        * svg/SVGClipPathElement.cpp: Removed unneeded includes.
        (WebCore::SVGClipPathElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGCursorElement.cpp: Removed unneeded includes.
        (WebCore::SVGCursorElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGCursorElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGElement.cpp: Removed unneeded includes.
        * svg/SVGEllipseElement.cpp: Removed unneeded includes.
        (WebCore::SVGEllipseElement::isSupportedAttribute): Deleted.
        (WebCore::SVGEllipseElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGEllipseElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGEllipseElement.h: Removed isSupportedAttribute.
        * svg/SVGExternalResourcesRequired.cpp: Removed unneeded includes.
        (WebCore::SVGExternalResourcesRequired::parseAttribute): Don't return a boolean.
        * svg/SVGExternalResourcesRequired.h: Don't return a boolean.
        * svg/SVGFEBlendElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEBlendElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEBlendElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEBlendElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEBlendElement.h: Removed isSupportedAttribute.
        * svg/SVGFEColorMatrixElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEColorMatrixElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEColorMatrixElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEColorMatrixElement.h: Removed isSupportedAttribute.
        * svg/SVGFEComponentTransferElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEComponentTransferElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEComponentTransferElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGFEComponentTransferElement.h: Removed unneeded includes.
        * svg/SVGFECompositeElement.cpp: Removed unneeded includes.
        (WebCore::SVGFECompositeElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFECompositeElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFECompositeElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEConvolveMatrixElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEDiffuseLightingElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEDisplacementMapElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEDisplacementMapElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEDropShadowElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEDropShadowElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp: Removed unneeded includes.
        * svg/SVGFEGaussianBlurElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEGaussianBlurElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEGaussianBlurElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEImageElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEImageElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEImageElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp: Removed unneeded includes.
        (WebCore::SVGFELightElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFELightElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFELightElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEMergeNodeElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEMergeNodeElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEMorphologyElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEMorphologyElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp: Removed unneeded includes.
        (WebCore::SVGFEOffsetElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFEOffsetElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFEOffsetElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp: Removed unneeded includes.
        (WebCore::SVGFESpecularLightingElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFESpecularLightingElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp: Removed unneeded includes.
        (WebCore::SVGFETileElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFETileElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFETileElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp: Removed unneeded includes.
        (WebCore::SVGFETurbulenceElement::isSupportedAttribute): Deleted.
        (WebCore::SVGFETurbulenceElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp: Removed unneeded includes.
        (WebCore::SVGFilterElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp: Removed unneeded includes.
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGFilterPrimitiveStandardAttributes.h: Removed isSupportedAttribute and also moved a
        couple functions out of the class definition.
        * svg/SVGFitToViewBox.cpp: Removed unneeded includes.
        * svg/SVGFontFaceElement.cpp: Removed unneeded includes.
        * svg/SVGFontFaceUriElement.cpp: Removed unneeded includes.
        * svg/SVGForeignObjectElement.cpp: Removed unneeded includes.
        (WebCore::SVGForeignObjectElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGGElement.cpp: Removed unneeded includes.
        (WebCore::SVGGElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGGlyphElement.cpp: Removed unneeded includes.
        * svg/SVGGlyphRefElement.cpp: Removed unneeded includes.
        (WebCore::SVGGlyphRefElement::hasValidGlyphElement): Rewrote to use is<> instead of hasTagName.
        (WebCore::SVGGlyphRefElement::parseAttribute): Don't use return value from SVGURIReference::parseAttribute.
        * svg/SVGGradientElement.cpp: Removed unneeded includes.
        (WebCore::SVGGradientElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGGraphicsElement.cpp: Removed unneeded includes.
        (WebCore::SVGGraphicsElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGImageElement.cpp: Removed unneeded includes.
        (WebCore::SVGImageElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGLangSpace.cpp: Removed unneeded includes.
        (WebCore::SVGLangSpace::parseAttribute): Removed the return value.
        * svg/SVGLangSpace.h: Converted functions to static member functions and removed the
        return value from parseAttribute.
        * svg/SVGLineElement.cpp: Removed unneeded includes.
        (WebCore::SVGLineElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGLinearGradientElement.cpp: Removed unneeded includes.
        (WebCore::SVGLinearGradientElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGMPathElement.cpp: Removed unneeded includes.
        (WebCore::SVGMPathElement::isSupportedAttribute): Deleted.
        (WebCore::SVGMPathElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGMPathElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGMPathElement.h: Removed isSupportedAttribute and made didNotifySubtreeInsertions
        private instead of protected.
        * svg/SVGMarkerElement.cpp: Removed unneeded includes.
        (WebCore::SVGMarkerElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGMaskElement.cpp: Removed unneeded includes.
        (WebCore::SVGMaskElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGPathElement.cpp: Removed unneeded includes.
        (WebCore::SVGPathElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGPatternElement.cpp: Removed unneeded includes.
        (WebCore::SVGPatternElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGPolyElement.cpp: Removed unneeded includes.
        (WebCore::SVGPolyElement::isSupportedAttribute): Deleted.
        (WebCore::SVGPolyElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGPolyElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.cpp: Removed unneeded includes.
        (WebCore::SVGRadialGradientElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGRectElement.cpp: Removed unneeded includes.
        (WebCore::SVGRectElement::isSupportedAttribute): Deleted.
        (WebCore::SVGRectElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGRectElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp: Removed unneeded includes.
        (WebCore::SVGSVGElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGScriptElement.cpp: Removed unneeded includes.
        * svg/SVGStopElement.cpp: Removed unneeded includes.
        (WebCore::SVGStopElement::isSupportedAttribute): Deleted.
        (WebCore::SVGStopElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGStopElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGStopElement.h: Removed isSupportedAttribute.
        * svg/SVGStyleElement.cpp: Removed unneeded includes.
        (WebCore::SVGStyleElement::isSupportedAttribute): Deleted.
        (WebCore::SVGStyleElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGStyleElement.h: Removed isSupportedAttribute.
        * svg/SVGSymbolElement.cpp: Removed unneeded includes.
        (WebCore::SVGSymbolElement::isSupportedAttribute): Deleted.
        (WebCore::SVGSymbolElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGSymbolElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGSymbolElement.h: Removed isSupportedAttribute.
        * svg/SVGTRefElement.cpp: Removed unneeded includes.
        (WebCore::SVGTRefElement::isSupportedAttribute): Deleted.
        (WebCore::SVGTRefElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGTRefElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGTRefElement.h: Removed isSupportedAttribute and made didNotifySubtreeInsertions
        private instead of protected.
        * svg/SVGTests.cpp: Removed unneeded includes.
        (WebCore::SVGTests::parseAttribute): Removed return value.
        * svg/SVGTests.h: Removed return value of parseAttribute.
        * svg/SVGTextContentElement.cpp: Removed unneeded includes.
        (WebCore::SVGTextContentElement::collectStyleForPresentationAttribute): Don't use
        isSupportedAttribute. Also removed global to optimize comparing attribute value against
        the string "preserve".
        (WebCore::SVGTextContentElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGTextContentElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGTextContentElement.h: Made isSupportedAttribute private instead of protected.
        * svg/SVGTextElement.cpp: Removed unneeded includes.
        * svg/SVGTextPathElement.cpp: Removed unneeded includes.
        (WebCore::SVGTextPathElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGTextPositioningElement.cpp: Removed unneeded includes.
        (WebCore::SVGTextPositioningElement::isSupportedAttribute): Deleted.
        (WebCore::SVGTextPositioningElement::parseAttribute): Don't use isSupportedAttribute.
        (WebCore::SVGTextPositioningElement::svgAttributeChanged): Don't use isSupportedAttribute.
        * svg/SVGTextPositioningElement.h: Removed isSupportedAttribute and made some functions
        private insetad of protected.
        * svg/SVGURIReference.cpp: Removed unneeded includes.
        (WebCore::SVGURIReference::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGURIReference.h:
        (WebCore::SVGURIReference::isExternalURIReference):
        * svg/SVGUseElement.cpp: Removed unneeded includes.
        (WebCore::SVGUseElement::parseAttribute): Don't use isSupportedAttribute.
        * svg/SVGViewElement.h: Removed isSupportedAttribute.
        * svg/animation/SVGSMILElement.cpp: Removed unneeded includes.

2015-03-29  Darin Adler  <darin@apple.com>

        Remove unneeded includes of "Attribute.h"
        https://bugs.webkit.org/show_bug.cgi?id=143195

        Reviewed by Antti Koivisto.

        * css/StyleResolver.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAreaElement.cpp:
        * html/HTMLBRElement.cpp:
        * html/HTMLBaseElement.cpp:
        * html/HTMLBodyElement.cpp:
        * html/HTMLButtonElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLDivElement.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLFontElement.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLFrameElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLHRElement.cpp:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLOListElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/HTMLParagraphElement.cpp:
        * html/HTMLParamElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPreElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLScriptElement.cpp:
        * html/HTMLSelectElement.cpp:
        * html/HTMLStyleElement.cpp:
        * html/HTMLTableCaptionElement.cpp:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableElement.cpp:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLUListElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/parser/HTMLScriptRunner.cpp:
        * inspector/InspectorNodeFinder.cpp:
        Removed includes of "Attribute.h".

2015-03-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update for output device API change
        https://bugs.webkit.org/show_bug.cgi?id=143187

        Reviewed by Zalan Bujtas.

        The API used for output device is being deprecated, update to the replacement.

        * WebCore.xcodeproj/project.pbxproj: Add SPI headers.

        * platform/graphics/MediaPlaybackTarget.h:
        (WebCore::MediaPlaybackTarget::MediaPlaybackTarget): Update for API change.
        (WebCore::MediaPlaybackTarget::setDevicePickerContext):
        (WebCore::MediaPlaybackTarget::devicePickerContext):

        * platform/graphics/avfoundation/MediaPlaybackTargetMac.mm:
        (WebCore::MediaPlaybackTarget::encode):
        (WebCore::MediaPlaybackTarget::decode):

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired):
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange):
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets):
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]):
        (-[WebAVOutputDevicePickerMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Deleted.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

        * platform/spi/cocoa/AVKitSPI.h: Copied from Source/WebCore/platform/spi/ios/AVKitSPI.h. Moved
            from ios directory, added Mac includes and prototypes.
        * platform/spi/ios/AVKitSPI.h: Removed.

        * platform/spi/mac/AVFoundationSPI.h: Added.

2015-03-28  Simon Fraser  <simon.fraser@apple.com>

        Optimize RenderLayer::intersectsDamageRect() slightly
        https://bugs.webkit.org/show_bug.cgi?id=143186

        Reviewed by Zalan Bujtas.

        We can early return from RenderLayer::intersectsDamageRect() if the
        damageRect is empty, since nothing will intersect with the empty rect.
        
        Slight performance gain when scrolling overflow-scroll with lots of nested,
        clipping layers.

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

2015-03-28  Anders Carlsson  <andersca@apple.com>

        Remove an unused SPI method from WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=143185

        Reviewed by Sam Weinig.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Deleted.
        * loader/appcache/ApplicationCacheStorage.h:

2015-03-28  Joonghun Park  <jh718.park@samsung.com>

        nullptr cleanup in InlineFooBox classes
        https://bugs.webkit.org/show_bug.cgi?id=143178

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior changes

        Replace 0 with nullptr in InlineFooBox classes.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::prevLeafChildIgnoringLineBreak):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::removeChild):
        (WebCore::InlineFlowBox::deleteLine):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::getLogicalStartBoxWithNode):
        (WebCore::RootInlineBox::getLogicalEndBoxWithNode):
        * rendering/RootInlineBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        (WebCore::SVGInlineTextBox::releasePaintingResource):
        (WebCore::SVGInlineTextBox::restoreGraphicsContextAfterTextPainting):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::findFirstAndLastAttributesInVector):
        * rendering/svg/SVGRootInlineBox.h:

2015-03-27  Simon Fraser  <simon.fraser@apple.com>

        More modern loops in RenderLayer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=143175

        Reviewed by Ryosuke Niwa.

        Use modern loops in more places in RenderLayer.app.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::update3DTransformedDescendantStatus):
        (WebCore::RenderLayer::paint):
        (WebCore::performOverlapTests):
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::calculateClipRects):

2015-03-27  Simon Fraser  <simon.fraser@apple.com>

        nullptr cleanup in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=143174

        Reviewed by Ryosuke Niwa.

        Replace 0 with nullptr in RenderLayer.cpp.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::filterRenderer):
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::RenderLayer::updateLayerPositionsAfterOverflowScroll):
        (WebCore::RenderLayer::positionNewlyCreatedOverflowControls):
        (WebCore::RenderLayer::enclosingOverflowClipLayer):
        (WebCore::RenderLayer::enclosingCompositingLayer):
        (WebCore::RenderLayer::enclosingCompositingLayerForRepaint):
        (WebCore::RenderLayer::enclosingFilterLayer):
        (WebCore::RenderLayer::enclosingFilterRepaintLayer):
        (WebCore::RenderLayer::clippingRootForPainting):
        (WebCore::RenderLayer::transparentPaintingAncestor):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::RenderLayer::insertOnlyThisLayer):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::enclosingScrollableArea):
        (WebCore::RenderLayer::enclosingPaginationLayerInSubtree):
        (WebCore::RenderLayer::enclosingElement):
        (WebCore::RenderLayer::enclosingFlowThreadAncestor):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments):
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::clipRects):
        (WebCore::RenderLayer::calculateClipRects):

2015-03-27  Gwang Yoon Hwang  <yoon@igalia.com>

        [TexMap] Seperate BitmapTexture related classes implementations from TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=142386

        Reviewed by Žan Doberšek.

        TextureMapper and TextureMapperGL are bloated and tightly coupled with
        BitmapTexture. We should move these classes to seperated file of their own.
        Also, this patch removes friend relationship from TextureMapperGL and  its
        subsidiary classes.

        The main purpose of this refactoring is to expose BitmapTexturePool to
        renderers of platformlayers like Video and Canvas. By doing this, each
        renderer can acquire textures from the global texture pool to paint
        their contents directly.

        No new tests needed.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Include BitmapTextureGL and BitmapTexturePool explicitly

        * platform/graphics/texmap/BitmapTexture.cpp: Added.
        * platform/graphics/texmap/BitmapTexture.h: Added.
        (WebCore::BitmapTexture::updateContents):
        Exclude BitmapTexture class from TextureMapper

        * platform/graphics/texmap/BitmapTextureGL.cpp: Added.
        * platform/graphics/texmap/BitmapTextureGL.h: Added.
        Exclude BitmapTextureGL class from TextureMapperGL
        (WebCore::BitmapTextureGL::clipStack): Added.
        Add the getter for clipStack for TextureMapperGL
        (WebCore::BitmapTextureGL::Bind): Deleted.
        (WebCore::BitmapTextureGL::BindAsSurface): Added.
        Bind used TextureMapperGL's internal data directly to compute projection matrix as a friend class,
        However, TextureMapperGL can compute projection matrix itself after binding job, so this
        friend ship is not needed. Also, this patch renames Bind to BindAsSurface to remove ambiguity.

        * platform/graphics/texmap/BitmapTextureImageBuffer.cpp: Added.
        * platform/graphics/texmap/BitmapTextureImageBuffer.h: Added.
        Exclude BitmapTextureImageBuffer class from TextureMapperImageBuffer

        * platform/graphics/texmap/BitmapTexturePool.cpp: Added.
        * platform/graphics/texmap/BitmapTexturePool.h: Added.
        Exclude BitmapTexturePool class from TextureMapperGL
        (WebCore::BitmapTexturePool::acquireTexture):
        Modified to use passed GraphicsContext3D instead of TextureMapperGL to remove redundant coupling

        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        Remove BitmapTexturePool and BitmapTexture from its implementation.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        Remove BitmapTextureGL from its implementation.
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::clipStack):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::currentSurface):
        Add a getter of the current surface for filtering operation in BitmapTextureGL.
        It would be clear to move filtering operation from BitmapTextureGL to TextureMapperGL later.

        (WebCore::TextureMapperGL::ClipStack):
        Move inner class declaration to public.

        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        Remove BitmapTextureImageBuffer from its implementation.

2015-03-27  Tim Horton  <timothy_horton@apple.com>

        WebProcess started by editable WKWebView spends 15% of its initialization time loading DataDetectors
        https://bugs.webkit.org/show_bug.cgi?id=143142
        <rdar://problem/20324495>

        Reviewed by Anders Carlsson.

        Calling DataDetectorsLibrary() is expensive; we should avoid doing it
        until actually necessary. When loading a page that makes a caret selection,
        ServicesOverlayController was calling DataDetectorsLibrary() (ignoring the fact
        that a caret selection can't have any services associated with it) to avoid
        crashing on systems where DataDetectors is not available. Instead, we should
        first check if there's anything to do, and then check for the existence
        of DataDetectors.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        Build the list of phone number ranges, and bail (clearing the potential highlights)
        if it is empty, before calling DataDetectorsLibrary().

        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        Check the list of selection rects, and bail (clearing the potential highlights)
        if it is empty, before calling DataDetectorsLibrary().

2015-03-27  Jer Noble  <jer.noble@apple.com>

        [Mac] Safari fails to fire page "load" event with video[preload=none]
        https://bugs.webkit.org/show_bug.cgi?id=143147

        Reviewed by Simon Fraser.

        Test: media/video-page-load-preload-none.html

        When told to load() when preload == None, set the networkState to Idle.
        This causes HTMLMediaElement to set the shouldDelayLoadEvent flag to
        false, and allows the page's 'load' event to fire.

        Drive-by fix: add setNetworkState() and setReadyState() methods to
        MediaPlayerPrivateAVFoundation, reducing a bunch of code duplication.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        (WebCore::MediaPlayerPrivateAVFoundation::setNetworkState):
        (WebCore::MediaPlayerPrivateAVFoundation::setReadyState):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2015-03-27  Alexey Proskuryakov  <ap@apple.com>

        Calling crypto.webkitSubtle.generateKey causes page memory to never be released
        https://bugs.webkit.org/show_bug.cgi?id=143151
        rdar://problem/18940687

        Reviewed by Tim Horton.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::generatePair): Don't.

2015-03-27  Brent Fulgham  <bfulgham@apple.com>

        Null dereference in InbandMetadataTextTrack handling
        https://bugs.webkit.org/show_bug.cgi?id=143144
        <rdar://problem/18983250>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes): Check for null return value from
        'client()', just like we do in all other methods.

2015-03-27  Oliver Hunt  <oliver@apple.com>

        Forward additional CFNetwork ATS information to child processes
        https://bugs.webkit.org/show_bug.cgi?id=143136

        Reviewed by Anders Carlsson.

        Declare SPI.

        * platform/spi/cf/CFNetworkSPI.h:

2015-03-27  Chris Dumez  <cdumez@apple.com>

        [WK2][NetworkCache] We only cache responses with status codes that are cacheable by default
        https://bugs.webkit.org/show_bug.cgi?id=143125
        <rdar://problem/20321172>

        Reviewed by Antti Koivisto.

        Export a couple of extra symbols.

        * platform/network/ResourceResponseBase.h:

2015-03-27  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement will fire 'seeked' before seek completes, leading to currentTime discontinuities.
        https://bugs.webkit.org/show_bug.cgi?id=143132

        Reviewed by Eric Carlson.

        When seeking, if the ready state rises to >= HAVE_CURRENT_DATA, we will fire the 'seeked'
        event and continue playback. However, if a media engine updates the ready state before its
        seek operation actually completes, the currentTime it returns may still be the time before
        the seek.

        Wait until both the ready state rises to HAVE_CURRENT_DATA and m_player->seeking() returns
        false before firing the 'seeked' event.

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

2015-03-26  Geoffrey Garen  <ggaren@apple.com>

        Make some more objects use FastMalloc
        https://bugs.webkit.org/show_bug.cgi?id=143122

        Reviewed by Csaba Osztrogonác.

        * Modules/geolocation/GeolocationController.h:
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * Modules/notifications/NotificationController.h:
        * Modules/webdatabase/DatabaseServer.h:
        * css/CSSFontFaceSource.h:
        * html/HTMLMediaSession.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorReplayAgent.h:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/PageConsoleClient.h:
        * page/PageDebuggable.h:
        * page/animation/CSSPropertyAnimation.cpp:
        * page/mac/ServicesOverlayController.h:
        * platform/RemoteCommandListener.h:
        * platform/Timer.h:
        * platform/audio/MediaSessionManager.h:
        * platform/mac/SystemSleepListenerMac.h:
        * platform/mac/ThemeMac.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * replay/ReplayController.h:

2015-03-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        FEMorphology::platformApplyGeneric() should bail out if the radius is less than or equal to zero.
        https://bugs.webkit.org/show_bug.cgi?id=142885.

        Reviewed by Dean Jackson.

        FEMorphology class implementation code clean up.
        
        Tests: svg/filters/feMorphology-radius-cases.svg

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::shouldSupersedeExtremum): Reuse code instead of repeating it and
        use < and > instead of =< and >=.
        
        (WebCore::pixelArrayIndex): Returns the array index of a pixel in an image
        buffer, given: position(x, y), image width and the color channel.
        
        (WebCore::columnExtremum): Returns the extremum of a column of pixels.
        
        (WebCore::kernelExtremum): Returns the extremum of a filter kernel.
        
        (WebCore::FEMorphology::platformApplyGeneric): Apply some code clean-up.
        The kernel size should be equal to radius of the filter. The extra pixel
        was causing the resulted image to be asymmetric in some cases.
        
        (WebCore::FEMorphology::platformApplyDegenerate):
        (WebCore::FEMorphology::platformApplySoftware): After applying scaling, we
        still need to check the resulted radius is negative (overflow case) or less
        than one (zero radius case) and treat these cases differently.
        
        (WebCore::FEMorphology::morphologyOperator): Deleted.
        (WebCore::FEMorphology::radiusX): Deleted.
        (WebCore::FEMorphology::radiusY): Deleted.
        * platform/graphics/filters/FEMorphology.h:
        (WebCore::FEMorphology::morphologyOperator):
        (WebCore::FEMorphology::radiusX):
        (WebCore::FEMorphology::radiusY):
        Move a single line functions from the source file to the header file.

2015-03-27  Antti Koivisto  <antti@apple.com>

        Move CacheValidation to platform
        https://bugs.webkit.org/show_bug.cgi?id=143133

        Reviewed by Chris Dumez.

        It deals with platform types only and is currently violating layering.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CacheValidation.cpp: Removed.
        * loader/cache/CacheValidation.h: Removed.
        * platform/network/CacheValidation.cpp: Copied from Source/WebCore/loader/cache/CacheValidation.cpp.
        * platform/network/CacheValidation.h: Copied from Source/WebCore/loader/cache/CacheValidation.h.

2015-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177896.
        https://bugs.webkit.org/show_bug.cgi?id=142978

        Loading libgstclutter.so in-process hangs web process
        (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "[GStreamer] Disable gst-plugin-scanner if seccomp filters are
        enabled"
        https://bugs.webkit.org/show_bug.cgi?id=140069
        http://trac.webkit.org/changeset/177896

2015-03-26  Antti Koivisto  <antti@apple.com>

        Respect cache-control directives in request
        https://bugs.webkit.org/show_bug.cgi?id=143121
        rdar://problem/19714040

        Reviewed by Chris Dumez.

        Test: http/tests/cache/disk-cache/disk-cache-request-headers.html

        * loader/cache/CacheValidation.cpp:
        (WebCore::isCacheHeaderSeparator):
        (WebCore::isControlCharacter):
        (WebCore::trimToNextSeparator):
        (WebCore::parseCacheHeader):
        (WebCore::parseCacheControlDirectives):

            Factor Cache-control parsing here so it can be used for both requests and responses.

        * loader/cache/CacheValidation.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::cacheControlContainsNoCache):
        (WebCore::ResourceResponseBase::cacheControlContainsNoStore):
        (WebCore::ResourceResponseBase::cacheControlContainsMustRevalidate):
        (WebCore::ResourceResponseBase::cacheControlMaxAge):
        (WebCore::isCacheHeaderSeparator): Deleted.
        (WebCore::isControlCharacter): Deleted.
        (WebCore::trimToNextSeparator): Deleted.
        (WebCore::parseCacheHeader): Deleted.
        * platform/network/ResourceResponseBase.h:

2015-03-27  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] share GL context in pipeline, part 2
        https://bugs.webkit.org/show_bug.cgi?id=143049

        Reviewed by Carlos Garcia Campos.

        This patch, instead of cluttering the GstGL attributes creation in
        ::handleSyncMessage(), creates a new method ::ensureGstGLContext(),
        where those attributes are defined. This method is guarded by
        USE(GSTREAMER_GL)

        ::handlSyncMessage() shall return nothing, according to GStreamer
        documentation, not a boolean.

        The GstGL attributes are now GRefPtr<> to avoid memory leaks.

        The GstGLAPI and GstGLPlatform are now set given by the pre-processor
        directives, and the code in ::ensureGstGLContext() is simpler.

        No new tests because this is platform specific and it depends in the
        run-time availability and configurations of GstGL elements.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Don't initialise the GstGL attributes since are GRefPtr<>
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): Changed the
        signature to use void instead of gboolean.
        (WebCore::MediaPlayerPrivateGStreamer::ensureGstGLContext): New method.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2015-03-26  Jeremy Jones  <jeremyj@apple.com>

        Optimized Fullscreen fails to cleanup because of no longer necessary release of m_playerController in exitFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=143120

        Reviewed by Eric Carlson.

        We used to release m_playerController in WebVideoFullscreenInterfaceAVKit::exitFullscreen() in order to make sure 
        media state was reset. This is no longer necessary as we now have a way the model can explicitly request resetting the
        media state via resetMediaState(). m_playerController is already released in 
        WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal(). Releasing it prematurely can actually prevent the exit
        fullscreen process from completing successfully.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):

2015-03-26  Zalan Bujtas  <zalan@apple.com>

        Inline continuation code should not take anonymous containing wrapper granted.
        https://bugs.webkit.org/show_bug.cgi?id=133312

        Reviewed by Dave Hyatt.

        It's wrong to assume that when RenderInline is part of an inline continuation, its containing block
        is an anonymous wrapper and its sibling might be a block level renderer.
        When the inline continuation is no longer needed, for example when the block level renderer that initiated the continuation
        is detached from the render tree, the inline renderes still continue to form continuation.(however they no longer require
        anonymous wrappers)

        Test: fast/inline/crash-when-position-property-is-changed-and-no-longer-in-continuation.html

        * rendering/RenderInline.cpp:
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::styleDidChange):

2015-03-26  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r181358 and r181507): Lots of sites think that we support touch events on OS X
        https://bugs.webkit.org/show_bug.cgi?id=142888
        <rdar://problem/20227304>

        Reviewed by Beth Dakin.

        * dom/Document.idl:
        * dom/Element.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:
        * page/DOMWindow.idl:
        Re-conditionalize a lot of event listeners; sites test ("ontouchstart" in window), which
        is not covered by NotEnumerable, and so r181358 and r181507 broke a bunch of sites
        (apple.com, blaze.com, anything using nicescroll.js, etc.) by causing them to think
        that (Mac) Safari was touch-enabled.

2015-03-26  Geoffrey Garen  <ggaren@apple.com>

        "lineNo" does not match WebKit coding style guidelines
        https://bugs.webkit.org/show_bug.cgi?id=143119

        Reviewed by Michael Saboff.

        We can afford to use whole words.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSMainThreadExecStateInstrumentation.h:
        (WebCore::JSMainThreadExecState::instrumentFunctionCall):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):

2015-03-26  Roger Fong  <roger_fong@apple.com>

        Apply blur effect to media control background.
        https://bugs.webkit.org/show_bug.cgi?id=143116.
        <rdar://problem/20316964>.

        Reviewed by Brent Fulgham.

        There are still a few issues, like the borders of the controls being blurred with black,
        and the volume slider background not showing the blur effect. Will fix those separately.

        Add CSS for new divs to create blur effect using back drop filters and blend modes.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-panel-tint):
        (audio::-webkit-media-controls-panel-background):
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-volume-slider-container-background):
        (audio::-webkit-media-controls-volume-slider-container-tint):
        (audio::-webkit-media-controls-toggle-closed-captions-button): Adjust fill.
        (audio::-webkit-media-controls-fullscreen-button): Adjust fill.
        (audio::-webkit-media-controls-fullscreen-button.exit): Adjust fill.
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (audio:-webkit-full-screen::-webkit-media-controls-panel-tint):
        (audio:-webkit-full-screen::-webkit-media-controls-panel-background):
        (video:-webkit-full-screen::-webkit-media-controls-panel .volume-box):
        (video:-webkit-full-screen::-webkit-media-controls-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button):
        (video:-webkit-full-screen::-webkit-media-controls-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-status-display):
        (audio::-webkit-media-controls-panel .volume-box:active): Deleted.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.configureInlineControls): Add new divs for blurred background effect.
        (Controller.prototype.configureFullScreenControls): Ditto.
        (Controller.prototype.handlePanelMouseDown): The tint div is now in front.
        (Controller.prototype.drawTimelineBackground): Adjust colors to make border look better with new background.
        (Controller.prototype.drawVolumeBackground): Ditto.

2015-03-26  Geoffrey Garen  <ggaren@apple.com>

        Assertion firing in JavaScriptCore/parser/parser.h for statesman.com site
        https://bugs.webkit.org/show_bug.cgi?id=142974

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction): Use the new override
        line number API to guarantee that errors will map to the .html file locations
        that we like.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition): Added a FIXME to cover
        some cases where our line and column numbers are still nonsense.

2015-03-26  Beth Dakin  <bdakin@apple.com>

        Relevant repainted objects callback is inaccurate and inconsistent for PDF 
        documents
        https://bugs.webkit.org/show_bug.cgi?id=143118
        -and corresponding-
        rdar://problem/13371582

        Reviewed by Tim Horton.

        Investigating this bug resulted in finding two things that should change for the 
        relevant repainted objects heuristic. First, we should not count any objects 
        painted while updating control tints. And secondly, we should not use it at all 
        for plugin documents. In other documents, we count the plugin area as “painted” 
        when we get to paint whether or not the plugin has actually loaded. This is 
        intentional because it allows us to account for chunks of the page that will be 
        filled in by possibly slow-loading ads. However, if the plugin is the whole 
        document, then the heuristic just doesn’t make any sense and it leads to 
        inconsistent behavior at different window sizes. So we’ll only count plugins when 
        the document is not a plugin document. 

        Don’t count objects during this paint!
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        * page/Page.h:
        (WebCore::Page::setIsCountingRelevantRepaintedObjects):

        Make sure the document is not a plugin document.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paint):

2015-03-26  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=143112

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * platform/graphics/mac/IconMac.mm:

2015-03-26  Jer Noble  <jer.noble@apple.com>

        [iOS] Accessibility crashing because MediaPlayer is laying out UI off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=142970

        Reviewed by Eric Carlson.

        isMainThread() will (ironically) return true if called from the web thread. Rather than dispatch
        synchronously to the main thread to allocate the _volumeView, dispatch asynchronously and handle
        the case where the MPVolumeView has not yet been created.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper allocateVolumeView]): Dispatch to the main thread to allocate. Move notification
            registration to -setVolumeView:.
        (-[WebMediaSessionHelper setVolumeView:]): Added. Register/Unregister for route availablitiy notifications.
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]): Handle the possibility of a nil _volumeView.

2015-03-26  Benjamin Poulain  <bpoulain@apple.com>

        Fix state maching debugging after r181964
        https://bugs.webkit.org/show_bug.cgi?id=143082

        Reviewed by Alex Christensen.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):

2015-03-25  David Hyatt  <hyatt@apple.com>

        Improve the offsetWidth/Height layout optimization
        https://bugs.webkit.org/show_bug.cgi?id=143008

        Reviewed by Zalan Bujtas.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        * dom/Document.h:
        Change Element* to Element&. Clean up the dimension bits to use shifting. Remove both the inline and
        the positioning restrictions on the optimization check.

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        Change to use Element& instead of Element*.

        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        Turn on the optimization for clientWidth/Height and scrollWidth/Height.

2015-03-26  Brady Eidson  <beidson@apple.com>

        Apply ContentExtension actions after redirects.
        <rdar://problem/20062613> and https://bugs.webkit.org/show_bug.cgi?id=143055

        Reviewed by Alex Christensen.

        Tests: http/tests/contentextensions/loading/main-resource-redirect-blocked.php
               http/tests/contentextensions/subresource-redirect-blocked.html

        This patch moves the "run a URL against the content extension" code from CachedResourceLoader to
        the ContentExtensionsBackend.

        That allows it to be shared between the CachedResourceLoader where loads are initiated and 
        ResourceLoader where redirects are handled.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::displayNoneCSSRule):
        * contentextensions/ContentExtensionsBackend.h:

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):

        * loader/ResourceLoadInfo.h:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::ResourceLoader):
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:

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

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

        * page/UserContentController.cpp:
        (WebCore::UserContentController::processContentExtensionRulesForLoad):
        (WebCore::UserContentController::actionsForResourceLoad): Deleted.
        (WebCore::UserContentController::globalDisplayNoneStyleSheet): Deleted.
        (WebCore::UserContentController::displayNoneCSSRule): Deleted.
        * page/UserContentController.h:

2015-03-26  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash when laying out (char)0
        https://bugs.webkit.org/show_bug.cgi?id=143103

        Reviewed by Dean Jackson.

        We currently cache a character -> Font mapping in a HashMap.
        However, keys in Hashmaps can't be 0. This patch simply skips
        the cache in this case.

        No new tests, for now. I'm having trouble creating a test because
        the site that causes this bug generates their page using script,
        and the script is all minified, and difficult to understand. I
        will contact the owner of the site and ask for and unminified
        version of their sources. However, I don't want to that to block
        this tiny fix from going in.

        * platform/graphics/Font.cpp:
        (WebCore::Font::systemFallbackFontForCharacter):

2015-03-26  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Crash at com.apple.WebCore: WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys + 177
        https://bugs.webkit.org/show_bug.cgi?id=143080

        Reviewed by Eric Carlson.

        Null-check m_certificate before dereferencing.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys):

2015-03-26  Chris Fleizach  <cfleizach@apple.com>

        AX: [role="button"][aria-pressed] should be exposed as AXCheckbox:AXToggleButton, with role description of "toggle button"
        https://bugs.webkit.org/show_bug.cgi?id=115298

        Reviewed by Mario Sanchez Prada.

        A role=button + aria-pressed object should be exposed as AXCheckbox on Mac now. It should also convert the
        aria-pressed state into a 0, 1, 2 number value for the Mac.

        Test: platform/mac/accessibility/aria-pressed-button-attributes.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::checkboxOrRadioValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isToggleButton):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2015-03-25  Dean Jackson  <dino@apple.com>

        CSS blend modes do not parse when in the shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=143067
        <rdar://problem/20302662>

        Reviewed by Anders Carlson.

        The media controls style sheets are injected as UA stylesheets
        when we come across a <video> or <audio> element. These stylesheets
        have a different parsing context than the document stylesheets -
        one that uses the default constructor, which initializes some
        features like cssCompositingEnabled to false without checking
        the runtime state.

        The easy fix is to use the global state to initialize the context.

        Unfortunately we can't test this since it only occurs in the shadow
        tree.

        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext): Check the state
        of RuntimeEnabledFeatures to initialize CSS Regions and
        CSS Compositing (Blending).

2015-03-25  Chris Fleizach  <cfleizach@apple.com>

        AX: table cells that use display:block render the table inaccessible to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=143007

        Reviewed by Mario Sanchez Prada.

        When display:block is used on a table cell, it was being ignored because it was anonymous.
        This is still a valid scenario however if it's still inside of a valid table.

        Test: accessibility/table-cell-display-block.html

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

2015-03-25  Tim Horton  <timothy_horton@apple.com>

        Add a preference to prevent "user-scalable=no" from having any effect
        https://bugs.webkit.org/show_bug.cgi?id=143032

        Reviewed by Sam Weinig.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::allowsUserScaling):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::setForceAlwaysUserScalable):
        If forceAlwaysUserScalable is set to true, force "user-scalable=yes".

2015-03-25  Dan Bernstein  <mitz@apple.com>

        Another attempt to get the iOS EWS building again.

        * WebCore.xcodeproj/project.pbxproj:

2015-03-25  Alex Christensen  <achristensen@webkit.org>

        Add case-insensitive checks to DFA bytecode.
        https://bugs.webkit.org/show_bug.cgi?id=142977

        Reviewed by Benjamin Poulain.

        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValue):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValueRange):
        Add case-insensitive bytecode.
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        Check to see if case-insensitive bytecodes can be used.
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileCheckForRange):
        * contentextensions/DFABytecodeCompiler.h:
        (WebCore::ContentExtensions::DFABytecodeCompiler::Range::Range):
        Added Range structure to be able to count the ranges in a future patch deciding if we want to use jump tables.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Interpret case-insensitive bytecodes.

2015-03-25  Sam Weinig  <sam@webkit.org>

        Address additional review feedback from https://bugs.webkit.org/show_bug.cgi?id=143059.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getTypeFlags):

2015-03-25  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Convert content extension compiling to return error codes and write its output using a client
        https://bugs.webkit.org/show_bug.cgi?id=143059

        Reviewed by Alex Christensen.

        * WebCore.xcodeproj/project.pbxproj:
        Add ContentExtensionError.h/cpp.

        * contentextensions/ContentExtensionError.cpp: Added.
        (WebCore::ContentExtensions::contentExtensionErrorCategory):
        * contentextensions/ContentExtensionError.h: Added.
        (WebCore::ContentExtensions::make_error_code):
        Add ContentExtensionError enum and std::error_code adaptor.

        * contentextensions/ContentExtensionCompiler.h:
        Instead of returning CompiledContentExtensionData, use a client interface
        to pass data. Eventually, this should be turned into a direct streaming 
        interface so we can write directly to a file.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getTypeFlags):
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        (WebCore::ContentExtensions::loadRule):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionParser.h:
        Convert to return an error.

2015-03-25  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r181660): Safari navigates to link after a starting and canceling a 
        force preview
        https://bugs.webkit.org/show_bug.cgi?id=143057
        -and corresponding-
        rdar://problem/20251436

        Reviewed by Tim Horton.

        This patch adds a value for ActionUpdated to the ImmediateActionStage enum. Now if 
        m_immediateActionStage indicates that an immediate action has either begun or 
        completed then we can have the same behavior.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:

2015-03-25  Dean Jackson  <dino@apple.com>

        MediaControls: Use font with fixed number width
        https://bugs.webkit.org/show_bug.cgi?id=143018
        <rdar://problem/20245415>

        Reviewed by Eric Carlson.

        Add a new font-family, specific to Apple platforms,
        called -apple-system-font-monospaced-numbers. This is
        a special variant of the system font which uses monospaced
        forms for the number glyphs - allowing a time reading that
        doesn't bounce around as the time changes.

        * Modules/mediacontrols/mediaControlsApple.css: Media controls should
        use the new font.
        (audio::-webkit-media-controls-time-remaining-display):
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-time-remaining-display):

        * platform/graphics/ios/FontCacheIOS.mm: Request a new CTFontRef with
        the appropriate attributes.
        (WebCore::createCTFontWithFamilyNameAndWeight):
        * platform/graphics/mac/FontCacheMac.mm: Ditto, but NSFont.
        (WebCore::fontWithFamily):
        * platform/spi/cocoa/CoreTextSPI.h: Expose the constants for
        the new form so that the public SDK can build.

2015-03-25  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add multi-DFA compiling and interpreting.
        https://bugs.webkit.org/show_bug.cgi?id=143010

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Compile multiple NFAs to DFAs.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Fixed a bug when there are no non-universal actions.
        We still need to report that no ignore-previous-rules was hit to apply the
        universal actions which are now accessed through DFABytecodeInterpreter::actionsFromDFARoot
        and skipped in DFABytecodeInterpreter::interpret.
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        Add a header for each DFA.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Interpret as many DFAs as there are in the bytecode.

2015-03-25  Per Arne Vollan  <peavo@outlook.com>

        [Win] Illegal character in project file.
        https://bugs.webkit.org/show_bug.cgi?id=143051

        Reviewed by Brent Fulgham.

        There is an illegal character in the WebCore project filter.
        WebCore files are shown unfiltered.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2015-03-25  David Hyatt  <hyatt@apple.com>

        Add a pref to enable the new block-inside-inline model
        https://bugs.webkit.org/show_bug.cgi?id=143050

        Reviewed by Sam Weinig.

        * page/Settings.in:

2015-03-25  Dan Bernstein  <mitz@apple.com>

        iOS Simulator build fix.

        * platform/spi/cocoa/IOSurfaceSPI.h:

2015-03-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181932.
        https://bugs.webkit.org/show_bug.cgi?id=143041

        The test fails most of the time on bots (Requested by ap on
        #webkit).

        Reverted changeset:

        "[Content Extensions] Add multi-DFA compiling and
        interpreting."
        https://bugs.webkit.org/show_bug.cgi?id=143010
        http://trac.webkit.org/changeset/181932

2015-03-24  Dean Jackson  <dino@apple.com>

        Source/WebCore/rendering/RenderThemeMac.mm:2181:118: error: null passed to a callee that requires a non-null argument [-Werror,-Wnonnull]
        https://bugs.webkit.org/show_bug.cgi?id=143039

        Unreviewed build fix for newer versions of OS X.

        * rendering/RenderThemeMac.mm: Define a null language parameter. This
        seemed better than turning the clang warning off for just that
        function.
        (WebCore::AttachmentLayout::layOutTitle):
        (WebCore::AttachmentLayout::layOutSubtitle):

2015-03-24  Dan Bernstein  <mitz@apple.com>

        Another attempt to fix the build.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-03-24  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add multi-DFA compiling and interpreting.
        https://bugs.webkit.org/show_bug.cgi?id=143010

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Compile multiple NFAs to DFAs.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Fixed a bug when there are no non-universal actions.
        We still need to report that no ignore-previous-rules was hit to apply the
        universal actions which are now accessed through DFABytecodeInterpreter::actionsFromDFARoot
        and skipped in DFABytecodeInterpreter::interpret.
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        Add a header for each DFA.
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Interpret as many DFAs as there are in the bytecode.

2015-03-24  Dan Bernstein  <mitz@apple.com>

        Tried to fix the EWS build.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-03-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181898 and r181909.
        https://bugs.webkit.org/show_bug.cgi?id=143034

        Broke fast/regions/auto-size/autoheight-two-pass-layout-
        complex-002.html (Requested by ap on #webkit).

        Reverted changesets:

        "Improve the offsetWidth/Height layout optimization"
        https://bugs.webkit.org/show_bug.cgi?id=143008
        http://trac.webkit.org/changeset/181898

        "Disable layout dimensions optimization for RenderRegions"
        https://bugs.webkit.org/show_bug.cgi?id=143017
        http://trac.webkit.org/changeset/181909

2015-03-24  Zhuo Li  <zachli@apple.com>

        Scripts running in isolated world should not subject to a page's CSP about 'eval'.
        https://bugs.webkit.org/show_bug.cgi?id=141316.

        Reviewed by Geoffrey Garen.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScript):
        We should not impose the main world Content Security Policy onto the isolated world.

2015-03-24  Chris Dumez  <cdumez@apple.com>

        [Mac] Use .cpp file extension instead of .mm for SharedTimerCF and PowerObserverMac
        https://bugs.webkit.org/show_bug.cgi?id=143026

        Reviewed by Andy Estes.

        Use .cpp file extension instead of .mm for SharedTimerCF and
        PowerObserverMac.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cf/SharedTimerCF.cpp: Renamed from Source/WebCore/platform/cf/SharedTimerCF.mm.
        (WebCore::timerFired):
        Use WTF::AutodrainedPool instead of @autoreleasepool {}.

        * platform/mac/PowerObserverMac.cpp: Renamed from Source/WebCore/platform/mac/PowerObserverMac.mm.

2015-03-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION (r181458): Heap use-after-free in JSSetIterator destructor
        https://bugs.webkit.org/show_bug.cgi?id=142696

        Reviewed and tweaked by Geoffrey Garen.

        Use JSSetIterator/JSMapIterator to iterate over JSSet and JSMap.

        * ForwardingHeaders/runtime/JSMapIterator.h: Added.
        * ForwardingHeaders/runtime/JSSetIterator.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):

2015-03-24  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS Simulator build.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2015-03-24  Benjamin Poulain  <bpoulain@apple.com>

        Make URL filter patterns matching consistent and add a simple canonicalization step
        https://bugs.webkit.org/show_bug.cgi?id=142998

        Reviewed by Alex Christensen.

        This patch makes two changes to the url filter input:
        -Make the matching "Search" by default, the pattern can now appear anywhere
         in the URL by default.
        -Make the input a little less fragile: do not explode on valid input
         that is not formatted in a certain way.

        To implement the search behavior, I simply add an implict ".*" in front of the patterns
        when that make sense.

        To make the input more solid, we do some little modification on the input:
        -Remove duplicated ".*".
        -Remove matching suffixes that do not bring new information.
        -Unify all the ".*" in the same format.

        Why do that here? That should be done through a graph analysis on the machine.

        The reason is this is incredibly cheap compared to the graph analysis. Any state
        removed upfront will save the handling of several hundred nodes in the deterministic
        graph.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::isKnownToMatchAnyString):
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::assertionBOL):
        (WebCore::ContentExtensions::GraphBuilder::fail):
        (WebCore::ContentExtensions::GraphBuilder::simplifySunkTerms):

2015-03-24  Chris Dumez  <cdumez@apple.com>

        Regression(r181671): Caused Timer-related crashes on iOS / WK1
        https://bugs.webkit.org/show_bug.cgi?id=143025

        Reviewed by Andy Estes.

        Call CFRunLoopAddTimer() on WebThreadRunLoop() instead of
        CFRunLoopGetCurrent() for iOS, as we did before r181671.

        I inadvertently changed this in r181671 when merging the Mac
        and iOS implementations.

        No new tests, already covered by existing tests.

        * platform/cf/SharedTimerCF.mm:
        (WebCore::setSharedTimerFireInterval):

2015-03-24  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/20282863> Transforms are flattened in snapshots of on-screen WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=143023

        Reviewed by Tim Horton.

        * platform/spi/cocoa/QuartzCoreSPI.h: Added the declaration of
        CARenderServerRenderLayerWithTransform.

2015-03-24  David Hyatt  <hyatt@apple.com>

        Disable layout dimensions optimization for RenderRegions
        https://bugs.webkit.org/show_bug.cgi?id=143017

        Reviewed by Dean Jackson.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        Turn off the optimization for regions, since auto height regions can change size
        without needing a layout.

2015-03-24  Beth Dakin  <bdakin@apple.com>

        Add events related to force click gesture
        https://bugs.webkit.org/show_bug.cgi?id=142836
        -and corresponding-
        rdar://problem/20210239

        Reviewed by Dean Jackson.

        This patch adds six new events for the force click gesture:

        webkitmouseforcewillbegin -> Event is sent just before mousedown to indicate that 
        force can be perceived if the user presses any harder. The author should prevent 
        default on this event to both prevent the user agent’s default force click 
        features and to receive the other 5 events.

        webkitmouseforcechanged -> This event fires whenever force changes between the 
        mousedown and mouseup. It is a new type of mouse event that includes a force 
        variable which is a normalized number between 0 (corresponds to click) and 1 
        (corresponds to force click). In this patch, I have only added code to send this 
        event between mousedown and mouseforcedown, but as a followup patch, we plan to 
        send it through mouseup.

        webkitmouseforcecancelled -> If the user releases their finger from the trackpad 
        after pressing hard enough to send webkitmouseforcewillbegin events but not hard 
        enough to force click, this event will be sent to indicate that the user bailed 
        out on the gesture.

        webkitmouseforcedown -> The down part of the force click.

        webkitmouseforceup -> The up part of the force click. This event is added in this 
        patch, but does not yet fire. That is work for a follow-up patch.

        webkitmouseforceclick -> The equivalent of the click event for the force click. 
        Should fire just after webkitmouseforceup. This event is added in this patch, but 
        does not yet fire. That is work for a follow-up patch.

        Add new files for WebKitMouseForceEvent to build systems.
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.xcodeproj/project.pbxproj:

        Plumbing for new events.
        * dom/Document.idl:

        Code to dispatch the new events. Currently the code that calls these functions is 
        in WebKit2.
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseForceWillBegin):
        (WebCore::Element::dispatchMouseForceChanged):
        (WebCore::Element::dispatchMouseForceDown):
        (WebCore::Element::dispatchMouseForceUp):
        (WebCore::Element::dispatchMouseForceClick):
        (WebCore::Element::dispatchMouseForceCancelled):
        * dom/Element.h:

        More plumbing.
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/EventNames.in:

        Our new type of mouse event that includes force.
        * dom/WebKitMouseForceEvent.cpp: Added.
        (WebCore::WebKitMouseForceEventInit::WebKitMouseForceEventInit):
        (WebCore::WebKitMouseForceEvent::WebKitMouseForceEvent):
        (WebCore::WebKitMouseForceEvent::~WebKitMouseForceEvent):
        (WebCore::WebKitMouseForceEvent::eventInterface):
        * dom/WebKitMouseForceEvent.h: Added.
        * dom/WebKitMouseForceEvent.idl: Added.

        More plumbing.
        * html/HTMLAttributeNames.in:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap):
        * html/HTMLBodyElement.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):
        * page/DOMWindow.idl:
        * page/EventHandler.h:
        (WebCore::EventHandler::lastMouseDownEvent):

2015-03-24  Anders Carlsson  <andersca@apple.com>

        Fix designated initializer violations
        https://bugs.webkit.org/show_bug.cgi?id=143016
        rdar://problem/20268858

        Reviewed by Dan Bernstein.

        Mark -[DOMObject init] as unavailable.

        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMObject.mm:
        (-[DOMObject init]):

2015-03-24  Benjamin Poulain  <benjamin@webkit.org>

        CSS Selectors Level 4: enable case-insensitive attribute matching by default
        https://bugs.webkit.org/show_bug.cgi?id=142960

        Reviewed by Andreas Kling.

        All open issues have been resolved, enable the feature by default.

        Test: fast/css/attribute-selector-case-insensitive.html

        * css/CSSGrammar.y.in:

2015-03-24  Dean Jackson  <dino@apple.com>

        MediaControls: Scrubber and Time displays have the incorrect blending
        https://bugs.webkit.org/show_bug.cgi?id=143011
        <rdar://problem/20245251>

        Reviewed by Eric Carlson.

        The scrubber in media controls should use plus-darker blending. Then
        the scrubber itself should use a slightly transparent black (55% opacity)
        when drawing.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline): Add the blend mode.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.drawTimelineBackground): Start drawing with
        transparency. I changed the order of rendering to make it
        more clear we draw the three parts in left to right order.

2015-03-24  David Hyatt  <hyatt@apple.com>

        Improve the offsetWidth/Height layout optimization
        https://bugs.webkit.org/show_bug.cgi?id=143008

        Reviewed by Dean Jackson.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        * dom/Document.h:
        Change Element* to Element&. Clean up the dimension bits to use shifting. Remove both the inline and
        the positioning restrictions on the optimization check.

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        Change to use Element& instead of Element*.

        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::scrollWidth):
        (WebCore::Element::scrollHeight):
        Turn on the optimization for clientWidth/Height and scrollWidth/Height.

2015-03-24  Yoav Weiss  <yoav@yoav.ws>

        Stop image from displaying when src attribute is removed or emptied
        https://bugs.webkit.org/show_bug.cgi?id=142677

        Reviewed by Chris Dumez.

        Previously, we ignored empty attribute as failed URL, and didn't update the
        renderer when an image was removed. This patch fixes that.

        Tests: fast/dom/HTMLImageElement/image-empty-src.html
               fast/dom/HTMLImageElement/image-remove-src.html

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):

2015-03-17  Philippe Normand  <pnormand@igalia.com>

        [OpenWebRTC] RealtimeMediaSourceCenter implementation
        https://bugs.webkit.org/show_bug.cgi?id=142476

        Reviewed by Eric Carlson.

        The old GStreamer MediaStreamCenter is replaced by the OpenWebRTC
        RealtimeMediaSourceCenter. It is not yet able to correctly assess
        MediaConstraints so it selects the first audio/video sources
        available through OpenWebRTC.

        * PlatformEfl.cmake: Add new files to the build.
        * PlatformGTK.cmake: Ditto.
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp: Removed.
        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.cpp: Added.
        (WebCore::initializeOpenWebRTC): Simple function to initialize the
        framework, it is going to be used by the PeerConnection backend as well.
        * platform/mediastream/openwebrtc/OpenWebRTCUtilities.h: Added.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp: Added.
        (WebCore::mediaSourcesAvailableCallback): Function invoked once
        the media sources discovery succeeded within OpenWebRTC.
        (WebCore::RealtimeMediaSourceCenter::platformCenter): Instantiate
        the OpenWebRTC RealtimeMediaSourceCenter.
        (WebCore::RealtimeMediaSourceCenterOwr::RealtimeMediaSourceCenterOwr):
        (WebCore::RealtimeMediaSourceCenterOwr::~RealtimeMediaSourceCenterOwr):
        (WebCore::RealtimeMediaSourceCenterOwr::validateRequestConstraints):
        Schedule a discovery process for the capture sources.
        (WebCore::RealtimeMediaSourceCenterOwr::createMediaStream): Pick
        the first audio/video sources and create a MediaStream accordingly.
        (WebCore::RealtimeMediaSourceCenterOwr::getMediaStreamTrackSources):
        Not yet implemented.
        (WebCore::RealtimeMediaSourceCenterOwr::mediaSourcesAvailable):
        Method invoked once the capture sources process succeeded. Parse
        them and create an internal cache of RealtimeMediaSources accordingly.
        (WebCore::RealtimeMediaSourceCenterOwr::firstSource): Utility
        function to fetch the first source of the given type from the
        RealtimeMediaSources cache.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h.
        * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h: Added.

2015-03-24  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL] Add OpenWebRTC in jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=142778

        Reviewed by Gyuyoung Kim.

        Original patch by Philippe Normand <pnormand@igalia.com>

        * PlatformEfl.cmake: Add OpenWebRTC CFLAGS and LDFLAGS.

2015-03-23 Yoav Weiss  <yoav@yoav.ws>

        Update empty image canvas tests and fix a related bug
        https://bugs.webkit.org/show_bug.cgi?id=142694

        Reviewed by Chris Dumez.

        During the work on https://bugs.webkit.org/show_bug.cgi?id=142677
        we encountered an issue with canvas tests related to empty image handling
        when drawn or used as a pattern. After updating these tests, an issue with
        pattern handling was encountered.

        The spec, as well as Chrome's implementation, say that when an empty image
        is used as a pattern, createPattern should return null. See
        https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:check-the-usability-of-the-image-argument
        Instead, createPattern returned an exception in this case.
        This patch fixes that and makes sure that it returns a null when image loading hasn't started.

        Tests: canvas/philip/tests/2d.drawImage.incomplete.emptysrc.html
               canvas/philip/tests/2d.drawImage.incomplete.nosrc.html
               canvas/philip/tests/2d.drawImage.incomplete.removedsrc.html
               canvas/philip/tests/2d.pattern.image.incomplete.emptysrc.html
               canvas/philip/tests/2d.pattern.image.incomplete.removedsrc.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern): Return "null" if image is not fully decodeable.

2015-03-23  Alex Christensen  <achristensen@webkit.org>

        Fix api tests after r181876.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        Always append a CSSDisplayNoneStyleSheet action if no ignore-previous-rules is seen.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        Changed an assertion to a null check.

2015-03-23  Dean Jackson  <dino@apple.com>

        Timelines are sharing the same canvas background
        https://bugs.webkit.org/show_bug.cgi?id=142994
        <rdar://problem/20209466>

        Reviewed by Brent Fulgham.

        Since each MediaControl lives in an isolated world, we
        can't rely on a global variable to provide a unique
        identifier for a named canvas. The fix is to expose
        WebCore's UUID generator, and have each canvas use
        that for a name.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::generateUUID): New method on the
        MediaControlsHost that generates a UUID.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsApple.js: Remove the global
        variable unique ID that wasn't working, and instead get
        an ID from the MediaControlsHost.
        (Controller.prototype.createControls):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS):

2015-03-23  Brent Fulgham  <bfulgham@apple.com>

        Scroll latching logic can get stuck in 'scrollable="no"' iframes
        https://bugs.webkit.org/show_bug.cgi?id=142789
        <rdar://problem/20129494>

        Reviewed by Dean Jackson.

        Clean up the EventHandler and latching code as follows:
        (1) Do not handle iframe elements as part of the normal latching logic. Instead, iframes should
            be evaluated during the 'platformCompleteWheelEvent' phase of processing as top-level scrolling
            frames.
        (2) Get rid of the ill-conceived notation that we should process non-mainframe and main-frame frames
            different.
        (3) Modify code to reflect that the scroll latching code really deals with overflow scrolling. Consequently,
            the 'findEnclosingScrollableContainer' was renamed to 'findEnclosingOverflowScroll' and does not
            treat iframe as a suitable target.
        (4) Do not create a latching state object when the container being evaluated is already scrolled to the
            extreme position in the direction of the mouse gesture. In this case, we want the enclosing frame
            to be the latching target.
        (5) Do not treat the state where the mouse wheel gesture has ended manual scrolling, but has not ended
            momentum scrolling, as an appropriate time to select a latching target.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformCompleteWheelEvent): Modify signature to remove unneeded argument.
        (WebCore::EventHandler::handleWheelEvent): Modify call to 'platformCompleteWheelEvent' to remove unused argument.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::findEnclosingOverflowScroll): Renamed from 'findEnclosingScrollableContainer' and revised per the
        notes above.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Remove mainFrame vs. non-mainFrame code paths and
        consolidate logic.
        (WebCore::EventHandler::platformCompleteWheelEvent): Remove unused argument. The wheel event target is no
        longer needed here, now that iframes are not processed by this code.
        (WebCore::findEnclosingScrollableContainer): Deleted.
        * page/scrolling/ScrollLatchingState.cpp:
        (WebCore::ScrollLatchingState::setPreviousWheelScrolledElement:) Switch to move operator for passing
        a temporary RefPtr to the the function.
        * page/scrolling/ScrollLatchingState.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::useLatchedEventElement): Recognize 'phase=ended, momentum=none' as a state
        that should not cause latching state to be revised.

2015-03-23  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        * platform/network/mac/CookieJarMac.mm:

2015-03-23  Brady Eidson  <beidson@apple.com>

        Content extensions should apply css selectors
        https://bugs.webkit.org/show_bug.cgi?id=142604

        Reviewed by Alex Christensen.

        Tests: http/tests/contentextensions/css-display-none.html

        * WebCore.xcodeproj/project.pbxproj:

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::create):
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        (WebCore::ContentExtensions::ContentExtension::globalDisplayNoneStyleSheet):
        * contentextensions/ContentExtension.h:
        (WebCore::ContentExtensions::ContentExtension::identifier):
        (WebCore::ContentExtensions::ContentExtension::compiledExtension):

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::addContentExtension):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::globalDisplayNoneStyleSheet):
        * contentextensions/ContentExtensionsBackend.h:

        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::maybeAddContentExtensionSheet):
        * dom/DocumentStyleSheetCollection.h:

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::startLoadingMainResource):
        (WebCore::DocumentLoader::addPendingContentExtensionSheet):
        * loader/DocumentLoader.h:

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setInitiator):
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::initiatingDocumentLoader):

        * page/UserContentController.cpp:
        (WebCore::UserContentController::globalDisplayNoneStyleSheet):
        (WebCore::UserContentController::displayNoneCSSRule):
        * page/UserContentController.h:

2015-03-23  Anders Carlsson  <andersca@apple.com>

        -[_WKWebsiteDataStore removeDataOfTypes:modifiedSince:completionHandler:] doesn't remove cookies
        https://bugs.webkit.org/show_bug.cgi?id=142990
        rdar://problem/20241645

        Reviewed by Andreas Kling.

        Use the Mac version of deleteAllCookiesModifiedSince on iOS as well.

        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/mac/CookieJarMac.mm:

2015-03-23  Conrad Shultz  <conrad_shultz@apple.com>

        Replace uses of kCTFontSystemFontType
        https://bugs.webkit.org/show_bug.cgi?id=142984

        Reviewed by Tim Horton.

        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::layOutTitle):
        (WebCore::AttachmentLayout::layOutSubtitle):

2015-03-23  Dean Jackson  <dino@apple.com>

        kCTFontSystemFontType is deprecated in CoreText
        https://bugs.webkit.org/show_bug.cgi?id=142981
        <rdar://problem/20261171>

        Reviewed by Beth Dakin.

        Update to the non-deprecated version.

        * rendering/RenderThemeIOS.mm: kCTFontSystemFontType -> kCTFontUIFontSystem
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):

2015-03-23  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable fullscreen for MSE-based videos
        https://bugs.webkit.org/show_bug.cgi?id=142971

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsFullscreen): Return true;

2015-03-23  Alex Christensen  <achristensen@webkit.org>

        [MediaFoundation] Implement seek.
        https://bugs.webkit.org/show_bug.cgi?id=142594

        Reviewed by Darin Adler.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::seeking):
        (WebCore::MediaPlayerPrivateMediaFoundation::seekDouble):
        (WebCore::MediaPlayerPrivateMediaFoundation::durationDouble):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-03-23  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformBoundsForGlyph): Switched to non-deprecated CTFontOrientation values.
        (WebCore::Font::platformWidthForGlyph): Ditto.

2015-03-23  Jer Noble  <jer.noble@apple.com>

        [iOS] Accessibility crashing because MediaPlayer is laying out UI off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=142970

        Reviewed by Eric Carlson.

        Return early after synchronously calling to the main thread to allocate the volume
        view, to avoid re-allocating the volume view again on the web thread.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper allocateVolumeView]):

2015-03-23  Tim Horton  <timothy_horton@apple.com>

        Add a share item to the link action menu
        https://bugs.webkit.org/show_bug.cgi?id=142961
        <rdar://problem/19198374>

        Reviewed by Beth Dakin.

        * English.lproj/Localizable.strings:
        Remove some now-unused strings.

        * platform/spi/mac/NSMenuSPI.h:
        Add some SPI.

2015-03-23  David Kilzer  <ddkilzer@apple.com>

        [iOS] Build fix: CoreText deprecated kCTFontSystemFontType

        Fix tracked by:  <rdar://problem/20261171>

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
        Add clang pragmas.

2015-03-23  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseScrollSnapDestination): Remove new assertion.

2015-03-23  Brent Fulgham  <bfulgham@apple.com>

        scroll-snap-destination and scroll-snap-coordinate do not seem to work together properly
        https://bugs.webkit.org/show_bug.cgi?id=142552
        <rdar://problem/20114743>

        Reviewed by Dean Jackson.

        Revise the snap point logic as follows:
        (1) Put the snap point destination handling in a helper function to make the rest of the code
            easier to read.
        (2) Make sure we always have a left-hand snap point (i.e., position 0), but don't add multiple
            left-hand snap points.
        (3) Create a helper function to determine if we should be working with the scroll snap 'elements'
            behavior. We want to use this for scroll-snap-destination/scroll-snap-coordinate markup.
        (4) Create per-element snap point offsets when using scroll-snap-destination/scroll-snap-coordinate.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseScrollSnapDestination): Add assertion to try to catch bad parser state.
        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::destinationOffsetForViewSize): Added helper function to consolidate logic for handling
        destination coordinates.
        (WebCore::updateFromStyle): Make sure a left-hand snap point is always provided.
        (WebCore::styleUsesElements): Added helper function.
        (WebCore::updateSnapOffsetsForScrollableArea): Revise logic to generate 'per-element' snap point
        offsets.

2015-03-23  Yoav Weiss  <yoav@yoav.ws>

        Refactor ImageLoader's setting of CachedImage
        https://bugs.webkit.org/show_bug.cgi?id=142825

        Reviewed by Chris Dumez.

        No new tests, since there's no functional change.

        setImage and setImageWithoutConsideringPendingLoadEvent were not called with new
        CachedImages and were not used as originally intended. That resulted in some dead code,
        and confusion when going over the code.
        This patch renames these methods into equivalent clearImage* methods, and deletes resulting dead code.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent): Changed setImage call to clearImage.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::clearImage):
        (WebCore::ImageLoader::clearImageWithoutConsideringPendingLoadEvent):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::elementDidMoveToNewDocument):
        (WebCore::ImageLoader::setImage): Deleted.
        (WebCore::ImageLoader::setImageWithoutConsideringPendingLoadEvent): Deleted.
        * loader/ImageLoader.h:

2015-03-22  Benjamin Poulain  <benjamin@webkit.org>

        CSS Selectors: fix attribute case-insensitive matching of Contain and List
        https://bugs.webkit.org/show_bug.cgi?id=142932

        Reviewed by Darin Adler.

        Fix the last two attribute selectors that were using full case-insensitive
        match:
            -Contain ([foo*=bar]).
            -List (foo~=bar]).

        Tests: fast/selectors/attribute-contains-value-matching-is-ascii-case-insensitive.html
               fast/selectors/attribute-list-value-matching-is-ascii-case-insensitive.html

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::attributeValueContains):
        (WebCore::SelectorCompiler::attributeValueSpaceSeparetedListContains):

2015-03-22  Benjamin Poulain  <bpoulain@apple.com>

        Detect when url filter pattern with groups match the empty string
        https://bugs.webkit.org/show_bug.cgi?id=142930

        Reviewed by Sam Weinig.

        The previous test was only accounting for simple atoms. This patch extends
        it to groups.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::quantify):
        (WebCore::ContentExtensions::Term::matchesAtLeastOneCharacter):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::Term::quantifier): Deleted.

2015-03-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
        https://bugs.webkit.org/show_bug.cgi?id=142940

        Reviewed by Sam Weinig.

        * dom/Document.cpp:
        (WebCore::Document::didChoosePlaybackTarget): const-ify the didChoosePlaybackTarget argument.
        * dom/Document.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::didChoosePlaybackTarget): Ditto.
        * html/HTMLMediaSession.h:

        * page/Page.cpp:
        (WebCore::Page::didChoosePlaybackTarget):  Ditto.
        * page/Page.h:

        * platform/audio/MediaSession.h:
        * platform/graphics/MediaPlaybackTargetPickerClient.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: 
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker):  Ditto.

2015-03-22  Anders Carlsson  <andersca@apple.com>

        _WKWebsiteDataStore should clear WebSQL databases
        https://bugs.webkit.org/show_bug.cgi?id=142947

        Reviewed by Sam Weinig.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::trackerWithDatabasePath):
        Add a hack so we can get at a tracker from the UI process.

        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        New function that deletes all databases modified after a given time.

        * Modules/webdatabase/DatabaseTracker.h:
        Add new members and export the ones we want to call from WebKit2.

        * Modules/webdatabase/OriginLock.h:
        Export the destructor.

2015-03-21  Dean Jackson  <dino@apple.com>

        Remove the prefix for CSS Transforms
        https://bugs.webkit.org/show_bug.cgi?id=142927
        <rdar://problem/11568151>

        Reviewed by Simon Fraser.

        Support the bare form of:
        - transform
        - transform-style
        - transform-origin
        - perspective
        - perspective-origin

        For transform-style, we also still differentiate the prefixed property
        because we may want to use that as an indicator of legacy content.

        This is mostly a find and replace, but with some related naming
        changes. The DOM interface for WebKitCSSTransformValue remains
        unchanged.

        Tests: transforms/2d/transform-2d-prefixed.html
               transforms/3d/general/prefixed-3dtransform-values.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::propertyChangeMayRepaintNonDescendants):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::parseTranslateTransformValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSPropertyNames.in:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::computeExtentOfAnimation):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperAcceleratedTransform::PropertyWrapperAcceleratedTransform):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::computeExtentOfTransformAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::applyInternal):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHasActiveTransformAnimation):
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):

2015-03-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181824.
        https://bugs.webkit.org/show_bug.cgi?id=142935

        Broke Windows build (Requested by ap on #webkit).

        Reverted changeset:

        "Remove the prefix for CSS Transforms"
        https://bugs.webkit.org/show_bug.cgi?id=142927
        http://trac.webkit.org/changeset/181824

2015-03-20  Dean Jackson  <dino@apple.com>

        Remove the prefix for CSS Transforms
        https://bugs.webkit.org/show_bug.cgi?id=142927
        <rdar://problem/11568151>

        Reviewed by Simon Fraser.

        Support the bare form of:
        - transform
        - transform-style
        - transform-origin
        - perspective
        - perspective-origin

        For transform-style, we also still differentiate the prefixed property
        because we may want to use that as an indicator of legacy content.

        This is mostly a find and replace, but with some related naming
        changes. The DOM interface for WebKitCSSTransformValue remains
        unchanged.

        Tests: transforms/2d/transform-2d-prefixed.html
               transforms/3d/general/prefixed-3dtransform-values.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::propertyChangeMayRepaintNonDescendants):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::parseTranslateTransformValue):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSPropertyNames.in:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::computeExtentOfAnimation):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperAcceleratedTransform::PropertyWrapperAcceleratedTransform):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::computeExtentOfTransformAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::applyInternal):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHasActiveTransformAnimation):
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        (WebCore::RenderLayerBacking::graphicsLayerToCSSProperty):
        (WebCore::RenderLayerBacking::cssToGraphicsLayerProperty):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation):
        * svg/SVGElement.cpp:
        (WebCore::populateAttributeNameToCSSPropertyIDMap):

2015-03-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION (r179429): Potential Use after free in JavaScriptCore`WTF::StringImpl::ref + 83
        https://bugs.webkit.org/show_bug.cgi?id=142410

        Reviewed by Geoffrey Garen.

        The same issues are found in the existing code; PropertyName does not have ownership.
        This patch rewrite the point that should have ownership to Identifier.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSDOMWindow::putByIndex):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::getInternalSlotFromObject):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):

2015-03-20  Simon Fraser  <simon.fraser@apple.com>

        Log the slow-scrolling reasons (if any) on first commit of a ScrollingTreeFrameScrollingNodeMac
        https://bugs.webkit.org/show_bug.cgi?id=142917

        Reviewed by Beth Dakin.
        
        The scrollperf test would fail to detect transitions between slow and fast scrolling
        for new pages, because there was no logging when slow-scrolling scrolling tree was
        torn down, and a new fast-scrolling tree constructed.
        
        Fix by always logging the slow-scrolling reasons in the first update of the
        ScrollingTreeFrameScrollingNodeMac, even when the slow-scrolling reasons haven't
        changed.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren):

2015-03-19  Geoffrey Garen  <ggaren@apple.com>

        Function.prototype.toString should not decompile the AST
        https://bugs.webkit.org/show_bug.cgi?id=142853

        Reviewed by Sam Weinig.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction): Adjust the line
        number of attribute event listeners to account for the leading newline
        now added by JavaScriptCore.

        This solution is not perfect, but there are a lot of pre-existing problems
        with line and column reporting for attribute event listeners, and this
        preserves existing behavior with reasonable reliability.

2015-03-20  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=136003

        Reviewed by Chris Dumez.

        * PlatformMac.cmake:
        Added some directories to create forwarding headers from.
        Generate ObjC bindings.

2015-03-20  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Crash when leaving page while video is playing.
        https://bugs.webkit.org/show_bug.cgi?id=142578

        Reviewed by Alex Christensen.

        This can happen when there is an asynchronous event invoked from a video worker
        thread, accessing the media player object after it has been deleted.
        This is solved by resetting the media player pointer in the event object,
        when the media player is deleted.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::addListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::removeListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::notifyDeleted):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::AsyncCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::~AsyncCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::onMediaPlayerDeleted):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerListener::MediaPlayerListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerListener::~MediaPlayerListener):
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerListener::onMediaPlayerDeleted):

2015-03-20  Chris Dumez  <cdumez@apple.com>

        Regression(r181782): Caused WebKit2.RestoreSessionStateContainingFormData API test to crash
        https://bugs.webkit.org/show_bug.cgi?id=142911

        Reviewed by Antti Koivisto.

        Drop the isBackForwardLoadType(m_loadType) assertion in
        FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad(). This assertion
        used to hold true when goToBackForwardItem() was only called with
        history navigation load types. However, after r181782, we use a Standard
        load in the cases where we do not wish to display stale content (e.g.
        restoring session state).

        The assertion comment says "We only use cache-only loads to avoid
        resubmitting forms". However, we then call loadDifferentDocumentItem()
        which already takes care of using the ReturnCacheDataElseLoad cache
        policy as the HistoryItem has form data and we pass
        MayNotAttemptCacheOnlyLoadForFormSubmissionItem as parameter.

        No new tests, covered by WebKit2.RestoreSessionStateContainingFormData
        API test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):

2015-03-20  Andy Estes  <aestes@apple.com>

        [Content Filtering] Adopt NEFilterSource unblock handling
        https://bugs.webkit.org/show_bug.cgi?id=142904

        Reviewed by Andreas Kling.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::unblockHandler):
        Returned an unblock handler that calls -[NEFilterSource remediateWithDecisionHandler:].
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::unblockHandler): Used ASCIILiteral.

2015-03-19  Andy Estes  <aestes@apple.com>

        [Content Filtering] Add tests for unblock requests
        https://bugs.webkit.org/show_bug.cgi?id=142900

        Reviewed by Andreas Kling.

        Currently the iOS Parental Controls content filter has a mechanism for requesting that a page be unblocked.
        WebKit implements this by listening for navigations originating from the filter's error page to a special URL,
        and requesting the page be unblocked via platform API, which might cause UI to be displayed. If the unblock is
        successful then we schedule a reload of the frame in order to display the unblocked document.

        NetworkExtension also supports unblock requests, so in preparation for adopting its API, this patch allows
        content filters to specify their own unblock request method, teaches MockContentFilter to provide such a method,
        and writes tests to cover both allowed and denied unblock requests.

        The content filter that blocks a load creates a ContentFilterUnblockHandler, passing it a lambda that is executed
        when a navigation matches the filter's special unblock URL. Filters can also specify that a script be executed in
        the context of its error page if the unblock is denied.

        All platform content filters can handle unblock requests like this with the exception of iOS Parental Controls in WebKit2.
        Since UI can be displayed by the system in this case, the request must be made from within the UI process. Therefore the
        existing method is retained of serializing a WebFilterEvaluator and intercepting navigation policy calls in the UI process.

        Tests: contentfiltering/allow-after-unblock-request.html
               contentfiltering/block-after-unblock-request.html

        * bindings/js/JSMockContentFilterSettingsCustom.cpp:
        (WebCore::JSMockContentFilterSettings::decisionPoint): Added some using statements for clarity.
        (WebCore::JSMockContentFilterSettings::setDecisionPoint): Ditto.
        (WebCore::toJSValue): Returns a JSValue from a Decision.
        (WebCore::toDecision): Returns a Decision from a JSValue.
        (WebCore::JSMockContentFilterSettings::decision): Used toJSValue.
        (WebCore::JSMockContentFilterSettings::setDecision): Used toDecision.
        (WebCore::JSMockContentFilterSettings::unblockRequestDecision): Used toJSValue.
        (WebCore::JSMockContentFilterSettings::setUnblockRequestDecision): Used toDecision.
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::createIfNeeded): Passed a reference to the owning DocumentLoader.
        (WebCore::ContentFilter::ContentFilter): Ditto.
        (WebCore::ContentFilter::unblockHandler): If the unblockHandler requests that a script be executed when an
        unblock request is denied, create a wrapper unblockHandler that executes that script in m_documentLoader's frame.
        * loader/ContentFilter.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Passed this to ContentFilter::createIfNeeded.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForLoadStart): Called PolicyChecker::prepareForLoadStart.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::prepareForLoadStart): Reset m_contentFilterUnblockHandler.
        (WebCore::PolicyChecker::checkNavigationPolicy): Moved logic to here from WebKit1's WebFrameLoaderClient.
        Placing it here allows it to be shared between WebKit1 and WebKit2 (when the unblock handler does not need to
        be called in the UI process).
        * loader/PolicyChecker.h:
        (WebCore::PolicyChecker::setContentFilterUnblockHandler): Added.
        * page/Frame.h: Made Frame ThreadSafeRefCounted, since RefPtr<Frames> are captured in lambdas that can be
        copied by background threads managed by the underlying platform.
        * platform/ContentFilterUnblockHandler.h:
        (WebCore::ContentFilterUnblockHandler::unblockURLScheme): Returned the Apple content filter scheme.
        (WebCore::ContentFilterUnblockHandler::unblockURLHost): Returned the unblock URL host.
        (WebCore::ContentFilterUnblockHandler::clear): Deleted.
        * platform/PlatformContentFilter.h:
        (WebCore::PlatformContentFilter::unblockRequestDeniedScript): Returned the unblock request denied script.
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::ContentFilterUnblockHandler): Added a constructor that takes an
        unblockURLHost and a UnblockRequesterFunction. Added an alternate constructor for iOS Parental Controls on
        WebKit2 that takes an unblockURLHost and a WebFilterEvaluator.
        (WebCore::ContentFilterUnblockHandler::needsUIProcess): Returned true if m_webFilterEvaluator is non-null.
        (WebCore::ContentFilterUnblockHandler::encode): Encoded m_unblockURLHost in addition to m_webFilterEvaluator.
        (WebCore::ContentFilterUnblockHandler::decode): Decoded m_unblockURLHost in addition to m_webFilterEvaluator.
        (WebCore::ContentFilterUnblockHandler::canHandleRequest): Returned true if there is a either a m_unblockRequester
        or a m_webFilterEvaluator and the request's host and scheme match those of the unblock request URL.
        (WebCore::dispatchToMainThread): Added a helper to dispatch a block to the main thread. Then if the web thread
        is enabled on iOS, dispatch it there.
        (WebCore::ContentFilterUnblockHandler::requestUnblockAsync): Renamed from handleUnblockRequestAndDispatchIfSuccessful.
        Requested an unblock using either m_unblockRequester or m_webFilterEvaluator, then called decisionHandler with the response.
        (WebCore::scheme): Moved to ContentFilterUnblockHandler::unblockURLScheme.
        (WebCore::ContentFilterUnblockHandler::handleUnblockRequestAndDispatchIfSuccessful): Renamed to requestUnblockAsync.
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::unblockHandler): Returned an unblock handler using the WebFilterEvaluator constructor.
        * testing/MockContentFilter.cpp: Added using statments for clarity.
        (WebCore::settings): Added a helper to get MockContentFilterSettings::singleton().
        (WebCore::MockContentFilter::canHandleResponse): Used the helper.
        (WebCore::MockContentFilter::MockContentFilter): Took advantage of the using statements.
        (WebCore::MockContentFilter::addData): Ditto.
        (WebCore::MockContentFilter::finishedAddingData): Ditto.
        (WebCore::MockContentFilter::unblockHandler): Returned a ContentFilterUnblockHandler that checks settings() for its decision.
        (WebCore::MockContentFilter::unblockRequestDeniedScript): Returned the script to execute in MockContentFilter's
        error page when an unblock request is denied.
        (WebCore::MockContentFilter::maybeDetermineStatus): Took advantage of settings() and using statements.
        * testing/MockContentFilterSettings.cpp:
        (WebCore::MockContentFilterSettings::unblockRequestURL): Constructed a static unblock URL and returned it.
        * testing/MockContentFilterSettings.h:
        (WebCore::MockContentFilterSettings::unblockURLHost): Returned the filter's unblock URL host.
        (WebCore::MockContentFilterSettings::unblockRequestDecision): Returns the decision to make for an unblock request.
        (WebCore::MockContentFilterSettings::setUnblockRequestDecision): Sets the decision to make for an unblock request.
        * testing/MockContentFilterSettings.idl: Added the unblockRequestDecision and unblockRequestURL attributes.

2015-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash due to empty drag image during drag-and-drop
        https://bugs.webkit.org/show_bug.cgi?id=142671

        Reviewed by Philippe Normand.

        Return early from ImageBuffer constructor if an empty size is
        given. This is a speculative fix for a crash while starting a drag
        and drop operation, that I haven't been able to reproduce.

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

2015-03-19  Chris Dumez  <cdumez@apple.com>

        [WK2] We should allow stale content when restoring a killed / crashed WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=142893
        <rdar://problem/19633737>
        <rdar://problem/19869257>

        Reviewed by Antti Koivisto.

        Always use ReturnCacheDataElseLoad cache policy for history navigations.
        Previously, we would use the default protocol cache policy for history
        navigations if m_stateMachine.committedFirstRealDocumentLoad() returned
        false so that we do not display stale content when restoring the session
        state of Safari statup (rdar://problem/8131355). This is now handled
        before reaching this method by no longer using "IndexedBackForward"
        FrameLoadType when restoring session tabs, and using "Standard" load
        type instead.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadDifferentDocumentItem):

2015-03-19  Andy Estes  <aestes@apple.com>

        [Content Filtering] Move ContentFilter to from platform/ to loader/
        https://bugs.webkit.org/show_bug.cgi?id=142897

        Reviewed by Dan Bernstein.

        ContentFilterCollection never contained any platform code, so it doesn't make sense for it to be in platform.
        Move it to loader/, since ContentFilters are owned by DocumentLoaders, and just call it ContentFilter. Extract
        the abstract part of ContentFilter into a new base class called PlatformContentFilter that each of the
        individual filters inherit from.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ContentFilter.cpp: Renamed from Source/WebCore/platform/ContentFilter.cpp.
        (WebCore::ContentFilter::types): Moved from ContentFilterCollection.
        (WebCore::ContentFilter::createIfNeeded): Ditto.
        (WebCore::ContentFilter::ContentFilter): Ditto.
        (WebCore::ContentFilter::addData): Ditto.
        (WebCore::ContentFilter::finishedAddingData): Ditto.
        (WebCore::ContentFilter::needsMoreData): Ditto.
        (WebCore::ContentFilter::didBlockData): Ditto.
        (WebCore::ContentFilter::getReplacementData): Ditto.
        (WebCore::ContentFilter::unblockHandler): Ditto.
        * loader/ContentFilter.h: Copied from Source/WebCore/platform/ContentFilter.h.
        (WebCore::ContentFilter::type): Replaced a use of ContentFilterCollection.
        * platform/PlatformContentFilter.h: Renamed from Source/WebCore/platform/ContentFilter.h.
        * platform/cocoa/NetworkExtensionContentFilter.h: Inherited from PlatformContentFilter.
        * platform/cocoa/ParentalControlsContentFilter.h: Ditto.
        * testing/MockContentFilter.h: Ditto.

2015-03-19  Dean Jackson  <dino@apple.com>

        CSS Animations with triggers should map scroll position to duration
        https://bugs.webkit.org/show_bug.cgi?id=142870
        <rdar://problem/20227244>

        Reviewed by Simon Fraser.

        Expose a prototype implementation of what will eventually be called
        animation-timebase, mapping the scroll location to the duration of an
        animation. This only applies if the animation has a start and end
        trigger.

        Test: animations/trigger-container-scroll-boundaries.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createAnimationTriggerValue): Change to downcast.

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTrigger): Fix a bug where I wasn't
        telling the ScrollAnimationTrigger object whether or not it had
        an end value. This wasn't visible before because we were not using
        the end value.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded): Add a comment and
        change to using a downcast.
        (WebCore::AnimationBase::timeToNextService): Change to downcast.
        (WebCore::AnimationBase::freezeAtTime): Whitespace cleanup.
        (WebCore::AnimationBase::getElapsedTime): Calculate the elapsedTime based
        on the scroll position relative to the start and end trigger spots.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimations): Since this
        can potentially call into beginAnimationUpdateTime, it should have
        an update blocker. This fixes the assert we were seeing in tests.
        (WebCore::AnimationControllerPrivate::scrollWasUpdated): Keep track of the scroll
        position so we don't need to ask for it all the time.
        * page/animation/AnimationControllerPrivate.h:
        (WebCore::AnimationControllerPrivate::scrollPosition): New accessor.

        * platform/animation/AnimationTrigger.h: Add downcast macros.
        (WebCore::ScrollAnimationTrigger::create): Calculate hasEndValue from the passed
        parameters rather than a separate value.
        (WebCore::ScrollAnimationTrigger::hasEndValue):
        (WebCore::ScrollAnimationTrigger::ScrollAnimationTrigger):
        (WebCore::ScrollAnimationTrigger::setHasEndValue): Deleted.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated): If we have an
        animation of this sort, we can't use a CAAnimation.

2015-03-19  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Move MediaPlaybackTargetPicker
        https://bugs.webkit.org/show_bug.cgi?id=142889

        Move WebMediaPlaybackTargetPickerProxy from WK2 and rename as MediaPlaybackTargetPicker so it
        can be used by both WK2 and WK1.

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlaybackTargetPicker.cpp: Copied from Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.cpp.
        * platform/graphics/MediaPlaybackTargetPicker.h: Copied from Source/WebKit2/UIProcess/WebMediaPlaybackTargetPickerProxy.h.
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: Copied from Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.h.
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: Copied from Source/WebKit2/UIProcess/mac/WebMediaPlaybackTargetPickerProxyMac.mm.

2015-03-19  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r109593): Clicking after last inline element could cause a crash.
        https://bugs.webkit.org/show_bug.cgi?id=142880
        rdar://problem/17222294

        Reviewed by Ryosuke Niwa.

        Test: editing/selection/click-after-last-inline-crash.html

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

2015-03-19  Enrica Casucci  <enrica@apple.com>

        One more build fix after r181760.

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

2015-03-19  Jessie Berlin  <jberlin@webkit.org>

        Build fix after r181760.

        * rendering/RenderAttachment.h:

2015-03-19  Jer Noble  <jer.noble@apple.com>

        [WK2][Mac] Fullscreen animations with mismatched aspect ratios are "squished".
        https://bugs.webkit.org/show_bug.cgi?id=142132

        Reviewed by Tim Horton.

        Add a new utility method to calculate a rect with a specific aspect ratio wrapping a smaller one.

        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::smallestRectWithAspectRatioAroundRect):
        * platform/graphics/GeometryUtilities.h:

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Get rid of "CachePolicyCache" cache policy
        https://bugs.webkit.org/show_bug.cgi?id=142881

        Reviewed by Antti Koivisto.

        Get rid of "CachePolicyCache" cache policy as it is unused.

        * loader/cache/CachePolicy.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::mustRevalidateDueToCacheHeaders):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mustRevalidateIsExpiredKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2015-03-19  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Test regular expression parse failures.
        https://bugs.webkit.org/show_bug.cgi?id=142872

        Reviewed by Benjamin Poulain.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        (WebCore::ContentExtensions::URLFilterParser::statusString):
        * contentextensions/URLFilterParser.h:
        Changed failures that can never happen to assertions.

2015-03-19  Enrica Casucci  <enrica@apple.com>

        Release build fix after https://trac.webkit.org/r181760.

        Unreviewed.

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

2015-03-19  Enrica Casucci  <enrica@apple.com>

        <attachment> should put URLs on the pasteboard so that Finder can accept drops.
        https://bugs.webkit.org/show_bug.cgi?id=142801
        rdar://problem/19982527

        Reviewed by Tim Horton.

        Test: editing/pasteboard/drag-and-drop-attachment-contenteditable.html

        This patch adds all the necessary support to write attachment elements into
        the pasteboard, including the promised type.

        * WebCore.xcodeproj/project.pbxproj:
        * page/DragActions.h:
        * page/DragClient.h:
        (WebCore::DragClient::declareAndWriteAttachment):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement):
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        (WebCore::DragController::draggingAttachmentURL):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragHysteresisExceeded):
        (WebCore::EventHandler::handleDrag):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::declareAndWriteAttachment):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::declareAndWriteAttachment):
        * platform/URL.cpp:
        (WebCore::URL::fileURLWithFileSystemPath):
        * platform/URL.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteAttachmentURL):
        * rendering/HitTestResult.h:

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix linking error after r181753.

        Drop WEBCORE_EXPORT for Settings::minimumDOMTimerInterval() as it is
        now inlined.

        * page/Settings.h:
        (WebCore::Settings::minimumDOMTimerInterval):

2015-03-19  Brady Eidson  <beidson@apple.com>

        Part of content extensions should apply css selectors
        https://bugs.webkit.org/show_bug.cgi?id=142604

        Reviewed by Alex Christensen.

        Add a new action for applying the cached global stylesheet.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):

        * contentextensions/ContentExtensionActions.h:

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadAction):

        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        (WebCore::ContentExtensions::Action::operator==):
        (WebCore::ContentExtensions::Action::stringArgument):
        (WebCore::ContentExtensions::Action::cssSelector): Deleted.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Clean up DOMTimer related settings
        https://bugs.webkit.org/show_bug.cgi?id=142837

        Reviewed by Darin Adler.

        Clean up DOMTimer related settings:
        - Make default minimum timer interval 4ms instead of 10ms as all ports
          were setting it to 4ms and the specifications says 4ms.
        - Get rid of setters for default DOMTimer interval values as they are
          not set anymore.
        - Move default DOMTimer interval values from Settings to DOMTimer as
          those are global (not per-page) and not really settings.
        - Stop using abbreviations in the names (e.g. min -> minimum).
        - Move DOMTimer settings members from Page to Settings. There is no
          reason for those to be stored on the Page. The getters were private
          so call-sites had to go via Settings anyway. Also, call-sites already
          had to do a null check on the page to get the settings. It seems
          unfortunate for the settings to do another null-check on the page for
          retrieving the setting value from the page.
        - Inline the DOMTimer settings getters as these are trivial.

        * dom/Document.cpp:
        (WebCore::Document::minimumTimerInterval):
        (WebCore::Document::timerAlignmentInterval):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::minimumTimerInterval):
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):
        * page/DOMTimer.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setTimerThrottlingEnabled):
        (WebCore::Page::setMinimumTimerInterval): Deleted.
        (WebCore::Page::minimumTimerInterval): Deleted.
        * page/Page.h:
        (WebCore::Page::timerAlignmentInterval): Deleted.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setMinimumDOMTimerInterval):
        (WebCore::Settings::setDOMTimerAlignmentInterval):
        (WebCore::Settings::setHiddenPageDOMTimerAlignmentInterval): Deleted.
        (WebCore::Settings::hiddenPageDOMTimerAlignmentInterval): Deleted.
        (WebCore::Settings::setDefaultMinDOMTimerInterval): Deleted.
        (WebCore::Settings::defaultMinDOMTimerInterval): Deleted.
        (WebCore::Settings::setMinDOMTimerInterval): Deleted.
        (WebCore::Settings::minDOMTimerInterval): Deleted.
        (WebCore::Settings::setDefaultDOMTimerAlignmentInterval): Deleted.
        (WebCore::Settings::defaultDOMTimerAlignmentInterval): Deleted.
        (WebCore::Settings::domTimerAlignmentInterval): Deleted.
        * page/Settings.h:
        (WebCore::Settings::minimumDOMTimerInterval):
        (WebCore::Settings::domTimerAlignmentInterval):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setMinimumTimerInterval):

2015-03-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Scrollbars look bad with GTK+ 3.16
        https://bugs.webkit.org/show_bug.cgi?id=140800

        Reviewed by Sergio Villar Senin.

        Take margin into account when rendering scrollbars. This fixes the
        huge scrollbars rendered with GTK+ 3.16. We don't need to check
        the GTK+ version because in previous versions the marging were 0,
        so the same code just works.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::adjustRectAccordingToMargin):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):

2015-03-19  Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Update ReadableStream API according new version of the specification
        https://bugs.webkit.org/show_bug.cgi?id=142822

        Reviewed by Benjamin Poulain.

        This patch updates the IDL of ReadableStream according the new version of the spec, which splits functionality between ReadableStream and ReadableStreamReader.
        In particular, this patch removes read(), ready, closed and state from ReadableStream and it adds the getReader method.

        Covered by updated readablestream-constructor.html test.

        * Modules/streams/ReadableStream.cpp:
        (WebCore::ReadableStream::ReadableStream):
        (WebCore::ReadableStream::state): Deleted.
        (WebCore::ReadableStream::closed): Deleted.
        (WebCore::ReadableStream::ready): Deleted.
        * Modules/streams/ReadableStream.h:
        (WebCore::ReadableStream::internalState): Added to make mac build system happy, to be used by ReadableStreamReader.
        * Modules/streams/ReadableStream.idl:
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::cancel):
        (WebCore::JSReadableStream::getReader):
        (WebCore::JSReadableStream::read): Deleted.
        (WebCore::getOrCreatePromiseDeferredFromObject): Deleted.
        (WebCore::readyPromiseSlotName): Deleted.
        (WebCore::JSReadableStream::ready): Deleted.
        (WebCore::closedPromiseSlotName): Deleted.
        (WebCore::JSReadableStream::closed): Deleted.

2015-03-18  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed. GTK build fix after r181720.

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

2015-03-18  Antti Koivisto  <antti@apple.com>

        Test disk cache behavior when using back navigation cache policy
        https://bugs.webkit.org/show_bug.cgi?id=142848

        Reviewed by Chris Dumez.

        Add a way to override the normal cache policy so we can test reload behavior of cache without actually reloading.

        Test: http/tests/cache/disk-cache-validation-back-navigation-policy.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setOverrideCachePolicyForTesting):
        * testing/Internals.cpp:
        (WebCore::Internals::setOverrideCachePolicy):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-03-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        TextFragment#start() is always >= 0 since its type is unsigned
        https://bugs.webkit.org/show_bug.cgi?id=142860

        Reviewed by Andreas Kling.

        Since TextFragment::m_start is unsigned, the result of
        TextFragment::start() is always >= 0 and assertion is not effective.
        This patch removes this assertion to suppress warnings.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment):

2015-03-18  Alex Christensen  <achristensen@webkit.org>

        [ContentExtensions] Prepare for compiling stylesheets of selectors to be used on every page.
        https://bugs.webkit.org/show_bug.cgi?id=142799

        Reviewed by Brady Eidson.

        * WebCore.xcodeproj/project.pbxproj:
        Make private headers to use with API tests.
        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::globalDisplayNoneSelectors):
        * contentextensions/CompiledContentExtension.h:
        Added method to get only the selectors from the root of the DFA, which apply to all URLs.
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        Added checking if the trigger will match everything.
        These actions can be put directly on the root of the DFA without adding extra epsilon transitions to the NFA.
        * contentextensions/DFA.h:
        (WebCore::ContentExtensions::DFA::nodeAt):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::actionsFromDFARoot):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        * contentextensions/NFA.h:
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::quantifier):
        Sink terms to a vector then add nodes to NFA when finalizing after checking for regexes that match everything.
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::parseStatus):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomBackReference):
        (WebCore::ContentExtensions::GraphBuilder::assertionBOL):
        (WebCore::ContentExtensions::GraphBuilder::assertionWordBoundary):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassRange):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBuiltIn):
        (WebCore::ContentExtensions::GraphBuilder::atomParentheticalAssertionBegin):
        (WebCore::ContentExtensions::GraphBuilder::disjunction):
        (WebCore::ContentExtensions::GraphBuilder::hasError):
        (WebCore::ContentExtensions::GraphBuilder::fail):
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTermIfNecessary):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        (WebCore::ContentExtensions::URLFilterParser::statusString):
        (WebCore::ContentExtensions::GraphBuilder::errorMessage): Deleted.
        * contentextensions/URLFilterParser.h:
        Use an enum instead of strings for the status to avoid checking strings when we have a regex that matches everything.

2015-03-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix build failure due to FALLTHROUGH in unreachable code
        https://bugs.webkit.org/show_bug.cgi?id=142703

        Reviewed by Benjamin Poulain.

        FALLTHROUGH should not exist in unreachable code marked by
        ASSERT_NOT_REACHABLE.

        When !ENABLE(CSS_SELECTOR_JIT) and Debug mode is enabled,
        both ASSERT_NOT_REACHED and FALLTHROUGH are instantiated
        and it cause build failure.

        Here, since CompiledSingle/CompiledSingleWithRootFilter are
        not set when !ENABLE(CSS_SELECTOR_JIT). So dropping FALLTHROUGH
        and leave ASSERT_NOT_REACHED.
        And since ASSERT_NOT_ReACHED is stripped when Release build,
        I've inserted FALLTHROUGH() if ASSERT_DISABLED.
        This fix is the same to r162906.

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

2015-03-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Switching between two SVG images with no intrinsic sizes causes them to get the default SVG size instead of the container size.
        https://bugs.webkit.org/show_bug.cgi?id=142805.

        Reviewed by Darin Adler.
        
        The bug happens due to wrong logic in RenderImage::imageDimensionsChanged().
        This function decides to setNeedsLayout() if the intrinsic size of the image
        changes. If the size does not change, it only repaints the image rectangle.
        When switching the src of the an image between two SVG images and both of
        them have no intrinsic size, we do not updateInnerContentRect() and this
        means an SVGImageForContainer is not going to be created for this image.
        When the image is drawn, it is drawn directly from the SVGImage. And this
        means the drawing has to be scaled by container_size / SVG_default_intrinsic_size
        
        After figuring out that I need to updateInnerContentRect() to fix this bug,
        I found out Blink has already changed this code to do the same thing. But 
        they also did more clean-up in this function. Here is the link
        https://codereview.chromium.org/114323004. I think their change seems correct
        although they did not say what exactly they were trying to fix.
        
        The plan for repaintOrMarkForLayout(), which is the new name of this function,
        is the following:
            -- setNeedLayout() if the intrinsic size changes and it affects the size
               of the image.
            -- updateInnerContentRect() if the intrinsic size did not change but the
               image has exiting layout.
            -- repaint the image rectangle if layout is not needed.
            
        This change also removes the call to computeLogicalWidthInRegion(), which is
        almost running a layout for the image. This call figures out whether the image
        needs to setNeedsLayout(). This call is unnecessary; the image needs to run a
        layout if the intrinsic size has changed and it affects the size of the image.
                    
        Test: svg/as-image/svg-no-intrinsic-size-switching.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange): Change the function call.
        (WebCore::RenderImage::imageChanged): Rename local variable and change the
        function call.
        
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded): Simplify this function.
        Call setIntrinsicSize() with the new size unless the image is in error state.
        
        (WebCore::RenderImage::repaintOrMarkForLayout): This a better name for this
        function since it is called even if the intrinsic size was not changed.
        (WebCore::RenderImage::imageDimensionsChanged): Deleted.
        
        * rendering/RenderImage.h: Rename imageDimensionsChanged() and change the 
        updateIntrinsicSizeIfNeeded() to return void.
        
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint): Code cleanup. This function can
        only handle the paint phases PaintPhaseForeground and PaintPhaseSelection.
        Use this information to simplify the logic and order of painting there.

2015-03-18  Jeremy Jones  <jeremyj@apple.com>

        Fix typo in playerViewControllerWillCancelOptimizedFullscree.
        https://bugs.webkit.org/show_bug.cgi?id=142745

        Reviewed by Darin Adler.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscreen:]):
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscree:]): Deleted.

2015-03-18  Simon Fraser  <simon.fraser@apple.com>

        Avoid repaints when changing transform on an element with multiple background images
        https://bugs.webkit.org/show_bug.cgi?id=142841

        Reviewed by Zalan Bujtas.
        
        Replace the cheap test for changed images in RenderElement::updateFillImages()
        with an exhaustive test that walks the entire list of background images,
        since any ensuing repaint is way more expensive than a slightly more expensive check here.
        
        Test: fast/repaint/multiple-backgrounds-style-change.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::updateFillImages):
        * rendering/style/FillLayer.cpp:
        (WebCore::layerImagesIdentical): See if both images are the same (either none
        or both mask images, and same image pointer).
        (WebCore::FillLayer::imagesIdentical): Walk the two FillLayer lists, checking the images
        on each one. Returns false if we reach the end of one list before the other, or the images
        are different.
        * rendering/style/FillLayer.h: New static function; static because
        it compares two FillLayer lists, and I think that makes more sense than
        a member function.

2015-03-18  Anders Carlsson  <andersca@apple.com>

        Pass cookies by reference in CookieHash functions
        https://bugs.webkit.org/show_bug.cgi?id=142839

        Reviewed by Sam Weinig.

        * platform/Cookie.h:
        (WebCore::CookieHash::hash):
        (WebCore::CookieHash::equal):

2015-03-18  Tim Horton  <timothy_horton@apple.com>

        Temporarily fix the !ENABLE(CSS_SELECTOR_JIT) and assertions-enabled build

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

2015-03-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Call CTFontSetRenderingParameters before rendering text
        https://bugs.webkit.org/show_bug.cgi?id=142816

        Reviewed by Darin Adler.

        No new tests.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showGlyphsWithAdvances):
        * platform/spi/cocoa/CoreTextSPI.h:

2015-03-18  Chris Dumez  <cdumez@apple.com>

        [WK2] Log the number of network cache requests that we have never seen before
        https://bugs.webkit.org/show_bug.cgi?id=142828
        <rdar://problem/19632130>

        Reviewed by Antti Koivisto.

        Add diagnostic logging key for network cache efficacy logging.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::neverSeenBeforeKey):
        (WebCore::DiagnosticLoggingKeys::requestKey):
        * page/DiagnosticLoggingKeys.h:

2015-03-18  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use filterRootId in SelectorQuery even if CSS JIT is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=142703

        Reviewed by Benjamin Poulain.

        filterRootId pruning path is not inherently related to CSS JIT.
        This patch enables filterRootId even in the environment
        where CSS JIT is not enabled.

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

2015-03-18  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use Vector<>::const_iterator instead of custom FlowContents::Iterator.
        https://bugs.webkit.org/show_bug.cgi?id=142809

        Reviewed by Antti Koivisto.

        FlowContents::Iterator simply iterates on a vector<>. No need to custom implement it.

        No change in functionality.

        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::begin):
        (WebCore::SimpleLineLayout::FlowContents::end):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::Iterator): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator++): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator--): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator==): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator!=): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator->): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):

2015-03-18  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Change FlowContents::segmentForPosition() to segmentForRun().
        https://bugs.webkit.org/show_bug.cgi?id=142785

        Reviewed by Antti Koivisto.

        This is in transition to support <br>. A particular position could point to multiple
        segments when <br> is directly followed by text.

        No change in functionality.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForRunSlow):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPositionSlow): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::segmentForRun):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::segmentForPosition): Deleted.
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2015-03-17  Simon Fraser  <simon.fraser@apple.com>

        Skip trying to paint overlay scrollbars when there are none or they are clipped out
        https://bugs.webkit.org/show_bug.cgi?id=142811
        rdar://problem/20200725

        Reviewed by Darin Adler.

        In some content with lots of layers and overflow:scroll, we could spend 20% of
        the time under paintOverflowControlsForFragments() setting up an (empty) clip,
        and then trying to draw scrollbars that we don't have.
        
        Avoid calling paintOverflowControlsForFragments() if there are no scrollbars,
        and don't both setting up an empty clip just to paint nothing.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintOverflowControlsForFragments):

2015-03-18  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Unreviewed build fix after r181665.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):

2015-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused "preprocessor" parameter to sub-CodeGenerators
        https://bugs.webkit.org/show_bug.cgi?id=142793

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessDocument):
        (FileNamePrefix):
        * bindings/scripts/CodeGeneratorObjC.pm:

2015-03-18  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Split fragments on renderer boundary on the fly.
        https://bugs.webkit.org/show_bug.cgi?id=142579

        Reviewed by Antti Koivisto.

        Fragment splitting at renderers' boundary at the end of the line is no longer needed.
        This patch ensures that TextFragmentIterator::nextTextFragment() does not concatenate
        fragments across renderer boundary.

        Test: fast/text/simple-line-with-multiple-renderers.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::revertRuns):
        (WebCore::SimpleLineLayout::LineState::isEmpty):
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded): Check if fragments need a new run and
        whether neighboring fragments need collapsing.
        (WebCore::SimpleLineLayout::LineState::revertUncommitted): Revert fragments over multiple renderers if they form
        a fragment continuation.
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::forceFragmentToLine): Ensure that if a fragment has continuation across multiple renderers,
        they all get added to the current line.
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::LineState::appendFragment): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::FragmentForwardIterator): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator++): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator!=): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::begin): Deleted.
        (WebCore::SimpleLineLayout::end): Deleted.
        (WebCore::SimpleLineLayout::preWrap): Deleted.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Deleted.
        (WebCore::SimpleLineLayout::updateLineConstrains): Deleted.
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary): Deleted.
        (WebCore::SimpleLineLayout::createTextRuns): Deleted.
        (WebCore::SimpleLineLayout::create): Deleted.
        (WebCore::SimpleLineLayout::Layout::create): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator+):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator*):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator->):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Unrelated fix on non-collapsed tab position.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::overlapsToNextRenderer):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isCollapsible):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::operator==):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split): Deleted.

2015-03-18  Manuel Rego Casasnovas  <rego@igalia.com>

        Flex and grid items should be painted as inline-blocks
        https://bugs.webkit.org/show_bug.cgi?id=142266

        Reviewed by Darin Adler.

        Based on Blink r157004 by <cbiesinger@chromium.org>.
        https://src.chromium.org/viewvc/blink?revision=157004&view=revision

        Both flexbox and grid specs define that the painting order of flex/grid
        items is the same as inline blocks. See
        http://dev.w3.org/csswg/css-flexbox/#painting and
        http://dev.w3.org/csswg/css-grid/#z-order.

        Extracted inline blocks painting code from InlineElementBox and moved to
        a helper method that will be reused for flexboxes and grids.

        Tests: css3/flexbox/flex-item-text-background-not-interleaved.html
               fast/css-grid-layout/grid-item-text-background-not-interleaved.html

        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::paint): Move code to
        RenderElement::paintAsInlineBlock().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChild): Add new argument to paint children
        as inline blocks.
        * rendering/RenderBlock.h: Define PaintType enmu and modify paintChild()
        signature to add the new argument.
        * rendering/RenderElement.cpp:
        (WebCore::paintPhase): Paint element in a phase.
        (WebCore::RenderElement::paintAsInlineBlock): Code extracted from
        InlineElementBox::paint().
        * rendering/RenderElement.h: Add new method signature.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::paintChildren): Call
        RenderBlock::paintChild() with the new argument.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::paintChildren): Ditto.

2015-03-18  Chris Dumez  <cdumez@apple.com>

        [WK2] Log total number of network cache queries using diagnostic logging
        https://bugs.webkit.org/show_bug.cgi?id=142803
        <rdar://problem/19632130>

        Reviewed by Antti Koivisto.

        Add diagnostic logging key needed for network efficacy logging.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::retrievalRequestKey):
        * page/DiagnosticLoggingKeys.h:

2015-03-18  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r181660

        * page/EventHandler.cpp:
        (WebCore::EventHandler::setImmediateActionStage):
        * page/EventHandler.h:
        (WebCore::EventHandler::setImmediateActionStage):
        Un-inline setImmediateActionStage, because it is exported to WebCore, and
        exporting inline thing causes random weak symbol errors on some platforms.

2015-03-17  Conrad Shultz  <conrad_shultz@apple.com>

        Ignore some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=142813

        Reviewed by Mark Rowe.

        Fixing the deprecations is tracked by: <rdar://problem/20201450>

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement):

2015-03-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181667, r181682, and r181683.
        https://bugs.webkit.org/show_bug.cgi?id=142812

        Broke multiple tests with ASan, plus dependent commits
        (Requested by ap on #webkit).

        Reverted changesets:

        "Simple line layout: Split fragments on renderer boundary on
        the fly."
        https://bugs.webkit.org/show_bug.cgi?id=142579
        http://trac.webkit.org/changeset/181667

        "Simple line layout: Change FlowContents::segmentForPosition()
        to segmentForRun()."
        https://bugs.webkit.org/show_bug.cgi?id=142785
        http://trac.webkit.org/changeset/181682

        "Simple line layout: Use Vector<>::const_iterator instead of
        custom FlowContents::Iterator."
        https://bugs.webkit.org/show_bug.cgi?id=142809
        http://trac.webkit.org/changeset/181683

2015-03-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use Vector<>::const_iterator instead of custom FlowContents::Iterator.
        https://bugs.webkit.org/show_bug.cgi?id=142809

        Reviewed by Antti Koivisto.

        FlowContents::Iterator simply iterates on a vector<>. No need to custom implement it.

        No change in functionality.

        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::begin):
        (WebCore::SimpleLineLayout::FlowContents::end):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::Iterator): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator++): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator--): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator==): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator!=): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator->): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):

2015-03-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Change FlowContents::segmentForPosition() to segmentForRun().
        https://bugs.webkit.org/show_bug.cgi?id=142785

        Reviewed by Antti Koivisto.

        This is in transition to support <br>. A particular position could point to multiple
        segments when <br> is directly followed by text.

        No change in functionality.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForRunSlow):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPositionSlow): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::segmentForRun):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::segmentForPosition): Deleted.
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2015-03-17  Chris Dumez  <cdumez@apple.com>

        [Mac][iOS] setSharedTimerFireInterval() / stopSharedTimer() are expensive
        https://bugs.webkit.org/show_bug.cgi?id=142752
        <rdar://problem/20176731>

        Reviewed by Antti Koivisto.

        setSharedTimerFireInterval() / stopSharedTimer() are expensive on Mac
        and iOS on pages using a lot of timers.

        For example, on bing.com / iOS, ~15.4% of the CPU time is spent in
        setSharedTimerFireInterval() and ~14.7% of the CPU time is spent in
        stopSharedTimer(). The expensive calls are CFRunLoopAddTimer (11.4%),
        CFRunLoopTimerInvalidate (14.1%), CFRunLoopTimerCreate (3.3%).

        The issue is that we keep creating, adding to run loop modes, and then
        destroying the sharedTimer for each firing event. This is very
        expensive. In such case, the CFRunLoopTimerRef documentation advises to
        """
        ... create a repeating timer with an initial firing time in the distant
        future (or the initial firing time) and a very large repeat interval—on
        the order of decades or more—and add it to all the necessary run loop
        modes. Then, when you know when the timer should fire next, you reset
        the firing time with CFRunLoopTimerSetNextFireDate, perhaps from the
        timer’s own callback function. This technique effectively produces a
        reusable, asynchronous timer.
        """ [1].

        Doing so greatly decreases CPU time spend in:
        - setSharedTimerFireInterval(): 15.4% -> 4.6%
        - stopSharedTimer(): 14.6% -> 8.6%

        Overall CPU time spent on bing.com in timerFired() goes down from
        ~61.2% to ~49.5%.

        This patch also refactors the SharedTimer code to share as much as
        possible between Mac and iOS.

        This patch is based in part on the following patch:
        http://trac.webkit.org/changeset/143210

        [1] https://developer.apple.com/library/prerelease/ios/documentation/CoreFoundation/Reference/CFRunLoopTimerRef/index.html#//apple_ref/c/func/CFRunLoopTimerSetNextFireDate

        * WebCore.xcodeproj/project.pbxproj:
        * platform/SharedTimer.h:
        (WebCore::SharedTimer::invalidate):
        (WebCore::MainThreadSharedTimer::setFiredFunction): Deleted.
        (WebCore::MainThreadSharedTimer::setFireInterval): Deleted.
        (WebCore::MainThreadSharedTimer::stop): Deleted.
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        * platform/cf/SharedTimerCF.mm: Added.
        (WebCore::applicationDidBecomeActive):
        (WebCore::setupPowerObserver):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::timerFired):
        (WebCore::restartSharedTimer):
        (WebCore::invalidateSharedTimer):
        (WebCore::setSharedTimerFireInterval):
        (WebCore::stopSharedTimer):
        * platform/efl/SharedTimerEfl.cpp:
        (WebCore::invalidateSharedTimer):
        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::invalidateSharedTimer):
        * platform/ios/SharedTimerIOS.mm: Removed.
        * platform/mac/PowerObserverMac.h: Copied from Source/WebCore/platform/efl/SharedTimerEfl.cpp.
        * platform/mac/PowerObserverMac.mm: Renamed from Source/WebCore/platform/mac/SharedTimerMac.mm.
        (WebCore::PowerObserver::PowerObserver):
        (WebCore::PowerObserver::~PowerObserver):
        (WebCore::PowerObserver::didReceiveSystemPowerNotification):
        * platform/win/SharedTimerWin.cpp:
        (WebCore::removeSharedTimer):

2015-03-17  Tim Horton  <timothy_horton@apple.com>

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        Reviewed by Beth Dakin.

        * platform/spi/mac/NSMenuSPI.h:
        Add additional NSMenu SPI.

2015-03-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Split fragments on renderer boundary on the fly.
        https://bugs.webkit.org/show_bug.cgi?id=142579

        Reviewed by Antti Koivisto.

        Fragment splitting at renderers' boundary at the end of the line is no longer needed.
        This patch ensures that TextFragmentIterator::nextTextFragment() does not concatenate
        fragments across renderer boundary.

        Test: fast/text/simple-line-with-multiple-renderers.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::revertRuns):
        (WebCore::SimpleLineLayout::LineState::isEmpty):
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded): Check if fragments need a new run and
        whether neighboring fragments need collapsing.
        (WebCore::SimpleLineLayout::LineState::revertUncommitted): Revert fragments over multiple renderers if they form
        a fragment continuation.
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::forceFragmentToLine): Ensure that if a fragment has continuation across multiple renderers,
        they all get added to the current line.
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::LineState::appendFragment): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::FragmentForwardIterator): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator++): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator!=): Deleted.
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::begin): Deleted.
        (WebCore::SimpleLineLayout::end): Deleted.
        (WebCore::SimpleLineLayout::preWrap): Deleted.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Deleted.
        (WebCore::SimpleLineLayout::updateLineConstrains): Deleted.
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary): Deleted.
        (WebCore::SimpleLineLayout::createTextRuns): Deleted.
        (WebCore::SimpleLineLayout::create): Deleted.
        (WebCore::SimpleLineLayout::Layout::create): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator+):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator*):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator->):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Unrelated fix on non-collapsed tab position.
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::revertToFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::overlapsToNextRenderer):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isCollapsible):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::operator==):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split): Deleted.

2015-03-17  Jeremy Jones  <jeremyj@apple.com>

        When tab hides, pause fullscreen and exit normally.
        https://bugs.webkit.org/show_bug.cgi?id=142685

        Reviewed by Eric Carlson.

        Pause fullscreen playback when switching tabs. Exit fullscreen is not necessary and even prevents
        the normal flow of teardown. This allows the normal exit fullscreen call to succeed and call its callback.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):

2015-03-17  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Video position is incorrect when located inside a frame.
        https://bugs.webkit.org/show_bug.cgi?id=142784

        Reviewed by Brent Fulgham.

        We need to take the enclosing frame's position into account, when finding the video position.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):

2015-03-17  Benjamin Poulain  <bpoulain@apple.com>

        Compile character ranges targeting the same state as range check in the bytecode
        https://bugs.webkit.org/show_bug.cgi?id=142759

        Reviewed by Alex Christensen.

        Previously, character ranges would be compiled as many individual character checks.
        For example, a transition on "[a-z]" would do 26 character checks + jump, which leads
        to enormous matchines.

        With this patch, we find the ranges at lowering time and generate a single instruction
        for them: "CheckValueRange". This helps making the machine denser when the input
        use character sets.

        The second part of this patch goes further in the case where the transitions out of
        a state cover the entire alphabet. In that case, we create a fallback transition
        on the fly and remove all the ranges made useless.
        That case is common when ranges are used with inverse character set (e.g. [^a]+a).

        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValueRange):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNodeTransitions):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileCheckForRange):
        * contentextensions/DFABytecodeCompiler.h:
        Extend the compiler to detect ranges and lower them as CheckValueRange.

        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        Range checks in the interpreter.

        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::setFinal):
        This assertion does not make sense with the current codebase. Actions are "compressed",
        it is possible to have two patterns with the same action.

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::simplifyTransitions):
        A very simple DFA optimization function: it only reduce the strength of ranges.

        (WebCore::ContentExtensions::NFAToDFA::convert):

2015-03-17  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r181423): Crash @ generatedcontent.org at com.apple.WebCore: WebCore::MediaPlayer::maximumDurationToCacheMediaTime const + 4
        https://bugs.webkit.org/show_bug.cgi?id=142787

        Reviewed by Eric Carlson.

        Null check m_player before derefencing.

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

2015-03-17  Beth Dakin  <bdakin@apple.com>

        DOM mouse events have weird timing for force clickable elements in Safari 8.0.3 on 
        10.10.2
        https://bugs.webkit.org/show_bug.cgi?id=142700
        -and corresponding-
        rdar://problem/20165168

        Reviewed by Tim Horton.

        This patch adds a new enum and member variable so that EventHandler can keep track 
        of the current immediate action state.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):

        A new mouse press even is starting. We can re-set m_immediateActionStage to none 
        unless a Hit Test has already been performed.
        (WebCore::EventHandler::handleMousePressEvent):

        If an immediate action was completed, then send mouse to the DOM and return early. 
        This will prevent us from doing our own normal mouseup behaviors such as 
        navigating to a link that was clicked — we only want to do that if the click was 
        not used to perform an immediate action.
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/EventHandler.h:
        (WebCore::EventHandler::setImmediateActionStage):

2015-03-17  Joseph Pecoraro  <pecoraro@apple.com>

        Use a better parameter name for Document.getElementsByClassName
        https://bugs.webkit.org/show_bug.cgi?id=142771

        Reviewed by Chris Dumez.

        * bindings/objc/PublicDOMInterfaces.h:
        * dom/Document.idl:

2015-03-17  Timothy Horton  <timothy_horton@apple.com>

        Reproducible null deref under ScriptedAnimationController::createDisplayRefreshMonitor
        https://bugs.webkit.org/show_bug.cgi?id=142776
        <rdar://problem/18921338>

        Reviewed by Alexey Proskuryakov.

        Test: fast/animation/request-animation-frame-unparented-iframe-crash.html

        In some cases (like the new test), we can end up trying to start
        requestAnimationFrame on a Document that has no Page. Most paths null-checked
        the Page and did the right thing, but one failed to do so. In addition,
        the current fallback (when Page is null) can result in us constructing
        the wrong kind of DisplayRefreshMonitor, which could lead to trouble
        down the road when it's reused. Instead, just completely avoid making a
        DisplayRefreshMonitor in the null-page case.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::createDisplayRefreshMonitor):
        If the page is null, bail.

        * dom/ScriptedAnimationController.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::create):
        Use Optional<> to make it easy to distinguish between ChromeClient
        being unreachable (because we don't have a Page for some reason) and
        ChromeClient declaring that it doesn't want to override the type of
        DisplayRefreshMonitor that is created.

        If ChromeClient was unreachable for some reason, we'll get back an engaged
        nullptr and return it (instead of creating a DisplayRefreshMonitor based
        on the platform). This avoids creating the wrong type of DisplayRefreshMonitor
        in the rare case where we can't reach the ChromeClient (e.g. a freshly unparented
        IFrame).

        If instead the client returns a disengaged Nullopt, we'll interpret that as
        "construct the default type", which falls back on the platform #ifdefs to
        decide what to make.

        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::scheduleAnimation):
        Silently handle the case where we failed to make a DisplayRefreshMonitor.

        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorClient.h:
        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::createDisplayRefreshMonitor):
        * platform/graphics/GraphicsLayerUpdater.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor):
        * rendering/RenderLayerCompositor.h:
        Adjust to the new signature of createDisplayRefreshMonitor, and return
        an engaged (nullptr) Optional if we can't get to ChromeClient for any reason.

        * page/ChromeClient.h:
        Return Nullopt (indicating a lack of override) by default.

2015-03-17  Dean Jackson  <dino@apple.com>

        Implement Scroll Container Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=142732

        Attempt to fix the build.

        * css/CSSComputedStyleDeclaration.cpp: Add an #if ENABLE guard.

2015-03-17  Dean Jackson  <dino@apple.com>

        Implement Scroll Container Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=142732

        Reviewed by Simon Fraser.

        Test: animations/trigger-container-scroll-simple.html

        Basic implementation of container-scroll. It only checks
        the page scroll position for trigger values (not the scrolling
        container in an overflow).

        * css/CSSComputedStyleDeclaration.cpp: Add CSSPropertyWebkitAnimationTrigger
        so that this property will appear in the inspector.

        * page/FrameView.cpp:
        (WebCore::FrameView::sendScrollEvent): If the page has scrolled, let the animation
        controller know about it.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Whitespace fix.
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded): If there is a trigger,
        and the scroll position is past it, then tell the state machine that
        we should start.
        (WebCore::AnimationBase::timeToNextService): Use the scroll position as
        an input to the update timer if a trigger is involved.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensureCompositeAnimation): Add whitespace.
        (WebCore::AnimationControllerPrivate::scrollWasUpdated): Call updateAnimations.
        (WebCore::AnimationController::scrollWasUpdated): Call into AnimationControllerPrivate.
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:

        * page/animation/CompositeAnimation.cpp: Keep a record of whether we have a scroll
        triggered animation.
        (WebCore::CompositeAnimation::CompositeAnimation):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::hasScrollTriggeredAnimation):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::operator=):

2015-03-17  Simon Fraser  <simon.fraser@apple.com>

        Move some code from LogicalSelectionOffsetCaches into RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=142758

        Reviewed by Myles C. Maxfield.

        LogicalSelectionOffsetCaches had some useful code regarding containing blocks etc
        that should be used in more places, so move it into RenderElement.
        
        No behavior change.

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): Deleted.
        (WebCore::isNonRenderBlockInline): Deleted.
        (WebCore::containingBlockForFixedPosition): Deleted.
        (WebCore::containingBlockForAbsolutePosition): Deleted.
        (WebCore::containingBlockForObjectInFlow): Deleted.
        * rendering/RenderBlock.cpp: No need to initialize static data.
        (WebCore::RenderBlock::positionedObjects): nullptr
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::containingBlockForFixedPosition):
        (WebCore::RenderElement::containingBlockForAbsolutePosition):
        (WebCore::isNonRenderBlockInline):
        (WebCore::RenderElement::containingBlockForObjectInFlow):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects):
        * rendering/RenderLayer.cpp:
        (WebCore::isContainerForPositioned):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):

2015-03-17  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Unreviewed build fix after r181640.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        Tell Windows how to find ShaderLang.h.

2015-03-17  Chris Dumez  <cdumez@apple.com>

        'pageLoaded' diagnostic logging is too verbose
        https://bugs.webkit.org/show_bug.cgi?id=142727
        <rdar://problem/18937048>

        Reviewed by Eric Carlson.

        Make 'pageLoaded' diagnostic logging less verbose:
        - Log once per main frame instead of once for subframe
        - Apply sampling

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):

2015-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Wrong transfer annotations used in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=142780

        Reviewed by Gustavo Noronha Silva.

        We are using transfer none for all methods returning a GObject DOM
        Object. That's not true. Only objects derived from Node are
        automatically released by the DOM object cache and can be transfer
        none. All other objects are added to the cache only to avoid
        creating the same wrapper twice for the same core object, but
        caller should release the returned reference.

        * bindings/gobject/WebKitDOMCustomUnstable.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetTransferTypeForReturnType):
        (GenerateFunction):

2015-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitDOM objects leaking
        https://bugs.webkit.org/show_bug.cgi?id=118788

        Reviewed by Darin Adler and Sergio Villar Senin.

        Use a DOMwindowObserver class, derived from DOMWindowProperty to
        be notified when the window object is detached from the frame to
        clear the DOM objects associated to that frame in that case too.

        * bindings/gobject/DOMObjectCache.cpp:

2015-03-17  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Use a forwarding header for ANGLE's ShaderLang.h to avoid picking up ANGLE's EGL headers
        https://bugs.webkit.org/show_bug.cgi?id=142530

        Reviewed by Darin Adler.

        Include the ANGLE's ShaderLang.h through the new forwarding header. This allows
        us to not list Source/ThirdParty/ANGLE/include in the list of inclusion directories
        and thus avoid ANGLE's EGL and GLES2/GLES3 headers, defaulting to the system-provided
        headers instead.

        Source/ThirdParty/ANGLE/include/KHR is still used because ANGLE's khrplatform.h is
        required by the ShaderLang.h header. Source/ThirdParty/ANGLE/src is not used for the
        whole WebCore library anymore, only the ANGLESupport library.

        * CMakeLists.txt:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:

2015-03-17  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Show rendering frames (and FPS) in Layout and Rendering timeline
        https://bugs.webkit.org/show_bug.cgi?id=142029

        Reviewed by Timothy Hatcher.

        Add new functionality to the Inspector timelines backend to add runloop data to timeline recordings.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::currentRunLoop):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        Install observers for the begining and end of the runloop when recording begins. All other
        instrumented timeline events get added as children of the current runloop record, which is
        sent to the frontend once the runloop completes.

        * inspector/InspectorTimelineAgent.h:

        * platform/cf/RunLoopObserver.cpp:
        (WebCore::RunLoopObserver::schedule):
        Wrapper changed to allow observing arbitrary runloop activities.

        * platform/cf/RunLoopObserver.h:

2015-03-17  Philippe Normand  <pnormand@igalia.com>

        [GTK] basic OpenWebRTC build support
        https://bugs.webkit.org/show_bug.cgi?id=142393

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Add OpenWebRTC CFLAGS and LDFLAGS.

2015-03-17  Joseph Pecoraro  <pecoraro@apple.com>

        Remove never used "useLayerOnTop" bindings generator argument
        https://bugs.webkit.org/show_bug.cgi?id=142773

        Reviewed by Darin Adler.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/generate-bindings.pl:

2015-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Enable ES6 classes by default
        https://bugs.webkit.org/show_bug.cgi?id=142774

        Reviewed by Gavin Barraclough.

        * Configurations/FeatureDefines.xcconfig:

2015-03-16  Simon Fraser  <simon.fraser@apple.com>

        Update the debug overlays after layout
        https://bugs.webkit.org/show_bug.cgi?id=142768

        Reviewed by Zalan Bujtas.

        The debug overlays need to be updated after layout, in case elements with wheel event handlers
        moved around.
        
        DebugPageOverlays::didLayout() is cheap if there are no overlays.
        
        Call DebugPageOverlays::didLayout() for all frames, not just the main frame, since subframes can contribute
        to the main frame's event handler region.

        * page/DebugPageOverlays.cpp:
        (WebCore::DebugPageOverlays::regionChanged):
        * page/DebugPageOverlays.h:
        (WebCore::DebugPageOverlays::didLayout):
        (WebCore::DebugPageOverlays::didChangeEventHandlers):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2015-03-16  Jon Lee  <jonlee@apple.com>

        Unreviewed fix for crash after r181608.

        * WebCore.xcodeproj/project.pbxproj: Include it in the WebCore framework.

2015-03-16  Simon Fraser  <simon.fraser@apple.com>

        Generalize the Document code that maintains a set of nodes with event handlers
        https://bugs.webkit.org/show_bug.cgi?id=142762

        Reviewed by Zalan Bujtas, Darin Adler.

        Document.h defines a TouchEventTargetSet type, which will in future be used for
        other event types too (wheel events), so rename it to EventTargetSet.
        
        Take didRemoveEventTargetNode() outside the TOUCH_EVENTS #ifdef, and change it
        to take a reference.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): References
        (WebCore::Document::didAddTouchEventHandler): Ditto.
        (WebCore::Document::didRemoveEventTargetNode): Ditto.
        * dom/Document.h:
        (WebCore::Document::touchEventTargets): No-one calls this; just remove the non
        #ideffed one.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement): Pass a ref.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Pass a ref.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeAllEventListeners): Pass a ref.

2015-03-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Object Previews in Indexed DB tables
        https://bugs.webkit.org/show_bug.cgi?id=140813

        Reviewed by Timothy Hatcher.

        * inspector/InspectorIndexedDBAgent.cpp:
        Include previews with object store objects.

2015-03-16  Jer Noble  <jer.noble@apple.com>

        [Mac] Update missing image UI
        https://bugs.webkit.org/show_bug.cgi?id=142592

        Reviewed by Darin Adler.

        Update the broken image glyphs with new art (including a 3x image).

        Test: fast/hidpi/broken-image-icon-very-hidpi.html

        * Resources/missingImage.png:
        * Resources/missingImage@2x.png:
        * Resources/missingImage@3x.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):

2015-03-16  Dean Jackson  <dino@apple.com>

        Parsing and Style Resolution of Container-based Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=142687
        <rdar://problem/20170007>

        Reviewed by Simon Fraser.

        Take 2 after the previous patch was rolled out.

        This is the beginning of a prototype implementation of
        CSS Animation Triggers, as described by
        https://lists.w3.org/Archives/Public/www-style/2014Sep/0135.html

        In this patch we parse and resolve the value of a new
        CSS property "-webkit-animation-trigger". At the moment it
        only accepts one function value "container-scroll", which
        will trigger the animation at an absolute position within
        an element's scrolling container. We expect the syntax to
        change in the near future, as the spec is written.

        Tests: animations/trigger-computed-style.html
               animations/trigger-parsing.html

        * WebCore.xcodeproj/project.pbxproj: Add the new files.

        * css/CSSAnimationTriggerScrollValue.cpp: Added.
        (WebCore::CSSAnimationTriggerScrollValue::customCSSText): Output text for computed style.
        (WebCore::CSSAnimationTriggerScrollValue::equals): Compare two values.
        * css/CSSAnimationTriggerScrollValue.h: Added. This holds the CSS side of the
        scroll trigger. This name may change in the future to better represent the
        type of trigger, but it is good enough for now.
        (WebCore::CSSAnimationTriggerScrollValue::create):
        (WebCore::CSSAnimationTriggerScrollValue::startValue):
        (WebCore::CSSAnimationTriggerScrollValue::endValue):
        (WebCore::CSSAnimationTriggerScrollValue::CSSAnimationTriggerScrollValue):

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createAnimationTriggerValue): Maps an AnimationTrigger into a CSSValue.
        (WebCore::getAnimationTriggerValue): Gets the current computed style.
        (WebCore::ComputedStyleExtractor::propertyValue):

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationTrigger): Parse the "container-scroll" function
        and record the value as a CSSAnimationTriggerScrollValue.
        (WebCore::CSSParser::parseAnimationProperty): Handle the new property.
        * css/CSSParser.h:

        * css/CSSPropertyNames.in: Add "-webkit-animation-trigger".

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTrigger): Map a CSSValue into a trigger value on
        an Animation object.
        * css/CSSToStyleMap.h:

        * css/CSSValue.cpp: Handle the new CSSValue type.
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isAnimationTriggerScrollValue):

        * platform/animation/Animation.cpp: Make sure to initialise m_trigger and m_triggerSet,
        and use them in the operator==.
        * platform/animation/Animation.h: Add AnimationTrigger as a new field.
        (WebCore::Animation::isTriggerSet):
        (WebCore::Animation::isEmpty):

        * platform/animation/AnimationTrigger.h: Added. New base class and subclasses for
        "auto" and the scrolling trigger.
        (WebCore::AnimationTrigger::~AnimationTrigger):
        (WebCore::AnimationTrigger::type):
        (WebCore::AnimationTrigger::isAutoAnimationTrigger):
        (WebCore::AnimationTrigger::isScrollAnimationTrigger):
        (WebCore::AnimationTrigger::AnimationTrigger):
        (WebCore::AutoAnimationTrigger::create):
        (WebCore::AutoAnimationTrigger::~AutoAnimationTrigger):
        (WebCore::AutoAnimationTrigger::AutoAnimationTrigger):
        (WebCore::ScrollAnimationTrigger::create):
        (WebCore::ScrollAnimationTrigger::~ScrollAnimationTrigger):
        (WebCore::ScrollAnimationTrigger::startValue):
        (WebCore::ScrollAnimationTrigger::setStartValue):
        (WebCore::ScrollAnimationTrigger::endValue):
        (WebCore::ScrollAnimationTrigger::setEndValue):
        (WebCore::ScrollAnimationTrigger::hasEndValue):
        (WebCore::ScrollAnimationTrigger::setHasEndValue):
        (WebCore::ScrollAnimationTrigger::ScrollAnimationTrigger):

2015-03-16  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac
        https://bugs.webkit.org/show_bug.cgi?id=142747

        Reviewed by Chris Dumez.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        Added more directories, interfaces, and forwarding headers.
        Temporarily disabled the generating of ObjC bindings in CMake builds.
        * platform/mac/PasteboardMac.mm:
        Removed unused include.

2015-03-16  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Crash viewing http://www.last.fm/
        https://bugs.webkit.org/show_bug.cgi?id=142309

        Reviewed by Chris Fleizach.

        The crash occurs when a not-yet-rendered object emits a children-changed
        signal. If an assistive technology is listening, AT-SPI2 will attempt to
        create and cache the state set for the child being added and the creation
        of the state set assumes a rendered object.

        Test: platform/gtk/accessibility/no-notification-for-unrendered-iframe-children.html

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::attachWrapper):

2015-03-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181492.
        https://bugs.webkit.org/show_bug.cgi?id=142756

        May have regressed PLT (Requested by anttik on #webkit).

        Reverted changeset:

        "Cache glyph widths to GlyphPages"
        https://bugs.webkit.org/show_bug.cgi?id=142028
        http://trac.webkit.org/changeset/181492

2015-03-16  Roger Fong  <roger_fong@apple.com>

        [WebGL2] Instancing draw calls.
        https://bugs.webkit.org/show_bug.cgi?id=126939.
        <rdar://problem/15002379>

        Reviewed by Dean Jackson.

        Tested by a modified version of the 1.0.3 conformance tests:
        conformance/extensions/angle-instanced-arrays.html
        conformance/extensions/angle-instanced-arrays-out-of-bounds.html

        These tests will be landed along with other modified extension conformance tests
        once approval from Khronos is received.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::clear): Generate error if clearing an integer color buffer.
        (WebCore::WebGL2RenderingContext::vertexAttribDivisor): Call method from base class.
        (WebCore::WebGL2RenderingContext::drawArraysInstanced): Ditto.
        (WebCore::WebGL2RenderingContext::drawElementsInstanced): Ditto.
        (WebCore::WebGL2RenderingContext::isIntegerFormat): Ditto.
        (WebCore::WebGL2RenderingContext::validateDrawElements): Deleted. Move back to base class.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl: Add a missing enum.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clear): Copied from WebGLRenderingContextBase.
        (WebCore::WebGLRenderingContext::validateDrawElements): Deleted. Move back to base class.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp: 
        (WebCore::WebGLRenderingContextBase::clear): Deleted. Moved to WebGLRenderingContext.
        (WebCore::WebGLRenderingContextBase::getVertexAttrib): Check for WebGL2 context.
        (WebCore::WebGLRenderingContext::validateDrawElements): Ditto.
        * html/canvas/WebGLRenderingContextBase.h:

2015-03-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181572.
        https://bugs.webkit.org/show_bug.cgi?id=142755

        Caused weird test failures in transitions and animations
        (Requested by dino on #webkit).

        Reverted changeset:

        "Parsing and Style Resolution of Container-based Animation
        Triggers"
        https://bugs.webkit.org/show_bug.cgi?id=142687
        http://trac.webkit.org/changeset/181572

2015-03-16  Yoav Weiss  <yoav@yoav.ws>

        Remove setCachedImage from HTMLImageElement since it is not used
        https://bugs.webkit.org/show_bug.cgi?id=142740

        Reviewed by Chris Dumez.

        No new tests since this patch is just removing dead code.

        HTMLImageElement::setCachedImage is not being called by anyone.
        This patch removes it, since it's dead code.

        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setCachedImage): Deleted.

2015-03-16  Brent Fulgham  <bfulgham@apple.com>

        WebKit1 Clients Are Not Reliably Repainted
        https://bugs.webkit.org/show_bug.cgi?id=142750
        <rdar://problem/20042453>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Move "Red Rect" debug painting before
        the early return so we can see when this happening in debug builds.
        * page/FrameView.h:
        (WebCore::FrameView::inPaintableState): Added.

2015-03-16  Chris Dumez  <cdumez@apple.com>

        Make DatabaseContext suspendable if there is no pending database activity
        https://bugs.webkit.org/show_bug.cgi?id=142716
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Make DatabaseContext suspendable if there is no pending database
        activity, i.e:
        - No pending Database creation JS callback
        - No pending transaction(s)

        Suspending is safe in this case because we are not going to interrupt
        any database activity, nor fire any JS event.

        This greatly increases the likelihood of pages using websql to enter
        the PageCache.

        Tests: fast/history/page-cache-webdatabase-no-transaction-db.html
               fast/history/page-cache-webdatabase-pending-transaction.html

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::hasPendingTransaction):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::canSuspend):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::hasPendingDatabaseActivity):
        * Modules/webdatabase/DatabaseThread.h:

2015-03-16  Brady Eidson  <beidson@apple.com>

        Addressing additional review feedback after http://trac.webkit.org/changeset/181565
        https://bugs.webkit.org/show_bug.cgi?id=142733

        Reviewed by Darin Adler.

        * loader/icon/IconController.cpp:
        (WebCore::IconController::startLoader): Null check page()

2015-03-16  Roger Fong  <roger_fong@apple.com>

        [Win] Unreviewed build fix attempt after r181571.

        * WebCore.vcxproj/WebCore.vcxproj:

2015-03-16  Roger Fong  <roger_fong@apple.com>

        [WebGL2] Multiple Render Targets.
        https://bugs.webkit.org/show_bug.cgi?id=126994.
        <rdar://problem/15815766>

        Reviewed by Dean Jackson.

        Tested by a modified version of the 1.0.3 conformance test:
        conformance/extensions/webgl-draw-buffers.html
        This test will be landed along with other modified extension conformance tests
        once approval from Khronos is received.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::drawBuffers): Mostly the same as WebGLDrawBuffers::drawBuffersWEBGL.
        Returns different error messages, uses non EXT enums.
        (WebCore::WebGL2RenderingContext::clearBufferiv): This actually does nothing for now but the validation has been implemented.
        (WebCore::WebGL2RenderingContext::clearBufferuiv): Ditto.
        (WebCore::WebGL2RenderingContext::clearBufferfv): Ditto.
        (WebCore::WebGL2RenderingContext::clearBufferfi): Ditto.
        (WebCore::WebGL2RenderingContext::validateFramebufferFuncParameters): Removes the extension object check.
        (WebCore::WebGL2RenderingContext::getMaxDrawBuffers):
        (WebCore::WebGL2RenderingContext::getMaxColorAttachments): Must return the same thing as getMaxDrawBuffers.
        (WebCore::WebGL2RenderingContext::getParameter): Remove extension object checks.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters): Copied from WebGLRenderingContextBase.
        (WebCore::WebGLRenderingContext::getMaxDrawBuffers): Ditto.
        (WebCore::WebGLRenderingContext::getMaxColorAttachments): Ditto.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateFramebufferFuncParameters): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:

2015-03-16  Dean Jackson  <dino@apple.com>

        Parsing and Style Resolution of Container-based Animation Triggers
        https://bugs.webkit.org/show_bug.cgi?id=142687
        <rdar://problem/20170007>

        Reviewed by Simon Fraser.

        This is the beginning of a prototype implementation of
        CSS Animation Triggers, as described by
        https://lists.w3.org/Archives/Public/www-style/2014Sep/0135.html

        In this patch we parse and resolve the value of a new
        CSS property "-webkit-animation-trigger". At the moment it
        only accepts one function value "container-scroll", which
        will trigger the animation at an absolute position within
        an element's scrolling container. We expect the syntax to
        change in the near future, as the spec is written.

        Tests: animations/trigger-computed-style.html
               animations/trigger-parsing.html

        * WebCore.xcodeproj/project.pbxproj: Add the new files.

        * css/CSSAnimationTriggerScrollValue.cpp: Added.
        (WebCore::CSSAnimationTriggerScrollValue::customCSSText): Output text for computed style.
        (WebCore::CSSAnimationTriggerScrollValue::equals): Compare two values.
        * css/CSSAnimationTriggerScrollValue.h: Added. This holds the CSS side of the
        scroll trigger. This name may change in the future to better represent the
        type of trigger, but it is good enough for now.
        (WebCore::CSSAnimationTriggerScrollValue::create):
        (WebCore::CSSAnimationTriggerScrollValue::startValue):
        (WebCore::CSSAnimationTriggerScrollValue::endValue):
        (WebCore::CSSAnimationTriggerScrollValue::CSSAnimationTriggerScrollValue):

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createAnimationTriggerValue): Maps an AnimationTrigger into a CSSValue.
        (WebCore::getAnimationTriggerValue): Gets the current computed style.
        (WebCore::ComputedStyleExtractor::propertyValue):

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationTrigger): Parse the "container-scroll" function
        and record the value as a CSSAnimationTriggerScrollValue.
        (WebCore::CSSParser::parseAnimationProperty): Handle the new property.
        * css/CSSParser.h:

        * css/CSSPropertyNames.in: Add "-webkit-animation-trigger".

        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTrigger): Map a CSSValue into a trigger value on
        an Animation object.
        * css/CSSToStyleMap.h:

        * css/CSSValue.cpp: Handle the new CSSValue type.
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isAnimationTriggerScrollValue):

        * platform/animation/Animation.h: Add AnimationTrigger as a new field.
        (WebCore::Animation::isTriggerSet):
        (WebCore::Animation::isEmpty):

        * platform/animation/AnimationTrigger.h: Added. New base class and subclasses for
        "auto" and the scrolling trigger.
        (WebCore::AnimationTrigger::~AnimationTrigger):
        (WebCore::AnimationTrigger::type):
        (WebCore::AnimationTrigger::isAutoAnimationTrigger):
        (WebCore::AnimationTrigger::isScrollAnimationTrigger):
        (WebCore::AnimationTrigger::AnimationTrigger):
        (WebCore::AutoAnimationTrigger::create):
        (WebCore::AutoAnimationTrigger::~AutoAnimationTrigger):
        (WebCore::AutoAnimationTrigger::AutoAnimationTrigger):
        (WebCore::ScrollAnimationTrigger::create):
        (WebCore::ScrollAnimationTrigger::~ScrollAnimationTrigger):
        (WebCore::ScrollAnimationTrigger::startValue):
        (WebCore::ScrollAnimationTrigger::setStartValue):
        (WebCore::ScrollAnimationTrigger::endValue):
        (WebCore::ScrollAnimationTrigger::setEndValue):
        (WebCore::ScrollAnimationTrigger::hasEndValue):
        (WebCore::ScrollAnimationTrigger::setHasEndValue):
        (WebCore::ScrollAnimationTrigger::ScrollAnimationTrigger):

2015-03-15  Roger Fong  <roger_fong@apple.com>

        [WebGL2] Vertex Array Objects.
        https://bugs.webkit.org/show_bug.cgi?id=126944.
        <rdar://problem/15002455>

        Reviewed by Dean Jackson.

        Tested by a modified version of the 1.0.3 conformance test:
        conformance/extensions/oes-vertex-array-object.html
        This test will be landed along with other modified extension conformance tests
        once approval from Khronos is received.

        * html/canvas/OESVertexArrayObject.cpp: Associate extension calls only with WebGLRenderingContext.
        (WebCore::OESVertexArrayObject::deleteVertexArrayOES):
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGL2RenderingContext.cpp: Implement vertex array object calls as part WebGL2 context.
        (WebCore::WebGL2RenderingContext::createVertexArray):
        (WebCore::WebGL2RenderingContext::deleteVertexArray):
        (WebCore::WebGL2RenderingContext::isVertexArray):
        (WebCore::WebGL2RenderingContext::bindVertexArray):
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGL2RenderingContext::getParameter):

        Duplicate extension object vertex array object extension methods in GraphicsContext3D.
        Implementation may change after we upgrade to newer GL headers and profile.
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):

        Have WebGLVertexArrayObjectOES and WebGLVertexArrayObject inherit from WebGLRenderingContextBase.
        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::create):
        (WebCore::WebGLVertexArrayObject::WebGLVertexArrayObject): Use GraphicsContext3D implementation of createVertexArray.
        (WebCore::WebGLVertexArrayObject::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObject.h:
        * html/canvas/WebGLVertexArrayObjectBase.cpp: Added.
        (WebCore::WebGLVertexArrayObjectBase::WebGLVertexArrayObjectBase):
        (WebCore::WebGLVertexArrayObjectBase::setElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribState):
        (WebCore::WebGLVertexArrayObjectBase::unbindBuffer):
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribDivisor):
        * html/canvas/WebGLVertexArrayObjectBase.h: Added.
        (WebCore::WebGLVertexArrayObjectBase::~WebGLVertexArrayObjectBase):
        (WebCore::WebGLVertexArrayObjectBase::VertexAttribState::VertexAttribState):
        (WebCore::WebGLVertexArrayObjectBase::VertexAttribState::isBound):
        (WebCore::WebGLVertexArrayObjectBase::VertexAttribState::validateBinding):
        (WebCore::WebGLVertexArrayObjectBase::isDefaultObject):
        (WebCore::WebGLVertexArrayObjectBase::hasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectBase::setHasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectBase::getElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectBase::getVertexAttribState):
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        (WebCore::WebGLVertexArrayObjectOES::setElementArrayBuffer): Deleted.
        (WebCore::WebGLVertexArrayObjectOES::setVertexAttribState): Deleted.
        (WebCore::WebGLVertexArrayObjectOES::unbindBuffer): Deleted.
        (WebCore::WebGLVertexArrayObjectOES::setVertexAttribDivisor): Deleted.
        * html/canvas/WebGLVertexArrayObjectOES.h:

        * html/canvas/WebGLRenderingContextBase.cpp: Use WebGLVertexArrayObjectBase class.
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::disableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes):
        (WebCore::WebGLRenderingContextBase::enableVertexAttribArray):
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::initVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::restoreStatesAfterVertexAttrib0Simulation):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::setBoundVertexArrayObject):

        Handle construction of WebGLGetInfo using WebGLVertexArrayObject.
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp:
        (WebCore::toJS):
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getWebGLVertexArrayObjectOES):
        (WebCore::WebGLGetInfo::getWebGLVertexArrayObject):
        * html/canvas/WebGLGetInfo.h:

2015-03-16  Brent Fulgham  <bfulgham@apple.com>

        Potentially uninitialized Inspector values
        https://bugs.webkit.org/show_bug.cgi?id=142730

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor): Make sure color values are given an initial value.

2015-03-16  Brady Eidson  <beidson@apple.com>

        URLs visited during private browsing show up in WebpageIcons.db
        rdar://problem/11254910 and https://bugs.webkit.org/show_bug.cgi?id=142733

        Patch by Sam Weinig. Reviewed by Brady Eidson.

        * loader/icon/IconController.cpp:
        (WebCore::IconController::startLoader): Bail early here if the page is using an ephemeral session.
        (WebCore::IconController::continueLoadWithDecision): Instead of here.

2015-03-16  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        Update to reflect function rename.

        * loader/SubframeLoader.cpp:
        (WebCore::findPluginMIMETypeFromURL):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::logPluginRequest):
        Update to reflect function rename.
        (WebCore::SubframeLoader::shouldUsePlugin):
        Ditto.

        * platform/PlatformStrategies.h:
        Export platformStrategies(), since it is now used in WebProcess.cpp.

        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::type):
        (WebCore::DOMMimeType::description):
        (WebCore::DOMMimeType::mimeClassInfo):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMMimeType::enabledPlugin):
        Ditto.

        * plugins/DOMMimeType.h:
        Don't return references in a few places where it is no longer safe to do so.
        (WebCore::DOMMimeType::mimeClassInfo): Deleted.

        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::length):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMMimeTypeArray::item):
        Ditto.
        (WebCore::DOMMimeTypeArray::canGetItemsForName):
        Ditto.
        (WebCore::DOMMimeTypeArray::namedItem):
        Ditto.

        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::pluginInfo):
        Adopt getWebVisiblePlugins().
        (WebCore::DOMPlugin::item):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMPlugin::canGetItemsForName):
        Ditto.
        (WebCore::DOMPlugin::namedItem):
        Ditto.

        * plugins/DOMPlugin.h:
        (WebCore::DOMPlugin::pluginInfo): Deleted.

        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::length):
        Adopt getWebVisiblePlugins().
        (WebCore::DOMPluginArray::item):
        Ditto.
        (WebCore::DOMPluginArray::canGetItemsForName):
        Ditto.
        (WebCore::DOMPluginArray::namedItem):
        Ditto.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::PluginData):
        Stash the passed-in Page and call initPlugins().
        (WebCore::PluginData::getWebVisiblePlugins):
        New member function; call through to PluginStrategy::getWebVisiblePluginInfo().
        (WebCore::PluginData::getWebVisibleMimesAndPluginIndices):
        New member function; build up the mimes and mimePluginIndices vectors in the same manner as before, but
        limited to the web-visible plug-ins.
        (WebCore::PluginData::supportsWebVisibleMimeType):
        Renamed from supportsMimeType(); update to work in terms of web-visible plug-ins.
        (WebCore::PluginData::pluginInfoForWebVisibleMimeType):
        Renamed from pluginInfoForMimeType(); ditto.
        (WebCore::PluginData::pluginNameForWebVisibleMimeType):
        Renamed from pluginNameForMimeType(); ditto.
        (WebCore::PluginData::pluginFileForWebVisibleMimeType):
        Renamed from pluginFileForMimeType(); ditto.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::supportsMimeType): Deleted.
        (WebCore::PluginData::pluginInfoForMimeType): Deleted.
        (WebCore::PluginData::pluginNameForMimeType): Deleted.
        (WebCore::PluginData::pluginFileForMimeType): Deleted.

        * plugins/PluginData.h:
        Add a member variable for the associate Page; declare the PluginLoadClientPolicy enumeration; add
        new members to PluginInfo for the clientLoadPolicy and bundle information.
        (WebCore::PluginData::PluginData):
        Replace some member functions with new ones that will hide plug-ins upon request from the client;
        (WebCore::PluginData::mimes): Deleted.
        (WebCore::PluginData::mimePluginIndices): Deleted.

        * plugins/PluginStrategy.h:
        Declare new member functions for retrieving web-visible plug-ins and setting/clearing plug-in policies.

        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PluginData>::encodeValue):
        Remove now-obsolete code for handling MIME types and add a FIXME.
        (JSC::DeserializedPluginData::DeserializedPluginData):
        (JSC::EncodingTraits<PluginData>::decodeValue):
        Ditto.
        (JSC::EncodingTraits<PluginInfo>::encodeValue):
        Handle the new members in PluginInfo.
        (JSC::EncodingTraits<PluginInfo>::decodeValue):
        Ditto.

        * replay/WebInputs.json:
        Teach Replay about PluginLoadClientPolicy.

2015-03-16  Max Stepin  <maxstepin@gmail.com>

        Add APNG support
        https://bugs.webkit.org/show_bug.cgi?id=17022

        Reviewed by Carlos Garcia Campos.

        Test: fast/images/animated-png.html

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::divide255):
        (WebCore::ImageFrame::overRGBA):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::frameHeader):
        (WebCore::readChunks):
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::readChunks):
        (WebCore::PNGImageDecoder::frameHeader):
        (WebCore::PNGImageDecoder::init):
        (WebCore::PNGImageDecoder::clearFrameBufferCache):
        (WebCore::PNGImageDecoder::initFrameBuffer):
        (WebCore::PNGImageDecoder::frameComplete):
        (WebCore::PNGImageDecoder::processingStart):
        (WebCore::PNGImageDecoder::processingFinish):
        (WebCore::PNGImageDecoder::fallbackNotAnimated):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::frameCount):
        (WebCore::PNGImageDecoder::repetitionCount):
        (WebCore::PNGImageDecoder::isComplete):

2015-03-15  Benjamin Poulain  <benjamin@webkit.org>

        CSS: fix the case-insensitive matching of the attribute selectors Begin, End and Hyphen
        https://bugs.webkit.org/show_bug.cgi?id=142715

        Reviewed by Brent Fulgham.

        Fix attribute matching with:
        -Begin: [a^=b].
        -End: [a$=b].
        -Hyphen: [a|=b].

        Tests: fast/selectors/attribute-endswith-value-matching-is-ascii-case-insensitive.html
               fast/selectors/attribute-hyphen-value-matching-is-ascii-case-insensitive.html
               fast/selectors/attribute-startswith-value-matching-is-ascii-case-insensitive.html

        * css/SelectorChecker.cpp:
        (WebCore::attributeValueMatches):
        I forgot to change CSSSelector::Exact in my last patch.
        The tests could not catch that since we use the CSS JIT almost everywhere.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::attributeValueBeginsWith):
        (WebCore::SelectorCompiler::attributeValueEndsWith):
        (WebCore::SelectorCompiler::attributeValueMatchHyphenRule):

2015-03-15  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build after r181522.

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

2015-03-15  Andy Estes  <aestes@apple.com>

        [Content Filtering] Adopt new NEFilterSource SPI
        https://bugs.webkit.org/show_bug.cgi?id=142710
        rdar://problem/19023855

        Reviewed by Dan Bernstein.

        Teach NetworkExtensionContentFilter to use a new, alternate NEFilterSource SPI on platforms where it is available.

        * platform/ContentFilter.cpp:
        (WebCore::ContentFilter::types): Renamed HAVE(NE_FILTER_SOURCE) to HAVE(NETWORK_EXTENSION).
        * platform/cocoa/NetworkExtensionContentFilter.h: Renamed member variables to remove redundancy, forward-declared NEFilterSourceStatus,
        added a dispatch_semaphore member variable to avoid creating and destroying multiple semaphores, and made m_originalData a SharedBuffer.
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (decisionInfoReplacementData): Returned the replacement data from a decision handler info dictionary.
        (WebCore::createNEFilterSource): Created either an old-style or new-style NEFilterSource object.
        (WebCore::NetworkExtensionContentFilter::NetworkExtensionContentFilter): Called receivedResponse:decisionHandler: when using the new SPI.
        (WebCore::NetworkExtensionContentFilter::~NetworkExtensionContentFilter): Released the dispatch_semaphore.
        (WebCore::NetworkExtensionContentFilter::addData): Appended the copied NSData to m_originalData, avoiding an additional copy previously
        being made by NSMutableData. Used the new receivedData:decisionHandler: SPI when appropriate.
        (WebCore::NetworkExtensionContentFilter::finishedAddingData): Used the new finishedLoadingWithDecisionHandler: SPI when appropriate.
        (WebCore::NetworkExtensionContentFilter::needsMoreData): Changed m_neFilterSourceStatus to m_status.
        (WebCore::NetworkExtensionContentFilter::didBlockData): Ditto.
        (WebCore::NetworkExtensionContentFilter::getReplacementData): Returned the replacement data from NEFilterSource if the load was blocked.
        Otherwise, returned the original data.
        (WebCore::NetworkExtensionContentFilter::handleDecision): Added a helper to set m_status and m_replacementData, and to signal m_semaphore.
        * platform/spi/cocoa/NEFilterSourceSPI.h: Declared the new NEFilterSource SPI on platforms that support it.

2015-03-15  Brent Fulgham  <bfulgham@apple.com>

        Scroll snap points are not supported on iframe content
        https://bugs.webkit.org/show_bug.cgi?id=142582
        <rdar://problem/20121319>

        Tested by css3/scroll-snap/scroll-snap-iframe.html

        Reviewed by Simon Fraser.

        The scroll snap points were not being applied to the iframe contents because the code
        that sets up the scroll snap point content is not called for iframes.

        To correct this, we need to make sure the snap offsets are set during post-frame layout
        for iframes. We also need to make sure (on Mac) that the scroll animator and timers are updated.

        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks): Call 'updateSnapOffsets' if the frame is not a
        MainFrame. Also notify scroll animators they need to update their snap point settings.

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Add the same is<RenderBox> test to KeyframeAnimation::computeExtentOfTransformAnimation()
        that ImplicitAnimation::computeExtentOfTransformAnimation() has, and change the latter
        to the more canonical is<RenderBox>() form.
        
        Fixes an assertion in animations/animation-on-inline-crash.html

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation):

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        And another fix. Thanks to Hunseop Jeong for the fix.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::didMoveToNewDocument):

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Fix the touch-event build.

        * dom/Document.cpp:
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore::Document::didRemoveTouchEventHandler):

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reduce the side-effects of animations turning off overlap testing
        https://bugs.webkit.org/show_bug.cgi?id=92791

        Reviewed by Dean Jackson.
        
        When a layer is running a transition or animation of the transform property,
        we would simply disable overlap testing for later layers, which had the side-effect
        of promoting lots of unrelated elements into layers temporarily.
        
        Fix by maintaining overlap, but computing an overlap extent that takes the animation
        into account.
        
        Rotations are currently treated as full rotations. If an extent for the overlap is
        hard to compute (e.g. 3d transforms, or matrix animations with a rotation component),
        then we fall back to the current behavior.

        Tests: compositing/layer-creation/mismatched-rotated-transform-animation-overlap.html
               compositing/layer-creation/mismatched-rotated-transform-transition-overlap.html
               compositing/layer-creation/mismatched-transform-transition-overlap.html
               compositing/layer-creation/multiple-keyframes-animation-overlap.html
               compositing/layer-creation/scale-rotation-animation-overlap.html
               compositing/layer-creation/scale-rotation-transition-overlap.html
               compositing/layer-creation/translate-animation-overlap.html
               compositing/layer-creation/translate-scale-animation-overlap.html
               compositing/layer-creation/translate-scale-transition-overlap.html
               compositing/layer-creation/translate-transition-overlap.html

        * page/animation/AnimationBase.cpp:
        (WebCore::containsRotation):
        (WebCore::AnimationBase::computeTransformedExtentViaTransformList): When we have matched
        transform lists, we can map a rectangle through the various operations. Transform-origin
        is used to shift the origin of the box first, and then unshift after. If we encounter
        a rotation, for now assume it's a full rotation (a future patch could tighten this up).
        (WebCore::AnimationBase::computeTransformedExtentViaMatrix): If we're using matrix
        interpolation, we have to decompose the matrix to see if there's any rotation component,
        and, if there is, fall back to current behavior.
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::computeExtentOfAnimation):
        (WebCore::AnimationController::computeExtentOfAnimation):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::computeExtentOfTransformAnimation): Ask active keyframe
        animations and transitions to compute the bounds extent.
        * page/animation/CompositeAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::computeExtentOfTransformAnimation): Compute the extent
        of the start and end transforms, and union them.
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::getAnimatedStyle): Some nullptr goodness.
        (WebCore::KeyframeAnimation::computeExtentOfTransformAnimation): Compute an extent
        for each keyframe, and take their union.
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::euclidianDistance): Use Pythagoras to compute a distance.
        (WebCore::boundsOfRotatingRect): Given a rect whose location is relative
        to the rotation origin, compute a bounds for the rotated rect by computing
        the furthest corner from the origin, and sweeping out a circle.
        * platform/graphics/GeometryUtilities.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::isAffectedByTransformOrigin):
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::affectedByTransformOrigin): Ask all the operations if
        they are affected by transform-origin.
        (WebCore::TransformOperations::blendByMatchingOperations): nullptr.
        * platform/graphics/transforms/TransformOperations.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushMappingToContainer): Comment fix. Only take transforms into account
        if the geometry map says so (which is most of the time).
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer): RenderLayerCompositor is now using the
        geometry map in a way that is incompatible with this assertion; it deliberately ignores
        transforms sometimes, so we can't easily verify that the mapping matches mapping through
        renderers.
        (WebCore::RenderGeometryMap::pushMappingsToAncestor): Save and restore the UseTransforms
        bit.
        * rendering/RenderGeometryMap.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::boundingBox): Whitespace.
        (WebCore::RenderLayer::getOverlapBoundsIncludingChildrenAccountingForTransformAnimations): Helper
        function to get the bounds of a layer, including descendants, when a transform animation is running.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::CompositingState): Add a ancestorHasTransformAnimation
        flag to detect nested animated transforms.
        (WebCore::RenderLayerCompositor::OverlapExtent::knownToBeHaveExtentUncertainty): This returns true when
        the layer is animating transform, and the transition/animation is such that we can't easily compute the
        bounds of the animation.
        (WebCore::RenderLayerCompositor::computeExtent): const RenderLayer&.
        Compute the animated bounds if there's a transform animation running.
        (WebCore::RenderLayerCompositor::addToOverlapMap): const RenderLayer&
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive): const RenderLayer&
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Delay the call to pushMappingsToAncestor() until knowing if there's a transform animation running, and
        if there is, push the mapping while ignoring transforms (since the transform is implicitly taken into account
        for overlap via the computed animated bounds).
        If this layer is running a transform animation, set the childState.ancestorHasTransformAnimation flag so
        that descendants will know (nested transform animations fall back to current behavior).
        The if (.... && isRunningAcceleratedTransformAnimation()) is what previously caused us to turn off overlap
        testing in the face of animations. That now only happens if we were unable to easily compute the animation bounds.
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation): This previously tested whether an accelerated animation
        was running, but that's timing sensitive; AnimationController can start the transform animation, but it's not yet
        considered accelerated until we get an async callback from GraphicsLayer, yet this code needed to know if the
        animation was running.
        Since transform animations are always accelerated, we can just test for a running transform animation.
        (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin): Some FIXME comments.

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Clean up related to wheelEvent names
        https://bugs.webkit.org/show_bug.cgi?id=142713

        Reviewed by Anders Carlsson.

        Add EventNames::isWheelEventType() and use it in places that test for the
        two wheel event names.

        * dom/Document.cpp:
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didRemoveWheelEventHandler):
        * dom/Document.h: No need for exports (I grepped). Pass the Node*, which
        will be used in a later patch.
        * dom/EventNames.h:
        (WebCore::EventNames::isWheelEventType):
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::tryAddEventListener):
        (WebCore::tryRemoveEventListener):
        (WebCore::Node::defaultEventHandler):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsAppleEventListener::handleEvent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToScrollWheelEvents): Remove dead code.

2015-03-15  Simon Fraser  <simon.fraser@apple.com>

        Remove a redundant repaint when a layer becomes composited
        https://bugs.webkit.org/show_bug.cgi?id=142711

        Reviewed by Anders Carlsson.

        RenderLayerCompositor::computeCompositingRequirements() doesn't need to call
        repaintOnCompositingChange() when a layer is going to become composited,
        because updateBacking() does exactly the same thing. I used an assertion
        and ran the tests to ensure this wasn't a behavior change.

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

2015-03-15  Benjamin Poulain  <bpoulain@apple.com>

        Change the exact attribute matching to be ASCII case-insensitive
        https://bugs.webkit.org/show_bug.cgi?id=142609

        Reviewed by Darin Adler.

        In CSS, testing attribute values should be ASCII case-insensitive,
        previously we were using full unicode case conversion.

        Test: fast/selectors/attribute-exact-value-match-is-ascii-case-insensitive.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseKeyframeSelector):
        The CSS parser has its own fast version for ASCII case insensitive.
        This code was using the general equalIgnoringASCIICase() which was causing name conflicts,
        change that to the normal CSS parser version.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::equalIgnoringASCIICase): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):

2015-03-15  Brent Fulgham  <bfulgham@apple.com>

        scroll snap points do not properly account for zoomed pages
        https://bugs.webkit.org/show_bug.cgi?id=142706
        <rdar://problem/20165771>

        Reviewed by Anders Carlsson.

        When a WebView is zoomed (such that it has a non-unity pageScaleFactor), we need to account for this
        scaling value when selecting our correct scroll snap point target, as well as when specifying the
        pixel location for our animation to target.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::pageScaleFactor): Added new delegate method.
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerClient::pageScaleFactor): Added new default delegate.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::beginScrollSnapAnimation): Calculate the correct scroll target
        based on the page scale factor.

2015-03-15  Csaba Osztrogonác  <ossy@webkit.org>

        Fix run-bindings-tests on the WinCairo bot
        https://bugs.webkit.org/show_bug.cgi?id=142588

        Reviewed by Alex Christensen.

        * bindings/scripts/test/JS/JSFloat64Array.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSFloat64Array.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestCallback.cpp: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestCallback.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestEventConstructor.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestEventTarget.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestException.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestException.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestImplements.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestImplements.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestInterface.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestNamedConstructor.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestNondeterministic.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestObj.cpp: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestObj.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: Modified property svn:eol-style.
        * bindings/scripts/test/JS/JSTestSupplemental.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestSupplemental.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSTestTypedefs.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSattribute.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSattribute.h: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSreadonly.cpp: Added property svn:eol-style.
        * bindings/scripts/test/JS/JSreadonly.h: Added property svn:eol-style.

2015-03-14  Darin Adler  <darin@apple.com>

        More event handler improvements
        https://bugs.webkit.org/show_bug.cgi?id=142701

        Reviewed by Anders Carlsson.

        These are the improvements:

        - Use EventHandler rather than EventListener as the the type for event handler
          attributes. This matches the HTML specification, and also makes sense, since
          EventListener means something else (and we use it to mean that!). Also renamed
          JSWindowEventListener to WindowEventHandler. Even though this only affects the
          JavaScript code generated, it's not really a JavaScript-specific flag.

        - Tweak formatting on addEventListener/removeEventListener/dispatchEvent in
          all the IDL files where the appear. This includes changing the spelling from
          "evt" to "event". Some day we should fix this so these functions only need to
          appear in EventTarget.idl.

        - Tweak formatting a bit on the IDL files we had to modify anyway.

        - Use [Conditional] more often and #if less often in IDL files.

        - Added a new [DocumentEventHandler] attribute for the selectionchange event.
          This involved adding new event handler attribute functions to JSEventListener.h
          for use by the JavaScript bindings.

        - Removed a little unused code from the JavaScript code bindings generator.

        - Improved the mechanism used by HTMLElement and SVGElement to share the list of
          content attributes that are event handlers so there is only one map rather than
          two. Made a similar mechanism so that HTMLBodyElement and HTMLFrameSetElement
          can share the list of window event handlers.

        - Followed the HTML specification by putting all the event handler support in
          the HTMLElement class rather than having event handlers apply only a the
          particular element that uses those events. We already did this for most of
          our event handlers, but we are now doing it for all of them.

        * Modules/battery/BatteryManager.idl: Use EventHandler instead of EventListener
        as appropriate. Also reformatted addEventListener/removeEventListener/dispatchEvent.
        * Modules/encryptedmedia/MediaKeySession.idl: Ditto.
        * Modules/indexeddb/IDBDatabase.idl: Ditto.
        * Modules/indexeddb/IDBOpenDBRequest.idl: Ditto.
        * Modules/indexeddb/IDBRequest.idl: Ditto.
        * Modules/indexeddb/IDBTransaction.idl: Ditto.
        * Modules/mediastream/MediaStream.idl: Ditto.
        * Modules/mediastream/MediaStreamTrack.idl: Ditto.
        * Modules/mediastream/RTCDTMFSender.idl: Ditto.
        * Modules/mediastream/RTCDataChannel.idl: Ditto.
        * Modules/mediastream/RTCPeerConnection.idl: Ditto.
        * Modules/speech/SpeechSynthesisUtterance.idl: Ditto.
        * Modules/webaudio/AudioBufferSourceNode.idl: Ditto.
        * Modules/webaudio/AudioContext.idl: Ditto.
        * Modules/webaudio/OscillatorNode.idl: Ditto.
        * Modules/webaudio/ScriptProcessorNode.idl: Ditto.
        * Modules/websockets/WebSocket.idl: Ditto.
        * css/FontLoader.idl: Ditto.
        * dom/EventListener.idl: Ditto.
        * dom/EventTarget.idl: Ditto.
        * dom/MessagePort.idl: Ditto.
        * dom/Node.idl: Ditto.
        * dom/WebKitNamedFlow.idl: Ditto.
        * fileapi/FileReader.idl: Ditto.
        * html/MediaController.idl: Ditto.
        * html/track/AudioTrackList.idl: Ditto.
        * html/track/TextTrackCue.idl: Ditto.
        * html/track/TextTrackList.idl: Ditto.
        * html/track/VideoTrackList.idl: Ditto.
        * loader/appcache/DOMApplicationCache.idl: Ditto.
        * page/EventSource.idl: Ditto.
        * page/Performance.idl: Ditto.
        * workers/AbstractWorker.idl: Ditto.
        * workers/DedicatedWorkerGlobalScope.idl: Ditto.
        * workers/Worker.idl: Ditto.
        * workers/WorkerGlobalScope.idl: Ditto.
        * xml/XMLHttpRequest.idl: Ditto.
        * xml/XMLHttpRequestUpload.idl: Ditto.

        * Modules/notifications/Notification.idl: Did the above, but also used
        [Conditional] instead of #if throughout.
        * html/track/TextTrack.idl: Ditto.

        * Modules/webaudio/AudioNode.idl: Tweaked paragraphing of this file.

        * bindings/js/JSEventListener.cpp:
        (WebCore::windowEventHandlerAttribute): Renamed to take the word "forwarded"
        out of this. More closely matches the terminology used in IDL files and the
        HTML specification.
        (WebCore::setWindowEventHandlerAttribute): Ditto.
        (WebCore::documentEventHandlerAttribute): Added.
        (WebCore::setDocumentEventHandlerAttribute): Added.
        * bindings/js/JSEventListener.h: Updated for above changes.

        * bindings/objc/PublicDOMInterfaces.h: Renamed argument from "evt" to "event".

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Skip attributes of type "EventHandler" rather than attributes
        of type "EventListener".
        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipAttribute): Ditto.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Look for the type EventHandler instead of the type
        EventListener for event handler attributes. Also added code to handle the new
        DocumentEventHandler, and use the name WindowEventHandler instead of the name
        JSWindowEventListener. Removed unneeded preflight check to see if we have
        writable attributes; it was not doing us any good. (That caused a lot of code
        to be un-indented and makes the diff hard to read.)

        * bindings/scripts/IDLAttributes.txt: Removed JSWindowEventListener, and added
        WindowEventHandler and DocumentEventHandler.

        * bindings/scripts/test/TestObj.idl: Use the type EventHandler instead of the
        type EventListener. The test output is unchanged, though.

        * dom/Document.idl: Got rid of the conditionals and merged all the event handler
        attributes into a single sorted, unconditional list. Added some that were missing,
        as detected by the event-handler-attributes.html test.

        * dom/Element.idl: Ditto. This includes moving attributes here that were formerly
        only in certain element classes. Note that the script event handler attribute
        support is still here, even though it should be in HTMLElement and SVGElement
        instead. There's a FIXME about that, but no real urgency in fixing it.

        * html/HTMLAttributeNames.in: Added onmessage. Previously, the support for this
        was from the script attribute only, not the content attribute.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createWindowEventHandlerNameMap): Added. This
        contains the list of all the window event handlers that can be set on a body
        or frameset element and which are triggered by events on the window.
        (WebCore::HTMLBodyElement::eventNameForWindowEventHandlerAttribute): Added.
        This is the function to call to use the map above. Given an attribute, it
        returns either null if it is not a window event handler attribute, or the
        event type if it is one.
        (WebCore::HTMLBodyElement::parseAttribute): Updated to use the new
        functions above. Handling of these attributes is now unconditional, but
        also we don't have to keep the nested if statements here up to date, just
        the list of event handler attributes names in the map create function above.

        * html/HTMLBodyElement.h: Added public eventNameForWindowEventHandlerAttribute
        and private createWindowEventHandlerNameMap functions.

        * html/HTMLBodyElement.idl: Updated to use WindowEventHandler, DocumentEventHandler,
        and EventHandler. Also made everything unconditional. Also filled out the list here
        to match the list handled as content attributes. All covered by the test.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap): Added. Replaces the old
        populate function. Changed the list of event handler attributes to be a bit more
        complete, and to be entirely unconditional. Also refactored this function to use
        a new populateEventHandlerNameMap helper, shared with HTMLBodyElement.
        (WebCore::HTMLElement::populateEventHandlerNameMap): Added. Factors out the code
        that both this class and HTMLBodyElement use to build event handler name maps.
        (WebCore::HTMLElement::eventNameForEventHandlerAttribute): Added. This is the
        function that call to use the map above. Given an attribute it returns either
        null if it is not an event handler attribute, or the event type if it is one.
        This is actually two functions. One is a protected function for use by both this
        class and HTMLBodyElement so they can share things like the optimization to look
        for the "on" prefix. The other is the public function that we actually use in
        HTMLElement and SVGElement.
        (WebCore::HTMLElement::editabilityFromContentEditableAttr): Tweaked and refactored
        to use lineageOfType. Would have been even simpler if this took an element instead
        of a node. Unrelated to the event handler changes.
        (WebCore::HTMLElement::parseAttribute): Removed long-obsolete code that decided
        whether to call through to the base class. The base class function is empty and
        never needs to be called, and in any case there is no value in doing work to
        decide whether to call through to an empty function. Changed the style of the
        function to use early return instead of else. Worth considering whether we want
        to return early or call through to base class in this family of functions. It's
        more efficient to return early, but doesn't work well if both the derived class
        and base class want to respond to changes to the same attribute. The new logic
        for event handler attributes is more straightforward than the old, since the
        eventNameForEventHandlerAttribute has the logic.
        (WebCore::HTMLElement::textToFragment): Tweaked and refactored a bit, and also
        changed to return a Ref since this never fails and needs to return null.

        * html/HTMLElement.h: Updated for above changes. This includes a template version
        of populateEventHandlerNameMap that extracts the array size at compile time and
        passes it to the non-template function that does the work.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute): Removed unneeded code to handle
        event handler attributes handled by HTMLElement.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute): Ditto.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute): Ditto.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute): Ditto.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseAttribute): Ditto.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseAttribute): Changed function to early return
        style, and added FIXMEs about the many problems in the attribute handling code.
        Replaced all the code to handle window event handlers with a new bit of code that
        calls HTMLBodyElement::eventNameForWindowEventHandlerAttribute.

        * html/HTMLFrameSetElement.idl: Changed to match the list of window event handlers
        in HTMLBodyElement.idl, although I did not add the document event handler here.
        As in the various other cases, having some extra event handlers does not seem to
        do harm and this is covered by the event-handler-attributes.html test.

        * html/HTMLMarqueeElement.idl: Renamed EventListener to EventHandler in comment.

        * page/DOMWindow.idl: As with Element and Document, removed conditionals, and
        filled out the list of event handlers so all the tests in
        event-handler-attributes.html will pass.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute): Changed code to the early return style,
        and replaced the event handler attribute code with new much simpler code that
        uses the new HTMLElement::eventNameForEventHandlerAttribute. Also changed the
        way we call through to base classes. Just call through to the
        SVGLangSpace::parseAttribute function unconditionally, and don't try to use
        early return style to arbitrate among base classes. We should make this
        simplification throughout the SVG code; there's no need for the complexity
        that was there before just to cut down slightly on calls through to base
        class parseAttribute functions.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseAttribute): Changed some of this code to the
        early return style and corrected some comments about the window event handler
        attributes here. These could use some further testing and might later need to be
        properly supported when the attributes are set in script, not just in content.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isSupportedAttribute): Deleted.
        (WebCore::SVGScriptElement::parseAttribute): Changed this function to use the
        early return style and also to call through to all three base classes. This is
        a pattern we should follow elsewhere in SVG to simplify the code. There is no
        need for the supportedAttributes sets like the one in this calass, and the code
        is unnecessarily complex, perhaps in an attempt to optimize performance. I'm
        pretty sure the old code was slower than this new code will be. No need for the
        extra hash table lookup every time. Also removed handling of event handler
        attribute which is taken care of by SVGElement now.
        (WebCore::SVGScriptElement::svgAttributeChanged): Made similar changes for
        the same reason as in parseAttribute. This function really needs a new name:
        It's the same as parseAttribute, except it's also used when implementing
        changes due to SVG animation.

        * svg/SVGScriptElement.h: Removed isSupportedAttribute.

2015-03-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up use of flags in localToContainer-type functions
        https://bugs.webkit.org/show_bug.cgi?id=142704

        Reviewed by Alexey Proskuryakov.
        
        RenderObject::localToContainerQuad() had the questionable behavior of always
        enforcing UseTransforms in the flags. However, a future patch will need to call
        localToContainerQuad() without this flag.
        
        Fix by requiring callers of localToAbsoluteQuad(), localToContainerQuad(), localToContainerPoint(),
        and absoluteToLocalQuad() to pass the UseTransforms flag in, providing it as a default argument.
        
        The default value of the MapCoordinatesFlags parameter to mapLocalToContainer(),
        a lower-level function, is removed.
        
        Sprinkle a few more nullptrs around.
        
        No behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint): call the higher-level localToContainerPoint()
        instead of mapLocalToContainer().
        (WebCore::RenderBlock::absoluteQuads): Pass UseTransforms.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads): Ditto.
        * rendering/RenderBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.h:
        (WebCore::RenderGeometryMap::absolutePoint):
        (WebCore::RenderGeometryMap::absoluteRect):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionRects): This function was erroneously passing
        'false' as flags. Pass UseTransforms instead (but no behavior change since
        UseTransforms was forced on lower down).
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): UseTransforms is the parameter default, remove it.
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::absoluteQuads):
        (WebCore::RenderLineBreak::collectSelectionRects): Another erroneous 'false'.
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::absoluteQuadsForBoxInRegion):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToContainerQuad): Here's where we no longer force
        the UseTransforms bit.
        (WebCore::RenderObject::localToContainerPoint): Also here.
        * rendering/RenderObject.h: I prefer bit flags lined up. Makes it easier to spot errors.
        (WebCore::RenderObject::localToAbsoluteQuad):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects): Another bad 'false'.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::absoluteRectsForRange):
        (WebCore::RenderTextLineBoxes::absoluteQuads):
        (WebCore::RenderTextLineBoxes::absoluteQuadsForRange):
        * rendering/RenderView.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::collectAbsoluteQuads):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::absoluteQuads): Another bad 'false'.
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::absoluteQuads):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.h:

2015-03-14  Brent Fulgham  <bfulgham@apple.com>

        [iOS] scroll snap points are animating to the wrong positions...
        https://bugs.webkit.org/show_bug.cgi?id=142705
        <rdar://problem/20136946>

        Reviewed by Simon Fraser.

        Avoid adding an extra '0' snap point to our set. We always start with one zero; this
        extra append just forces us to do more steps in our search for nearest snap point.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateFromStyle): Remove extra '0' appended to offsets.

2015-03-14  Dean Jackson  <dino@apple.com>

        Feature flag for Animations Level 2
        https://bugs.webkit.org/show_bug.cgi?id=142699
        <rdar://problem/20165097>

        Reviewed by Brent Fulgham.

        Add ENABLE_CSS_ANIMATIONS_LEVEL_2 and a runtime flag animationTriggersEnabled.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAnimationTriggersEnabled):
        (WebCore::RuntimeEnabledFeatures::animationTriggersEnabled):

2015-03-14  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        RenderBlock::imageChange() calling const methods on exit
        https://bugs.webkit.org/show_bug.cgi?id=142648

        Reviewed by Brent Fulgham.

        No new tests, no change on behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged): Deleted.
        * rendering/RenderBlock.h:

2015-03-14  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] share GL context in pipeline
        https://bugs.webkit.org/show_bug.cgi?id=142693

        Reviewed by Philippe Normand.

        GstGL elements in a pipeline need to be aware of the application's
        display and its GL context. This information is shared through context
        messages between the pipeline and the browser.

        This patch shares this context through a GStreamer's synchronous
        message, using the GL information held in the web process.

        This patch is based on the work of Philippe Normand for Bug 138562.

        No new tests because this is platform specific and it depends in the
        run-time availability and configurations of GstGL elements.

        * PlatformGTK.cmake: appends the GstGL header files in the include
        directories. Also its library directory is appended.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSyncMessageCallback): New callback function.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Initialize the new class attributes.
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): New method
        for handling synchronous messages from the pipeline. This method
        currently only handles the GL context sharing.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Configures
        the pipeline's bus to handle the synchronous messages.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add new
        class methods and attributes.

2015-03-13  Alex Christensen  <achristensen@webkit.org>

        Progress towards CMake on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=142680

        Reviewed by Gyuyoung Kim.

        * PlatformMac.cmake:
        Added new include directories and removed old source files.

2015-03-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181483.
        https://bugs.webkit.org/show_bug.cgi?id=142688

        Caused use-after-free on many tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow clients to selectively disable plug-ins"
        https://bugs.webkit.org/show_bug.cgi?id=142506
        http://trac.webkit.org/changeset/181483

2015-03-13  Antti Koivisto  <antti@apple.com>

        Cache glyph widths to GlyphPages
        https://bugs.webkit.org/show_bug.cgi?id=142028

        Reviewed by Andreas Kling.

        Currently we have a separate cache in Font for glyph widths. In practice we always need
        the widths so we can just cache them in GlyphPages. This simplifies the code and removes
        a per-character hash lookup from WidthIterator.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::initCharWidths):
        (WebCore::Font::platformGlyphInit):
        (WebCore::createAndFillGlyphPage):
        (WebCore::Font::computeWidthForGlyph):

            Rename to make it clear this doesn't cache.

        (WebCore::GlyphPage::setGlyphDataForIndex):

            Initialize the width.
            This could go to GlyphPage.cpp if we had one.

        * platform/graphics/Font.h:
        (WebCore::Font::glyphZeroWidth):
        (WebCore::Font::isZeroWidthSpaceGlyph):
        (WebCore::Font::zeroGlyph): Deleted.
        (WebCore::Font::setZeroGlyph): Deleted.
        (WebCore::Font::widthForGlyph): Deleted.
        * platform/graphics/FontCascade.cpp:
        (WebCore::offsetToMiddleOfGlyph):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForCharacter):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphData::GlyphData):

            Return width too as part of GlyphData.

        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPage::GlyphPage):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

            No need to lookup width separately now.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::advanceForGlyph):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::missingGlyphForFont):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFont):

2015-03-13  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET
        https://bugs.webkit.org/show_bug.cgi?id=142635

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2015-03-13  Jeremy Jones  <jeremyj@apple.com>

        Fix typo restoreUserInterfaceForOptimizedFullscreeStopWithCompletionHandler.
        https://bugs.webkit.org/show_bug.cgi?id=142678

        Reviewed by Eric Carlson.

        Add the missing 'n' in "fullscreen".

        * platform/spi/ios/AVKitSPI.h:

2015-03-13  Timothy Horton  <timothy_horton@apple.com>

        Sites that use a device-width viewport but don't have enough height to fill the view are scaled up
        https://bugs.webkit.org/show_bug.cgi?id=142664
        <rdar://problem/18859470>

        Reviewed by Benjamin Poulain.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints):
        (WebCore::ViewportConfiguration::shouldIgnoreVerticalScalingConstraints):
        (WebCore::ViewportConfiguration::shouldIgnoreScalingConstraints):
        Split shouldIgnoreScalingConstraints into one for each dimension.

        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        Don't force the initial and minimum scales to cover the whole view if the
        page claims to want to lay out to device width but then lays out too big.
        This will allow pages that misbehave in this way to scale down further
        than they previously could, but will result in a region of empty background
        color being exposed at the initial/minimum scale.

        (WebCore::ViewportConfiguration::description):
        Update the logging to show each dimension separately.

        * page/ViewportConfiguration.h:

2015-03-13  Mark Lam  <mark.lam@apple.com>

        Replace TCSpinLock with a new WTF::SpinLock based on WTF::Atomic.
        <https://webkit.org/b/142674>

        Reviewed by Filip Pizlo.

        No new tests because there is no new functionality. This is a refactoring effort.

        * bindings/objc/WebScriptObject.mm:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow initWithLayer:]):
        (-[WAKWindow initWithFrame:]):

2015-03-13  Doug Russell  <d_russell@apple.com>

        AX: Provide API for assistive tech to ignore DOM key event handlers
        https://bugs.webkit.org/show_bug.cgi?id=142059

        Reviewed by Beth Dakin.

        Assistive technology applications on the desktop are heavily dependent on keyboard navigation being reliable. This is greatly hindered by sites that handle key events without updating keyboard selection and then consume the event. It is important for assistive technology apps to allow users to decide to ignore these handlers that are incorrect for their purposes.

        This can be fixed by exposing, via a new accessibility attribute, a way to decide, for a given WebCore::Frame, to pre-empt DOM dispatch and instead let accessibility caret browsing take place.

        Test: platform/mac/accessibility/prevent-keyboard-event-dispatch.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::preventKeyboardDOMEventDispatch):
        (WebCore::AccessibilityObject::setPreventKeyboardDOMEventDispatch):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        * dom/Element.cpp:
        (WebCore::Element::dispatchKeyEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        (WebCore::handleKeyboardSelectionMovement):
        (WebCore::EventHandler::handleKeyboardSelectionMovementForAccessibility):
        * page/EventHandler.h:
        * page/Settings.in:

2015-03-09  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        Update to reflect function rename.

        * loader/SubframeLoader.cpp:
        (WebCore::findPluginMIMETypeFromURL):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::logPluginRequest):
        Update to reflect function rename.
        (WebCore::SubframeLoader::shouldUsePlugin):
        Ditto.

        * platform/PlatformStrategies.h:
        Export platformStrategies(), since it is now used in WebProcess.cpp.

        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::type):
        (WebCore::DOMMimeType::description):
        (WebCore::DOMMimeType::mimeClassInfo):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMMimeType::enabledPlugin):
        Ditto.

        * plugins/DOMMimeType.h:
        Don't return references in a few places where it is no longer safe to do so.
        (WebCore::DOMMimeType::mimeClassInfo): Deleted.

        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::length):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMMimeTypeArray::item):
        Ditto.
        (WebCore::DOMMimeTypeArray::canGetItemsForName):
        Ditto.
        (WebCore::DOMMimeTypeArray::namedItem):
        Ditto.

        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::pluginInfo):
        Adopt getWebVisiblePlugins().
        (WebCore::DOMPlugin::item):
        Adopt getWebVisibleMimesAndPluginIndices().
        (WebCore::DOMPlugin::canGetItemsForName):
        Ditto.
        (WebCore::DOMPlugin::namedItem):
        Ditto.

        * plugins/DOMPlugin.h:
        (WebCore::DOMPlugin::pluginInfo): Deleted.

        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::length):
        Adopt getWebVisiblePlugins().
        (WebCore::DOMPluginArray::item):
        Ditto.
        (WebCore::DOMPluginArray::canGetItemsForName):
        Ditto.
        (WebCore::DOMPluginArray::namedItem):
        Ditto.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::PluginData):
        Stash the passed-in Page and call initPlugins().
        (WebCore::PluginData::getWebVisiblePlugins):
        New member function; call through to PluginStrategy::getWebVisiblePluginInfo().
        (WebCore::PluginData::getWebVisibleMimesAndPluginIndices):
        New member function; build up the mimes and mimePluginIndices vectors in the same manner as before, but
        limited to the web-visible plug-ins.
        (WebCore::PluginData::supportsWebVisibleMimeType):
        Renamed from supportsMimeType(); update to work in terms of web-visible plug-ins.
        (WebCore::PluginData::pluginInfoForWebVisibleMimeType):
        Renamed from pluginInfoForMimeType(); ditto.
        (WebCore::PluginData::pluginNameForWebVisibleMimeType):
        Renamed from pluginNameForMimeType(); ditto.
        (WebCore::PluginData::pluginFileForWebVisibleMimeType):
        Renamed from pluginFileForMimeType(); ditto.
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::supportsMimeType): Deleted.
        (WebCore::PluginData::pluginInfoForMimeType): Deleted.
        (WebCore::PluginData::pluginNameForMimeType): Deleted.
        (WebCore::PluginData::pluginFileForMimeType): Deleted.

        * plugins/PluginData.h:
        Add a member variable for the associate Page; declare the PluginLoadClientPolicy enumeration; add
        new members to PluginInfo for the clientLoadPolicy and bundle information.
        (WebCore::PluginData::PluginData):
        Replace some member functions with new ones that will hide plug-ins upon request from the client;
        (WebCore::PluginData::mimes): Deleted.
        (WebCore::PluginData::mimePluginIndices): Deleted.

        * plugins/PluginStrategy.h:
        Declare new member functions for retrieving web-visible plug-ins and setting/clearing plug-in policies.

        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<PluginData>::encodeValue):
        Remove now-obsolete code for handling MIME types and add a FIXME.
        (JSC::DeserializedPluginData::DeserializedPluginData):
        (JSC::EncodingTraits<PluginData>::decodeValue):
        Ditto.
        (JSC::EncodingTraits<PluginInfo>::encodeValue):
        Handle the new members in PluginInfo.
        (JSC::EncodingTraits<PluginInfo>::decodeValue):
        Ditto.

        * replay/WebInputs.json:
        Teach Replay about PluginLoadClientPolicy.

2015-03-13  Chris Dumez  <cdumez@apple.com>

        XMLHttpRequests should not prevent a page from entering PageCache
        https://bugs.webkit.org/show_bug.cgi?id=142612
        <rdar://problem/19923085>

        Reviewed by Alexey Proskuryakov.

        Make XMLHttpRequest ActiveDOMObjects suspendable in most cases to
        drastically improve the likelihood of pages using them to enter
        PageCache. XMLHttpRequest used to be only suspendable when not
        loading. After this patch, if the XMLHttpRequest is loading when
        navigating away from the page, it will be aborted and the page
        will enter the PageCache. Upon restoring the page from PageCache,
        the XMLHttpRequests' error handlers will be executed to give them
        a chance to reload if they want to.

        Test: http/tests/navigation/page-cache-xhr.html

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        Do not prevent a page to enter the page cache ff the main document has
        an error that is a cancellation and all remaining subresource loaders
        are for XHR. We extend the pre-existing mechanism used on iOS, which
        allowed PageCaching if the remaining resource loads are for images.

        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable):
        Mark XHR loaders as PageCache acceptable.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::isXMLHttpRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::areAllClientsXMLHttpRequests):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::isXMLHttpRequest):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::canSuspend):
        Report that we can suspend XMLHttpRequests as long as the window load
        event has already fired. If the window load event has not fired yet,
        it would be unsafe to cancel the load in suspend() as it would
        potentially cause arbitrary JS execution while suspending.

        (WebCore::XMLHttpRequest::suspend):
        If suspending for PageCache and the request is currently loading, abort
        the load and mark that we should fire the error event upon restoring
        from PageCache.

        (WebCore::XMLHttpRequest::resume):
        (WebCore::XMLHttpRequest::resumeTimerFired):
        Upon resuming, fire the error event in a timer if the load was aborted
        for suspending. We need to do this in a timer because we are not allowed
        to execute arbitrary JS inside resume().

        (WebCore::XMLHttpRequest::stop):
        Add a assertion to make sure we are not firing event inside stop() as
        this would potentially cause arbitrary JS execution and it would be
        unsafe. It seems to me that our code is currently unsafe but the
        assertion does not seem to be hit by our current layout tests. I am
        adding the assertion as it would make it clear we have a bug and we
        need to fix it.

        * xml/XMLHttpRequest.h:

2015-03-13  Joonghun Park  <jh718.park@samsung.com>

        Fix Debug build error 'comparison is always true due to limited range of data type [-Werror=type-limits]'
        https://bugs.webkit.org/show_bug.cgi?id=142652

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior changes.

        Now CSSPropertyID type is uint16_t, so propertyID >= 0 check is needed no more.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::propertyName):
        * css/makeprop.pl:

2015-03-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove DrawingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=142641

        Reviewed by Darin Adler.

        Remove the DrawingBuffer class. Objects of this type were only held in the
        WebGLRenderingContext (later renamed to WebGLRenderingContextBase) on the
        Chromium port, with the relevant code removed in r147888. Since then, the
        m_drawingBuffer member variable has always been null.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::copyTexImage2D):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::destroyGraphicsContext3D):
        (WebCore::WebGLRenderingContextBase::markContextChanged):
        (WebCore::WebGLRenderingContextBase::clearIfComposited):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContextBase::reshape):
        (WebCore::WebGLRenderingContextBase::drawingBufferWidth):
        (WebCore::WebGLRenderingContextBase::drawingBufferHeight):
        (WebCore::WebGLRenderingContextBase::activeTexture):
        (WebCore::WebGLRenderingContextBase::bindFramebuffer):
        (WebCore::WebGLRenderingContextBase::bindTexture):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::deleteFramebuffer):
        (WebCore::WebGLRenderingContextBase::disable):
        (WebCore::WebGLRenderingContextBase::enable):
        (WebCore::WebGLRenderingContextBase::getContextAttributes):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::loseContextImpl):
        (WebCore::WebGLRenderingContextBase::getBoundFramebufferWidth):
        (WebCore::WebGLRenderingContextBase::getBoundFramebufferHeight):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::ScopedDrawingBufferBinder::ScopedDrawingBufferBinder): Deleted.
        (WebCore::ScopedDrawingBufferBinder::~ScopedDrawingBufferBinder): Deleted.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp: Removed.
        * platform/graphics/gpu/DrawingBuffer.cpp: Removed.
        * platform/graphics/gpu/DrawingBuffer.h: Removed.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm: Removed.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):

2015-03-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r180726): Removing an empty line at the end of textarea clears the entire texture
        https://bugs.webkit.org/show_bug.cgi?id=142646

        Reviewed by Darin Adler.

        The bug was caused by TypingCommand::deleteKeyPressed erroneously determining the editable root to be empty because
        Position::atStartOfTree returns true when it's anchored at a BR that is immediately below the root editable element.

        Fixed the bug by replacing the use of the deprecated atFirstEditingPositionForNode by a code that understands modern
        position types such as PositionIsBeforeAnchor in atStartOfTree and atEndOfTree. These two functions will no longer
        return true when anchored before or after BR after this patch.

        Test: editing/deleting/delete-empty-line-breaks-at-end-of-textarea.html

        * dom/Position.cpp:
        (WebCore::Position::atStartOfTree):
        (WebCore::Position::atEndOfTree):

2015-03-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        Integrate MapData into JSMap and JSSet
        https://bugs.webkit.org/show_bug.cgi?id=142556

        Reviewed by Filip Pizlo.

        Now Set has SetData and it's different from MapData.
        And MapData/SetData are completely integrated into JSSet and JSMap.
        Structured-cloning algorithm need to be aware of these changes.
        And in the case of JSSet, since JSSet doesn't need dummy value for construction,
        Structured-cloning only serialize the keys in JSSet.

        * ForwardingHeaders/runtime/MapDataInlines.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::consumeCollectionDataTerminationIfPossible):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::consumeMapDataTerminationIfPossible): Deleted.

2015-03-12  Dan Bernstein  <mitz@apple.com>

        Finish up <rdar://problem/20086546> [Cocoa] Add an option to treat certificate chains with SHA1-signed certificates as insecure

        Added back OS X bits that I couldn’t land initially in r181317 or had to remove in r181327.

        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate):
        * platform/spi/cocoa/SecuritySPI.h:

2015-03-12  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION: Crash under Heap::reportExtraMemoryAllocatedSlowCase for media element
        https://bugs.webkit.org/show_bug.cgi?id=142636

        Reviewed by Mark Hahnenberg.

        This was a pre-existing bug that I made a lot worse in
        <https://trac.webkit.org/changeset/181411>.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Compare size before
        subtracting rather than subtracting and then comparing to zero. The
        latter technique is not valid for unsigned integers, which will happily
        underflow into giant numbers.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::reportExtraMemoryAllocated): This code was
         technically correct, but I took the opportunity to clean it up a bit.
         There's no need to do two checks here, and it smells bad to check for
         a negative unsigned integer.

2015-03-12  Sebastian Dröge  <sebastian@centricular.com>

        Stop using single-include headers that are only available since GStreamer >= 1.2.

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

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/ImageGStreamer.h:
        Instead of using single-include headers for the GStreamer libraries,
        directly include the headers we need. The single-include headers were
        only added in 1.2, and this would be the only reason why we would
        depend on 1.2.

2015-03-12  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update AirPlay handling
        https://bugs.webkit.org/show_bug.cgi?id=142541

        Unreviewed, respond to post-review comments.

        * dom/Document.cpp:
        (WebCore::Document::didChoosePlaybackTarget):
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::showPlaybackTargetPicker):
        (WebCore::Page::didChoosePlaybackTarget):
        (WebCore::Page::configurePlaybackTargetMonitoring):

2015-03-12  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Darin Adler.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):

2015-03-11  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed follow-up fix to r181426. Initialize TextPosition with zeros in case it gets used.

        Address ASSERT in LayoutTests/printing/page-format-data.html.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        In case the TextPosition gets used because it wasn't created by a parser,
        zeros are more realistic values then beforeFirst.

2015-03-11  Roger Fong  <roger_fong@apple.com>

        Media element time no longer updates while scrubbing following r181279.
        https://bugs.webkit.org/show_bug.cgi?id=142606.
        <rdar://problem/20131014>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        Update time as a result of a mouse move if we are scrubbing.

2015-03-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS parser errors in the console should include column numbers
        https://bugs.webkit.org/show_bug.cgi?id=114313

        Reviewed by Darin Adler.

        Test: inspector-protocol/console/warnings-errors.html

        * css/CSSParser.h:
        (WebCore::CSSParser::currentCharacterOffset):
        Get the current character offset depending on the source type.
        Add instance variables to track column position and start
        line / column for inline stylesheets.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        Initialize new instance variables.

        (WebCore::CSSParser::currentLocation):
        Update to include column information for the token. Also, if we are on the
        first line we may need to take into account a start column offset as well.

        (WebCore::CSSParser::realLex):
        Set the token's start column.
        When bumping the line number, reset the column offset for the next
        line with the next character.

        (WebCore::CSSParser::syntaxError):
        (WebCore::CSSParser::logError):
        Include column information.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        (WebCore::StyleSheetContents::parseStringAtPosition):
        Include column information.

        * css/StyleSheetContents.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        (WebCore::InlineStyleSheetOwner::createSheet):
        Save and use column information later on.

        * dom/InlineStyleSheetOwner.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):
        Updated parser signature needs starting column and no longer has optional parameters.

2015-03-11  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Update AirPlay handling
        https://bugs.webkit.org/show_bug.cgi?id=142541

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::showPlaybackTargetPicker):
        (WebCore::Document::addPlaybackTargetPickerClient):
        (WebCore::Document::removePlaybackTargetPickerClient):
        (WebCore::Document::configurePlaybackTargetMonitoring):
        (WebCore::Document::requiresPlaybackTargetRouteMonitoring):
        (WebCore::Document::playbackTargetAvailabilityDidChange):
        (WebCore::Document::didChoosePlaybackTarget):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession):
        (WebCore::HTMLMediaSession::registerWithDocument):
        (WebCore::HTMLMediaSession::unregisterWithDocument):
        (WebCore::HTMLMediaSession::showPlaybackTargetPicker):
        (WebCore::HTMLMediaSession::hasWirelessPlaybackTargets):
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::HTMLMediaSession::didChoosePlaybackTarget):
        (WebCore::HTMLMediaSession::externalOutputDeviceAvailableDidChange):
        (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring):
        * html/HTMLMediaSession.h:
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::didChoosePlaybackTarget):
        (WebCore::Page::playbackTargetAvailabilityDidChange):
        (WebCore::Page::configurePlaybackTargetMonitoring):
        * page/Page.h:
        (WebCore::Page::hasWirelessPlaybackTarget):
        (WebCore::Page::playbackTarget):
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::clientDataBufferingTimerFired):
        (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Deleted.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::didChoosePlaybackTarget):
        (WebCore::MediaSession::externalOutputDeviceAvailableDidChange):
        (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring):
        (WebCore::MediaSessionClient::setWirelessPlaybackTarget):
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Deleted.
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::configureWireLessTargetMonitoring):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::externalOutputDeviceAvailableDidChange):
        (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]):
        * platform/graphics/AVPlaybackTarget.h: Added.
        (WebCore::AVPlaybackTarget::~AVPlaybackTarget):
        (WebCore::AVPlaybackTarget::AVPlaybackTarget):
        (WebCore::AVPlaybackTarget::setDevicePickerContext):
        (WebCore::AVPlaybackTarget::devicePickerContext):
        * platform/graphics/AVPlaybackTargetPickerClient.h: Added.
        (WebCore::AVPlaybackTargetPickerClient::~AVPlaybackTargetPickerClient):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setWirelessPlaybackTarget):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setWirelessPlaybackTarget):
        * platform/graphics/avfoundation/AVPlaybackTargetMac.mm: Added.
        (WebCore::AVPlaybackTarget::encode):
        (WebCore::AVPlaybackTarget::decode):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2015-03-11  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Add resource type and load type triggers.
        https://bugs.webkit.org/show_bug.cgi?id=142422

        Reviewed by Benjamin Poulain.

        New API tests.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::getTypeFlags):
        (WebCore::ContentExtensions::loadTrigger):
        * contentextensions/ContentExtensionRule.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL): Deleted.
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFABytecode.h:
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp:
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendConditionalAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        * contentextensions/DFABytecodeCompiler.h:
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        * loader/ResourceLoadInfo.cpp: Added.
        (WebCore::toResourceType):
        (WebCore::readResourceType):
        (WebCore::readLoadType):
        (WebCore::ResourceLoadInfo::isThirdParty):
        (WebCore::ResourceLoadInfo::getResourceFlags):
        * loader/ResourceLoadInfo.h: Added.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::actionsForResourceLoad):
        (WebCore::UserContentController::actionsForURL): Deleted.
        * page/UserContentController.h:

2015-03-11  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):

2015-03-11  Timothy Horton  <timothy_horton@apple.com>

        <attachment> shouldn't use "user-select: all"
        https://bugs.webkit.org/show_bug.cgi?id=142453

        Reviewed by Darin Adler.

        It turns out that "user-select: all" is rife with bugs; in lieu of fixing them
        all (at least for now), let's not use "user-select: all" in the default stylesheet
        for <attachment>. It's really overkill anyway, since <attachment> can't have children.
        The only "user-select: all" behavior we actually want is select-on-click.
        So, we'll implement that in a slightly different way.

        Tests: fast/attachment/attachment-select-on-click-inside-user-select-all.html
               fast/attachment/attachment-select-on-click.html

        * css/html.css:
        (attachment):
        No more "user-select: all".

        (attachment:focus): Deleted.
        We stopped using attachment focus a while back and forgot to remove this.

        * dom/Node.h:
        (WebCore::Node::shouldSelectOnMouseDown):
        Add a virtual function that Node subclasses can override to indicate they
        should be selected on mouse down.

        * html/HTMLAttachmentElement.h:
        Override the aforementioned virtual function; <attachment> should always
        be selected on mouse down.

        * page/EventHandler.cpp:
        (WebCore::nodeToSelectOnMouseDownForNode):
        Determine which node should be selected when a mousedown hits the given node.
        If there's any "user-select: all", we go with the outermost "user-select: all".
        Otherwise, we give the node a chance to say that it wants to be selected itself.

        (WebCore::expandSelectionToRespectSelectOnMouseDown):
        Rename this function, it's not just about "user-select: all" anymore.
        Make use of nodeToSelectOnMouseDownForNode.

        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::expandSelectionToRespectUserSelectAll): Deleted.
        Adjust to the new names.

2015-03-11  Geoffrey Garen  <ggaren@apple.com>

        Users of Heap::deprecatedReportExtraMemory should switch to reportExtraMemoryAllocated+reportExtraMemoryVisited
        https://bugs.webkit.org/show_bug.cgi?id=142595

        Reviewed by Andreas Kling.

        Fixed this bug for canvas.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::memoryCost): Factored out the helper function
        required by our IDL generator.

        (WebCore::HTMLCanvasElement::createImageBuffer): Use
        reportExtraMemoryAllocated.

        * html/HTMLCanvasElement.h:

        * html/HTMLCanvasElement.idl: Adopt the IDL for reporting cost in the
        right way during GC. This will match our reportExtraMemoryAllocated
        with a reportExtraMemoryVisited during GC.

2015-03-11  Roger Fong  <roger_fong@apple.com>

        A number of minor edits to the media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142551.
        <rdar://problem/20114707>

        Reviewed by Darin Adler.

        This covers a slew of minor edits to the new media controls. They are as follows.
        Small vertical placements adjustments to inline control elements.
        Make sure buttons have no focus outlines.
        Expand height of mute box that triggers the volume panel appearing.
        Turn all button colors into an slightly transparent white.
        Center status display text in fullscreen mode.
        Lower position of captions container in fullscreen mode.
        Show the controls on when done loading of the video an status display is hidden.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-panel button:focus):
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-panel .mute-box):
        (video::-webkit-media-controls-volume-max-button):
        (audio::-webkit-media-controls-panel .volume-box):
        (video::-webkit-media-controls-volume-min-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-closed-captions-container li.selected:hover::before):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-fullscreen-button.exit):
        (audio::-webkit-media-controls-status-display):
        (audio::-webkit-media-controls-time-remaining-display):
        (video:-webkit-full-screen::-webkit-media-controls-panel .volume-box):
        (video:-webkit-full-screen::-webkit-media-controls-volume-max-button):
        (video:-webkit-full-screen::-webkit-media-controls-volume-min-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button.paused):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button):
        (video:-webkit-full-screen::-webkit-media-controls-status-display):
        (video:-webkit-full-screen::-webkit-media-controls-closed-captions-container):
        (audio::-webkit-media-controls-panel button:active): Deleted.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.setStatusHidden):

2015-03-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179340 and r179344.
        https://bugs.webkit.org/show_bug.cgi?id=142598

        Caused images to stay alive forever when navigating away from
        the page before they finish loading. (Requested by kling on
        #webkit).

        Reverted changesets:

        "CachedImage: ensure clients overrides imageChanged instead of
        notifyFinished"
        https://bugs.webkit.org/show_bug.cgi?id=140722
        http://trac.webkit.org/changeset/179340

        "HTMLImageLoader: fix build failure on assert condition after
        r179340"
        https://bugs.webkit.org/show_bug.cgi?id=140722
        http://trac.webkit.org/changeset/179344

2015-03-11  Geoffrey Garen  <ggaren@apple.com>

        Many users of Heap::reportExtraMemory* are wrong, causing lots of memory growth
        https://bugs.webkit.org/show_bug.cgi?id=142593

        Reviewed by Andreas Kling.

        Adopt deprecatedReportExtraMemory as a short-term fix for runaway
        memory growth in these cases where we have not adopted
        reportExtraMemoryVisited.

        Long-term, we should use reportExtraMemoryAllocated+reportExtraMemoryVisited.
        That's tracked by https://bugs.webkit.org/show_bug.cgi?id=142595.

        Using IOSDebug, I can see that the canvas stress test @ http://jsfiddle.net/fvyw4ba0/,
        which used to keep > 1000 1MB NonVolatile GPU allocations live, now keeps about 10 live.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::reportExtraMemoryAllocated):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::createWrapper):
        * dom/CollectionIndexCache.cpp:
        (WebCore::reportExtraMemoryAllocatedForCollectionIndexCache):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::imageChanged):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2015-03-10  Andy Estes  <aestes@apple.com>

        REGRESSION (r180985): contentfiltering/block-after-add-data.html crashes with GuardMalloc
        https://bugs.webkit.org/show_bug.cgi?id=142526

        Reviewed by Darin Adler.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::dataReceived): Don't delete m_contentFilter until after we're done using its replacement data.

2015-03-10  Sam Weinig  <sam@webkit.org>

        Allow adding a button in input elements for auto fill related functionality
        <rdar://problem/19782066>
        https://bugs.webkit.org/show_bug.cgi?id=142564

        Reviewed by Anders Carlsson.

        Test: fast/forms/input-auto-fill-button.html

        - Adds a new button that can be shown in <input> elements - AutoFillButtonElement.
        - Makes the spelling of AutoFill consistent throughout WebCore and WebKit (except
          where not feasible due to exported API/SPI).

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * css/html.css:
        (input::-webkit-auto-fill-button):
        (input::-webkit-auto-fill-button:hover):
        (input::-webkit-auto-fill-button:active):
        Add default style rules for the AutoFill button based on the ones
        used for caps lock indicator.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::autoFillButtonElement):
        (WebCore::HTMLInputElement::reset):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setAutoFilled):
        (WebCore::HTMLInputElement::setShowAutoFillButton):
        (WebCore::HTMLInputElement::setAutofilled): Deleted.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutoFilled):
        (WebCore::HTMLInputElement::showAutoFillButton):
        (WebCore::HTMLInputElement::isAutofilled): Deleted.
        Add new bit to represent whether the AutoFill button should be shown
        or not. By default it is not shown, and the client must enable it.

        * html/InputType.cpp:
        (WebCore::InputType::updateAutoFillButton):
        * html/InputType.h:
        (WebCore::InputType::autoFillButtonElement):
        Add new virtual methods for updating and accessing the AutoFill button.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::autoFillButtonElement):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        (WebCore::TextFieldInputType::shouldDrawAutoFillButton):
        (WebCore::TextFieldInputType::autoFillButtonElementWasClicked):
        (WebCore::TextFieldInputType::createContainer):
        (WebCore::TextFieldInputType::createAutoFillButton):
        (WebCore::TextFieldInputType::updateAutoFillButton):
        * html/TextFieldInputType.h:
        Add support for adding the AutoFill to the shadow DOM of textfields. The implementation
        is slightly different than for the caps lock indicator, because I didn't want to force
        the creation of a container for all <input> elements just in case an AutoFill button was
        added. Instead, if an AutoFill button is added, the container is created on the fly and
        the existing DOM is updated to move into it. Once a container is created, it is never
        removed.

        * html/shadow/AutoFillButtonElement.cpp: Added.
        (WebCore::AutoFillButtonElement::create):
        (WebCore::AutoFillButtonElement::AutoFillButtonElement):
        (WebCore::AutoFillButtonElement::defaultEventHandler):
        * html/shadow/AutoFillButtonElement.h: Added.
        Add div subclass that swallows the click event and forwards it to the ChromeClient.

        * page/ChromeClient.h:
        Add handleAutoFillButtonClick client function to inform WebKit that the AutoFill
        button was clicked.

        * testing/Internals.cpp:
        (WebCore::Internals::setAutofilled):
        (WebCore::Internals::setShowAutoFillButton):
        * testing/Internals.h:
        * testing/Internals.idl:
        Expose a new internals.setShowAutoFillButton() function to allow testing
        of the AutoFill button from layout tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isValueAutofilled):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilled):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        Update for new spelling of AutoFill.

2015-03-11  Geoffrey Garen  <ggaren@apple.com>

        Refactored the JSC::Heap extra cost API for clarity and to make some known bugs more obvious
        https://bugs.webkit.org/show_bug.cgi?id=142589

        Reviewed by Andreas Kling.

        Updated for renames to JSC extra cost APIs.

        Added FIXMEs to our 10 use cases that are currently wrong, including
        canvas, which is the cause of https://bugs.webkit.org/show_bug.cgi?id=142457.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::reportExtraMemoryAllocated):
        (WebCore::SourceBuffer::reportExtraMemoryCost): Deleted.
        * Modules/mediasource/SourceBuffer.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::createWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * dom/CollectionIndexCache.cpp:
        (WebCore::reportExtraMemoryAllocatedForCollectionIndexCache):
        (WebCore::reportExtraMemoryCostForCollectionIndexCache): Deleted.
        * dom/CollectionIndexCache.h:
        (WebCore::Iterator>::computeNodeCountUpdatingListCache):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCollection.h:
        (WebCore::CollectionNamedElementCache::didPopulate):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::imageChanged):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):

2015-03-11  Benjamin Poulain  <bpoulain@apple.com>

        Add basic support for BOL and EOL assertions to the URL Filter parser
        https://bugs.webkit.org/show_bug.cgi?id=142568

        Reviewed by Alex Christensen.

        This patch adds heavily restricted support for BOL and EOL to the URL filter parser.

        Both assertions must be the first/last term of their pattern. Any advanced combination
        results in a parsing error.

        The BOL assertion is easy to represent: currently, any pattern starts at the beginning
        of a line and the NFA are generated accordingly.

        I had two options to represent the EOL assertion:
        1) Add a new special transition on EOL.
        2) Add a new vector of actions to the states, conditional to the EOL input.

        I picked the first option to avoid growing every state by a vector
        that would be empty in the vast majority of cases.


        On the matching side, the interpreter was modified to support transitions on '\0'.
        DFABytecodeInstruction::CheckValue now stops when running on a character after
        the end of the string.

        DFABytecodeInstruction::Jump gets two fixes: First we now account for the index
        to avoid going past the end of the input. Second, stop on '\0' too... the reason
        is that the unconditional jump is only used for fallback edges of the DFA, fallback
        edge are not supposed to accept '\0'.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::printTransitions):
        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFANode.h:
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::addTransition):
        (WebCore::ContentExtensions::NFA::addEpsilonTransition):
        (WebCore::ContentExtensions::printTransitions):
        * contentextensions/NFANode.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::populateTransitions):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::isEndOfLineAssertion):
        (WebCore::ContentExtensions::GraphBuilder::assertionBOL):
        (WebCore::ContentExtensions::GraphBuilder::assertionEOL):
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTermIfNecessary):

2015-03-11  Jer Noble  <jer.noble@apple.com>

        [Mac] Update fullscreen placeholder UI to use Vibrancy.
        https://bugs.webkit.org/show_bug.cgi?id=142586

        Reviewed by Eric Carlson.

        Update the fullscreen placeholder with a translucent vibrant appearance
        using NSVisualEffectView. Since NSVisuaEffectView is only available for
        OS X 10.10 and above, wrap the new implementation in a version check and
        retain the old implementation.

        Drive-by: Update the strings for the placeholder view with new HI guidance
        as well.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::clickToExitFullScreenText):
        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView setExitWarningVisible:]):

2015-03-11  Timothy Horton  <timothy_horton@apple.com>

        Make it possible to zoom on pages that claim to lay out to device size and then fail to do so
        https://bugs.webkit.org/show_bug.cgi?id=142549

        Reviewed by Simon Fraser.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        Rename m_ignoreScalingConstraints to m_canIgnoreScalingConstraints,
        because it being true does not guarantee that we will ignore scaling constraints,
        but it being false does guarantee that we won't.

        (WebCore::ViewportConfiguration::shouldIgnoreScalingConstraints):
        Ignore scaling constraints if the page:
            a) claimed to want to lay out to device-width and then laid out too wide
            b) claimed to want to lay out to device-height and then laid out too tall
            c) claimed to want to lay out with initialScale=1 and then laid out too wide

        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::allowsUserScaling):
        Call shouldIgnoreScalingConstraints() instead of looking at the local, so we can
        have some more logic here (as above).

        (WebCore::ViewportConfiguration::description):
        Dump whether we're ignoring scaling constraints.

        (WebCore::ViewportConfiguration::dump):
        Use WTFLogAlways so that the output goes to various other logging mechanisms
        instead of just stderr.

        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::setCanIgnoreScalingConstraints):
        (WebCore::ViewportConfiguration::setIgnoreScalingConstraints): Deleted.

2015-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Use out-of-band messaging for RenderBox::firstLineBaseline() and RenderBox::inlineBlockBaseline()
        https://bugs.webkit.org/show_bug.cgi?id=142569

        Reviewed by David Hyatt.

        Currently, RenderBox::firstLineBaseline() and RenderBox::inlineBlockBaseline() return -1 to mean
        that its baseline should be skipped. Instead of using this sentinel value, this patch changes the
        return type from int to Optional<int>.

        No new tests because there is no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBaseline):
        (WebCore::RenderBlock::inlineBlockBaseline):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::firstLineBaseline):
        (WebCore::RenderBox::inlineBlockBaseline):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::baselinePosition):
        (WebCore::RenderFlexibleBox::firstLineBaseline):
        (WebCore::RenderFlexibleBox::inlineBlockBaseline):
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::cellAfter):
        (WebCore::RenderTable::firstLineBlock):
        (WebCore::RenderTable::baselinePosition):
        (WebCore::RenderTable::inlineBlockBaseline):
        (WebCore::RenderTable::firstLineBaseline):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::firstLineBaseline):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::baselinePosition):
        (WebCore::RenderMathMLTable::firstLineBaseline):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::firstLineBaseline):
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::firstLineBaseline):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::firstLineBaseline):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layout):
        (WebCore::RenderMathMLScripts::firstLineBaseline):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::firstLineBaseline):
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::firstLineBaseline):
        * rendering/mathml/RenderMathMLUnderOver.h:

2015-03-11  Timothy Horton  <timothy_horton@apple.com>

        <attachment>s should be created when dropping files onto contentEditable areas
        https://bugs.webkit.org/show_bug.cgi?id=142494
        <rdar://problem/19982553>

        Reviewed by Anders Carlsson.

        Covered by existing tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::WebContentReader::readFilenames):
        Instead of inserting the dropped URLs as strings, make an <attachment>
        for each.

2015-03-11  David Hyatt  <hyatt@apple.com>

        Optimize offsetWidth and offsetHeight to avoid doing layouts.
        https://bugs.webkit.org/show_bug.cgi?id=142544

        Reviewed by Beth Dakin.

        * dom/Document.cpp:
        (WebCore::Document::updateLayoutIfDimensionsOutOfDate):
        * dom/Document.h:
        Added a new method that only updates layout if it determines that the desired dimensions are out
        of date.

        * dom/Element.cpp:
        (WebCore::Element::offsetWidth):
        (WebCore::Element::offsetHeight):
        Patch offsetWidth and offsetHeight to call the new method rather than updateLayoutIgnorePendingStylesheets.

2015-03-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181367.
        https://bugs.webkit.org/show_bug.cgi?id=142581

        Caused crashes on the debug bots (Requested by cdumez on
        #webkit).

        Reverted changeset:

        "Web Inspector: CSS parser errors in the console should
        include column numbers"
        https://bugs.webkit.org/show_bug.cgi?id=114313
        http://trac.webkit.org/changeset/181367

2015-03-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Inline block children do not have correct baselines if their children are also block elements
        https://bugs.webkit.org/show_bug.cgi?id=142559

        Reviewed by Darin Adler.

        Perform the same computation on child block elements as child inline elements.

        Test: fast/text/baseline-inline-block-block-children.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineBlockBaseline):

2015-03-11  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [CMake][GStreamer] Building EFL or GTK with ENABLE_VIDEO and without ENABLE_WEB_AUDIO is broken.
        https://bugs.webkit.org/show_bug.cgi?id=142577

        Reviewed by Carlos Garcia Campos.

        No new tests, this is a build fix.

        * PlatformEfl.cmake: Include GSTREAMER_AUDIO_LIBRARIES on the link step both for ENABLE_VIDEO and ENABLE_WEB_AUDIO.
        * PlatformGTK.cmake: Idem.

2015-03-10  Philippe Normand  <pnormand@igalia.com>

        Rename MediaStreamCenter to RealtimeMediaSourceCenter
        https://bugs.webkit.org/show_bug.cgi?id=142535

        Reviewed by Eric Carlson.

        As per bug title, rename MediaStreamCenter to
        RealtimeMediaSourceCenter, this class manages
        RealtimeMediaSources, not MediaStreams. Some un-needed includes of
        the header were also removed.

2015-03-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary create() factory functions
        https://bugs.webkit.org/show_bug.cgi?id=142558

        Reviewed by Darin Adler.

        create() function which just returns new instance can be replaced with std::make_unique<>.

        No new tests, no behavior changes.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence):
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportData):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportData):
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        (WebCore::CryptoKeySerializationRaw::keyData):
        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::create): Deleted.
        * platform/audio/mac/CARingBuffer.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::prepare):
        * testing/Internals.cpp:
        (WebCore::Internals::queueMicroTask):
        * testing/MicroTaskTest.cpp:
        (WebCore::MicroTaskTest::create): Deleted.
        * testing/MicroTaskTest.h:
        (WebCore::MicroTaskTest::MicroTaskTest):

2015-03-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS parser errors in the console should include column numbers
        https://bugs.webkit.org/show_bug.cgi?id=114313

        Reviewed by Benjamin Poulain.

        Test: inspector-protocol/console/warnings-errors.html

        * css/CSSParser.h:
        (WebCore::CSSParser::currentCharacterOffset):
        Get the current character offset depending on the source type.
        Add instance variables to track column position and start
        line / column for inline stylesheets.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        Initialize new instance variables.

        (WebCore::CSSParser::currentLocation):
        Update to include column information. Also, if we are on the first line
        we may need to take into account a start column offset as well.

        (WebCore::CSSParser::realLex):
        When bumping the line number, reset the column offset for the next
        line with the next character.

        (WebCore::CSSParser::syntaxError):
        (WebCore::CSSParser::logError):
        Include column information.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        (WebCore::StyleSheetContents::parseString):
        (WebCore::StyleSheetContents::parseStringAtLineAndColumn):
        Include column information.

        * css/StyleSheetContents.h:
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        (WebCore::InlineStyleSheetOwner::createSheet):
        Save and use column information later on.

        * dom/InlineStyleSheetOwner.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):
        Updated parser signature needs starting column and no longer has optional parameters.

2015-03-10  Darin Adler  <darin@apple.com>

        Try to fix the GTK build.

        * html/HTMLVideoElement.idl: Work around gobject bindings generator limitation
        by putting in a LANGUAGE_GOBJECT conditional.

2015-03-10  Darin Adler  <darin@apple.com>

        Some event handler fixes
        https://bugs.webkit.org/show_bug.cgi?id=142474

        Reviewed by Anders Carlsson.

        * bindings/scripts/CodeGenerator.pm:
        (GenerateConditionalStringFromAttributeValue): Improved the algorithm here to
        handle combinations of & and | in conditional expressions; that's coming up when
        combining conditionals for includes in NavigatorContentUtils.idl.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToImplIncludes): Removed the rudimentary attempt to split and merge
        conditionals involving | here; instead we rely on the rules in the
        GenerateConditionalStringFromAttributeValue to handle this.
        (GenerateImplementation): Passed new "conditional" argument to JSValueToNative.
        (GenerateParametersCheck): Pass "conditional" argument to AddToImplIncludes and
        JSValueToNative.
        (JSValueToNative): Changed to take "conditional" as an argument, since getting
        it from the signature won't work for a method parameter.
        (WriteData): Merge duplicates based on the result of the
        GenerateConditionalStringFromAttributeValue function rather than on the values
        passed into that function, since that function converts conditionals into a
        canonical form and can make two strings equal that don't start out that way.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (SkipAttribute): Added code to guarantee we won't make Objective-C bindings
        for event handlers. We will rename EventListener to EventHandler in a
        subsequent patch.

        * bindings/scripts/test/JS/JSTestInterface.cpp: Updated for a progression caused
        by the better logic for conditional includes.

        * bindings/scripts/test/JS/JSTestObj.cpp: Updated for change to the test below.
        * bindings/scripts/test/TestObj.idl: Added test of an event handler attribute.

        * dom/Document.idl: Removed unneeded language #if around event handler
        attributes. Removed all the commented out event handler attributes.
        Sorted event handler attributes into a single section rather than separating
        "standard" from "extensions". Sorted the conditional event handler attributes
        into paragraphs at the bottom. We will probably make them all unconditional
        in a subsequent patch.

        * dom/Element.idl: Removed unneeded language #if around event handler
        attributes. Removed all the commented out event handler attributes.
        Moved event handler attributes here from all derived element classes to
        match the approach from the HTML standard. Also resorted the attributes
        as in Document above.

        * html/HTMLBodyElement.idl: Removed unneeded language #if around event handler
        attributes. Removed all the commented out event handler attributes.
        Sorted event handler attributes into a single section rather than separating
        "standard" from "overrides".

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::populateEventNameForAttributeLocalNameMap):
        Added a few missing attribute names, and re-sorted a bit. Moved any from
        element subclasses here.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseAttribute): Moved code to handle
        oncomplete and oncompleteerror to Element and HTMLElement.
        * html/HTMLFormElement.idl: Ditto.

        * html/HTMLFrameSetElement.idl: Removed #if and resorted as above.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute): Moved code to handle
        onsearch to HTMLElement.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Moved code to handle
        all the event handler attributes to HTMLElement.
        (WebCore::HTMLMediaElement::updateCaptionContainer): Removed a redundant
        if statement I noticed while auditing all calls to JSC::call.
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added clearException.
        I noticed this was missing because a flawed earlier version of my patch was
        causing the script to fail, leaving an exception behind that caused an
        assertion later. So I audited all calls to JSC::call looking for this mistake.

        * html/HTMLMediaElement.idl: Moved all the event handlers from here to
        Element. Also changed everything possible to use Conditional instead of #if.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Added
        clearException. Noticed it was missing while auditing all calls to JSC::call.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Moved event handler code to
        HTMLElement.

        * html/HTMLVideoElement.idl: Moved event handler to Element.idl and use
        Conditional instead of #if.

        * page/DOMWindow.idl: Use Conditional instead of #if and tidy up the event
        handlers section.

        * svg/svgattrs.in: Remove six unused attribute names. Presumably used in
        some older scheme to implement event handlers but no longer used at all.

2015-03-10  Brent Fulgham  <bfulgham@apple.com>

        CSS scroll-snap-destination and scroll-snap-coordinate are not honoring position values
        https://bugs.webkit.org/show_bug.cgi?id=142411

        Reviewed by Simon Fraser.

        Tested by css3/scroll-snap/scroll-snap-position-values.html.

        Revise the CSSParser to recognize that scroll-snap-coordinates and scroll-snap-destination
        may be specified as positions, therefore allowing 'top', 'bottom', and 'center' for the Y axis,
        and 'left', 'right', and 'center' for the X axis.

        Correct implementation to support calculated values for Scroll Snap Point markup. This required the
        Scroll Snap Point-specific LengthRepeat class to change its internal representation from a CSSPrimitiveValue
        to a regular CSSValue.

        Add tests that these position labels, as well as combinations with percentages and pixel offsets
        are parsed properly.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::scrollSnapDestination): Switch from 'percentageOrZoomAdjustedValue' to 'zoomAdjustedPixelValueForLength'
        when working with Length values. This is necessary to allow calculated results to be based on the proper default
        page dimensions.
        (WebCore::scrollSnapPoints): Ditto.
        (WebCore::scrollSnapCoordinates): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseScrollSnapPositions): Consolidated code for dealing with snap point
        positions.
        (WebCore::CSSParser::parseScrollSnapDestination): Revise to call new helper function.
        (WebCore::CSSParser::parseScrollSnapCoordinate): Ditto.
        (WebCore::CSSParser::parseFillPositionX): Rename as parsePositionX.
        (WebCore::CSSParser::parseFillPositionY): Rename as parsePositionY.
        (WebCore::CSSParser::parseFillProperty): Update to call renamed parsePosition{X|Y} methods.
        (WebCore::CSSParser::parseTransformOrigin): Ditto.
        (WebCore::CSSParser::parsePerspectiveOrigin): Ditto.
        * css/CSSParser.h:
        * css/LengthRepeat.h: Revise class to use a CSSValue, rather than a CSSPrimitiveValue, so that we can represent
        repeat values as calculations.

2015-03-10  Enrica Casucci  <enrica@apple.com>

        Add support for more emoji with variation.
        https://bugs.webkit.org/show_bug.cgi?id=142548
        rdar://problem/20105008

        Reviewed by Tim Horton.

        Update ICU rules to support new emoji with variation.

        Test: editing/selection/extend-by-character-007.html

        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):

2015-03-10  Alex Christensen  <achristensen@webkit.org>

        Use unsigned for HashSet size.
        https://bugs.webkit.org/show_bug.cgi?id=142518

        Reviewed by Benjamin Poulain.

        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::checkForDuplicate):
        (WebCore::CloneSerializer::writeConstantPoolIndex):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::~ScriptRunner):
        * loader/ResourceLoadScheduler.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::systemFallbackFontForCharacter):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::similarFont):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::shouldAutoActivateFontIfNeeded):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::similarFont):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::computeOverflowFromCells):

2015-03-10  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Refactor media controls code
        https://bugs.webkit.org/show_bug.cgi?id=142455

        Reviewed by Dean Jackson.

        No new tests, updated tests/media/hls/video-controls-live-stream-expected.txt.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):
        (Controller.prototype.addVideoListeners):
        (Controller.prototype.removeVideoListeners):
        (Controller.prototype.createControls):
        (Controller.prototype.setControlsType):
        (Controller.prototype.configureInlineControls):
        (Controller.prototype.updateStatusDisplay):
        (Controller.prototype.handlePanelMouseDown):
        (Controller.prototype.showControls):
        (Controller.prototype.hideControls):
        (Controller.prototype.handleOptimizedFullscreenButtonClicked):
        (Controller.prototype.currentPlaybackTargetIsWireless):
        (Controller.prototype.updateShouldListenForPlaybackTargetAvailabilityEvent):
        (Controller.prototype.updateWirelessPlaybackStatus):
        (Controller.prototype.updateWirelessTargetAvailable):
        (Controller.prototype.handleWirelessPickerButtonClicked):
        (Controller.prototype.handleWirelessPlaybackChange):
        (Controller.prototype.handleWirelessTargetAvailableChange):
        (Controller.prototype.setShouldListenForPlaybackTargetAvailabilityEvent):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS):
        (ControllerIOS.prototype.addVideoListeners):
        (ControllerIOS.prototype.removeVideoListeners):
        (ControllerIOS.prototype.createControls):
        (ControllerIOS.prototype.setControlsType):
        (ControllerIOS.prototype.configureInlineControls):
        (ControllerIOS.prototype.showControls):
        (ControllerIOS.prototype.handleWirelessPickerButtonTouchEnd):
        (ControllerIOS.prototype.updateShouldListenForPlaybackTargetAvailabilityEvent):
        (ControllerIOS.prototype.updateStatusDisplay):
        (ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent):
        (ControllerIOS.prototype.currentPlaybackTargetIsWireless): Deleted.
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Deleted.
        (ControllerIOS.prototype.updateWirelessTargetAvailable): Deleted.
        (ControllerIOS.prototype.hideControls): Deleted.
        (ControllerIOS.prototype.handleWirelessPlaybackChange): Deleted.
        (ControllerIOS.prototype.handleWirelessTargetAvailableChange): Deleted.

2015-03-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove PassRefPtr from svg/properties classes.
        https://bugs.webkit.org/show_bug.cgi?id=142063.

        Reviewed by Darin Adler.
        
        Remove PassRefPtr from svg/properties classes. All the return types and
        the local variables should be RefPtr. If we are sure the pointer can't
        be null, we use Ref instead.

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
        (WebCore::SVGMarkerElement::orientTypeAnimated):
        * svg/SVGMarkerElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::pathSegList):
        (WebCore::SVGPathElement::animatedPathSegList):
        * svg/SVGPathElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        * svg/SVGPolyElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/SVGTextContentElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::viewBoxAnimated):
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated):
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper):
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper):
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper):
        * svg/SVGViewSpec.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::lookupOrCreateWrapper):
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::create):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::create):
        (WebCore::SVGListPropertyTearOff::initialize):
        (WebCore::SVGListPropertyTearOff::getItem):
        (WebCore::SVGListPropertyTearOff::insertItemBefore):
        (WebCore::SVGListPropertyTearOff::replaceItem):
        (WebCore::SVGListPropertyTearOff::removeItem):
        (WebCore::SVGListPropertyTearOff::appendItem):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        (WebCore::SVGPathSegListPropertyTearOff::getItem):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore::SVGPathSegListPropertyTearOff::removeItem):
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        (WebCore::SVGPathSegListPropertyTearOff::create):
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
        * svg/properties/SVGPropertyInfo.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::create):
        * svg/properties/SVGStaticPropertyTearOff.h:
        (WebCore::SVGStaticPropertyTearOff::create):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):

2015-03-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):

2015-03-10  Benjamin Poulain  <bpoulain@apple.com>

        Extend URL filter's Term definition to support groups/subpatterns
        https://bugs.webkit.org/show_bug.cgi?id=142519

        Reviewed by Alex Christensen.

        Pretty simple extension: Term is extended to support holding
        a Vector of Term. The quantifier of the Term applies to its
        Vector of term as a whole.

        To avoid exposing too much internal in the API of Term, I moved
        graph generation from GraphBuilder to Term.

        Sinking a CharacterSet works as usual. Sinking a Group is done
        by sinking each of its Terms one by one and then apply the quantifier
        on the whole subgraph. This is done by recursively calling into
        Term::generateGraph().

        Since groups could be nested, the groups make a stack with the latest
        open group on top.
        When sinking a floating Term, it is sunk to the latest open group. If there is no open
        group, we use the prefix tree and sink the whole subpattern to the graph.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::extendGroupSubpattern):
        (WebCore::ContentExtensions::Term::generateGraph):
        (WebCore::ContentExtensions::Term::operator==):
        (WebCore::ContentExtensions::Term::hash):
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        (WebCore::ContentExtensions::Term::generateSubgraphForAtom):
        (WebCore::ContentExtensions::Term::destroy):
        (WebCore::ContentExtensions::Term::Group::operator==):
        (WebCore::ContentExtensions::Term::Group::hash):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::atomParenthesesSubpatternBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomParenthesesEnd):
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTermIfNecessary):
        (WebCore::ContentExtensions::Term::quantifier): Deleted.
        (WebCore::ContentExtensions::Term::visitSimpleTransitions): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::addTransitions): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTerm): Deleted.

2015-03-10  Roger Fong  <roger_fong@apple.com>

        Adjustments to media control fonts.
        https://bugs.webkit.org/show_bug.cgi?id=142509.
        <rdar://problem/20085228>

        Reviewed by Darin Adler.

        Use system font for controls. Adjust surrounding divs accordingly.
        Apply subpixel antialiasing to all media control text.
        * Modules/mediacontrols/mediaControlsApple.css:
        (::-webkit-media-controls):
        (audio::-webkit-media-controls-closed-captions-container .list):
        (audio::-webkit-media-controls-status-display):
        (audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display.five-digit-time):
        (audio::-webkit-media-controls-current-time-display.five-digit-time):
        (audio::-webkit-media-controls-time-remaining-display.six-digit-time):
        (audio::-webkit-media-controls-current-time-display.six-digit-time):

2015-03-10  Dan Bernstein  <mitz@apple.com>

        Fixed a crash in CertificateInfo::containsNonRootSHA1SignedCertificate when loading a non-HTTPS webapge.

        Reviewed by Anders Carlsson.

        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate): Null-check the certificate chain.

2015-03-10  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * platform/spi/cocoa/SecuritySPI.h:

2015-03-10  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Merge TextFragmentIterator::findNextBreakablePosition() and TextFragmentIterator::findNextNonWhitespacePosition().
        https://bugs.webkit.org/show_bug.cgi?id=142344

        Reviewed by Antti Koivisto.

        This patch merges findNextBreakablePosition() and findNextNonWhitespacePosition() so that
        the segment looping and position handling logic are no longer duplicated. It also unifies
        the static next*() functions' signature.

        No change in functionality.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::nextBreakablePosition):
        (WebCore::SimpleLineLayout::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextBreakablePosition): Deleted.
        (WebCore::SimpleLineLayout::findNextNonWhitespace): Deleted.
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextNonWhitespacePosition): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2015-03-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GL_MAX_VARYING_FLOATS is not defined in OpenGL ES 2
        https://bugs.webkit.org/show_bug.cgi?id=142529

        Reviewed by Žan Doberšek.

        Do not use GL_MAX_VARYING_FLOATS when platform is GTK+ and using
        OpenGL ES 2.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking):

2015-03-10  José Dapena Paz  <jdapena@igalia.com>

        Unreviewed. Fix GTK+ build with OpenGL ES 2 enabled.

        Remove USE(OPENGL) ifdef from GLContext.cpp, since there's nothing
        specific to OpenGL in that file, and everything depending on
        configure options is already protected by USE(GLX) and USE(EGL)
        ifdefs. This is causing linking issues when building with OpenGL
        ES 2, because the header doesn't have the ifdef, and the cpp file
        is not compiled leaving all the interface undefined.

        Rubber-stamped by Carlos Garcia Campos.

        * platform/graphics/GLContext.cpp:

2015-03-10  Carlos Garcia Campos  <cgarcia@igalia.com> and José Dapena Paz  <jdapena@igalia.com>

        [GTK] Add a configure option to build with OpenGL ES 2
        https://bugs.webkit.org/show_bug.cgi?id=142498

        Reviewed by Martin Robinson.

        Build GLES or GL specific files depending on the build options.

        * PlatformGTK.cmake:

2015-03-10  Zan Dobersek  <zdobersek@igalia.com>

        Shrink the CSSPropertyID enum type
        https://bugs.webkit.org/show_bug.cgi?id=142456

        Reviewed by Sam Weinig.

        Specify uint16_t as the base type for the CSSPropertyID enum.
        This is enough to cover all of the CSS properties (429 at this moment,
        with static_assert covering future changes). It halves the enum type size,
        from 4 bytes to 2, reducing the size of various CSSPropertyID containers.

        No new tests -- no change in behavior.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::propertyName): Remove the unnecessary propertyID < 0 check.
        * css/makeprop.pl:

2015-03-10  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/20086546> [Cocoa] Add an option to treat certificate chains with SHA1-signed certificates as insecure
        https://bugs.webkit.org/show_bug.cgi?id=142461

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added reference to SecuritySPI.h and sorted the
        spi/cocoa group.

        * platform/network/cf/CertificateInfo.h: Declared new member function
        containsNonRootSHA1SignedCertificate.

        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate): Added. Checks if any but
        the last certificate in the chain uses SHA-1 as its signature hash algorithm.

        * platform/network/curl/CertificateInfo.h:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate): Added notImplemented
        implementation.

        * platform/network/soup/CertificateInfo.h:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate): Ditto.

        * platform/spi/cocoa/SecuritySPI.h: Added.

2015-03-09  Chris Dumez  <cdumez@apple.com>

        [iOS] Sweep all collected objects on critical memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=142457
        <rdar://problem/20044440>

        Reviewed by Geoffrey Garen.

        Do a full sweep of objects marked for destruction on critical memory
        pressure to free up memory.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

2015-03-09  Andy Estes  <aestes@apple.com>

        [Content Filtering] Give ContentFilter subclasses private constructors, and make them fast-allocated and non-copyable
        https://bugs.webkit.org/show_bug.cgi?id=142515

        Reviewed by Andreas Kling.

        * platform/cocoa/NetworkExtensionContentFilter.h:
        * platform/cocoa/ParentalControlsContentFilter.h:
        * testing/MockContentFilter.h:

2015-03-09  Chris Dumez  <cdumez@apple.com>

        [CG] Have Canvas use the IOSurfacePool
        https://bugs.webkit.org/show_bug.cgi?id=142417
        <rdar://problem/20044440>

        Reviewed by Darin Adler.

        Have ImageBufferDataCG use the IOSurfacePool so that Canvas can
        benefit from it. I see a ~75% progression on Canvas/reuse.html
        performance test on my Macbook Pro with 1000 different canvas
        sizes and ~110% progression with 100 different canvas sizes.

        I also see a ~65% cache hit rate on the mobile version of
        cnn.com.

        Note that ImageData calls CGContextClearRect() after calling
        IOSurface::create() so recycling IOSurfaces in this case should
        be safe.

        Performance test: Canvas/reuse.html

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::copyNativeImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::~ImageBufferData):
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        (WebCore::ImageBufferData::ImageBufferData): Deleted.
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::surfaceFromPool):
        (IOSurface::create):
        (IOSurface::createFromSendRight):
        (IOSurface::createFromImage):
        (IOSurface::setContextSize):

2015-03-09  Brent Fulgham  <bfulgham@apple.com>

        Assertion in ScrollController::processWheelEventForScrollSnapOnAxis when scrolling with mechanical wheel mouse
        https://bugs.webkit.org/show_bug.cgi?id=142517

        Reviewed by Simon Fraser.

        * platform/cocoa/ScrollController.mm:
        (WebCore::toWheelEventStatus): Recognize stateless mechanical wheel events.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): If a mechanical wheel event is processed while
        considering scroll snap logic, end any snap animations and clean up.
        (WebCore::ScrollController::updateScrollSnapPoints): Don't begin tracking scroll snap state if there is not
        scroll snap point defined in the markup.

2015-03-09  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r176978): Inline-blocks with overflowing contents have ascents that are too large
        https://bugs.webkit.org/show_bug.cgi?id=141783

        Reviewed by David Hyatt.

        When we have an inline-block element, and we want to find its baseline (to lay out other
        elements on the same line) we loop through the element's children and ask them what their
        baselines are. The children use the location of the top of their last line to compute this
        value. However, if the child has overflow-y, this might not be the correct calculation.

        This behavior is in the spec: "The baseline of an 'inline-block' is the baseline of its last
        line box in the normal flow, unless it has either no in-flow line boxes or if its 'overflow'
        property has a computed value other than 'visible', in which case the baseline is the bottom
        margin edge."
            -- http://www.w3.org/TR/CSS21/visudet.html#leading

        However, we believe that a better policy is, when overflow is not "visible," to place the
        baseline at the bottom of the block if the contents overflowed in the Y direction, and to place
        it at the bottom of the last line if the contents did not overflow in the Y direction. This is
        partially consistent with previous behavior, and isn't too far from the spec to cause too many
        breakages.

        Test: fast/css/inline-block-tricky-baselines.html
              fast/text/baseline-inline-block.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineBlockBaseline):

2015-03-09  Andy Estes  <aestes@apple.com>

        [Content Filtering] Add tests
        https://bugs.webkit.org/show_bug.cgi?id=142475

        Reviewed by Andreas Kling.

        Added a mock content filter that can be configured by window.internals. A test can control whether the filter
        is enabled, what to display when a page is blocked, at what point the allow/block decision is made, and what
        decision to make.

        Added tests to cover allowing and blocking content at each decision point.

        Tests: contentfiltering/allow-after-add-data.html
               contentfiltering/allow-after-finished-adding-data.html
               contentfiltering/allow-after-response.html
               contentfiltering/block-after-add-data.html
               contentfiltering/block-after-finished-adding-data.html
               contentfiltering/block-after-response.html

        * DerivedSources.make: Added MockContentFilterSettings.idl.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSMockContentFilterSettingsCustom.cpp: Added.
        (WebCore::JSMockContentFilterSettings::decisionPoint): Returned the decision point's JSValue.
        (WebCore::JSMockContentFilterSettings::setDecisionPoint): Set the decision point; threw an exception for invalid values.
        (WebCore::JSMockContentFilterSettings::decision): Returned the decision's JSValue.
        (WebCore::JSMockContentFilterSettings::setDecision): Set the decision; threw an exception for invalid values.
        * platform/ContentFilter.cpp:
        (WebCore::ContentFilter::types): Renamed from contentFilterTypes.
        (WebCore::ContentFilter::createIfNeeded):
        (WebCore::contentFilterType): Deleted.
        (WebCore::contentFilterTypes): Deleted.
        * platform/ContentFilter.h:
        (WebCore::ContentFilter::addType): Used to register a new content filter type.
        (WebCore::ContentFilter::type): Renamed from contentFilterType.
        * platform/cocoa/NetworkExtensionContentFilter.h: Moved definition of HAVE_NE_FILTER_SOURCE to here.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Called MockContentFilterSettings::reset().
        (WebCore::Internals::Internals): Called MockContentFilter::ensureInstalled().
        (WebCore::Internals::mockContentFilterSettings): Returned a reference to MockContentFilterSettings::singleton().
        * testing/Internals.h:
        * testing/Internals.idl: Added attribute mockContentFilterSettings.
        * testing/MockContentFilter.cpp: Added.
        (WebCore::MockContentFilter::ensureInstalled): Called MockContentFilter::addType().
        (WebCore::MockContentFilter::canHandleResponse): Returned whether MockContentFilterSettings is enabled.
        (WebCore::MockContentFilter::create): Returned a new MockContentFilter.
        (WebCore::MockContentFilter::MockContentFilter): Called maybeDetermineStatus().
        (WebCore::MockContentFilter::addData): Copied data into m_replacementData and called maybeDetermineStatus().
        (WebCore::MockContentFilter::finishedAddingData): Called maybeDetermineStatus().
        (WebCore::MockContentFilter::needsMoreData): Returned whether m_status equals NeedsMoreData.
        (WebCore::MockContentFilter::didBlockData): Returned whether m_status equals Blocked.
        (WebCore::MockContentFilter::getReplacementData): Returned a pointer to the start of m_replacementData.
        (WebCore::MockContentFilter::unblockHandler): Returned an empty ContentFilterUnblockHandler.
        (WebCore::MockContentFilter::maybeDetermineStatus): If m_status is NeedsMoreData and the current decision point
        equals MockContentFilterSettings's decision point, set m_status according to MockContentFilterSettings's
        decision. If m_status becomes Blocked, clear the original page data from m_replacementData and copy
        MockContentFilterSettings's blocked string instead.
        * testing/MockContentFilter.h: Copied from Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h.
        * testing/MockContentFilterSettings.cpp: Copied from Source/WebCore/platform/ContentFilter.h.
        (WebCore::MockContentFilterSettings::singleton):
        (WebCore::MockContentFilterSettings::reset): Reset settings to their initial values.
        (WebCore::MockContentFilterSettings::MockContentFilterSettings):
        * testing/MockContentFilterSettings.h: Copied from Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h.
        (WebCore::MockContentFilterSettings::ref): Added an empty implementation to make the bindings think this is RefCounted.
        (WebCore::MockContentFilterSettings::deref): Ditto.
        (WebCore::MockContentFilterSettings::enabled):
        (WebCore::MockContentFilterSettings::setEnabled):
        (WebCore::MockContentFilterSettings::blockedString):
        (WebCore::MockContentFilterSettings::setBlockedString):
        (WebCore::MockContentFilterSettings::decisionPoint):
        (WebCore::MockContentFilterSettings::setDecisionPoint):
        (WebCore::MockContentFilterSettings::decision):
        (WebCore::MockContentFilterSettings::setDecision):
        * testing/MockContentFilterSettings.idl: Copied from Source/WebCore/platform/ContentFilter.h.

2015-03-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout should not be limited to RenderText.
        https://bugs.webkit.org/show_bug.cgi?id=142504

        Reviewed by Antti Koivisto.

        This is in transition to support br element.

        No change in functionality.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::firstRunLocation):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::containsCaretOffset):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::segmentForRenderer):
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeBoundingBox):
        (WebCore::SimpleLineLayout::computeFirstRunLocation):
        (WebCore::SimpleLineLayout::collectAbsoluteRects):
        (WebCore::SimpleLineLayout::collectAbsoluteQuads):
        (WebCore::SimpleLineLayout::computeTextBoundingBox): Deleted.
        (WebCore::SimpleLineLayout::computeTextFirstRunLocation): Deleted.
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects): Deleted.
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads): Deleted.
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsCaretOffset):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset): Deleted.
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset): Deleted.
        (WebCore::SimpleLineLayout::containsTextCaretOffset): Deleted.
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):
        * rendering/SimpleLineLayoutResolver.h:
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):

2015-03-09  Myles C. Maxfield  <mmaxfield@apple.com>

        svg/custom/svg-fonts-without-missing-glyph.xhtml fails after fonts/font-fallback-prefers-pictographs.html
        https://bugs.webkit.org/show_bug.cgi?id=142470

        Reviewed by Anders Carlsson.

        After each test, reset all internal settings.

        Covered by svg/custom/svg-fonts-without-missing-glyph.xhtml

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:

2015-03-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181268.
        https://bugs.webkit.org/show_bug.cgi?id=142508

        Broke tests (Requested by ap on #webkit).

        Reverted changeset:

        "Simple line layout: Merge
        TextFragmentIterator::findNextBreakablePosition() and
        TextFragmentIterator::findNextNonWhitespacePosition()."
        https://bugs.webkit.org/show_bug.cgi?id=142344
        http://trac.webkit.org/changeset/181268

2015-03-09  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: add aliases between :nth-child()/:nth-last-child() and :first-child/:last-child
        https://bugs.webkit.org/show_bug.cgi?id=142472

        Reviewed by Andreas Kling.

        The pseudo class :first-child has weaker tree marking than :nth-child(1).
        This patch aliases :nth-child(1) to :first-child in the CSS JIT to take
        advantage of that.

        The strength of :last-child and :nth-last-child(1) are pretty much identical
        but :last-child is a bit simpler so I changed it too. It is also easier
        to handle both the same.

        Tests: fast/selectors/nth-child-matching-first-on-root.html
               fast/selectors/nth-child-matching-first.html
               fast/selectors/nth-last-child-matching-first-on-root.html
               fast/selectors/nth-last-child-matching-first.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addNthChildType):
        (WebCore::SelectorCompiler::addPseudoClassType):

2015-03-09  Benjamin Poulain  <bpoulain@apple.com>

        Merge TrivialAtom and CharacterSet into a Term abstraction, prepare Term for composition
        https://bugs.webkit.org/show_bug.cgi?id=142429

        Reviewed by Darin Adler.

        This patch merges CharacterSet and Trivial atom into a new class: Term. A Term is
        a combination of an Atom and one Quantifier.

        With term being the basic block, we can use the PrefixTree for any construct,
        greatly reducing the size of the NFA graph.

        Term is built on top of an union holding the Atom storage. This is done in preparation
        for more complicated Atoms like a disjunction.

        Everything else is pretty much the same. BuildMode is gone since we use the prefix
        tree for everything. FloatingAtomType is gone, a TrivialAtom is now represented
        by a single character CharacterSet (or two for case insensitive).

        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::addRuleId):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::Term::Term):
        (WebCore::ContentExtensions::Term::~Term):
        (WebCore::ContentExtensions::Term::isValid):
        (WebCore::ContentExtensions::Term::addCharacter):
        (WebCore::ContentExtensions::Term::quantify):
        (WebCore::ContentExtensions::Term::quantifier):
        (WebCore::ContentExtensions::Term::isUniversalTransition):
        (WebCore::ContentExtensions::Term::visitSimpleTransitions):
        (WebCore::ContentExtensions::Term::operator=):
        (WebCore::ContentExtensions::Term::operator==):
        (WebCore::ContentExtensions::Term::hash):
        (WebCore::ContentExtensions::Term::isEmptyValue):
        (WebCore::ContentExtensions::Term::isDeletedValue):
        (WebCore::ContentExtensions::Term::destroy):
        (WebCore::ContentExtensions::Term::CharacterSet::operator==):
        (WebCore::ContentExtensions::Term::CharacterSet::hash):
        (WebCore::ContentExtensions::TermHash::hash):
        (WebCore::ContentExtensions::TermHash::equal):
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassRange):
        (WebCore::ContentExtensions::GraphBuilder::addTransitions):
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTerm):
        (WebCore::ContentExtensions::GraphBuilder::sinkFloatingTermIfNecessary):
        (WebCore::ContentExtensions::URLFilterParser::URLFilterParser):
        (WebCore::ContentExtensions::URLFilterParser::~URLFilterParser):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        (WebCore::ContentExtensions::trivialAtomFromASCIICharacter): Deleted.
        (WebCore::ContentExtensions::quantifyTrivialAtom): Deleted.
        (WebCore::ContentExtensions::trivialAtomQuantifier): Deleted.
        (WebCore::ContentExtensions::trivialAtomForNewlineClassIDBuiltin): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::sinkAtom): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::generateTransition): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::sinkTrivialAtom): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::sinkCharacterSet): Deleted.
        (WebCore::ContentExtensions::GraphBuilder::sinkPendingAtomIfNecessary): Deleted.
        * contentextensions/URLFilterParser.h:

2015-03-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(WEBGL) build after r180609
        https://bugs.webkit.org/show_bug.cgi?id=142057

        Reviewed by Darin Adler.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::forceContextLost):

2015-03-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Work around a Cocoa font parsing bug
        https://bugs.webkit.org/show_bug.cgi?id=142446
        <rdar://problem/20086223>

        Reviewed by Simon Fraser.

        Work around a bug in Cocoa regarding font parsing.

        * svg/SVGToOTFFontConversion.cpp:

2015-03-09  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the build after r181153
        https://bugs.webkit.org/show_bug.cgi?id=142497

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):

2015-03-09  Roger Fong  <roger_fong@apple.com>

        Only call showControls if controls are hidden.
        https://bugs.webkit.org/show_bug.cgi?id=142496.
        <rdar://problem/20083732>

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.controlsAreHidden):
        Controls are hidden if the ‘show’ class name is not present,
        not if the ‘hidden’ class name is.

2015-03-09  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Re-add CSS property that was unintentionally removed in r180893
        <rdar://problem/20083715>

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):

2015-03-09  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Merge TextFragmentIterator::findNextBreakablePosition() and TextFragmentIterator::findNextNonWhitespacePosition().
        https://bugs.webkit.org/show_bug.cgi?id=142344

        Reviewed by Antti Koivisto.

        This patch merges findNextBreakablePosition() and findNextNonWhitespacePosition() so that
        the segment looping and position handling logic are no longer duplicated. It also unifies
        the static next*() functions' signature.

        No change in functionality.

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::nextBreakablePosition):
        (WebCore::SimpleLineLayout::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::skipToNextPosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextBreakablePosition): Deleted.
        (WebCore::SimpleLineLayout::findNextNonWhitespace): Deleted.
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextNonWhitespacePosition): Deleted.
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

2015-03-09  Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        ReadableStreamJSSource should use JSC::Strong UnspecifiedBoolType operator
        https://bugs.webkit.org/show_bug.cgi?id=142397

        Reviewed by Benjamin Poulain.

        No behavior change. Current tests cover the changes.

        * bindings/js/ReadableStreamJSSource.cpp:
        * bindings/js/ReadableStreamJSSource.h:

2015-03-09  Xabier Rodriguez Calvar  <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        ReadableStream does not not need to pass itself as callback parameter
        https://bugs.webkit.org/show_bug.cgi?id=142399

        Reviewed by Darin Adler.

        No change in behavior.

        * Modules/streams/ReadableStream.h: Remove ReadableStream parameter from SuccessCallback definition.
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::JSReadableStream::ready): Capture JSReadableStream instance instead.
        (WebCore::JSReadableStream::closed): Capture JSReadableStream instance instead.

2015-03-08  Dean Jackson  <dino@apple.com>

        [iOS Media] Video buffer progress missing on iPhones
        https://bugs.webkit.org/show_bug.cgi?id=142462

        Reviewed by Eric Carlson.

        The fullscreen controller on the iPhone idiom was using
        the media duration as its maximum loaded time, meaning the
        download progress was missing (it looked like everything
        was already downloaded). The fix is to calculate
        what the maximum buffered time is from the HTMLMediaElement,
        and send that to the fullscreen controller.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.drawTimelineBackground): While implementing
        the native function I noticed that the JS controls forgot that
        the buffered time ranges are ordered, and thus they don't need
        to search through the array. The last range will be the highest.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::maxBufferedTime): New helper function
        to calculate the highest buffered time in the media source.
        * html/HTMLMediaElement.h:

        * platform/ios/WebVideoFullscreenInterface.h: New setBufferedTime method.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setDuration): No longer set
        the loadedTimeRanges.
        (WebVideoFullscreenInterfaceAVKit::setBufferedTime): Calculate a normalized
        value of the maximum loaded/buffered time, and tell the platform controller
        to show that range.

        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::updateForEventName): Send the maximum
        buffered time.

2015-03-08  Chris Dumez  <cdumez@apple.com>

        Crash in WebCore::NotificationCenter::stop()
        https://bugs.webkit.org/show_bug.cgi?id=142444
        <rdar://problem/20082520>

        Reviewed by Darin Adler.

        Rework the patch in r181219 so that we do not need a Ref<NotificationCenter> protector
        in NotificationCenter::stop(). Instead, we put the client in a local variable and null
        out m_client *before* calling NotificationClient::clearNotifications().

        No new tests, already covered by:
        http/tests/notifications/event-listener-crash.html

        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::stop):

2015-03-08  Simon Fraser  <simon.fraser@apple.com>

        Don't call RenderLayerCompositor::needsToBeComposited() so many times
        https://bugs.webkit.org/show_bug.cgi?id=142441

        Reviewed by Brent Fulgham.

        Save one call to needsToBeComposited() per RenderLayer while rebuilding compositing
        layers, and a call to isRunningAcceleratedTransformAnimation() in some cases.
        
        computeCompositingRequirements() already knows if the layer will be composited, so
        pass that to updateBacking() in the form of a "yes/no/don't" know enum. However,
        since updateBacking() no longer calls needsToBeComposited(), we need to call 
        requiresCompositingForPosition() to get the viewportConstrainedNotCompositedReason flags.
        
        isRunningAcceleratedTransformAnimation() will only be true for a layer which has a
        direct compositing reason, so only call isRunningAcceleratedTransformAnimation()
        in that case.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::rendererForCompositingTests):
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Use references.
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Use references.
        * rendering/RenderLayerCompositor.h:

2015-03-08  Simon Fraser  <simon.fraser@apple.com>

        In RenderLayerCompositor, track layer bounds and the haveComputedBounds flag together in a struct
        https://bugs.webkit.org/show_bug.cgi?id=142449

        Reviewed by Brent Fulgham.
        
        Rather than tracking 'layerBounds' and 'haveComputedBounds' separately, group them together
        in an OverlapExtent struct and add a function to compute the bounds, which removes
        a copy of this code. OverlapExtent will be extended in a future patch.

        No behavior change.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::OverlapMap::geometryMap): Allow const access to
        the geometryMap, used by computeExtent().
        (WebCore::RenderLayerCompositor::computeExtent):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

2015-03-07  Chris Dumez  <cdumez@apple.com>

        Crash in WebCore::NotificationCenter::stop()
        https://bugs.webkit.org/show_bug.cgi?id=142444
        <rdar://problem/20082520>

        Reviewed by Andreas Kling.

        A use-after-free would sometimes cause us to crash in NotificationCenter::stop().
        After investigation, it turns out that NotificationCenter::stop() calls
        NotificationClient::clearNotifications() which will destroy the Notification
        objects, all of which hold a strong reference to the NotificationCenter. If at
        this point, only Notifications are ref'ing the NotificationCenter, this means
        that the NotificationCenter will get destroyed right after the call to
        NotificationClient::clearNotifications(). However, we reset m_client to null
        after calling clearNotifications() and it causes us to crash in this case.

        The issue is addressed by adding a Ref<NotificationCenter> protector in
        NotificationCenter::stop() so that we make sure the NotificationCenter lives
        at least until the end of the method execution.

        I was able to consistently reproduce the crash by doing:
        Tools/Scripts/run-webkit-tests -1 --debug --repeat-each=30 -g http/tests/notifications/event-listener-crash.html

        No new tests, already covered by:
        http/tests/notifications/event-listener-crash.html

        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::stop):

2015-03-07  Simon Fraser  <simon.fraser@apple.com>

        Tidy up RenderLayerCompositor's CompositingState
        https://bugs.webkit.org/show_bug.cgi?id=142445

        Reviewed by Dan Bernstein.
        
        Make CompositingState a private struct in RenderLayerCompositor.
        Since it's a struct, remove the m_ prefix from its data members.

        No behavior change.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::CompositingState::CompositingState): Deleted.
        * rendering/RenderLayerCompositor.h:

2015-03-07  Darin Adler  <darin@apple.com>

        Unindent EventTarget, EventListener, JSEventLister.h files
        https://bugs.webkit.org/show_bug.cgi?id=142440

        Reviewed by Alexey Proskuryakov.

        * bindings/js/JSEventListener.h:
        * dom/EventListener.h:
        * dom/EventTarget.h:
        Change indentation to match coding style rules.

2015-03-07  Geoffrey Garen  <ggaren@apple.com>

        Use FastMalloc (bmalloc) instead of BlockAllocator for GC pages
        https://bugs.webkit.org/show_bug.cgi?id=140900

        Reviewed by Mark Hahnenberg.

        Re-landing just the removal of BlockAllocator, which is now unused.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2015-03-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181010.
        https://bugs.webkit.org/show_bug.cgi?id=142442

        Broke media/video-src-invalid-poster.html (Requested by kling
        on #webkit).

        Reverted changeset:

        "Stale entries in WeakGCMaps are keeping tons of WeakBlocks
        alive unnecessarily."
        https://bugs.webkit.org/show_bug.cgi?id=142115
        http://trac.webkit.org/changeset/181010

2015-03-07  Darin Adler  <darin@apple.com>

        Do a bit of EventNames tidying
        https://bugs.webkit.org/show_bug.cgi?id=142438

        Reviewed by Anders Carlsson.

        * dom/EventNames.h: Sorted the event names into a single list instead of
        the rudimentary attempts at organizing the list that simply made it hard
        to see what is and is not in the list. Removed two unused event names.
        I'm sure there are more. Reorganized the EventName class, now a struct,
        into a more conventional "public first" order. Got the function bodies
        out of the struct so we can see more clearly what is in the struct.
        Made more things const.
        (WebCore::EventNames::touchEventNames): Changed the return value to a
        std::array of reference wrappers rather than a vector of atomic strings.
        This should eliminate unnecessary memory allocation and reference count churn.

        * dom/EventNames.cpp: Changed initialization based on the above.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::getEventListeners): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_LOCAL and also just tightened up the function a bit.

        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument): Streamlined this function with
        modern for loops, auto, and also tried to make what it does a bit clearer,
        by making loops that are just based on numbers of event listeners look a
        bit less like code that actually iterates a vector of listeners. Also used
        the type unsigned instead of size_t.

        * platform/ThreadGlobalData.h: Updated since it's a struct instead of class now.
        (Why is this file in platform!?)

2015-03-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Increase TestWebKitAPI Test Coverage
        https://bugs.webkit.org/show_bug.cgi?id=142433

        Reviewed by Darin Adler.

        Correct some build deficiencies that prevent TestWebKitAPI
        from executing certain tests on Windows.

        * WebCore.vcxproj/copyForwardingHeaders.cmd: Copy the interpreter
        headers.
        * css/CSSParser.h: Export necessary symbols
        * css/CSSParserMode.h: Ditto.
        * css/StyleProperties.h: Ditto.

2015-03-07  David Kilzer  <ddkilzer@apple.com>

        Rename SOFT_LINK_FRAMEWORK_{HEADER,SOURCE} to SOFT_LINK_FRAMEWORK_FOR_{HEADER,SOURCE}
        <http://webkit.org/b/142434>

        Reviewed by Darin Adler.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/cf/MediaAccessibilitySoftLink.cpp:
        * platform/cf/MediaAccessibilitySoftLink.h:
        * platform/mac/SoftLinking.h:
        * platform/win/SoftLinking.h:
        - Do the rename.

2015-03-06  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Move compiling of content extensions to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=142402

        Reviewed by Benjamin Poulain.

        * contentextensions/CompiledContentExtension.cpp:
        (WebCore::ContentExtensions::CompiledContentExtension::~CompiledContentExtension):
        (WebCore::ContentExtensions::CompiledContentExtension::create): Deleted.
        (WebCore::ContentExtensions::CompiledContentExtension::CompiledContentExtension): Deleted.
        * contentextensions/CompiledContentExtension.h:
        (WebCore::ContentExtensions::CompiledContentExtension::bytecode): Deleted.
        (WebCore::ContentExtensions::CompiledContentExtension::actions): Deleted.
        Convert CompiledContentExtension to be an abstract base class so that we can back it however
        we like at the WebKit level. Since it doesn't necessarily use Vectors for its backing store
        any more, change the interface to use pointer/length.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        Change compileRuleList to return compiled result as the raw Vectors rather than as
        a CompiledContentExtension, since that class is now abstract. It is up to the caller
        to copy the data into its final home.

        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        * contentextensions/ContentExtensionRule.h:
        Switch Action::deserialize to take pointer/length rather than a Vector.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL):
        Pull getting the serialized actions from the compiled extension out of the loop
        to avoid calling the virtual function multiple times. Pass the bytecode and actions
        as pointer/length pairs rather than Vectors.

        * contentextensions/DFABytecodeInterpreter.cpp:
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h:
        (WebCore::ContentExtensions::DFABytecodeInterpreter::DFABytecodeInterpreter):
        Switch the interpreter to take pointer/length rather than a Vector.

        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserContentExtension):
        (WebCore::UserContentController::removeUserContentExtension):
        (WebCore::UserContentController::removeAllUserContentExtensions):
        (WebCore::UserContentController::addUserContentFilter): Deleted.
        (WebCore::UserContentController::removeUserContentFilter): Deleted.
        (WebCore::UserContentController::removeAllUserContentFilters): Deleted.
        * page/UserContentController.h:
        Unify terminology to use the term UserContentExtension rather than UserContentFilter.

2015-03-06  Roger Fong  <roger_fong@apple.com>

        Create new buttons for media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142415.
        <rdar://problem/20019441>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button.playing):
        (audio:-webkit-full-screen::-webkit-media-controls-wireless-playback-picker-button):

2015-03-06  Roger Fong  <roger_fong@apple.com>

        Redraw timeline background when updating media time.
        https://bugs.webkit.org/show_bug.cgi?id=142421.
        <rdar://problem/20065104>

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleTimeUpdate):

2015-03-06  Dhi Aurrahman  <diorahman@rockybars.com>

        Enable selectors level 4's :lang() by default
        https://bugs.webkit.org/show_bug.cgi?id=142302

        Reviewed by Benjamin Poulain.

        No behavior change.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::appendLangArgumentList):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setLangArgumentList):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        (WebCore::matchesLangPseudoClassDeprecated): Deleted.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):

2015-03-06  Brent Fulgham  <bfulgham@apple.com>

        Setting scroll-snap-desination to (100% 100%) locks up WebKit
        https://bugs.webkit.org/show_bug.cgi?id=142414
        <rdar://problem/20077275>

        Reviewed by Dean Jackson.

        Tested by css3/scroll-snap/scroll-snap-desination-lock-up.html.

        Correct an infinite loop that is triggered when you combine a repeating (100%)
        scroll-snap-point-{x,y} along with a 100% scroll-snap-destination value.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateFromStyle): Make sure we break out of the loop properly when
        the scroll-snap-point-{x,y} step is the same as the scroll-snap-destination.

2015-03-06  Dean Jackson  <dino@apple.com>

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

        Unreviewed build fix.

        * platform/spi/cocoa/QuartzCoreSPI.h: Add kCAFilterPlusL.

2015-03-06  Dean Jackson  <dino@apple.com>

        Support "plus-lighter" in mix-blend mode
        https://bugs.webkit.org/show_bug.cgi?id=142416
        <rdar://problem/19993979>

        Reviewed by Darin Adler and Sam Weinig.

        Support the "plus-lighter" blending mode to CSS.
        See my reply to: https://lists.w3.org/Archives/Public/public-fx/2015JanMar/0021.html

        Test: css3/blending/svg-blend-plus-lighter.html

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): mix-blend-mode can now accept the
        new keyword.
        * css/CSSPrimitiveValueMappings.h: Add the mappings to/from the GraphicsType.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator BlendMode):
        * css/CSSValueKeywords.in: Add comment to show plus-darker and plus-lighter
        are available.
        * platform/graphics/GraphicsTypes.cpp: New GraphicsType for PlusLighter.
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Map to the CA filter.
        (PlatformCAFilters::setBlendingFiltersOnLayer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Map to the CG
        blending flag.

2015-03-06  Alex Christensen  <achristensen@webkit.org>

        Soft link MediaAccessibility using new macros.
        https://bugs.webkit.org/show_bug.cgi?id=142406

        Reviewed by David Kilzer.

        * Configurations/WebCore.unexp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * platform/cf/MediaAccessibilitySoftLink.cpp: Added.
        * platform/cf/MediaAccessibilitySoftLink.h: Added.

2015-03-06  Brent Fulgham  <bfulgham@apple.com>

        Add 'initial' keyword support for scroll snap CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=136345
        <rdar://problem/18162325>

        Reviewed by Dean Jackson.

        Tested by css3/scroll-snap/scroll-snap-initial.html

        The existing implementation already had 'initial' keyword support, but did not fully follow
        the CSS specification. In particular, the 'initial' state for the scroll-snap-points-x and
        scroll-snap-points-y properties was not handled correctly.

        Revise implementation to represent ScrollSnapPoints as a pointer, so that 'none' is a valid
        state.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::scrollSnapPoints): If 'points' is null, return CSSValueNone.
        * css/CSSPropertyNames.in: Provide custom initial/inherit handles for snap point x/y sets.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints): Update to represent ScrollSnapPoints
        as a pointer.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsX): Provide custom pointer-based
        implementation for ScrollSnapPoints.
        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsX): Ditto.
        (WebCore::StyleBuilderCustom::applyInitialWebkitScrollSnapPointsY): Ditto.
        (WebCore::StyleBuilderCustom::applyInheritWebkitScrollSnapPointsY): Ditto."
        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateFromStyle): Handle ScrollSnapPoints as pointers.
        (WebCore::updateSnapOffsetsForScrollableArea): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::scrollSnapPointsX): Update to use pointer-based representation of ScrollSnapPoints.
        (WebCore::RenderStyle::scrollSnapPointsY): Ditto.
        (WebCore::RenderStyle::setScrollSnapPointsX): Ditto.
        (WebCore::RenderStyle::setScrollSnapPointsY): Ditto.
        (WebCore::RenderStyle::initialScrollSnapPointsX): Deleted.
        (WebCore::RenderStyle::initialScrollSnapPointsY): Deleted.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleScrollSnapPoints.cpp:
        (WebCore::StyleScrollSnapPoints::StyleScrollSnapPoints): Revise constructor to handle pointer argument.
        * rendering/style/StyleScrollSnapPoints.h:

2015-03-05  Roger Fong  <roger_fong@apple.com>

        Reskin Captions button and container on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142383.
        <rdar://problem/20061466>

        Reviewed by Eric Carlson.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-toggle-closed-captions-button): Create new captions button icon.
        Update caption container to match rest of media controls better.
        (audio::-webkit-media-controls-closed-captions-container):
        (audio::-webkit-media-controls-closed-captions-container .list):
        (audio::-webkit-media-controls-closed-captions-container h3):
        (audio::-webkit-media-controls-closed-captions-container ul):
        (audio::-webkit-media-controls-closed-captions-container li):
        (audio::-webkit-media-controls-closed-captions-container li:focus):
        (audio::-webkit-media-controls-closed-captions-container li:hover):
        Fix up some fonts to make fonts between captions, status display and time displays consistent.
        (audio::-webkit-media-controls-status-display):
        (audio::-webkit-media-controls-time-remaining-display):

2015-03-06  Jer Noble  <jer.noble@apple.com>

        [Web Audio] Decoding specific .m4a file crashes tab
        https://bugs.webkit.org/show_bug.cgi?id=139545

        Reviewed by Eric Carlson.

        Test: webaudio/decode-audio-data-too-short.html

        Bail out early if CoreAudio reports the number of frames in the file to be negative.

        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2015-03-06  Jeremy Jones  <jeremyj@apple.com>

        Scroll to make the video element visible when exiting fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=141439

        Reviewed by Simon Fraser.

        This patch will scroll the element so it is visible when exiting fullscreen,
        but only if the element is completely scrolled off screen.
        Also update the element screen rect so exit animation goes to the correct location.

        * dom/Element.cpp:
        (WebCore::Element::scrollIntoViewIfNotVisible): Added.
        * dom/Element.h: Add declaration for scrollIntoViewIfNotVisible.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController fullscreenMayReturnToInline]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewController:restoreUserInterfaceForOptimizedFullscreenStopWithCompletionHandler:]):
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscree:]):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal):
        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
        (WebVideoFullscreenInterfaceAVKit::fullscreenMayReturnToInline):
        * rendering/ScrollBehavior.cpp:
        * rendering/ScrollBehavior.h:

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in -[WebCascadeList objectAtIndex:] + 195
        https://bugs.webkit.org/show_bug.cgi?id=141274

        Reviewed by David Kilzer.

        CTFontDescriptorRefs can live forever in caches inside CoreText, which means our
        WebCascadeList can too.

        Test: platform/mac/fast/text/crash-complextextcontroller-custom-cascade-list.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade): Initialize WeakPtrFactory.
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::createWeakPtr):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm: Migrate the raw pointer
        to WeakPtr.
        (-[WebCascadeList initWithFont:character:]):
        (-[WebCascadeList count]):
        (-[WebCascadeList objectAtIndex:]):

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename BreakingContextInlineHeaders.h to BreakingContext.h
        https://bugs.webkit.org/show_bug.cgi?id=142404

        Reviewed by Simon Fraser.

        No point naming it "InlineHeaders" when there are no non-inline-headers files.

        No new tests because this is just a rename of a file.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/line/BreakingContext.h: Renamed from Source/WebCore/rendering/line/BreakingContextInlineHeaders.h.
        (WebCore::WordMeasurement::WordMeasurement):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::InlineIteratorHistory::InlineIteratorHistory):
        (WebCore::BreakingContext::InlineIteratorHistory::push):
        (WebCore::BreakingContext::InlineIteratorHistory::update):
        (WebCore::BreakingContext::InlineIteratorHistory::renderer):
        (WebCore::BreakingContext::InlineIteratorHistory::offset):
        (WebCore::BreakingContext::InlineIteratorHistory::atTextParagraphSeparator):
        (WebCore::BreakingContext::InlineIteratorHistory::previousInSameNode):
        (WebCore::BreakingContext::InlineIteratorHistory::get):
        (WebCore::BreakingContext::InlineIteratorHistory::current):
        (WebCore::BreakingContext::InlineIteratorHistory::historyLength):
        (WebCore::BreakingContext::InlineIteratorHistory::moveTo):
        (WebCore::BreakingContext::InlineIteratorHistory::increment):
        (WebCore::BreakingContext::InlineIteratorHistory::clear):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::previousInFlowSibling):
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::firstPositiveWidth):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::nextCharacter):
        (WebCore::updateCounterIfNeeded):
        (WebCore::measureHyphenWidth):
        (WebCore::textWidth):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):
        * rendering/line/LineBreaker.cpp:

2015-03-06  Dan Bernstein  <mitz@apple.com>

        Expose some of the functionality of extract-localizable-strings.pl as a module
        https://bugs.webkit.org/show_bug.cgi?id=142038

        Reviewed by Sam Weinig.

        * LocalizableStrings.pm: Copied from Source/WebCore/extract-localizable-strings.pl.
        (setTreatWarningsAsErrors): Added this setter for the variable moved here.
        (sawError): Added a getter.
        (emitError): Added. Emits the error message and sets $sawError.
        (unescapeHexSequence): Moved from extract-localizable-strings.pl and renamed to start with
        a lowercase letter.
        (keyCollisionCount): Added this getter.
        (localizedCount): Added this getter.
        (HandleUIString): Moved from extract-localizable-strings.pl and made it increment the
        localized string count.
        (writeStringsFile): Moved code from extract-localizable-strings.pl into this new subroutine.
        (verifyStringsFile): Ditto.

        * WebCore.xcodeproj/project.pbxproj: Added LocalizableStrings.pm to the Copy Scripts build
        phase.

        * extract-localizable-strings.pl:
        (emitWarning): Moved to the module.
        (UnescapeHexSequence): Ditto.
        (HandleUIString): Ditto.

2015-03-06  Darin Adler  <darin@apple.com>

        Remove unused C++ DOM event handler attribute functions
        https://bugs.webkit.org/show_bug.cgi?id=142398

        Reviewed by Anders Carlsson.

        * dom/EventTarget.h: Removed now-unneeded macros: DEFINE_ATTRIBUTE_EVENT_LISTENER,
        DECLARE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER, DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER,
        DEFINE_WINDOW_ATTRIBUTE_EVENT_LISTENER, DEFINE_MAPPED_ATTRIBUTE_EVENT_LISTENER,
        DECLARE_FORWARDING_ATTRIBUTE_EVENT_LISTENER, DEFINE_FORWARDING_ATTRIBUTE_EVENT_LISTENER.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::setOnended): Deleted.
        (WebCore::AudioScheduledSourceNode::finish): Rewrote this to use dispatchEvent
        instead of one-off event-sending code. Also use a lambda to avoid needing two
        additional member functions to implement this.
        (WebCore::AudioScheduledSourceNode::notifyEndedDispatch): Deleted.
        (WebCore::AudioScheduledSourceNode::notifyEnded): Deleted.
        * Modules/webaudio/AudioScheduledSourceNode.h: Updated for above.

        * Modules/battery/BatteryManager.h: Removed onxxx and setOnxxx functions,
        including ones created with macros from EventTarget.h.
        * Modules/encryptedmedia/MediaKeySession.h: Ditto.
        * Modules/indexeddb/IDBDatabase.h: Ditto.
        * Modules/indexeddb/IDBOpenDBRequest.h: Ditto.
        * Modules/indexeddb/IDBRequest.h: Ditto.
        * Modules/indexeddb/IDBTransaction.h: Ditto.
        * Modules/mediastream/MediaStream.h: Ditto.
        * Modules/mediastream/MediaStreamTrack.h: Ditto.
        * Modules/mediastream/RTCDTMFSender.h: Ditto.
        * Modules/mediastream/RTCDataChannel.h: Ditto.
        * Modules/mediastream/RTCPeerConnection.h: Ditto.
        * Modules/notifications/Notification.h: Ditto.
        * Modules/speech/SpeechSynthesisUtterance.h: Ditto.
        * Modules/webaudio/AudioContext.h: Ditto.
        * Modules/webaudio/ScriptProcessorNode.cpp: Ditto.
        * Modules/webaudio/ScriptProcessorNode.h: Ditto.
        * Modules/websockets/WebSocket.h: Ditto.
        * css/FontLoader.h: Ditto.
        * dom/Document.h: Ditto.
        * dom/Element.cpp: Ditto.
        * dom/Element.h: Ditto.
        * dom/MessagePort.h: Ditto.
        * fileapi/FileReader.h: Ditto.
        * html/HTMLBodyElement.h: Ditto.
        * html/HTMLFormElement.h: Ditto.
        * html/HTMLFrameSetElement.h: Ditto.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLMediaElement.h: Ditto.
        * html/HTMLVideoElement.h: Ditto.
        * html/track/TextTrack.h: Ditto.
        * html/track/TextTrackCue.h: Ditto.
        * html/track/TrackListBase.h: Ditto.
        * loader/appcache/DOMApplicationCache.h: Ditto.
        * page/DOMWindow.h: Ditto.
        * page/EventSource.h: Ditto.
        * page/Performance.h: Ditto.
        * workers/AbstractWorker.h: Ditto.
        * workers/DedicatedWorkerGlobalScope.h: Ditto.
        * workers/Worker.h: Ditto.
        * workers/WorkerGlobalScope.h: Ditto.
        * xml/XMLHttpRequest.h: Ditto.
        * xml/XMLHttpRequestUpload.h: Ditto.

2015-03-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Setting any of the <object> element plugin controlling attributes does not have any affect.
        https://bugs.webkit.org/show_bug.cgi?id=141936.

        Reviewed by Simon Fraser.
        
        When setting any of the <object> element plugin controlling attributes
        dynamically we need to mark the the element to be dirty by calling
        setNeedsStyleRecalc(), so it has to recreate its renderer when needed.

        Tests: fast/css/image-object-hover-inherit.html
               svg/as-object/svg-in-object-dynamic-attribute-change.html

        * dom/Element.h: Delete unimplemented function.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute): Mark the element dirty by
        calling setNeedsStyleRecalc() when one of the plugin controlling attributes
        gets changed. We have to clear m_useFallbackContent because the attribute's
        new value might fix the object rendering.
        
        * html/HTMLObjectElement.h: Add a function to clear m_useFallbackContent.

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Test horiz-origin-x and horiz-origin-y in SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=142403

        Reviewed by Simon Fraser.

        Remove incorrect comment.

        Test: svg/fonts/svg-font-horiz-origin.html

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::CFFBuilder::CFFBuilder):

2015-03-06  Simon Fraser  <simon.fraser@apple.com>

        Allow tree dumping functions to be used in release builds by switching a flag
        https://bugs.webkit.org/show_bug.cgi?id=142379

        Reviewed by Zalan Bujtas.

        There are various tree dumping functions that are useful for debugging, and sometimes
        you want to be able to use them in release builds. Currently they are surrounded by
        #ifndef NDEBUG. Change this to #if ENABLE(TREE_DEBUGGING), which is defined to 0 or 1
        in wtf/Platform.h

        * dom/DocumentMarkerController.cpp:
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Position.cpp:
        * dom/Position.h:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * editing/FrameSelection.cpp:
        * editing/FrameSelection.h:
        * editing/VisiblePosition.cpp:
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        * editing/VisibleSelection.h:
        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLFormattingElementList.cpp:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResources.h:

2015-03-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        An SVG element without intrinsic size inherits the container size as its viewport instead of inheriting the container viewport.
        https://bugs.webkit.org/show_bug.cgi?id=141725.

        Reviewed by Darin Adler.

        The current viewport of the <svg> element should be retrieved from its
        renderer if the renderer is available. If the renderer is not created yet,
        this means the viewport is needed to calculate the size of the renderer.
        In this case, we should return the element size if it is intrinsic size.
        
        Test: svg/css/svg-css-different-intrinsic-sizes.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewportSize): Change the order for
        returning the viewport of the <svg> element. We should consider the case
        of a valid renderer before considering the case of an intrinsic size.

2015-03-06  Simon Fraser  <simon.fraser@apple.com>

        Allow composited clip-path to be updated without a layer repaint
        https://bugs.webkit.org/show_bug.cgi?id=142384

        Reviewed by Zalan Bujtas.
        
        When clip-path is mapped to a compositing shape layer mask, we can just
        push a new shape to the GraphicsLayer to update the clip path, without
        needing to repaint.
        
        Achieve this by adding ContextSensitivePropertyClipPath. When set, and the
        stars are aligned, issue a StyleDifferenceRecompositeLayer rather than
        a StyleDifferenceRepaint.
        
        We ask RenderLayerCompositor whether the clip path can be composited
        to hide platform differences related to whether GraphicsLayer supports
        shape masks.

        Test: compositing/masks/compositing-clip-path-change-no-repaint.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference): Remove obvious comment
        about opacity. Handle ContextSensitivePropertyClipPath.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canCompositeClipPath): If we have a mask
        we have to paint the mask + clip path into the mask layer (mirrors code in
        RenderLayerBacking::updateMaskingLayer but isn't quite similar enough to share).
        * rendering/RenderLayerCompositor.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint): Set ContextSensitivePropertyClipPath
        and don't return, as is normal for context-sensitive property handling.
        * rendering/style/RenderStyleConstants.h: Line things up to avoid future bit
        fumbles, and remove unnecessary braces.

2015-03-06  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Process all actions when blocking a URL.
        https://bugs.webkit.org/show_bug.cgi?id=142363

        Reviewed by Darin Adler.

        This can only be tested once we implement css selectors.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL):
        Do not return early when adding a block action.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        Process all actions before returning.

2015-03-05  Darin Adler  <darin@apple.com>

        Make JavaScript binding get and set legacy event listener attributes directly
        https://bugs.webkit.org/show_bug.cgi?id=142282

        Reviewed by Antti Koivisto.

        Test: fast/dom/legacy-event-handler-attributes.html

        This patch changes the JavaScript getters and setters for these attributes
        to work directly without requiring any functions in the C++ DOM implementation.
        A subsequent patch will remove the now-unused C++ DOM implementation.

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::setOnended): Remove code to set
        m_hasEndedListener; this was incorrect since it only detected event listeners
        set up with the event handler attribute, not with addEventListener.
        (WebCore::AudioScheduledSourceNode::addEventListener): Added code to update
        m_hasEndedListener after making changes to the event listeners.
        (WebCore::AudioScheduledSourceNode::removeEventListener): Ditto.
        (WebCore::AudioScheduledSourceNode::removeAllEventListeners): Ditto.
        * Modules/webaudio/AudioScheduledSourceNode.h: Added above overrides.

        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::setOnaudioprocess): Remove code to set
        m_hasAudioProcessListener; this was incorrect since it only detected event listeners
        set up with the event handler attribute, not with addEventListener.
        (WebCore::ScriptProcessorNode::addEventListener): Added code to update
        m_hasAudioProcessListener after making changes to the event listeners.
        (WebCore::ScriptProcessorNode::removeEventListener): Ditto.
        (WebCore::ScriptProcessorNode::removeAllEventListeners): Ditto.
        * Modules/webaudio/ScriptProcessorNode.h: Added above overrides.

        * bindings/js/JSEventListener.cpp:
        (WebCore::legacyEventListenerAttribute): Added.
        (WebCore::createEventListenerForLegacyAttribute): Added.
        (WebCore::setLegacyEventListenerAttribute): Added.
        (WebCore::legacyWindowEventListenerAttribute): Added.
        (WebCore::setLegacyWindowEventListenerAttribute): Added.

        * bindings/js/JSEventListener.h:
        (WebCore::createJSEventListenerForAttribute): Deleted.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall): Deleted.
        (LegacyEventListenerAttributeEventName): Added.
        (LegacyEventListenerAttributePrefix): Added.
        (GenerateImplementation): Use "auto" in lots of places to simplify the code
        generation. Replaced the old inlined code to deal with legacy event listener
        attributes with code that simply calls the new functions from JSEventLister.h.
        (GenerateCallWith): Use "auto".
        (GenerateConstructorDefinition): Ditto.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Updated expected
        results since these now use auto.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestException.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNode.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * bindings/scripts/test/JS/JSattribute.cpp: Ditto.
        * bindings/scripts/test/JS/JSreadonly.cpp: Ditto.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::addEventListener): Moved logic that calls the start
        function in here from setOnmessage, since the latter will no longer be called.
        * dom/MessagePort.h: Ditto.

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] SVG fonts are garbled
        https://bugs.webkit.org/show_bug.cgi?id=142377

        Reviewed by Simon Fraser.

        The C++ spec says that casting a negative floating point number to
        an unsigned integer is undefined. Instead, use clamping.

        Covered by existing SVG font tests.

        * Configurations/FeatureDefines.xcconfig:
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::writeCFFEncodedNumber):

2015-03-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181139.
        https://bugs.webkit.org/show_bug.cgi?id=142394

        "Caused many crashes in API tests and layout tests in Debug
        builds on bots." (Requested by ddkilzer on #webkit).

        Reverted changeset:

        "Allow tree dumping functions to be used in release builds by
        switching a flag"
        https://bugs.webkit.org/show_bug.cgi?id=142379
        http://trac.webkit.org/changeset/181139

2015-03-05  Philippe Normand  <pnormand@igalia.com>

        [MediaStream] new load method for MediaStreamPrivate objects
        https://bugs.webkit.org/show_bug.cgi?id=142346

        Reviewed by Eric Carlson.

        No new tests, existing mediastream tests cover this use-case.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Use new load method for MediaStreams.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::load): New stub.
        (WebCore::MediaPlayer::load): New load method for
        MediaStreamPrivate.
        (WebCore::MediaPlayer::nextBestMediaEngine): Set a new boolean on
        the MediaEngineSupportParameters to differenciate with MSE and
        normal video resources.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Defer loading of
        the MediaStream to the MediaPlayerPrivate backend.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaEngineSupportParameters::MediaEngineSupportParameters):
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::load): New empty load
        method for MediaStreamPrivate objects.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        (WebCore::MediaPlayerPrivateQTKit::load): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:

2015-03-05  Philippe Normand  <pnormand@igalia.com>

        Rename MediaStreamSource to RealtimeMediaSource
        https://bugs.webkit.org/show_bug.cgi?id=142330

        Reviewed by Eric Carlson.

        MediaStreamSource is a misleading name, it's not the source of a
        MediaStream.

        The chain from high level to low level is: MediaStream -
        MediaStreamTrack - MediaStreamTrackPrivate - RealTimeMediaSource
        and a MediaStream can contains several MediaStreamTrack objects of
        different types.

        MediaStreamSourceStates was also renamed to
        RealtimeMediaSourceStates, and MediaStreamSourceCapabilities to
        RealtimeMediaSourceCapabilities, for consistency.

2015-03-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed WinCairo port build fix since r181136.

        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformAdopt): Missing ":" in std::unique_ptr.

2015-03-06  David Kilzer  <ddkilzer@apple.com>

        Rename SOFT_LINK_{CONSTANT,FUNCTION}_{HEADER,SOURCE} to SOFT_LINK_{CONSTANT,FUNCTION}_FOR_{HEADER,SOURCE}
        <http://webkit.org/b/142177>

        Reviewed by Alex Christensen.

        * platform/cf/CoreMediaSoftLink.cpp:
        - Rename SOFT_LINK_{CONSTANT,FUNCTION}_SOURCE() to
          SOFT_LINK_{CONSTANT,FUNCTION}_FOR_SOURCE().
        * platform/cf/CoreMediaSoftLink.h:
        - Rename SOFT_LINK_{CONSTANT,FUNCTION}_HEADER() to
          SOFT_LINK_{CONSTANT,FUNCTION}_FOR_HEADER().

        * platform/mac/SoftLinking.h:
        * platform/win/SoftLinking.h:
        - Rename SOFT_LINK_{CONSTANT,FUNCTION}_{HEADER,SOURCE}() to
          SOFT_LINK_{CONSTANT,FUNCTION}_FOR_{HEADER,SOURCE}().

2015-03-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] ASSERTION FAILED !track.growthLimitIsInfinite() in RenderGrid::computeUsedBreadthOfGridTracks
        https://bugs.webkit.org/show_bug.cgi?id=142265

        Reviewed by Darin Adler.

         The problem is that computeUsedBreadthOfGridTracks() could return
        -1 for rows because we're calling computeContentLogicalHeight()
        which can indeed return -1. In those cases we should clamp the
        value to 0 the same as Flexbox does otherwise we could end up with
        a negative value in the min track sizing function.

        Test: fast/css-grid-layout/grid-indefinite-calculated-height-crash.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):

2015-03-05  Simon Fraser  <simon.fraser@apple.com>

        Allow tree dumping functions to be used in release builds by switching a flag
        https://bugs.webkit.org/show_bug.cgi?id=142379

        Reviewed by Zalan Bujtas.

        There are various tree dumping functions that are useful for debugging, and sometimes
        you want to be able to use them in release builds. Currently they are surrounded by
        #ifndef NDEBUG. Change this to #if ENABLE(TREE_DEBUGGING), which is defined to 0 or 1
        in config.h

        * config.h:
        * dom/DocumentMarkerController.cpp:
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Position.cpp: Position::debugPosition(const char* msg) was available in release builds, but this changes
        is to respect ENABLE_TREE_DEBUGGING, which I think is correct.
        * dom/Position.h:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * rendering/CounterNode.cpp:
        * rendering/CounterNode.h:
        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderCounter.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::updateLayerForTopOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForBottomOverhangArea):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h: showTreeCharacterOffset was unused.
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResources.h:

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        [Mac] 'Gliding' phase of scroll snap points is incorrect on desktop
        https://bugs.webkit.org/show_bug.cgi?id=142351
        <rdar://problem/20058023>

        Reviewed by Dean Jackson.

        This problem was caused by incorrectly starting a new snapping animation timer when the
        "end momentum" phase event had been received. This caused WebKit to recalculate the
        animation curve for the remaining distance, resulting in the bad animation behavior.

        Removing this incorrect start animation command when entering the momentum ended state
        resolves the problem.

        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Remove the command to
        start a new snap animation when entering the "end momentum" state.

2015-03-05  Joonghun Park  <jh718.park@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr for ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=142349

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        * platform/CrossThreadCopier.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):

2015-03-05  Oliver Hunt  <oliver@apple.com>

        Block mixed mode content
        https://bugs.webkit.org/show_bug.cgi?id=142378

        Reviewed by Darin Adler.

        Switched to blocking mixed mode content by default,
        and modify the blocking rules to allow us to match
        the behaviours of other browsers.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::canDisplayInsecureContent):
        (WebCore::MixedContentChecker::canRunInsecureContent):
        (WebCore::MixedContentChecker::logWarning):
        * loader/MixedContentChecker.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        * page/Settings.in:

2015-03-05  Chris Dumez  <cdumez@apple.com>

        Document::recalcStyle() shouldn't call viewportContentsChanged() if there is a pending layout
        https://bugs.webkit.org/show_bug.cgi?id=142140

        Reviewed by Darin Adler.

        Stop calling FrameView::viewportContentsChanged() in Document::recalcStyle()
        if there is a layout pending to avoid doing unncessary work. If there is a
        layout pending, we don't need to do anything because viewportContentsChanged()
        will be called after layout.

        We only need to call FrameView::viewportContentsChanged() in
        Document::recalcStyle() if a style recalc does not cause a layout. For e.g.
        a '-webkit-transform' could make an animated GIF visible without causing a
        layout, in which case we need to resume the animated GIF after style recalc.

        No new tests, already covered by:
        fast/images/animated-gif-webkit-transform.html

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

2015-03-05  Dean Jackson  <dino@apple.com>

        [iOS Media] Web video on iPad appears black and missing the AirPlay placard when connected to an AirPlay route
        https://bugs.webkit.org/show_bug.cgi?id=142373
        <rdar://problem/19866072>

        Reviewed by Brent Fulgham.

        There was no style for the placard, which meant it had
        zero height (and thus was invisible).

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-wireless-playback-status): Added.
        (audio::-webkit-media-controls-wireless-playback-status.hidden):

2015-03-05  Roger Fong  <roger_fong@apple.com>

        Adjust volume box to not intersect with rest of inline media controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142372.
        <rdar://problem/20064327>

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-panel .volume-box:active):

2015-03-05  Timothy Horton  <timothy_horton@apple.com>

        <attachment> should allow the title property to override its title
        https://bugs.webkit.org/show_bug.cgi?id=142369

        Reviewed by Anders Carlsson.

        Test: fast/attachment/attachment-title.html

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::parseAttribute):
        Invalidate the attachment if the title changes.

        (WebCore::HTMLAttachmentElement::attachmentTitle):
        Use the title attribute for the title, unless it's empty, in which
        case we'll use the file's name.

        * html/HTMLAttachmentElement.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::layOutTitle):
        Use attachmentTitle() instead of reaching into the file. Also rename
        some things from filename to title.

2015-03-05  Timothy Horton  <timothy_horton@apple.com>

        Two text carets result when dragging a file into a contentEditable area that preventDefault()s the "drop" event
        https://bugs.webkit.org/show_bug.cgi?id=142362
        <rdar://problem/20046434>

        Reviewed by Simon Fraser.

        * page/DragController.h:
        * page/DragController.cpp:
        (WebCore::DragController::clearDragCaret):
        Rename cancelDrag to clearDragCaret, since that's really what it does.

        (WebCore::DragController::tryDocumentDrag):
        When updating the drag position, if we're now over a <input type="file">,
        clear the drag caret. This avoids leaving a caret behind when dragging
        over a <input type="file"> inside a contentEditable area.

        (WebCore::DragController::performDragOperation):
        When the content preventDefault()s while finishing a drag, we should still
        clear the drag caret, because it's possible that the client did not
        preventDefault() on dragover/etc., so we would have set a cursor, and
        now need to clear it so that it doesn't get left behind.

        (WebCore::DragController::mouseMovedIntoDocument):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::concludeEditDrag):
        Adjust to renamed clearDragCaret.

        (WebCore::DragController::dragEnded):
        Make use of clearDragCaret (which is equivalent to this line).

2015-03-05  Timothy Horton  <timothy_horton@apple.com>

        <attachment> should support indication of download progress
        https://bugs.webkit.org/show_bug.cgi?id=142336
        <rdar://problem/19982504>

        Reviewed by Anders Carlsson.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::parseAttribute):
        Invalidate the attachment if the progress attribute changes.

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::Radii::Radii):
        Add a Radii constructor that takes a single argument that is used
        as the radius for all corners, for convenience.

        * rendering/RenderThemeMac.mm:
        (WebCore::attachmentProgressBarBackgroundColor):
        (WebCore::attachmentProgressBarFillColor):
        (WebCore::attachmentProgressBarBorderColor):
        Add a bunch of constants for the progress bar.

        (WebCore::paintAttachmentIconBackground):
        Make use of fillRoundedRect instead of creating a path.

        (WebCore::paintAttachmentProgress):
        (WebCore::RenderThemeMac::paintAttachment):
        Paint a progress bar if the progress attribute exists and
        is a valid floating point number.

2015-03-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180846.
        https://bugs.webkit.org/show_bug.cgi?id=142368

        Caused missing image banners in iTunes store pages (Requested
        by smfr on #webkit).

        Reverted changeset:

        "FrameView::layoutTimerFired() should update style if needed
        before doing layout"
        https://bugs.webkit.org/show_bug.cgi?id=141688
        http://trac.webkit.org/changeset/180846

2015-03-05  Sandy Perez  <sperez@indaba.es>

        Fix the build when NEON_INTRINSICS is enabled
        https://bugs.webkit.org/show_bug.cgi?id=142361

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::standardBoxBlur):

2015-03-05  Benjamin Poulain  <bpoulain@apple.com>

        Add basic support for character sets to the URL Filter parser
        https://bugs.webkit.org/show_bug.cgi?id=142257

        Reviewed by Alex Christensen.

        This patch is a first step toward making the URL filter parser a bit
        more powerful: it adds support for character set atom.

        I did not attempt to integrate that into the prefix tree in this patch,
        instead, the GraphBuilder gets a two modes of generating the NFA:
        PrefixTree and DirectGeneration.

        As long as we only see trivial atoms, we use the PrefixTree generation
        to minimize the number of nodes we need. As soon as we start a character
        class, we switch to DirectGeneration and we generate the NFA from the input
        without merging with previously seen patterns.

        To differentiate between Trivial atoms and CharacterSet, we also gain
        an AtomType state.

        The character set themself are very simple: each character is represented by
        a bit in a 16bytes bit vector.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::quantifyTrivialAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomBackReference):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassRange):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassEnd):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBuiltIn):
        (WebCore::ContentExtensions::GraphBuilder::sinkAtom):
        (WebCore::ContentExtensions::GraphBuilder::generateTransition):
        (WebCore::ContentExtensions::GraphBuilder::sinkTrivialAtom):
        (WebCore::ContentExtensions::GraphBuilder::sinkCharacterSet):
        (WebCore::ContentExtensions::GraphBuilder::sinkPendingAtomIfNecessary):

2015-03-05  Roger Fong  <roger_fong@apple.com>

        Implement new fullscreen media controls on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=142355.
        <rdar://problem/16175787>

        Reviewed by Dean Jackson.

        Adjust sizes and positioning of all fullscreen media control elements.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-fullscreen-button.exit): Update to match entering fullscreen button.
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        (video:-webkit-full-screen::-webkit-media-controls-panel .volume-box):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-volume-max-button):
        (video:-webkit-full-screen::-webkit-media-controls-volume-min-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button):
        (video:-webkit-full-screen::-webkit-media-controls-play-button.paused):
        (video:-webkit-full-screen::-webkit-media-controls-seek-back-button):
        (video:-webkit-full-screen::-webkit-media-controls-seek-forward-button):
        (video:-webkit-full-screen::-webkit-media-controls-timeline-container):
        (video:-webkit-full-screen::-webkit-media-controls-current-time-display):
        (video:-webkit-full-screen::-webkit-media-controls-time-remaining-display):
        (audio:-webkit-full-screen::-webkit-media-controls-toggle-closed-captions-button):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider::-webkit-slider-thumb): Deleted.
        (video:-webkit-full-screen::-webkit-media-controls-rewind-button): Deleted. Not used in full screen.

2015-03-05  Roger Fong  <roger_fong@apple.com>

        Minor touchups to inline media control icons.
        https://bugs.webkit.org/show_bug.cgi?id=142354.
        <rdar://problem/20058854>.

        Reviewed by Brent Fulgham.

        Increase sizes of play/pause and fullscreen buttons slightly.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-fullscreen-button):

2015-03-05  Roger Fong  <roger_fong@apple.com>

        Update inline media control icons for OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142305.
        <rdar://problem/19997484>

        Reviewed by Dean Jackson.

        Changes include: new volume button, new full screen button, new play/pause button.
        Repositioning of 30 second and play buttons.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel button):
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-panel .mute-box):
        (video::-webkit-media-controls-volume-max-button):
        (video::-webkit-media-controls-volume-min-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-current-time-display):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.configureInlineControls): Swap positions of rewind and play buttons.
        (Controller.prototype.handleMuteButtonClicked): Remember to update volume slider when necessary.
        (Controller.prototype.updateVolume): Ditto

2015-03-05  David Hyatt  <hyatt@apple.com>

        Caps lock indicator in text fields is laying out in the wrong place.
        https://bugs.webkit.org/show_bug.cgi?id=142352

        Reviewed by Dean Jackson.

        * css/html.css:
        (input::-webkit-caps-lock-indicator):
        Change the CSS to give the SVG image an intrinsic size, and to use align-self:stretch so that
        the image always stretches to fill the height of the text box. Get rid of height:100%, as that
        just resolves to auto in strict mode and was not ever going to work there.

2015-03-04  Dean Jackson  <dino@apple.com>

        [iOS Media] Use a blurry background for media controls
        https://bugs.webkit.org/show_bug.cgi?id=142316
        <rdar://problem/14911098>

        Reviewed by Eric Carlson.

        Start using the -webkit-appearance media-controls-light-bar-background
        in order to get the blurry background of media controls.

        * Modules/mediacontrols/mediaControlsApple.js: Keep the panel and the
        panel background in sync when it comes to hiding and showing. It would
        be better if this could be done on a container element in the future.
        (Controller.prototype.handlePanelTransitionEnd):
        (Controller.prototype.setPlaying):
        (Controller.prototype.showControls):
        (Controller.prototype.hideControls):

        * Modules/mediacontrols/mediaControlsiOS.css: New background container
        with the special appearance. I also renamed "composited-parent" to
        "container", which makes more sense.
        (video::-webkit-media-controls-panel-container):
        (audio::-webkit-media-controls-panel-container):
        (video::-webkit-media-controls-panel-background):
        (audio::-webkit-media-controls-panel-background):
        (video::-webkit-media-controls-panel-background.paused):
        (video::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel.paused):
        (audio::-webkit-media-controls-optimized-fullscreen-button):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (video::-webkit-media-controls-panel-composited-parent): Deleted.
        (video::-webkit-media-controls-panel:hover): Deleted.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Create the new background element.
        (ControllerIOS.prototype.addControls):
        (ControllerIOS.prototype.set pageScaleFactor): Temporarily disable
        this because the background disappears when the zoom factor
        is too high - we start tiling the background. This will be addressed
        by https://bugs.webkit.org/show_bug.cgi?id=142317.

2015-03-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Mechanical text-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=142326

        Reviewed by Andreas Kling.

        Use nullptr instead of 0.
        Use references instead of pointers.

        No new tests because there is no behavior change.

        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::adjustSelectionRectForComplexText):
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText):
        (WebCore::FontCascade::floatWidthForComplexText):
        (WebCore::FontCascade::offsetForPositionForComplexText):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::TextLayout::TextLayout):
        (WebCore::ComplexTextController::ComplexTextController):
        * platform/graphics/mac/ComplexTextController.h:
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::clear):
        (WebCore::bidiNextShared):
        (WebCore::bidiNextSkippingEmptyInlines):
        (WebCore::bidiNextIncludingEmptyInlines):
        (WebCore::InlineWalker::InlineWalker):
        (WebCore::InlineIterator::increment):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::measureHyphenWidth):
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):

2015-03-05  Brent Fulgham  <bfulgham@apple.com>

        Move AxisScrollSnapAnimator logic to ScrollController
        https://bugs.webkit.org/show_bug.cgi?id=142293
        <rdar://problem/20039867>

        Reviewed by Dean Jackson.

        No change in function.

        Move the animation logic out of 'AxisScrollSnapAnimator' into 'ScrollController'. Rename the remaining
        bits of 'AxisScrollSnapAnimator' as 'ScrollSnapAnimatorState'. Remove a number of delegate methods required
        by 'AxisScrollSnapAnimatorClient' that are no longer needed.

        Also, break up some of the Scroll Snap Point math to be a little easier to understand.

        * WebCore.xcodeproj/project.pbxproj: Rename 'platform/mac/AxisScrollSnapAnimator.{h,mm}' -> 'platform/cocoa/ScrollSnapAnimatorState.h'
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Mark 'scrollOffsetOnAxis' as const.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Make 'const'
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollOffsetOnAxis): Make 'const'
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h: No longer subclass from AxisScrollSnapAnimatorClient.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::scrollSnapPointState): Added accessors (const and non-const) for the individual
        Scroll Snap State of each axis.
        (WebCore::toWheelEventStatus): Moved from AxisScrollSnapAnimator.
        (WebCore::ScrollController::processWheelEventForScrollSnapOnAxis): Added helper function containing the snap wheel handler code
        from AxisScrollSnapAnimator.
        (WebCore::ScrollController::shouldOverrideWheelEvent): Moved from AxisScrollSnapAnimator.
        (WebCore::ScrollController::processWheelEventForScrollSnap): Update to use new methods moved from AxisScrollSnapAnimator.
        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Update for new ScrollSnapAnimatorState class.
        (WebCore::ScrollController::updateScrollSnapPoints): Ditto.
        (WebCore::ScrollController::startScrollSnapTimer): Call client (delegate) method.
        (WebCore::ScrollController::stopScrollSnapTimer): Ditto.
        (WebCore::ScrollController::horizontalScrollSnapTimerFired): Call new 'scrollSnapAnimationUpdate' method passing the
        correct axis to animate.
        (WebCore::ScrollController::verticalScrollSnapTimerFired): Ditto.
        (WebCore::ScrollController::scrollSnapAnimationUpdate): Moved from AxisScrollSnapAnimator.
        (WebCore::projectedInertialScrollDistance): Moved from AxisScrollSnapAnimator.
        (WebCore::ScrollController::initializeGlideParameters): Ditto.
        (WebCore::ScrollController::beginScrollSnapAnimation): Ditto.
        (WebCore::ScrollController::endScrollSnapAnimation): Ditto.
        (WebCore::snapProgress): Created a new function for this calculation to make reasoning about the 'computeSnapDelta' and
        'computeGlideDelta' easier.
        (WebCore::clampedSnapMagnitude): Ditto.
        (WebCore::ScrollController::computeSnapDelta): Moved from AxisScrollSnapAnimator.
        (WebCore::snapGlide): Created a new function for this calculation to make reasoning about the 'computeGlideDelta' easier.
        (WebCore::ScrollController::computeGlideDelta): Moved from AxisScrollSnapAnimator.
        (WebCore::ScrollController::scrollOffsetOnAxis): Deleted.
        (WebCore::ScrollController::immediateScrollOnAxis): Deleted.
        * platform/cocoa/ScrollSnapAnimatorState.h: Copied from platform/mac/AxisScrollSnapAnimator.h.
        (WebCore::AxisScrollSnapAnimatorClient::~AxisScrollSnapAnimatorClient): Deleted.
        * platform/cocoa/ScrollSnapAnimatorState.mm: Copied from platform/mac/AxisScrollSnapAnimator.mm.
        (WebCore::ScrollSnapAnimatorState::ScrollSnapAnimatorState):
        (WebCore::ScrollSnapAnimatorState::pushInitialWheelDelta):
        (WebCore::ScrollSnapAnimatorState::averageInitialWheelDelta):
        (WebCore::ScrollSnapAnimatorState::clearInitialWheelDeltaWindow):
        (WebCore::toWheelEventStatus): Deleted.
        (WebCore::projectedInertialScrollDistance): Deleted.
        (WebCore::AxisScrollSnapAnimator::AxisScrollSnapAnimator): Deleted.
        (WebCore::AxisScrollSnapAnimator::handleWheelEvent): Deleted.
        (WebCore::AxisScrollSnapAnimator::shouldOverrideWheelEvent): Deleted.
        (WebCore::AxisScrollSnapAnimator::scrollSnapAnimationUpdate): Deleted.
        (WebCore::AxisScrollSnapAnimator::beginScrollSnapAnimation): Deleted.
        (WebCore::AxisScrollSnapAnimator::endScrollSnapAnimation): Deleted.
        (WebCore::AxisScrollSnapAnimator::computeSnapDelta): Deleted.
        (WebCore::AxisScrollSnapAnimator::computeGlideDelta): Deleted.
        (WebCore::AxisScrollSnapAnimator::initializeGlideParameters): Deleted.
        (WebCore::AxisScrollSnapAnimator::pushInitialWheelDelta): Deleted.
        (WebCore::AxisScrollSnapAnimator::averageInitialWheelDelta): Deleted.
        (WebCore::AxisScrollSnapAnimator::clearInitialWheelDeltaWindow): Deleted.
        * platform/mac/AxisScrollSnapAnimator.h: Removed.
        * platform/mac/AxisScrollSnapAnimator.mm: Removed.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection): Removed.

2015-03-04  Dean Jackson  <dino@apple.com>

        [iOS Media] Small inline controls can clip the time widgets
        https://bugs.webkit.org/show_bug.cgi?id=142319

        Reviewed by Eric Carlson.

        Start counting the number of digits in a duration so that
        we can assign classes to the time widgets that specify
        a minimum width.

        * Modules/mediacontrols/mediaControlsApple.css: Replace the hour-long and ten-hour-long
        classes with number of digits.
        (audio::-webkit-media-controls-time-remaining-display.five-digit-time):
        (audio::-webkit-media-controls-current-time-display.five-digit-time):
        (audio::-webkit-media-controls-time-remaining-display.six-digit-time):
        (audio::-webkit-media-controls-current-time-display.six-digit-time):
        (audio::-webkit-media-controls-time-remaining-display.hour-long-time): Deleted.
        (audio::-webkit-media-controls-current-time-display.hour-long-time): Deleted.
        (audio::-webkit-media-controls-time-remaining-display.ten-hour-long-time): Deleted.
        (audio::-webkit-media-controls-current-time-display.ten-hour-long-time): Deleted.

        * Modules/mediacontrols/mediaControlsApple.js: Add some new class names.
        (Controller.prototype.updateDuration): Set the class of the time
        widgets when we know how long the media runs.

        * Modules/mediacontrols/mediaControlsiOS.css: Values for iOS that
        are big enough to avoid clipping.
        (video::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-time-remaining-display):
        (video::-webkit-media-controls-current-time-display.three-digit-time):
        (video::-webkit-media-controls-time-remaining-display.three-digit-time):
        (video::-webkit-media-controls-current-time-display.four-digit-time):
        (video::-webkit-media-controls-time-remaining-display.four-digit-time):
        (video::-webkit-media-controls-current-time-display.five-digit-time):
        (video::-webkit-media-controls-time-remaining-display.five-digit-time):
        (video::-webkit-media-controls-current-time-display.six-digit-time):
        (video::-webkit-media-controls-time-remaining-display.six-digit-time):
        (audio::-webkit-media-controls-timeline-container): Deleted.
        (video::-webkit-media-text-track-container): Deleted.

2015-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        [cmake] Fix the web replay build
        https://bugs.webkit.org/show_bug.cgi?id=142331

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForSessionState):
        (WebCore::buildInspectorObjectForSegmentState):

2015-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Check TLS errors as soon as they are set in the SoupMessage
        https://bugs.webkit.org/show_bug.cgi?id=142244

        Reviewed by Sergio Villar Senin.

        Connect to the notify::tls-errors signal of SoupMessage to cancel
        the load earlier in case of TLS failure, preventing any private
        data from being sent to the server before the TLS errors are checked.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::tlsErrorsChangedCallback):
        (WebCore::gotHeadersCallback):
        (WebCore::createSoupMessageForHandleAndRequest):

2015-03-05  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        TextCheckingParagraph::isEmpty() is sufficient to check whether paragraph is empty
        https://bugs.webkit.org/show_bug.cgi?id=142276

        Reviewed by Darin Adler.

        TextCheckingParagraph::isEmpty() already calls TextCheckingParagraph::isRangeEmpty().
        There is no need to call them both at the caller site.

        No new tests. No behavior change.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        Update caller site.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::isEmpty):
        Avoid using helepers here to get rid of them as they are
        no longer needed outside TextCheckingParagraph.

        * editing/TextCheckingHelper.h:
        (WebCore::TextCheckingParagraph::isTextEmpty): Deleted.
        (WebCore::TextCheckingParagraph::isRangeEmpty): Deleted.
        Do not expose isTextEmpty() and isRangeEmpty().

2015-03-04  Simon Fraser  <simon.fraser@apple.com>

        Clarify RenderElement::adjustStyleDifference()
        https://bugs.webkit.org/show_bug.cgi?id=142256

        Reviewed by David Hyatt.

        Make RenderElement::adjustStyleDifference() clearer in two ways.
        
        First, replace lots of if (diff < X) diff = X with
        diff = std::max(diff, X). I did this even in cases where diff was
        being set unconditionally, because it's never correct to change the diff
        to a lesser value.
        
        Second the "set at least SimplifiedLayout, but if we have PositionedMovementOnly
        set it to SimplifiedLayoutAndPositionedMovement" was confusingly written.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference):

2015-03-04  David Kilzer  <ddkilzer@apple.com>

        Switch new soft-linking debug asserts to release asserts
        <http://webkit.org/b/142176>

        Reviewed by Alex Christensen.

        * platform/mac/SoftLinking.h:
        (SOFT_LINK_CONSTANT_SOURCE): Switch to release assert.
        (SOFT_LINK_FUNCTION_SOURCE): Ditto.
        * platform/win/SoftLinking.h:
        (SOFT_LINK_CONSTANT_SOURCE): Ditto.
        (SOFT_LINK_FUNCTION_SOURCE): Ditto.  Note that this method is
        effectively only called once because the function pointer is
        replaced after the first time it's called.

2015-03-04  Alex Christensen  <achristensen@webkit.org>

        Optimize content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=142295

        Reviewed by Benjamin Poulain.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        There is no need to add duplicate sequential actions.
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::operator==):
        Added to compare actions.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL):
        Return early if a block action is found instead of moving to the next extension.

2015-03-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181046.
        https://bugs.webkit.org/show_bug.cgi?id=142318

        Broke two layout tests (Requested by sundiamonde on #webkit).

        Reverted changeset:

        "Update inline media control icons for OSX."
        https://bugs.webkit.org/show_bug.cgi?id=142305
        http://trac.webkit.org/changeset/181046

2015-03-04  Timothy Horton  <timothy_horton@apple.com>

        <attachment> icons are low-resolution when transformed or under page scale
        https://bugs.webkit.org/show_bug.cgi?id=142262
        <rdar://problem/20035480>

        Reviewed by Dean Jackson.

        We should use Icon::createIconForFiles, just like <input type="file"> does,
        instead of directly talking to IconServices. This results both in less code
        and in NSImage's multiresolution magic making the icons sharp even under
        the influence of transforms and page scale.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/IconServicesSPI.h: Removed.
        * platform/spi/mac/LaunchServicesSPI.h: Removed.
        Get rid of IconServicesSPI.h and LaunchServicesSPI.h.

        * platform/graphics/Icon.h:
        Include RetainPtr just once.
        paint() should take a GraphicsContext reference (null is not an option)
        and a FloatRect (after all, it just turns around and converts to NSRect).

        * platform/graphics/ios/IconIOS.mm:
        (WebCore::Icon::paint):
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/efl/IconEfl.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::paint):
        Adapt to the paint() signature changes, fix some style, etc.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        Adapt to the paint() signature changes.

        * rendering/RenderThemeMac.mm:
        (WebCore::paintAttachmentIcon):
        Use Icon::createIconForFiles instead of IconServices.

2015-03-04  Tim Horton  <timothy_horton@apple.com>

        <attachment> should not appear selected when the cursor is adjacent to it
        https://bugs.webkit.org/show_bug.cgi?id=142311
        <rdar://problem/20045862>

        Reviewed by Dean Jackson.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::isSelected): Deleted.
        * rendering/RenderAttachment.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::titleTextColorForAttachment):
        (WebCore::RenderThemeMac::paintAttachment):
        (WebCore::labelTextColorForAttachment): Deleted.
        We were using the wrong (and far too complicated) mechanism to determine
        if the attachment is selected (to decide which highlight color to use).
        Instead, just check selectionState().

2015-03-04  Timothy Horton  <timothy_horton@apple.com>

        <attachment> should show the file size as detail text below the icon
        https://bugs.webkit.org/show_bug.cgi?id=142261
        <rdar://problem/20009570>

        Reviewed by Dean Jackson.

        Test: fast/attachment/attachment-subtitle.html

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):
        (WebCore::HTMLAttachmentElement::parseAttribute):
        * html/HTMLAttachmentElement.h:
        Let RenderAttachment know when the subtitle attribute changes.

        * html/HTMLAttributeNames.in:
        Add a subtitle attribute.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::invalidate):
        (WebCore::RenderAttachment::representedFileChanged): Deleted.
        * rendering/RenderAttachment.h:
        Rename representedFileChanged to invalidate; it will cause layout and
        repaint of the attachment. Mostly for use from HTMLAttachmentElement,
        when properties that affect the display and/or intrinsic size change.

        * rendering/RenderThemeMac.mm:
        (WebCore::attachmentTitleInactiveBackgroundColor):
        (WebCore::attachmentTitleInactiveTextColor):
        (WebCore::attachmentSubtitleTextColor):
        (WebCore::titleTextColorForAttachment):
        (WebCore::AttachmentLayout::addTitleLine):
        (WebCore::AttachmentLayout::layOutTitle):
        (WebCore::AttachmentLayout::layOutSubtitle):
        (WebCore::AttachmentLayout::AttachmentLayout):
        (WebCore::addAttachmentTitleBackgroundRightCorner):
        (WebCore::addAttachmentTitleBackgroundLeftCorner):
        (WebCore::paintAttachmentTitleBackground):
        (WebCore::paintAttachmentTitle):
        (WebCore::paintAttachmentSubtitle):
        (WebCore::RenderThemeMac::paintAttachment):
        (WebCore::attachmentLabelInactiveBackgroundColor): Deleted.
        (WebCore::attachmentLabelInactiveTextColor): Deleted.
        (WebCore::labelTextColorForAttachment): Deleted.
        (WebCore::AttachmentLayout::addLine): Deleted.
        (WebCore::AttachmentLayout::layOutLabel): Deleted.
        (WebCore::addAttachmentLabelBackgroundRightCorner): Deleted.
        (WebCore::addAttachmentLabelBackgroundLeftCorner): Deleted.
        (WebCore::paintAttachmentLabelBackground): Deleted.
        (WebCore::paintAttachmentLabel): Deleted.
        Rename everything "label" to "title" (except LabelLine, which is not
        specifically about the title). We're going to use "title" for the
        main text below the icon, and "subtitle" for the secondary text below that.

        Avoid keeping the CTFonts on the AttachmentLayout; there's no need for it.

        Add layOutSubtitle and paintAttachmentSubtitle, which orient and paint
        the subtitle (below the title, in blue, smaller than the label).

2015-03-04  David Kilzer  <ddkilzer@apple.com>

        [Windows] Build fix: Make sure to include <CoreMedia/CoreMedia.h> before redefining CMSampleBuffer

        More fallout from:

        Switch remaining CoreMedia soft-linking in WebCore over to CoreMediaSoftLink.{cpp,h}
        <http://webkit.org/b/141870>

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        - Remove include of <CoreMedia/CoreMedia.h> here.  These already
          include CoreMediaSPI.h.
        * platform/spi/cf/CoreMediaSPI.h:
        - Add include of <CoreMedia/CoreMedia.h> here.
        - Remove redundant include of <CoreMedia/CMTime.h> for Windows.

2015-03-04  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build with newer clang due to duplicate macro definition

        Fallout from:

        Switch remaining CoreMedia soft-linking in WebCore over to CoreMediaSoftLink.{cpp,h}
        <http://webkit.org/b/141870>

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        Remove duplicate kCMTimeIndefinite macro.

2015-03-04  Roger Fong  <roger_fong@apple.com>

        Update inline media control icons for OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142305.
        <rdar://problem/19997484>

        Reviewed by Dean Jackson.

        Changes include: new volume button, new full screen button, new play/pause button.
        Repositioning of 30 second and play buttons.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel button):
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-play-button.paused):
        (audio::-webkit-media-controls-panel .mute-box):
        (video::-webkit-media-controls-volume-max-button):
        (video::-webkit-media-controls-volume-min-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-current-time-display):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.configureInlineControls): Swap positions of rewind and play buttons.
        (Controller.prototype.handleMuteButtonClicked): Remember to update volume slider when necessary.
        (Controller.prototype.updateVolume): Ditto

2015-03-04  Andy Estes  <aestes@apple.com>

        [Content Filtering] Rename ContentFilterMac.mm to ContentFilter.cpp
        https://bugs.webkit.org/show_bug.cgi?id=142313

        Reviewed by Anders Carlsson.

        ContentFilterMac.mm no longer contains any Objective-C code, so rename it to ContentFilter.cpp. It is also no longer Mac-specific, so move it up to platform/.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ContentFilter.cpp: Renamed from Source/WebCore/platform/mac/ContentFilterMac.mm.
        * platform/cocoa/NetworkExtensionContentFilter.h: Replaced NSInteger with long.

2015-03-04  Dean Jackson  <dino@apple.com>

        REGRESSION (r179597): Can't see power saver banner for plugins
        https://bugs.webkit.org/show_bug.cgi?id=142312
        <rdar://problem/20040517>

        Reviewed by Brent Fulgham.

        We were being a bit too restrictive when deciding a child
        should not create a renderer. All shadow root children
        of the snapshotted plugin need one.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::childShouldCreateRenderer):
        Test if we're part of the shadow tree.

2015-03-03  Andy Estes  <aestes@apple.com>

        [Content Filtering] Make it easier to add new content filters
        https://bugs.webkit.org/show_bug.cgi?id=142255

        Reviewed by Sam Weinig.

        ContentFilter was becoming a bit of a mess, with both the WebFilterEvaluator and NEFilterSource implementations
        awkwardly living side-by-side. This patch cleans things up by moving these implementations into two separate
        classes and turning ContentFilter itself into an abstract interface that each implements. A new class called
        ContentFilterCollection, which also inherits from ContentFilter, manages the collection of individual content
        filters and is vended to the rest of the system by ContentFilter::createIfNeeded().

        This refactoring will make it easier to add a third type of content filter in a follow-on patch, namely a mock
        content filter for testing purposes.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Called ContentFilter::createIfNeeded() instead of instantiating a ContentFilter directly.
        * platform/ContentFilter.h:
        (WebCore::ContentFilter::~ContentFilter):
        * platform/cocoa/NetworkExtensionContentFilter.h: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/cocoa/NetworkExtensionContentFilter.mm: Added.
        (WebCore::NetworkExtensionContentFilter::canHandleResponse): Moved NEFilterSource code from ContentFilterMac.mm to here.
        (WebCore::NetworkExtensionContentFilter::create): Ditto.
        (WebCore::NetworkExtensionContentFilter::NetworkExtensionContentFilter): Ditto.
        (WebCore::NetworkExtensionContentFilter::~NetworkExtensionContentFilter): Ditto.
        (WebCore::NetworkExtensionContentFilter::addData): Ditto.
        (WebCore::NetworkExtensionContentFilter::finishedAddingData): Ditto.
        (WebCore::NetworkExtensionContentFilter::needsMoreData): Ditto.
        (WebCore::NetworkExtensionContentFilter::didBlockData): Ditto.
        (WebCore::NetworkExtensionContentFilter::getReplacementData): Ditto.
        (WebCore::NetworkExtensionContentFilter::unblockHandler): Ditto.
        * platform/cocoa/ParentalControlsContentFilter.h: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/cocoa/ParentalControlsContentFilter.mm: Added.
        (WebCore::ParentalControlsContentFilter::canHandleResponse): Moved WebFilterEvaluator code from ContentFilterMac.mm to here.
        (WebCore::ParentalControlsContentFilter::create): Ditto.
        (WebCore::ParentalControlsContentFilter::ParentalControlsContentFilter): Ditto.
        (WebCore::ParentalControlsContentFilter::addData): Ditto.
        (WebCore::ParentalControlsContentFilter::finishedAddingData): Ditto.
        (WebCore::ParentalControlsContentFilter::needsMoreData): Ditto.
        (WebCore::ParentalControlsContentFilter::didBlockData): Ditto.
        (WebCore::ParentalControlsContentFilter::getReplacementData): Ditto.
        (WebCore::ParentalControlsContentFilter::unblockHandler): Ditto.
        * platform/mac/ContentFilterMac.mm:
        (WebCore::contentFilterType): Added a helper function template that creates a new ContentFilterType.
        (WebCore::contentFilterTypes): Registered a ContentFilterType for each type of content filter.
        (WebCore::ContentFilter::createIfNeeded): Created a ContentFilterCollection containing each content filter that can handle the given response.
        (WebCore::ContentFilterCollection::ContentFilterCollection): Constructs a ContentFilterCollection given a Vector of content filters.
        (WebCore::ContentFilterCollection::addData): Forwarded the call to each content filter in m_contentFilters.
        (WebCore::ContentFilterCollection::finishedAddingData): Ditto.
        (WebCore::ContentFilterCollection::needsMoreData): Ditto.
        (WebCore::ContentFilterCollection::didBlockData): Ditto.
        (WebCore::ContentFilterCollection::getReplacementData): Returned replacement data for the first filter that blocked the load.
        If no filter blocked the load, returned the first filter's replacement data.
        (WebCore::ContentFilterCollection::unblockHandler): Returned the unblock handler for the first filter that blocked the load.
        (WebCore::ContentFilter::ContentFilter): Deleted.
        (WebCore::ContentFilter::~ContentFilter): Deleted.
        (WebCore::ContentFilter::canHandleResponse): Deleted.
        (WebCore::ContentFilter::addData): Deleted.
        (WebCore::ContentFilter::finishedAddingData): Deleted.
        (WebCore::ContentFilter::needsMoreData): Deleted.
        (WebCore::ContentFilter::didBlockData): Deleted.
        (WebCore::ContentFilter::getReplacementData): Deleted.
        (WebCore::ContentFilter::unblockHandler): Deleted.

2015-03-04  David Kilzer  <ddkilzer@apple.com>

        Switch remaining CoreMedia soft-linking in WebCore over to CoreMediaSoftLink.{cpp,h}
        <http://webkit.org/b/141870>

        Reviewed by Alex Christensen.

        * Configurations/WebCore.unexp:
        - Remove all weak symbols for CoreMedia.framework as they should
          no longer appear.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        * platform/graphics/avfoundation/MediaTimeAVFoundation.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        - Clean up headers.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        - Add soft-link functions and constants from remaining source
          files.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/mac/PlatformClockCM.mm:
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        - Switch to using CoreMediaSoftLink.h.

        * platform/mac/SoftLinking.h:
        * platform/win/SoftLinking.h:
        - Remove 'const' from SOFT_LINK_CONSTANT_{HEADER,SOURCE}()
          macros since it won't work with const structs.

        * platform/spi/cf/CoreMediaSPI.h:
        - Add SPI declarations for Windows originally from
          InbandTextTrackPrivateAVF.cpp.

2015-03-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r181001 and r181003.
        https://bugs.webkit.org/show_bug.cgi?id=142307

        Broke many tests (Requested by ap on #webkit).

        Reverted changesets:

        "Make JavaScript binding get and set legacy event listener
        attributes directly"
        https://bugs.webkit.org/show_bug.cgi?id=142282
        http://trac.webkit.org/changeset/181001

        "Update bindings tests after r181001."
        http://trac.webkit.org/changeset/181003

2015-03-04  Roger Fong  <roger_fong@apple.com>

        Update elapsed/remaining time displays on media inline controls on OSX.
        https://bugs.webkit.org/show_bug.cgi?id=142264.
        <rdar://problem/19997487>

        Reviewed by Dean Jackson.

        Div surrounding times are set widths. A larger width is used for times that are
        an hour or longer. Time elapsed is right justified. Time remaining is left justified.
        Times are displayed in 11pt Helvetica Neue.
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display.hour-long-time):
        (audio::-webkit-media-controls-current-time-display.hour-long-time):
        (audio::-webkit-media-controls-time-remaining-display.ten-hour-long-time):
        (audio::-webkit-media-controls-current-time-display.ten-hour-long-time):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateDuration):

2015-03-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Implement -apple-trailing-word: -apple-partially-balanced
        https://bugs.webkit.org/show_bug.cgi?id=142253

        Reviewed by David Hyatt.

        This patch implements a history mechanism for line breaking. In particular, this patch partitions
        the updates to the current line breaking location into two kinds: conceptually new breaking locations,
        and fixups to existing locations. Then, this patch remembers all the fixed up breaking locations, up
        to a maximum number of remembered locations.

        The patch then uses this memory to change the line-breaking selection based on the rules of
        -apple-trailing-word.

        Test: fast/text/trailing-word.html

        * rendering/line/BreakingContextInlineHeaders.h:
        Use InlineIteratorHistory as a proxy for the current breaking location. Note that all these functions
        are inlined, so the overhead should be next to nothing when -apple-trailing-word is not in use.
        (WebCore::BreakingContext::BreakingContext): Use InlineIteratorHistory instead of InlineIterator
        (WebCore::BreakingContext::lineBreak): Ditto.
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine): Ditto
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth): Ditto
        (WebCore::BreakingContext::InlineIteratorHistory::InlineIteratorHistory): Keeps track of historical
        breaking locations
        (WebCore::BreakingContext::InlineIteratorHistory::push): Remember a new breaking location
        (WebCore::BreakingContext::InlineIteratorHistory::update): Update an existing breaking location
        (WebCore::BreakingContext::InlineIteratorHistory::renderer): Forwarded to the current breaking location
        (WebCore::BreakingContext::InlineIteratorHistory::offset): Ditto
        (WebCore::BreakingContext::InlineIteratorHistory::atTextParagraphSeparator):  Ditto
        (WebCore::BreakingContext::InlineIteratorHistory::previousInSameNode): Ditto
        (WebCore::BreakingContext::InlineIteratorHistory::get): Get one of the remembered breaking locations
        (WebCore::BreakingContext::InlineIteratorHistory::current): Get the current breaking location
        (WebCore::BreakingContext::InlineIteratorHistory::historyLength):
        (WebCore::BreakingContext::InlineIteratorHistory::moveTo): Forwarded to the current breaking location.
        (WebCore::BreakingContext::InlineIteratorHistory::increment): Ditto
        (WebCore::BreakingContext::InlineIteratorHistory::clear): Ditto
        (WebCore::BreakingContext::handleBR): Use InlineIteratorHistory instead of InlineIterator
        (WebCore::BreakingContext::handleFloat): Ditto
        (WebCore::BreakingContext::handleText): Use InlineIteratorHistory instead of InlineIterator
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded): Style
        (WebCore::checkMidpoints): Use InlineIteratorHistory instead of InlineIterator
        (WebCore::BreakingContext::handleEndOfLine): If -apple-trailing-word is in effect, use
        optimalLineBreakLocationForTrailingWord().
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): Use the remembered breaking
        locations and choose the optimal one.
        (WebCore::BreakingContext::lineBreakRef): Deleted.

2015-03-04  Timothy Horton  <timothy_horton@apple.com>

        <attachment> title text disappears when dragging
        https://bugs.webkit.org/show_bug.cgi?id=142263
        <rdar://problem/20035515>

        Reviewed by Sam Weinig.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintAttachment):
        We use NSColors with CoreText, which requires that Cocoa knows the current
        CGContext out-of-band (through the NSGraphicsContext currentContext mechanism).
        Otherwise, sometimes (especially when dragging), it will try to apply the
        text foreground color to a null context, complain to the system log, and fail
        to render the text.

2015-03-04  Jer Noble  <jer.noble@apple.com>

        [Mac] YouTube playback at 1.5x speed has audible distortion
        https://bugs.webkit.org/show_bug.cgi?id=142280

        Reviewed by Eric Carlson.

        Use the high-quality AVAudioTimePitchAlgorithmSpectral algorithm for the 
        AVSampleBufferAudioRenderer rather than its default value of 
        AVAudioTimePitchAlgorithmTimeDomain.

        Drive-by fix:

        Might as well add support for MediaPlayer::setPreservesPitch() while we're
        changing the audio pitch algorithm. If preservesPitch() is false use the
        AVAudioTimePitchAlgorithmVarispeed algorithm in both AVFObjC-based media players
        (MediaPlayerPrivateAVFoundationObjC & MediaPlayerPrivateMediaSourceAVFObjC).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPreservesPitch):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setRateDouble): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPreservesPitch):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):

2015-03-04  Jer Noble  <jer.noble@apple.com>

        [MSE][EME][Mac] Calling close on a MediaKeysSession will cause many decoding errors to be emitted
        https://bugs.webkit.org/show_bug.cgi?id=142285

        Reviewed by Eric Carlson.

        When a MediaKeySession (backed by CDMSessionMediaSourceAVFObjC) is closed and the
        underlying AVStreamSession is invalidated, the decryption context for in-flight
        CMSampleBuffers is also invalidated, and the AVSampleBufferDisplayLayer will issue
        one error for each enqueued and un-displayed sample in its image-queue. -flush-ing
        the AVSampleBufferDisplayLayer is not enough, as the flush only takes effect
        asynchronously the next time the layer needs new samples.

        Add a workaround until framework-level support lands to fully flush enqueued and
        encrypted frames.

        When the CDMSessionMediaSOurceAVFObjC object recieves an error from the layer,
        check to see if the session has been stopped. If so, and if the error in question is
        one that indicates that the samples decryption context has been invalidated, suppress
        the error and instruct the sender to suppress the error as well. This workaround will
        be removed once real support for synchronous flushing lands in <rdar://problem/20027434.>

        Still, we'll make our best effort to flush undisplayed frames when our CDM session is
        invalidated. Move away from std::map and instead use HashMap to store the set of 
        AVSampleBufferAudioRenderers. This allows us to use C++11 style loops against just
        the HashMap's set of values.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys): Flush and set m_stopped.
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError): Check m_stopped and the
            error code and bail before issuing the error.
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError): Ditto.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener layerFailedToDecode:]): Drive-by fix. Check whether
            the layer is in the set of listened-to layers only back in the main thread; the
            listnener may have been unregistered by the time the main thread was called.
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): std::map -> HashMap.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flush): Added; call -flush on all the display
            layers and audio renderers.
        (WebCore::SourceBufferPrivateAVFObjC::layerDidReceiveError): Check if any clients
            asked to ignore the error, and if so, bail.
        (WebCore::SourceBufferPrivateAVFObjC::rendererDidReceiveError): Ditto.

2015-03-04  Alex Christensen  <achristensen@webkit.org>

        Update bindings tests after r181001.

        * bindings/scripts/test/JS/*.cpp:
        Class names changed to auto.

2015-03-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Missing dependency checking in DerivedSources.make for FeatureDefines.props
        https://bugs.webkit.org/show_bug.cgi?id=142284

        Reviewed by David Kilzer.

        Make DerivedSources.make understand its build dependency on FeatureDefines.props
        when building on Windows:
        1. Modify DerivedSources.make to declare a default dependency (on Windows)
           to $(WEBKIT_LIBRARIES)/tools/vsprops/FeatureDefines.props.
        2. Update the Windows script 'build-generated-files.pl' to specify the correct
           FeatureDefines{Cairo}.props value to use, depending on build environment.

        * DerivedSources.make:
        * WebCore.vcxproj/build-generated-files.pl:

2015-03-04  Darin Adler  <darin@apple.com>

        Make JavaScript binding get and set legacy event listener attributes directly
        https://bugs.webkit.org/show_bug.cgi?id=142282

        Reviewed by Sam Weinig.

        Test: fast/dom/legacy-event-handler-attributes.html

        This patch changes the JavaScript getters and setters for these attributes
        to work directly without requiring any functions in the C++ DOM implementation.
        A subsequent patch will remove the now-unused C++ DOM implementation.

        * bindings/js/JSEventListener.cpp:
        (WebCore::legacyEventListenerAttribute): Added.
        (WebCore::createEventListenerForLegacyAttribute): Added.
        (WebCore::setLegacyEventListenerAttribute): Added.
        (WebCore::legacyWindowEventListenerAttribute): Added.
        (WebCore::setLegacyWindowEventListenerAttribute): Added.

        * bindings/js/JSEventListener.h:
        (WebCore::createJSEventListenerForAttribute): Deleted.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall): Deleted.
        (LegacyEventListenerAttributeEventName): Added.
        (LegacyEventListenerAttributePrefix): Added.
        (GenerateImplementation): Use "auto" in lots of places to simplify the code
        generation. Replaced the old inlined code to deal with legacy event listener
        attributes with code that simply calls the new functions from JSEventLister.h.
        (GenerateCallWith): Use "auto".
        (GenerateConstructorDefinition): Ditto.

2015-03-03  Sam Weinig  <sam@webkit.org>

        [Content Extensions] Split parsing and compiling of content extensions into their own files
        https://bugs.webkit.org/show_bug.cgi?id=142259

        Reviewed by Anders Carlsson.

        Added new unit test:
            ContentFilterTest.Basic

        * WebCore.xcodeproj/project.pbxproj:
        Add new files (CompiledContentExtension.h/cpp, ContentExtensionCompiler.h/cpp, and ContentExtensionParser.h/cpp)

        * contentextensions/CompiledContentExtension.cpp: Added.
        * contentextensions/CompiledContentExtension.h: Added.
        Add new class for holding onto the compiled content extension itself. Make it ThreadSafeRefCounted so it is easy
        to move between threads which will be important in a subsequent patch where we enable compilation on a background
        thread.

        * contentextensions/ContentExtensionCompiler.cpp: Added.
        (WebCore::ContentExtensions::serializeActions):
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h: Added.
        Moving compilation to its own file. Was previously in ContentExtensionsBackend. This is necessary because
        we will want to be able to compile without the need of a backend.

        * contentextensions/ContentExtensionParser.cpp: Copied from contentextensions/ContentExtensionsManager.cpp.
        * contentextensions/ContentExtensionParser.h: Copied from contentextensions/ContentExtensionsManager.h.
        Renamed ContentExtensionsManager to ContentExtensionParser, since that is all it is doing.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::addContentExtension):
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeContentExtension):
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeAllContentExtensions):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL):
        (WebCore::ContentExtensions::ContentExtensionsBackend::serializeActions): Deleted.
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList): Deleted.
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeRuleList): Deleted.
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeAllRuleLists): Deleted.
        * contentextensions/ContentExtensionsBackend.h:
        Change the backend to use the new CompiledContentExtension and change the terminology to
        reference content extensions, rather than rule lists.

        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserContentFilter):
        (WebCore::UserContentController::removeUserContentFilter):
        (WebCore::UserContentController::removeAllUserContentFilters):
        Update for new names and change addUserContentFilter to explicitly compile the JSON
        rule list before handing it to the backend. In subsequent changes, addUserContentFilter
        should be changed to take the compiled content extension, and it should become the responsibility
        of the called (WebKit) to create them.

2015-03-04  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] the GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED should be wrapped by a ifdef
        https://bugs.webkit.org/show_bug.cgi?id=142274

        Reviewed by Carlos Garcia Campos.

        Don't handle scheduling queries if building against versions of
        GStreamer older than 1.2.0.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQueryWithParent):

2015-03-03  Yoav Weiss  <yoav@yoav.ws>

        Add a microtask abstraction
        https://bugs.webkit.org/show_bug.cgi?id=137496

        Reviewed by Sam Weinig.

        This patch adds a microtask abstraction: https://html.spec.whatwg.org/multipage/webappapis.html#microtask
        That abstraction is required in order to enable async loading of images,
        which is in turn required to enable support for the picture element, as well as
        to make sure that the order of properties set on HTMLImageElement has no implications.

        A similar patch was rolled back in r180914. This patch is an improved version.

        * WebCore.vcxproj/WebCore.vcxproj: Add MicroTask.{h,cpp} to the project.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Add MicroTaskTest.{h,cpp} to the project.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Add MicroTask.{h,cpp} to the project.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: Add MicroTaskTest.{h,cpp} to the project.
        * WebCore.xcodeproj/project.pbxproj: Add MicroTask{,Test}.{h,cpp} to the project.
        * dom/Document.h: Add WEBCORE_EXPORT to addConsoleMessage, so it can be used in MicroTaskTest that's in WebCoreTestSupport..
        * dom/MicroTask.h: Add a MicroTask interface class. Add a MicroTaskQueue singleton.
        (WebCore::MicroTask::~MicroTask):
        (WebCore::MicroTask::run): Run the microtask.
        * dom/MicroTask.cpp: Implement the MicroTaskQueue singleton.
        (WebCore::MicroTaskQueue::singleton): Get a singleton instance of MicroTaskQueue.
        (WebCore::MicroTaskQueue::queueMicroTask): Add a microtask to the queue.
        (WebCore::MicroTaskQueue::runMicroTasks): Run all the microtasks in the queue and clear it.
        * dom/ScriptRunner.cpp: Trigger running of all microtasks in queue.
        (WebCore::ScriptRunner::timerFired):
        * html/parser/HTMLScriptRunner.cpp: Trigger running of all microtasks in queue.
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::runScript):
        * testing/Internals.cpp: Add a method to queue a test microtask.
        (WebCore::Internals::queueMicroTask):
        * testing/Internals.h: Add a method to queue a test microtask.
        (WebCore::Internals::queueMicroTask):
        * testing/Internals.idl: Expose test microtask queueing to test JS.
        * testing/MicroTaskTest.cpp: Add a test class that implements a microtask and prints to the console when it runs.
        (WebCore::MicroTaskTest::run): Run the microtask
        (WebCore::MicroTaskTest::create): Create a test microtask.
        * testing/MicroTaskTest.h: Add a test class that implements a microtask.
        (WebCore::MicroTaskTest::run):
        (WebCore::MicroTaskTest::create):

2015-03-03  Brent Fulgham  <bfulgham@apple.com>

        Scroll snap points are not supported on the main frame
        https://bugs.webkit.org/show_bug.cgi?id=141973
        <rdar://problem/19938393>

        Reviewed by Simon Fraser.

        No new tests. Tests will be added when the animation behavior is finalized. Manual tests are attached to the bug.

        Update the ScrollingTreeFrameScrollingNodeMac class to implement the delegate interface needed by the
        ScrollController. This involves the following:
        1. Implement scrollOffsetOnAxis: Used by the AxisScrollAnimator to determine the current position of the ScrollableArea.
        2. Implement immediateScrollOnAxis: Used by the AxisScrollAnimator to scroll the ScrollableArea

        We also need to hold a copy of the snap points vector to send to the scrolling thread.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::convertToLayoutUnits): Added helper function to match Scroll Snap Points API.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateBeforeChildren): Recognize and react to changes to
        Scroll Snap Points on top-level frames.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Implement delegate method needed by the ScrollController.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollOnAxis): Ditto.
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Pass snap offsets to AxisScrollSnapAnimator constructor as references.
        (WebCore::ScrollController::updateScrollSnapPoints): Added. Used by ScrollingTreeFrameScrollingNodeMac to update scroll snap point
        settings in the scrolling thread.
        * platform/mac/AxisScrollSnapAnimator.h:
        * platform/mac/AxisScrollSnapAnimator.mm:
        (WebCore::toWheelEventStatus): Don't ignore the "MayBegin" or "Cancelled" event phases.
        (WebCore::AxisScrollSnapAnimator::AxisScrollSnapAnimator): Revise signature to take a reference to the layout units.
        (WebCore::AxisScrollSnapAnimator::scrollSnapAnimationUpdate): Handle the case where this method gets called from a thread
        when the scrollable area has already reached its final destination.
        (WebCore::AxisScrollSnapAnimator::beginScrollSnapAnimation): Handle the possibility that the snap offset point vector might be
        empty. Update method to account for m_snapOffsets being a value, instead of a pointer.

2015-03-03  Andy Estes  <aestes@apple.com>

        [Content Filtering] Separate unblock handling into its own class
        https://bugs.webkit.org/show_bug.cgi?id=142251

        Reviewed by Andreas Kling.

        Unblock handling is currently supported only for one type of content filter (WebFilterEvaluator) on one
        platform (iOS). Having its implementation in ContentFilter is making it difficult to support other filters and
        platforms, so let's separate unblock handling into its own class called ContentFilterUnblockHandler.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading): Passed a ContentFilterUnblockHandler to FrameLoaderClient::contentFilterDidBlockLoad.
        (WebCore::DocumentLoader::dataReceived): Ditto.
        * loader/FrameLoaderClient.h:
        * platform/ContentFilter.h:
        * platform/ContentFilterUnblockHandler.h: Copied from Source/WebCore/platform/ios/ContentFilterIOS.mm.
        (WebCore::ContentFilterUnblockHandler::clear):
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm: Renamed from Source/WebCore/platform/ios/ContentFilterIOS.mm.
        (WebCore::ContentFilterUnblockHandler::ContentFilterUnblockHandler):
        (WebCore::ContentFilterUnblockHandler::encode):
        (WebCore::ContentFilterUnblockHandler::decode):
        (WebCore::scheme):
        (WebCore::ContentFilterUnblockHandler::handleUnblockRequestAndDispatchIfSuccessful):
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::unblockHandler):
        (WebCore::ContentFilter::ContentFilter): Deleted.
        (WebCore::ContentFilter::encode): Deleted.
        (WebCore::ContentFilter::decode): Deleted.

2015-03-03  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Track localized name follows locale instead of primary language
        https://bugs.webkit.org/show_bug.cgi?id=142242
        rdar://problem/20000365

        Reviewed by Eric Carlson.

        * page/CaptionUserPreferencesMediaAF.cpp: (WebCore::trackDisplayName): Use the
        language for localization, as CFBundle does.

2015-03-03  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix.

        * WebCore.vcxproj/WebCoreIncludeCommon.props:
        Include contentextensions subdirectory.

2015-03-03  Alex Christensen  <achristensen@webkit.org>

        Prepare to use CSS selectors in content extensions.
        https://bugs.webkit.org/show_bug.cgi?id=142227

        Reviewed by Benjamin Poulain.

        Test: http/tests/usercontentfilter/css-display-none.html

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionActions.h: Added.
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Action::deserialize):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Action::Action):
        (WebCore::ContentExtensions::Action::type):
        (WebCore::ContentExtensions::Action::cssSelector):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::serializeActions):
        Put action descriptions into a compact format in a Vector 
        to be able to be put into one block of shared read-only memory.
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        Put an index of the beginning of the description into the NFA instead of the index of the rule
        because we will be sharing the descriptions of the actions and not the rules.
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForURL):
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionForURL): Deleted.
        Return a vector of actions to be able to do multiple actions for one URL.
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadTrigger):
        (WebCore::ContentExtensions::ExtensionsManager::loadAction):
        Added the css-display-none action type, which requires a selector.
        (WebCore::ContentExtensions::ExtensionsManager::loadRule):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::actionsForURL):
        (WebCore::UserContentController::actionForURL): Deleted.
        * page/UserContentController.h:

2015-03-03  Brent Fulgham  <bfulgham@apple.com>

        Move scroll animating functions from ScrollAnimator to ScrollController
        https://bugs.webkit.org/show_bug.cgi?id=142102
        <rdar://problem/20007161>

        Reviewed by Simon Fraser.

        Tested by platform/mac-wk2/tiled-drawing/scrolling/fast-scroll-mainframe-zoom.html.

        Do some refactoring of the various scrolling classes:
        1. Consolidate animation times to RunLoop::Timer instead of a combination of WebCore::Timer
           and CFRunLoopTimers. Do this for Scroll Snap Point and Rubberband animations.
        2. Move ScrollController from platform/mac to platform/cocoa to enable sharing with iOS.
        3. Move code from ScrollAnimator{Mac} -> ScrollController.
        4. Rename scrollOffsetInAxis -> scrollOffsetOnAxis
        5. Rename immediateScrollInAxis -> immediateScrollOnAxis

        * WebCore.xcodeproj/project.pbxproj: Move ScrollController to 'platform/cocoa'
        * page/mac/EventHandlerMac.mm: Make sure the scroll controller is notified of end-of-scroll
        events, just as is done for the "event not handled" case in EventHandler.cpp. 
        (WebCore::EventHandler::platformCompleteWheelEvent):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Remove timer and some delegate
        methods, now that ScrollController is controlling this state.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac): We no longer
        need to clean up the CFRunLoopTimer.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer): Make sure scroll
        state is updated after rubber band snap.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Add temporary stub needed
        until Bug1973 is completed.).
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollOnAxis): Ditto.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): Just call the ScrollController method.
        (WebCore::ScrollAnimator::handleWheelEvent): Ditto.
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers): Ditto.
        (WebCore::ScrollAnimator::scrollOffsetOnAxis): Renamed from scrollOffsetInAxis.
        (WebCore::ScrollAnimator::immediateScrollOnAxis): Renamed from immediateScrollInAxis.
        (WebCore::ScrollAnimator::scrollOffsetInAxis): Deleted.
        (WebCore::ScrollAnimator::immediateScrollInAxis): Deleted.
        (WebCore::ScrollAnimator::startScrollSnapTimer): Deleted.
        (WebCore::ScrollAnimator::stopScrollSnapTimer): Deleted.
        (WebCore::ScrollAnimator::horizontalScrollSnapTimerFired): Deleted.
        (WebCore::ScrollAnimator::verticalScrollSnapTimerFired): Deleted.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h: Copied from platform/mac/ScrollController.h.
        (WebCore::ScrollControllerClient::startSnapRubberbandTimer):
        (WebCore::ScrollControllerClient::stopSnapRubberbandTimer):
        (WebCore::ScrollControllerClient::startScrollSnapTimer):
        (WebCore::ScrollControllerClient::stopScrollSnapTimer):
        * platform/cocoa/ScrollController.mm: Copied from platform/mac/ScrollController.mm.
        (WebCore::ScrollController::ScrollController): Update to initialize new timers.
        (WebCore::ScrollController::handleWheelEvent): Update to handle Scroll Snap Point events.
        (WebCore::ScrollController::startSnapRubberbandTimer): Added.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Manage animation timers locally, do not
        require client to maintain timers.
        (WebCore::ScrollController::snapRubberBand): Ditto.
        (WebCore::ScrollController::processWheelEventForScrollSnap): Added. (Moved from ScrollAnimatorMac)
        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::startScrollSnapTimer): Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::stopScrollSnapTimer): Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::horizontalScrollSnapTimerFired): Ditto.
        (WebCore::ScrollController::verticalScrollSnapTimerFired): Ditto.
        (WebCore::ScrollController::scrollOffsetOnAxis): Moved from ScrollAnimatorMac.
        (WebCore::ScrollController::immediateScrollOnAxis): Ditto.
        * platform/mac/AxisScrollSnapAnimator.h: Rename methods from 'InAxis' to 'OnAxis'
        * platform/mac/AxisScrollSnapAnimator.mm:
        (WebCore::AxisScrollSnapAnimator::handleWheelEvent): Update for 'InAxis' to 'OnAxis' renaming.
        (WebCore::AxisScrollSnapAnimator::scrollSnapAnimationUpdate): Ditto.
        (WebCore::AxisScrollSnapAnimator::beginScrollSnapAnimation): Ditto.
        (WebCore::AxisScrollSnapAnimator::computeSnapDelta): Ditto.
        (WebCore::AxisScrollSnapAnimator::computeGlideDelta): Ditto.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Remove unused Rubberband timers (now that this is
        controlled in the ScrollController)
        (WebCore::ScrollAnimatorMac::startSnapRubberbandTimer): Deleted.
        (WebCore::ScrollAnimatorMac::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired): Deleted.
        * platform/mac/ScrollController.h: Removed.
        * platform/mac/ScrollController.mm: Removed.

2015-03-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180683.
        https://bugs.webkit.org/show_bug.cgi?id=142249

        Broke fast/css/acid2-pixel.html (Requested by ap on #webkit).

        Reverted changeset:

        "Setting any of the <object> element plugin controlling
        attributes does not have any affect."
        https://bugs.webkit.org/show_bug.cgi?id=141936
        http://trac.webkit.org/changeset/180683

2015-03-03  Dean Jackson  <dino@apple.com>

        Controls panel should have system blurry background
        https://bugs.webkit.org/show_bug.cgi?id=142154
        <rdar://problem/20000964>

        Reviewed by Simon Fraser.

        In order to replicate the system style of media controls
        on OS X and iOS, we need to expose a special -webkit-appearance.
        This patch adds the new property value, and implements
        the iOS part of the appearance, which is a blurry shaded
        background.

        Test: compositing/media-controls-bar-appearance.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Map the new
        keywords from ControlParts.

        * css/CSSValueKeywords.in: Add media-controls-light-bar-background
        and media-controls-dark-bar-background. Darin suggested they
        be sorted, so I did this at the same time.
        * platform/ThemeTypes.h: New ControlParts for the values, and
        sort the values since they need to be in sync with
        CSSValueKeywords.in.

        * platform/graphics/GraphicsLayer.h: Expose two new custom appearance
        values.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::layerTypeForCustomBackdropAppearance): Helper function.
        (WebCore::isCustomBackdropLayerType): Ditto.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Merge setting
        a system backdrop layer in with the code that swaps to/from tiled layers.
        (WebCore::GraphicsLayerCA::changeLayerTypeTo): New method that does what
        swapFromOrToTiledLayer implemented, but also allows us to change to a
        system backdrop layer.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:

        * platform/graphics/ca/PlatformCALayer.h: New layer types.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: For now expose these
        as regular backdrop layers.
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::updateCustomAppearance):

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Make sure to update
        custom appearance,
        (WebCore::RenderLayerBacking::updateCustomAppearance): New method.
        * rendering/RenderLayerBacking.h:

2015-03-03  Chris Dumez  <cdumez@apple.com>

        Access ApplicationCacheStorage global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=142239

        Reviewed by Anders Carlsson.

        Access ApplicationCacheStorage global instance via singleton() static
        member function as per WebKit coding style.

2015-03-03  Anders Carlsson  <andersca@apple.com>

        Try to fix the build.

        * platform/spi/cf/CFNetworkSPI.h:

2015-03-03  Timothy Horton  <timothy_horton@apple.com>

        <attachment> label can get very wide, doesn't wrap/truncate
        https://bugs.webkit.org/show_bug.cgi?id=142214
        <rdar://problem/19982499>

        Reviewed by Simon Fraser.

        Test: fast/attachment/attachment-label-highlight.html

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::labelTextColorForAttachment):
        (WebCore::AttachmentLayout::addLine):
        (WebCore::AttachmentLayout::layOutText):
        (WebCore::AttachmentLayout::AttachmentLayout):
        Make it possible to lay out multiple lines of label text.
        We lay out the whole string normally, but then only draw N (where N=1 for now,
        but is adjustable) of the lines. The remainder of the string is then
        merged into a single line, which is middle-truncated with an ellipsis
        and drawn in place of the N+1 line.

        (WebCore::addAttachmentLabelBackgroundRightCorner):
        (WebCore::addAttachmentLabelBackgroundLeftCorner):
        (WebCore::paintAttachmentLabelBackground):
        Wrap the label background around the multiple lines of text with curved edges.
        We run first down the right side of the label, determining whether to use
        concave or convex arcs based on the relative widths of adjacent lines.
        Then, we run back up the left side of the label doing the same thing.

        If the background rects of two lines are very similar (within the rounded rect radius),
        they will be expanded to the larger of the two, because otherwise the arcs
        look quite wrong.

        (WebCore::paintAttachmentLabel):
        Draw the label with CoreText directly instead of bothering with WebCore
        text layout primitives. There's no need, and it makes wrapping much more complicated.

        (WebCore::RenderThemeMac::paintAttachment):
        (WebCore::RenderThemeMac::paintAttachmentLabelBackground): Deleted.
        (WebCore::RenderThemeMac::paintAttachmentLabel): Deleted.

2015-03-03  Simon Fraser  <simon.fraser@apple.com>

        Avoid applying the clip-path when painting, if a layer also has a shape layer mask
        https://bugs.webkit.org/show_bug.cgi?id=142212

        Reviewed by Zalan Bujtas.

        After r180882 we translate clip-path into a composited shape mask when the layer
        is composited. However, we were also still applying the clip-path when painting
        the layer contents.
        
        Now, we set the GraphicsLayer bits GraphicsLayerPaintClipPath and GraphicsLayerPaintMask
        only for the m_maskLayer's painting. This translate into setting PaintLayerPaintingCompositingMaskPhase
        and PaintLayerPaintingCompositingClipPathPhase only when painting that same mask layer,
        rather than always. To ensure that masks and clip-path get applied for software paints,
        add shouldPaintMask() and shouldApplyClipPath() that return true for non-composited layers,
        and when doing a flattening paint.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): Use shouldApplyClipPath().
        Pull three chunks of code under a single "if (shouldPaintContent && !selectionOnly)" condition.
        The condition for paintChildClippingMaskForFragments() is changed slightly; we need to call this
        only when painting the clip-path/mask layer contents, but also only when there is no mask to fill
        the clipped area for us.
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::paintsWithClipPath): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateMaskingLayer): Be sure to set the GraphicsLayerPaintClipPath bit
        when having a mask forces us onto the painting path.

2015-03-03  Anders Carlsson  <andersca@apple.com>

        Use the correct display name for website data for local files
        https://bugs.webkit.org/show_bug.cgi?id=142228

        Reviewed by Dan Bernstein.

        * English.lproj/Localizable.strings:
        Add local file display name.

        * platform/spi/cf/CFNetworkSPI.h:
        Add kCFHTTPCookieLocalFileDomain declaration.

2015-03-03  Myles C. Maxfield  <mmaxfield@apple.com>

        BreakingContext cleanup
        https://bugs.webkit.org/show_bug.cgi?id=142146

        Reviewed by Dean Jackson.

        1. Use commitLineBreakAtCurrentWidth() instead of directly
        updating m_width and m_lineBreak, because the name makes the
        intent clearer.
        2. Remove duplicate function LineBreaker::nextSegmentBreak().
        3. lineStyle() takes care of inspecting RenderText's parent's
        style.
        4. Add FIXME to BreakingContext::initializeForCurrentObject()
        because it seems like we are ignoring first-line style for
        some properties.

        No new tests because there is no behavior change.

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak): Deleted.
        (WebCore::LineBreaker::nextSegmentBreak): Deleted.
        * rendering/line/LineBreaker.h:
        * rendering/line/LineInlineHeaders.h:
        (WebCore::lineStyle):

2015-03-03  Chris Dumez  <cdumez@apple.com>

        Make AudioContext suspendable when it is not rendering
        https://bugs.webkit.org/show_bug.cgi?id=142210
        <rdar://problem/19923085>

        Reviewed by Eric Carlson.

        Make AudioContext suspendable when it is not rendering to increase the
        likelihood of entering the PageCache for pages using WebAudio.

        This patch adds a state member to AudioContext with 3 possible states:
        Suspended / Running / Closed, as defined in the specification:
        http://webaudio.github.io/web-audio-api/#widl-AudioContext-state

        This state is used to decide if we can suspend the page or not. We
        can safely suspend if the AudioContext's state is suspended (did not
        start rendering) or closed (Stopped rendering).

        Note that this patch does not expose the AudioContext's state to the
        Web yet, even though it is exposed in the latest specification.

        Tests: fast/history/page-cache-closed-audiocontext.html
               fast/history/page-cache-running-audiocontext.html
               fast/history/page-cache-suspended-audiocontext.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::canSuspend):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::fireCompletionEvent):
        * Modules/webaudio/AudioContext.h:

2015-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use SoupMessage::starting instead of SoupSession::request-started
        https://bugs.webkit.org/show_bug.cgi?id=142164

        Reviewed by Sergio Villar Senin.

        SoupSession::request-started is deprecated in libsoup 2.50. Both
        signals are equivalent, but SoupMessage::starting is also emitted
        for resources loaded from the disk cache. This fixes web timing
        calculations for cached resources, since we were not initializing
        m_requestStart.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startingCallback):
        (WebCore::createSoupMessageForHandleAndRequest):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):

2015-03-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Synchronous XMLHttpRequests can time out when we reach the max connections limit
        https://bugs.webkit.org/show_bug.cgi?id=141508

        Reviewed by Sergio Villar Senin.

        Use SOUP_MESSAGE_IGNORE_CONNECTION_LIMITS flag when loading a
        synchronous message instead of increasing the maximum number of
        connections allowed if the soup version is recent enough.
        The current solution of increasing/decreasing the limits doesn't
        always work, because connections are not marked as IDLE in libsoup
        until the message is unqueued, but we don't wait for the message
        to be unqueued to finish our loads in WebKit, we finish them as
        soon as we have finished reading the stream. This causes that
        synchronous loads keep blocked in the nested main loop until the
        timeout of 10 seconds is fired and the load fails.
        Also marked WebCoreSynchronousLoader class as final, the virtual
        methods as override and removed the unsused method isSynchronousClient.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupMessageForHandleAndRequest):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::isSynchronousClient): Deleted.
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didReceiveBuffer):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::didReceiveAuthenticationChallenge):
        (WebCore::WebCoreSynchronousLoader::shouldUseCredentialStorage):

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

        [iOS] Disable -Wdeprecated-declaration warnings in WebVideoFullscreenInterfaceAVKit.mm

        Fixing the deprecations is tracked by: <rdar://problem/20018692>

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized):
        Ignore -Wdeprecated-declaration warnings via clang pragmas.

2015-03-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180902.
        https://bugs.webkit.org/show_bug.cgi?id=142205

        It broke scrolling in some cases. See bug 142202 for details.
        (Requested by bdash on #webkit).

        Reverted changeset:

        "Move scroll animating functions from ScrollAnimator to
        ScrollController"
        https://bugs.webkit.org/show_bug.cgi?id=142102
        http://trac.webkit.org/changeset/180902

2015-03-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180911.
        https://bugs.webkit.org/show_bug.cgi?id=142204

        The tests it added are crashing (Requested by bdash on
        #webkit).

        Reverted changeset:

        "Add a microtask abstraction"
        https://bugs.webkit.org/show_bug.cgi?id=137496
        http://trac.webkit.org/changeset/180911

2015-03-02  Yoav Weiss  <yoav@yoav.ws>

        Add a microtask abstraction
        https://bugs.webkit.org/show_bug.cgi?id=137496

        Reviewed by Sam Weinig.

        This patch adds a microtask abstraction: https://html.spec.whatwg.org/multipage/webappapis.html#microtask
        That abstraction is required in order to enable async loading of images,
        which is in turn required to enable support for the picture element, as well as
        to make sure that the order of properties set on HTMLImageElement has no implications.

        * WebCore.vcxproj/WebCore.vcxproj: Add MicroTask.{h,cpp} to the project.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Add MicroTaskTest.{h,cpp} to the project.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Add MicroTask.{h,cpp} to the project.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: Add MicroTaskTest.{h,cpp} to the project.
        * WebCore.xcodeproj/project.pbxproj: Add MicroTask{,Test}.{h,cpp} to the project.
        * dom/Document.h: Add WEBCORE_EXPORT to addConsoleMessage, so it can be used in MicroTaskTest that's in WebCoreTestSupport..
        * dom/MicroTask.h: Add a MicroTask interface class. Add a MicroTaskQueue singleton.
        (WebCore::MicroTask::~MicroTask):
        (WebCore::MicroTask::run): Run the microtask.
        * dom/MicroTask.cpp: Implement the MicroTaskQueue singleton.
        (WebCore::MicroTaskQueue::singleton): Get a singleton instance of MicroTaskQueue.
        (WebCore::MicroTaskQueue::queueMicroTask): Add a microtask to the queue.
        (WebCore::MicroTaskQueue::runMicroTasks): Run all the microtasks in the queue and clear it.
        * dom/ScriptRunner.cpp: Trigger running of all microtasks in queue.
        (WebCore::ScriptRunner::timerFired):
        * html/parser/HTMLScriptRunner.cpp: Trigger running of all microtasks in queue.
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::runScript):
        * testing/Internals.cpp: Add a method to queue a test microtask.
        (WebCore::Internals::queueMicroTask):
        * testing/Internals.h: Add a method to queue a test microtask.
        (WebCore::Internals::queueMicroTask):
        * testing/Internals.idl: Expose test microtask queueing to test JS.
        * testing/MicroTaskTest.cpp: Add a test class that implements a microtask and prints to the console when it runs.
        (WebCore::MicroTaskTest::run): Run the microtask
        (WebCore::MicroTaskTest::create): Create a test microtask.
        * testing/MicroTaskTest.h: Add a test class that implements a microtask.
        (WebCore::MicroTaskTest::run):
        (WebCore::MicroTaskTest::create):

2015-03-02  Jeremy Jones  <jeremyj@apple.com>

        RenderVideo should not paint the video frame when video is fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=142097

        Reviewed by Eric Carlson.

        For performance and correctness, RenderVideo should not paint the current video frame
        inline when video is fullscreen. This happens when snapshots are taken and can have a
        negative performance impact.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

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

        [iOS Media] Airplay button should be blue when active
        https://bugs.webkit.org/show_bug.cgi?id=142193

        Reviewed by Brent Fulgham.

        Add a blue form of the Airplay button that is used
        when we are actively displaying on another screen.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-wireless-playback-picker-button):
        (video::-webkit-media-controls-wireless-playback-picker-button:active):
        (video::-webkit-media-controls-wireless-playback-picker-button.playing):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus):

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

        Move scroll animating functions from ScrollAnimator to ScrollController
        https://bugs.webkit.org/show_bug.cgi?id=142102
        <rdar://problem/20007161>

        Reviewed by Simon Fraser.

        No change in functionality.
        
        Do some refactoring of the various scrolling classes:
        1. Consolidate animation times to RunLoop::Timer instead of a combination of WebCore::Timer
           and CFRunLoopTimers. Do this for Scroll Snap Point and Rubberband animations.
        2. Move ScrollController from platform/mac to platform/cocoa to enable sharing with iOS.
        3. Move code from ScrollAnimator{Mac} -> ScrollController.
        4. Rename scrollOffsetInAxis -> scrollOffsetOnAxis
        5. Rename immediateScrollInAxis -> immediateScrollOnAxis

        * WebCore.xcodeproj/project.pbxproj: Move ScrollController to 'platform/cocoa'
        * page/mac/EventHandlerMac.mm: Make sure the scroll controller is notified of end-of-scroll
        events, just as is done for the "event not handled" case in EventHandler.cpp. 
        (WebCore::EventHandler::platformCompleteWheelEvent):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Remove timer and some delegate
        methods, now that ScrollController is controlling this state.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac): We no longer
        need to clean up the CFRunLoopTimer.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::scrollOffsetOnAxis): Add temporary stub needed
        until Bug 141973 is completed.).
        (WebCore::ScrollingTreeFrameScrollingNodeMac::immediateScrollOnAxis): Ditto.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer): Deleted.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::stopSnapRubberbandTimer): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): Just call the ScrollController method.
        (WebCore::ScrollAnimator::handleWheelEvent): Ditto.
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers): Ditto.
        (WebCore::ScrollAnimator::scrollOffsetOnAxis): Renamed from scrollOffsetInAxis.
        (WebCore::ScrollAnimator::scrollOffsetInAxis): Deleted.
        (WebCore::ScrollAnimator::immediateScrollOnAxis): Renamed from immediateScrollInAxis.
        (WebCore::ScrollAnimator::immediateScrollInAxis): Deleted.
        (WebCore::ScrollAnimator::startScrollSnapTimer): Deleted.
        (WebCore::ScrollAnimator::stopScrollSnapTimer): Deleted.
        (WebCore::ScrollAnimator::horizontalScrollSnapTimerFired): Deleted.
        (WebCore::ScrollAnimator::verticalScrollSnapTimerFired): Deleted.
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h: Copied from platform/mac/ScrollController.h.
        * platform/cocoa/ScrollController.mm: Copied from platform/mac/ScrollController.mm.
        (WebCore::ScrollController::ScrollController): Update to initialize new timers.
        (WebCore::ScrollController::handleWheelEvent): Update to handle Scroll Snap Point events.
        (WebCore::ScrollController::startSnapRubberbandTimer): Added.
        (WebCore::ScrollController::stopSnapRubberbandTimer): Manage animation timers locally, do not
        require client to maintain timers.
        (WebCore::ScrollController::snapRubberBand): Ditto.
        (WebCore::ScrollController::processWheelEventForScrollSnap): Added. (Moved from ScrollAnimatorMac)
        (WebCore::ScrollController::updateScrollAnimatorsAndTimers): Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::startScrollSnapTimer): Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::stopScrollSnapTimer):  Ditto. Also updated to use RunLoop::Timer.
        (WebCore::ScrollController::horizontalScrollSnapTimerFired): Ditto.
        (WebCore::ScrollController::verticalScrollSnapTimerFired): Ditto.
        (WebCore::ScrollController::scrollOffsetOnAxis): Moved from ScrollAnimatorMac.
        (WebCore::ScrollController::immediateScrollOnAxis): Ditto.
        * platform/mac/AxisScrollSnapAnimator.h: Rename methods from 'InAxis' to 'OnAxis'
        * platform/mac/AxisScrollSnapAnimator.mm: Ditto.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Remove unused Rubberband timers (now that this is
        controlled in the ScrollController)
        (WebCore::ScrollAnimatorMac::startSnapRubberbandTimer): Deleted.
        (WebCore::ScrollAnimatorMac::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired): Deleted.
        * platform/mac/ScrollController.h: Removed.
        * platform/mac/ScrollController.mm: Removed.

2015-03-02  Mark Lam  <mark.lam@apple.com>

        The InspectorTimelineAgent should gracefully handle attempts to start more than once.
        <https://webkit.org/b/142189>

        Reviewed by Joseph Pecoraro.

        No new tests.  Unskipped an existing test that already asserts this.

        InspectorTimelineAgent::internalStop() already checks for redundant calls to it in
        case the InspectorTimelineAgent is already disabled. Similarly,
        InspectorTimelineAgent::internalStart() should check if the InspectorTimelineAgent
        is already enabled before proceeding to do work to enable it. Though wasteful,
        it is legal for clients of the InspectorTimelineAgent to invoke start on it more
        than once. Hence, this check is needed.

        This check fixes the debug assertion failure when running the
        inspector/timeline/debugger-paused-while-recording.html test. The test can now
        be unskipped.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart):

2015-03-02  Roger Fong  <roger_fong@apple.com>

        Update backgrounds of sliders for inline media controls on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=142188.
        <rdar://problem/20012413>

        Reviewed by Dean Jackson.

        Don’t use CSS to draw volume and timeline slider backgrounds.
        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (audio::-webkit-media-controls-panel .thumbnail-track):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb:active::-webkit-slider-thumb): Deleted.
        (audio::-webkit-media-controls-timeline:active::-webkit-slider-thumb,): Deleted.

        Draw volume and timeline slider backgrounds using 2d canvases.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleVolumeSliderInput):
        (Controller.prototype.addRoundedRect):
        (Controller.prototype.drawTimelineBackground):
        (Controller.prototype.drawVolumeBackground):
        (Controller.prototype.showControls):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.addRoundedRect): Deleted.

2015-03-01  Roger Fong  <roger_fong@apple.com>

        Update inline media element controls appearance Part 1.
        https://bugs.webkit.org/show_bug.cgi?id=142138.
        <rdar://problem/19997384>

        Reviewed by Dean Jackson.

        Update positioning, sizes, and background colors media control elements.
        Volume and timeline sliders will be drawn in a separate patch via 2d canvases.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-panel .mute-box):
        (video::-webkit-media-controls-volume-max-button):
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-panel .volume-box:active):
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline-container .hour-long-time): Deleted.

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

        REGRESSION (r180882): Build failure: Methods not marked override in GraphicsLayerCA.h
        <http://webkit.org/b/138684>

        Fixes the following build failures:

            In file included from WebKit2/WebProcess/WebPage/DrawingArea.cpp:39:
            In file included from WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:30:
            In file included from WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.h:29:
            WebCore.framework/PrivateHeaders/GraphicsLayerCA.h:123:33: error: 'setShapeLayerPath' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
                WEBCORE_EXPORT virtual void setShapeLayerPath(const Path&);
                                            ^
            In file included from WebKit2/WebProcess/WebPage/DrawingArea.cpp:30:
            In file included from WebKit2/WebProcess/WebPage/WebPage.h:46:
            In file included from WebKit2/WebProcess/Plugins/Plugin.h:31:
            WebCore.framework/PrivateHeaders/GraphicsLayer.h:390:18: note: overridden virtual function is here
                virtual void setShapeLayerPath(const Path&);
                             ^
            In file included from WebKit2/WebProcess/WebPage/DrawingArea.cpp:39:
            In file included from WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:30:
            In file included from WebKit2/WebProcess/WebPage/mac/GraphicsLayerCARemote.h:29:
            WebCore.framework/PrivateHeaders/GraphicsLayerCA.h:124:33: error: 'setShapeLayerWindRule' overrides a member function but is not marked 'override' [-Werror,-Winconsistent-missing-override]
                WEBCORE_EXPORT virtual void setShapeLayerWindRule(WindRule);
                                            ^
            In file included from WebKit2/WebProcess/WebPage/DrawingArea.cpp:30:
            In file included from WebKit2/WebProcess/WebPage/WebPage.h:46:
            In file included from WebKit2/WebProcess/Plugins/Plugin.h:31:
            WebCore.framework/PrivateHeaders/GraphicsLayer.h:393:18: note: overridden virtual function is here
                virtual void setShapeLayerWindRule(WindRule);
                             ^
            2 errors generated.

        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayer::setShapeLayerPath): Mark as override.
        (WebCore::GraphicsLayer::setShapeLayerWindRule): Ditto.

2015-03-01  Simon Fraser  <simon.fraser@apple.com>

        Make clip-path work on <video>, <canvas> etc.
        https://bugs.webkit.org/show_bug.cgi?id=138684

        Reviewed by Darin Adler.
        
        clip-path only worked in compositing layers on the painted contents of the layer,
        and failed to clip children. Fix this by translating the clip path into a Path
        which is set on a CA shape layer (for Mac and iOS), or painted into the
        RenderLayerBacking's mask layer. There are two code paths:

        1. clip-path which is a <basic-shape> or <geometry-box>, and no mask.
            Here we can use the optimal code path of converting the clip into a path
            that is put onto a CAShapeLayer, which is then used as a mask. There is no
            additional backing store.
        2. clip-path with an SVG reference, or clip-path combined with -webkit-mask:
            Here we have to allocate backing store for the mask layer, and paint the
            clip path (possibly with the mask).
        
        We add GraphicsLayer::Type::Shape, and add a getter for the layer type.

        Tests: compositing/masks/compositing-clip-path-and-mask.html
               compositing/masks/compositing-clip-path-mask-change.html
               compositing/masks/compositing-clip-path.html
               compositing/masks/reference-clip-path-on-composited.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer): Store the type in the layer so the getter can return it.
        (WebCore::GraphicsLayer::shapeLayerPath): Get and set the shape layer path.
        (WebCore::GraphicsLayer::setShapeLayerPath): Ditto.
        (WebCore::GraphicsLayer::shapeLayerWindRule): Get and set the shape layer wind rule.
        (WebCore::GraphicsLayer::setShapeLayerWindRule): Ditto.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::type): Expose the type.
        (WebCore::GraphicsLayer::supportsLayerType): Allow the cross-platform code to use
        shape layers when it knows they are available.
        (WebCore::GraphicsLayer::needsClippingMaskLayer): Deleted. This was never used.
        * platform/graphics/GraphicsLayerClient.h: Align the bits (helps avoid typos). Add a
        GraphicsLayerPaintClipPath phase.
        * platform/graphics/Path.h: Some exports since WK2 needs to encode Paths now.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::initialize): Make shape layers.
        (WebCore::GraphicsLayerCA::setShapeLayerPath): Setter for the shape path. Sadly we
        can't early return on unchanged paths yet.
        (WebCore::GraphicsLayerCA::setShapeLayerWindRule):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Updates for shape path
        and wind rule.
        (WebCore::GraphicsLayerCA::updateShape):
        (WebCore::GraphicsLayerCA::updateWindRule):
        * platform/graphics/ca/GraphicsLayerCA.h: Some new dirty bits for shape path and wind rule.
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Got rid of lots of m_layer.get().
        (PlatformCALayerMac::~PlatformCALayerMac):
        (PlatformCALayerMac::setNeedsDisplay):
        (PlatformCALayerMac::setNeedsDisplayInRect):
        (PlatformCALayerMac::removeFromSuperlayer):
        (PlatformCALayerMac::setSublayers):
        (PlatformCALayerMac::removeAllSublayers):
        (PlatformCALayerMac::appendSublayer):
        (PlatformCALayerMac::insertSublayer):
        (PlatformCALayerMac::replaceSublayer):
        (PlatformCALayerMac::adoptSublayers):
        (PlatformCALayerMac::addAnimationForKey):
        (PlatformCALayerMac::removeAnimationForKey):
        (PlatformCALayerMac::animationForKey):
        (PlatformCALayerMac::setMask):
        (PlatformCALayerMac::isOpaque):
        (PlatformCALayerMac::setOpaque):
        (PlatformCALayerMac::bounds):
        (PlatformCALayerMac::setBounds):
        (PlatformCALayerMac::position):
        (PlatformCALayerMac::setPosition):
        (PlatformCALayerMac::anchorPoint):
        (PlatformCALayerMac::setAnchorPoint):
        (PlatformCALayerMac::transform):
        (PlatformCALayerMac::setTransform):
        (PlatformCALayerMac::sublayerTransform):
        (PlatformCALayerMac::setSublayerTransform):
        (PlatformCALayerMac::setHidden):
        (PlatformCALayerMac::setGeometryFlipped):
        (PlatformCALayerMac::isDoubleSided):
        (PlatformCALayerMac::setDoubleSided):
        (PlatformCALayerMac::masksToBounds):
        (PlatformCALayerMac::setMasksToBounds):
        (PlatformCALayerMac::acceleratesDrawing):
        (PlatformCALayerMac::setAcceleratesDrawing):
        (PlatformCALayerMac::contents):
        (PlatformCALayerMac::setContents):
        (PlatformCALayerMac::setContentsRect):
        (PlatformCALayerMac::setMinificationFilter):
        (PlatformCALayerMac::setMagnificationFilter):
        (PlatformCALayerMac::backgroundColor):
        (PlatformCALayerMac::setBackgroundColor):
        (PlatformCALayerMac::setBorderWidth):
        (PlatformCALayerMac::setBorderColor):
        (PlatformCALayerMac::opacity):
        (PlatformCALayerMac::setOpacity):
        (PlatformCALayerMac::copyFiltersFrom):
        (PlatformCALayerMac::setName):
        (PlatformCALayerMac::setSpeed):
        (PlatformCALayerMac::setTimeOffset):
        (PlatformCALayerMac::contentsScale):
        (PlatformCALayerMac::setContentsScale):
        (PlatformCALayerMac::cornerRadius):
        (PlatformCALayerMac::setCornerRadius):
        (PlatformCALayerMac::setEdgeAntialiasingMask):
        (PlatformCALayerMac::shapeWindRule): New function.
        (PlatformCALayerMac::setShapeWindRule): Ditto.
        (PlatformCALayerMac::shapePath): Ditto.
        (PlatformCALayerMac::setShapePath): Ditto.
        (PlatformCALayer::isWebLayer):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::Path): nullptr.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithClipPath): Return true if the clip path is painted.
        (WebCore::RenderLayer::computeClipPath): Factor code that computes the clip path into this
        function, so we can call it from RenderLayerBacking too.
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::paintLayerContents): We only want to apply the clip path
        for painting when we're either painting a non-composited layer, or we're painting the
        mask layer of a composited layer. We in the latter case, we just want to fill the clip
        path with black, so re-use the paintChildClippingMaskForFragments() which does this.
        * rendering/RenderLayer.h: Align the bits, add PaintLayerPaintingCompositingClipPathPhase.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry): Move mask updating into its own function.
        (WebCore::RenderLayerBacking::updateMaskingLayerGeometry): If we're using the shape layer
        code path, compute the Path and set it and the wind rule on the mask layer.
        (WebCore::RenderLayerBacking::updateMaskingLayer): This is now more complex, as it has
        to deal with combinations of clip-path and mask, some of which allow for the shape layer
        mask, and we handle dynamic changes between these and painted masks.
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer): Include the GraphicsLayerPaintClipPath phase.
        (WebCore::RenderLayerBacking::paintIntoLayer): Map GraphicsLayerPaintClipPath to PaintLayerPaintingCompositingClipPathPhase.
        (WebCore::RenderLayerBacking::updateMaskLayer): Deleted.
        * rendering/RenderLayerBacking.h:

2015-03-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        [Cairo] Implement Path::addEllipse 
        https://bugs.webkit.org/show_bug.cgi?id=142144

        Reviewed by Gyuyoung Kim.

        Add support for addEllipse method for platforms using cairo.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addEllipse):

2015-03-01  Joonghun Park  <jh718.park@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr for ScrollAnimator
        https://bugs.webkit.org/show_bug.cgi?id=142143

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/ScrollAnimator.h:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/ScrollableArea.h:
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimator::create):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimator::create):

2015-02-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Move another declaration to WebFilterEvaluatorSPI.h
        https://bugs.webkit.org/show_bug.cgi?id=142066

        Reviewed by Andreas Kling.

        * platform/ios/ContentFilterIOS.mm:
        * platform/spi/cocoa/WebFilterEvaluatorSPI.h:

2015-03-01  Chris Dumez  <cdumez@apple.com>

        Make NotificationCenter / Notification suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142117
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Make NotificationCenter / Notification suspendable so that pages using
        them can enter the PageCache.

        NotificationCenter can safely be suspended if there are no pending
        permission requests. This required adding an
        "hasPendingPermissionRequests()" callback to the NotificationClient.

        Notification can safely be suspended if it is either idle (not showing
        yet) or closed.

        Tests: fast/history/page-cache-notification-non-suspendable.html
               fast/history/page-cache-notification-suspendable.html

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::canSuspend):
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::canSuspend):
        * Modules/notifications/NotificationClient.h:

2015-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        isContentEditable shouldn't trigger synchronous style recalc in most cases
        https://bugs.webkit.org/show_bug.cgi?id=129034

        Reviewed by Antti Koivisto.

        Avoid style recalc inside isContentEditable when the document doesn't contain -webkit-user-modify or
        -webkit-user-select: all. Instead, compute the value from contenteditable attributes in ancestors.
        However, still compute the editability from the style tree when it's up-to-date in order to avoid
        repeatedly walking up the DOM tree in a hot code path inside editing.

        Test: fast/dom/HTMLElement/dynamic-editability-change.html

        * css/CSSGrammar.y.in: No need to pass in "true" as we never call this function with false.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Calls parserSetUsesStyleBasedEditability as needed.
        (WebCore::parseKeywordValue): Passes around StyleSheetContents*.
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseFont): Ditto.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::StyleSheetContents): Initializes and copies m_usesStyleBasedEditability.

        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::parserSetUsesRemUnits): Removed the argument since it was always true.
        (WebCore::StyleSheetContents::parserSetUsesStyleBasedEditability): Added.
        (WebCore::StyleSheetContents::usesStyleBasedEditability): Added.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Added a FIXME as well as a comment explaining why we don't call
        setUsesStyleBasedEditability. Since Node::computeEditability triggers style recalc only when the flag
        is set to true, it's too late to update the flag here.
        (WebCore::Document::updateStyleIfNeeded): Uses a newly extracted needsStyleRecalc.
        (WebCore::Document::updateBaseURL): Preserves m_usesStyleBasedEditability as well as m_usesRemUnit.
        (WebCore::Document::usesStyleBasedEditability): Added. Returns true when inline style declarations or
        any active stylesheet uses -webkit-user-modify or -webkit-user-select: all. Flushing pending stylesheet
        changes here is fine because the alternative is to trigger a full blown style recalc.

        * dom/Document.h:
        (WebCore::Document::needsStyleRecalc): Added. Extracted from updateStyleIfNeeded.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::styleSheetsUseRemUnits): Deleted.
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets): Updates m_usesStyleBasedEditability
        as well as m_usesRemUnit.

        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::usesStyleBasedEditability): Added.
        (WebCore::DocumentStyleSheetCollection::setUsesStyleBasedEditability): Added.

        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle): Extracted from computeEditability.
        (WebCore::Node::computeEditability): When the style recalc is requested and the render tree is dirty,
        check if the document uses any CSS property that can affect the editability of elements. If it doesn't,
        compute the editability from contenteditable attributes in the anchors via matchesReadWritePseudoClass.
        Continue to use the style-based computation when the render tree isn't dirty to avoid the tree walk.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::editabilityFromContentEditableAttr): Extracted from matchesReadWritePseudoClass
        to be called in Node::computeEditability. Also made it return Editability instead of boolean.
        (WebCore::HTMLElement::matchesReadWritePseudoClass):
        * html/HTMLElement.h:

2015-03-01  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * WebCorePrefix.h: Provide some default definitions to help build on Windows
        machines with different application support libraries.

2015-02-28  Simon Fraser  <simon.fraser@apple.com>

        Viewport units should not dirty style just before we do layout
        https://bugs.webkit.org/show_bug.cgi?id=141682

        Reviewed by Zalan Bujtas.
        
        In documents using viewport units, we dirtied style every time layout changed
        the size of the document. This is nonsensical, because viewport units depend on the
        viewport size, not the document size.
        
        Move the style dirtying from layout() into availableContentSizeChanged(). Hook
        this up for WebKit1 by calling from -[WebFrameView _frameSizeChanged], and,
        since that causes availableContentSizeChanged() to be called for WK1 for the first
        time, protect the call to updateScrollbars() with a !platformWidget check.

        Covered by existing viewport unit tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::availableContentSizeChanged):
        (WebCore::FrameView::viewportSizeForCSSViewportUnits): Add a FIXME comment. Whether
        scrollbars are ignored depends on the value of the overflow property on the root element.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::availableContentSizeChanged):

2015-02-28  Andreas Kling  <akling@apple.com>

        [Cocoa] Purge SQLite page cache when under memory pressure.
        <https://webkit.org/b/142139>
        <rdar://problem/19997739>

        Reviewed by Pratik Solanki.

        Call out to sqlite3 cache purging SPI on Cocoa platforms when
        we need to free up some extra memory.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

2015-02-28  Simon Fraser  <simon.fraser@apple.com>

        FrameView::layoutTimerFired() should update style if needed before doing layout
        https://bugs.webkit.org/show_bug.cgi?id=141688

        Reviewed by Andreas Kling.

        If the style recalc timer has been scheduled to fire after the layout timer,
        when the layout timer fires, we might as well just do the style recalc
        too. The call to updateStyleIfNeeded() will cancel the pending style
        recalc timer.
        
        This doesn't have much impact on the number of layouts (measured via PLT)
        but seems like a reasonable thing to do.

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

2015-02-28  Simon Fraser  <simon.fraser@apple.com>

        Fullscreen video layers are off by one sometimes
        https://bugs.webkit.org/show_bug.cgi?id=142122
        rdar://problem/19878821

        Reviewed by Eric Carlson.

        Convert MediaPlayer::naturalSize() to return a FloatSize, since the natural size
        isn't always integral (because of preserving pixel aspect ratio etc). Fix all the media
        backends to use FloatSizes for natural size. Convert the video image drawing code
        paths to FloatSize, since naturalSize is used on the destination rect computation,
        and painting should be floating point anyway.
        
        Give the layer created by SourceBufferPrivateAVFObjC a name in debug builds.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::videoWidth):
        (WebCore::HTMLVideoElement::videoHeight):
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext):
        * html/HTMLVideoElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::videoFrameToImage):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayer::naturalSize):
        (WebCore::MediaPlayer::paint):
        (WebCore::MediaPlayer::paintCurrentFrameInContext):
        (WebCore::NullMediaPlayerPrivate::paint): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::naturalSize):
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::naturalSize):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::naturalSize):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::naturalSize):
        (WebCore::MediaPlayerPrivateQTKit::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateQTKit::paint):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::naturalSize):
        (WebCore::MockMediaPlayerMediaSource::paint):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        (WebCore::RenderVideo::paintReplaced):

2015-02-27  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL][GTK] Fix build break after r180790,180798
        https://bugs.webkit.org/show_bug.cgi?id=142127

        Reviewed by Gyuyoung Kim.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addEllipse):

2015-02-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel-layout: width: max-content; property might cause unnecessary scrollbar.
        https://bugs.webkit.org/show_bug.cgi?id=142065

        Reviewed by Simon Fraser.

        We should not pixelsnap (ceil in this case) logical coordinates during layout.
        Should this cause content to be partially cut off, we need to
        find the broken piece in the computation logic.

        Covered by the unskipped test.

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

2015-02-27  Ryosuke Niwa  <rniwa@webkit.org>

        Node::hasEditableStyle and isEditablePosition have too many options
        https://bugs.webkit.org/show_bug.cgi?id=142078

        Reviewed by Andreas Kling.

        Moved the code that dealt with accessibility to htmlediting.cpp from Node. This patch introduces
        new editing helper functions hasEditableStyle and isEditableNode for this purpose.

        Also removed UserSelectAllTreatment from isContentEditable's arguments in the favor of using
        newly extracted computeEditability in call sites that specify this option since isContentEditable
        is a public DOM API.

        No new tests since there should be no observable behavior changes.

        * accessibility/AXObjectCache.h: Removed the declaration of an undefined function.

        * dom/Element.cpp:
        (WebCore::Element::shouldUseInputMethod): Uses newly added computeEditability.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable): Ditto. No longer takes UserSelectAllTreatment as an argument.
        (WebCore::Node::isContentRichlyEditable): Ditto.
        (WebCore::Node::computeEditability): Renamed from hasEditableStyle to avoid the confusion with
        a helper function of the same name. Added ShouldUpdateStyle as an argument to optionally update
        style tree. Also returns tri-state Editability enum instead of returning a boolean based on
        the value of EditableLevel argument.
        (WebCore::Node::isEditableToAccessibility): Moved to htmlediting.cpp.
        (WebCore::Node::willRespondToMouseClickEvents): Uses newly added computeEditability.
        (WebCore::Node::rootEditableElement): Moved to htmlediting.cpp.

        * dom/Node.h: No longer includes EditingBoundary.h.
        (WebCore::Node::isContentEditable):
        (WebCore::Node::hasEditableStyle): No longer takes EditableType as an argument.
        (WebCore::Node::hasRichlyEditableStyle): Ditto.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Uses newly added isEditableNode.
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): Ditto.
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply): Ditto.
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::invalidateCaretRect): Ditto.
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply): Ditto.
        (WebCore::InsertNodeBeforeCommand::doUnapply): Ditto.
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply): Ditto.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::hasEditableStyle): Since this is the only caller of isEditablePosition
        which sets DoNotUpdateStyle, directly call hasEditableStyle on the container node instead. This was
        not possible prior to r180726 because isEditablePosition had to move out of tables.

        * editing/VisibleUnits.cpp:
        (WebCore::previousLeafWithSameEditability): Uses newly added hasEditableStyle.
        (WebCore::nextLeafWithSameEditability): Ditto.
        (WebCore::rootEditableOrDocumentElement): Extracted from previousLinePosition. Use helper functions
        in htmlediting.cpp instead of member functions of Node since they no longer support EditableType.
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):

        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot): Uses newly added hasEditableStyle.
        (WebCore::isEditableToAccessibility): Moved from Node.
        (WebCore::computeEditability): Extracted from isEditablePosition.
        (WebCore::hasEditableStyle): Added.
        (WebCore::isEditableNode): Added.
        (WebCore::isEditablePosition): Now calls computeEditability.
        (WebCore::isRichlyEditablePosition): No longer takes EditableType since that variant was never used.
        (WebCore::editableRootForPosition): Moved the code from Node::rootEditableElement.

        * editing/htmlediting.h:

2015-02-27  Chris Dumez  <cdumez@apple.com>

        Make ActiveDOMObject::canSuspend() pure virtual
        https://bugs.webkit.org/show_bug.cgi?id=142096
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Make ActiveDOMObject::canSuspend() pure virtual so that people at least
        try to provide an implementation for it. The default implementation was
        returning false unconditionally and thus was preventing pages from
        entering the PageCache.

2015-02-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180203 and r180210.
        https://bugs.webkit.org/show_bug.cgi?id=142116

        broke process suspension and tile map (Requested by thorton on
        #webkit).

        Reverted changesets:

        "Adopt CAMachPort-as-layer-contents"
        https://bugs.webkit.org/show_bug.cgi?id=141687
        http://trac.webkit.org/changeset/180203

        "Fix the !USE(IOSURFACE) build"
        http://trac.webkit.org/changeset/180210

2015-02-27  Sam Weinig  <sam@webkit.org>

        Add WebKit2 SPI to create a DOM File object
        https://bugs.webkit.org/show_bug.cgi?id=142109

        Reviewed by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:
        Make <WebCore/File.h> (and associated files) available to WebKit2.

2015-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [Subpixel] Subpixelize RenderListMarker
        https://bugs.webkit.org/show_bug.cgi?id=142093

        Reviewed by Zalan Bujtas.

        Use floats instead of ints.

        Test: fast/lists/rtl-marker.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::updateContent):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderListMarker.h:

2015-02-27  Timothy Horton  <timothy_horton@apple.com>

        <attachment> should be selected immediately upon click, and be drag/copyable upon click
        https://bugs.webkit.org/show_bug.cgi?id=142114
        <rdar://problem/19982520>

        Reviewed by Enrica Casucci.

        * css/html.css:
        (attachment):
        Make attachment use 'user-select: all' to act as a single click-to-select unit.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFocus): Deleted.
        * html/HTMLAttachmentElement.h:
        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::isFocused): Deleted.
        (WebCore::RenderAttachment::focusChanged): Deleted.
        * rendering/RenderAttachment.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintAttachment):
        Remove focus-related code; instead of focusing the element upon click,
        we get a selection including just the <attachment>, and everything
        behaves much more consistently (copy works, drag works, etc.).

2015-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Some MathML tests crash in RenderMathMLOperator::advanceForGlyph() or boundsForGlyph()
        https://bugs.webkit.org/show_bug.cgi?id=141371

        Reviewed by David Kilzer.

        Null checks.

        Covered by existing mathml tests.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::boundsForGlyph):
        (WebCore::RenderMathMLOperator::advanceForGlyph):
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator):

2015-02-27  Chris Dumez  <cdumez@apple.com>

        Make SourceBuffer ActiveDOMObject suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142108
        <rdar://problem/19923085>

        Reviewed by Jer Noble.

        Make SourceBuffer ActiveDOMObject suspendable if it is removed from its
        MediaSource and does not have any pending events. This makes it more
        likely for pages using SourceBuffer objects to go into the PageCache.

        Test: fast/history/page-cache-removed-source-buffer.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::canSuspend):
        * Modules/mediasource/SourceBuffer.h:

2015-02-26  Sam Weinig  <sam@webkit.org>

        Add support for canvas ellipse method
        https://bugs.webkit.org/show_bug.cgi?id=82791
        <rdar://problem/11159172>

        Reviewed by Dirk Schulze.

        Tests: fast/canvas/canvas-ellipse-360-winding.html
               fast/canvas/canvas-ellipse-circumference-fill.html
               fast/canvas/canvas-ellipse-circumference.html
               fast/canvas/canvas-ellipse-connecting-line.html
               fast/canvas/canvas-ellipse-negative-radius.html
               fast/canvas/canvas-ellipse-zero-lineto.html
               fast/canvas/canvas-ellipse.html

        * html/canvas/CanvasPathMethods.h:
        * html/canvas/CanvasPathMethods.cpp:
        (WebCore::CanvasPathMethods::lineTo):
        Convenience for passing a FloatPoint instead of two floats.

        (WebCore::normalizeAngles):
        Normalizes the angles as described in the HTML spec. Ensuring the startAngle
        is greater than 0 and less than 2pi, and the the endAngle is at most 2pi
        from the start angle.

        (WebCore::CanvasPathMethods::arc):
        - Renames some of the parameters to be clearer.
        - Normalizes the angles for consistency with ellipse.
        - Moves hasInvertibleTransform() higher in the function for consistency.

        (WebCore::CanvasPathMethods::ellipse): Added.

        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        Add ellipse(...).

        * platform/graphics/Path.h:
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addArc):
        Rename parameters for clarity and use a nullptr.

        (WebCore::Path::addEllipse):
        Added. Constructs an ellipse via a transformed arc.

2015-02-27  Enrica Casucci  <enrica@apple.com>

        Adding support for serializing HTMLAttachment elements.
        https://bugs.webkit.org/show_bug.cgi?id=142026

        Reviewed by Tim Horton.

        Test: editing/pasteboard/copy-paste-attachment.html

        Adding support to serialize the attachment element
        and properly handle it when converting a DOM range
        to NSAttributedString.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendCustomAttributes): Create new attribute
        for attachment element when serializating.
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::createFragmentFromMarkup): Remove the attribute from the attachment element
        when creating the fragment.
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::file): Added const to file() to
        use it in appendCustonAttributes where the element is a const reference.
        * html/HTMLAttachmentElement.h:
        * html/HTMLAttributeNames.in:

2015-02-27  Timothy Horton  <timothy_horton@apple.com>

        <attachment> should have an inactive style (gray in background)
        https://bugs.webkit.org/show_bug.cgi?id=142103
        <rdar://problem/19982486>

        Reviewed by Dan Bernstein.

        * rendering/RenderThemeMac.mm:
        (WebCore::attachmentLabelInactiveBackgroundColor):
        (WebCore::attachmentLabelInactiveTextColor):
        (WebCore::RenderThemeMac::paintAttachmentLabelBackground):
        (WebCore::RenderThemeMac::paintAttachmentLabel):
        Use a gray background and gray text when the selection containing the
        attachment isn't focused and active.

2015-02-27  Brady Eidson  <beidson@apple.com>

        Add a "block-cookies" rule to the user content filter.
        https://bugs.webkit.org/show_bug.cgi?id=142105

        Reviewed by Alex Christensen.

        Tests: http/tests/usercontentfilter/block-cookies-basic.html
               http/tests/usercontentfilter/block-cookies-send.html

        * contentextensions/ContentExtensionRule.h:

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionForURL):
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL): Deleted.
        * contentextensions/ContentExtensionsBackend.h:

        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadAction):

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

        * page/UserContentController.cpp:
        (WebCore::UserContentController::actionForURL):
        (WebCore::UserContentController::contentFilterBlocksURL): Deleted.
        * page/UserContentController.h:

2015-02-27  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Unreviewed build fix.

        * platform/graphics/BitmapImage.h:
        * platform/win/BitmapInfo.h:
        Added WEBCORE_EXPORT.

2015-02-27  Timothy Horton  <timothy_horton@apple.com>

        <attachment>'s label baseline should match that of the surrounding text
        https://bugs.webkit.org/show_bug.cgi?id=142099
        rdar://problem/19982495

        Reviewed by Dan Bernstein.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::baselinePosition):
        * rendering/RenderAttachment.h:
        Override baselinePosition and retrieve it from RenderTheme.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::attachmentBaseline):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::AttachmentLayout::AttachmentLayout):
        (WebCore::RenderThemeMac::attachmentBaseline):
        Plumb the label baseline from AttachmentLayout to RenderAttachment.

2015-02-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180752.
        https://bugs.webkit.org/show_bug.cgi?id=142098

        Causes 10 SVG test failures on Windows. (Requested by
        bfulgham_ on #webkit).

        Reverted changeset:

        "Cache glyph widths to GlyphPages"
        https://bugs.webkit.org/show_bug.cgi?id=142028
        http://trac.webkit.org/changeset/180752

2015-02-27  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build by defining EAGL_IOSURFACE macro before including <OpenGLES/EAGLPrivate.h>

        * platform/spi/ios/OpenGLESSPI.h:  Define EAGL_IOSURFACE macro
        until header refactoring is completed.

2015-02-27  Chris Dumez  <cdumez@apple.com>

        MediaSource should be suspendable when closed
        https://bugs.webkit.org/show_bug.cgi?id=142089
        <rdar://problem/19923085>

        Reviewed by Jer Noble.

        Make MediaSource ActiveDOMObject suspendable when it is in closed state
        and it has no pending events. This increases the likelihood of pages
        using MediaSource to enter the PageCache.

        Tests: fast/history/page-cache-media-source-closed-2.html
               fast/history/page-cache-media-source-closed.html
               fast/history/page-cache-media-source-opened.html

2015-02-27  Andreas Kling  <akling@apple.com>

        Use NeverDestroyed for JS wrapper owners.
        <https://webkit.org/b/142090>

        Reviewed by Chris Dumez.

        Using NeverDestroyed puts these objects in BSS which is preferable
        since that prevents them from pinning down entire malloc pages forever.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL.

        * bindings/scripts/test/JS/*: Rebaseline bindings tests for this change.

2015-02-27  Chris Dumez  <cdumez@apple.com>

        Make IDBDatabase / IDBRequest suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142076
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Make IDBDatabase / IDBRequest suspendable under certain conditions to
        make it more likely for pages using indexeddb to enter the PageCache.

        IDBDatabase is safely suspendable if the database is closed. IDBRequest
        is safely suspendable if the request no longer has any pending activity
        (i.e. state is DONE and success / failure handler was called). We may
        be able to do better later but this is the bare minimum for now.

        Tests: fast/history/page-cache-indexed-closed-db.html
               fast/history/page-cache-indexed-opened-db.html

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::closeConnection):
        (WebCore::IDBDatabase::enqueueEvent):
        (WebCore::IDBDatabase::canSuspend):
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::canSuspend):
        * Modules/indexeddb/IDBRequest.h:

2015-02-27  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary DatabaseManager::hasOpenDatabases() in PageCache::canCachePageContainingThisFrame()
        https://bugs.webkit.org/show_bug.cgi?id=142052

        Reviewed by Andreas Kling.

        Drop WebDatabase special-handling from PageCache::canCachePageContainingThisFrame().
        DatabaseContext is already an ActiveDOMObject and DatabaseContext::canSuspend() was
        returning false so pages using WebDatabase would never enter the PageCache anyway.

        This patch also overrides ActiveDOMObject::canSuspend() in DatabaseContext to only
        return false when there are open databases. This check is now equivalent to the one
        that was in PageCache.

        An issue that remains is that DatabaseContext::m_hasOpenDatabases is never reset
        to false so once a page opened a database, it will never be page-cacheable. This
        will be taken care of separately though.

        Test: fast/history/page-cache-webdatabase-opened-db.html

        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::canSuspend):
        * Modules/webdatabase/DatabaseContext.h:
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::hasOpenDatabasesKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2015-02-27  Alex Christensen  <achristensen@webkit.org>

        Compile DFA to bytecode.
        https://bugs.webkit.org/show_bug.cgi?id=142031

        Reviewed by Benjamin Poulain.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::nextState): Deleted.
        (WebCore::ContentExtensions::DFA::actions): Deleted.
        * contentextensions/DFA.h:
        (WebCore::ContentExtensions::DFA::size):
        (WebCore::ContentExtensions::DFA::nodeAt):
        * contentextensions/DFABytecode.h: Added.
        (WebCore::ContentExtensions::instructionSizeWithArguments):
        * contentextensions/DFABytecodeCompiler.cpp: Added.
        (WebCore::ContentExtensions::append):
        (WebCore::ContentExtensions::set32Bits):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitAppendAction):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitJump):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitCheckValue):
        (WebCore::ContentExtensions::DFABytecodeCompiler::emitTerminate):
        (WebCore::ContentExtensions::DFABytecodeCompiler::reserveBufferCapacity):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compileNode):
        (WebCore::ContentExtensions::DFABytecodeCompiler::compile):
        * contentextensions/DFABytecodeCompiler.h: Added.
        (WebCore::ContentExtensions::DFABytecodeCompiler::DFABytecodeCompiler):
        * contentextensions/DFABytecodeInterpreter.cpp: Added.
        (WebCore::ContentExtensions::getBits):
        (WebCore::ContentExtensions::DFABytecodeInterpreter::interpret):
        * contentextensions/DFABytecodeInterpreter.h: Added.
        (WebCore::ContentExtensions::DFABytecodeInterpreter::DFABytecodeInterpreter):

2015-02-27  Zalan Bujtas  <zalan@apple.com>

        Use after free in WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle
        https://bugs.webkit.org/show_bug.cgi?id=138366

        Reviewed by Dave Hyatt.

        This patch ensures that we clean up RenderNamedFlowFragment::m_renderObjectRegionStyle when embedded flow content is getting destroyed.

        In m_renderObjectRegionStyle hash map, we store style information about the named flow's descendant children.
        When a child is being detached from the tree, it removes itself from this hashmap.
        We do it by traversing up on the ancestor chain and call removeFlowChildInfo() on the parent flow.
        However in case of embedded flows (for example multicolumn content inside a region), we need to check whether the parent flow
        is inside a flow too and continue the cleanup accordingly.

        Test: fast/regions/region-with-multicolumn-embedded-crash.html

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

2015-02-27  Brady Eidson  <beidson@apple.com>

        Add API to remove a single content filter.
        <rdar://problem/19977764> and https://bugs.webkit.org/show_bug.cgi?id=142088

        Reviewed by Sam Weinig.

        * page/UserContentController.cpp:
        (WebCore::UserContentController::removeUserContentFilter):
        * page/UserContentController.h:

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove remaining SafariTheme cruft
        https://bugs.webkit.org/show_bug.cgi?id=142075

        Reviewed by Anders Carlsson.

        Remove reference to SafariTheme-switching preference.

        Tested by existing layout tests.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * config.h:
        * page/Settings.cpp:
        (WebCore::Settings::fontRenderingMode):
        (WebCore::Settings::setShouldPaintNativeControls): Deleted.
        * page/Settings.h:
        (WebCore::Settings::shouldPaintNativeControls): Deleted.
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarTheme::nativeTheme):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderTheme::themeForPage):

2015-02-27  Myles C. Maxfield  <mmaxfield@apple.com>

        Add comment about CSS value name mangling

        Unreviewed

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

2015-02-27  Antti Koivisto  <antti@apple.com>

        Cache glyph widths to GlyphPages
        https://bugs.webkit.org/show_bug.cgi?id=142028

        Reviewed by Andreas Kling.

        Currently we have a separate cache in Font for glyph widths. In practice we always need
        the widths so we can just cache them in GlyphPages. This simplifies the code and removes
        a per-character hash lookup from WidthIterator.

        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::initCharWidths):
        (WebCore::Font::platformGlyphInit):
        (WebCore::createAndFillGlyphPage):
        (WebCore::Font::computeWidthForGlyph):

            Rename to make it clear this doesn't cache.

        (WebCore::GlyphPage::setGlyphDataForIndex):

            Initialize the width.
            This could go to GlyphPage.cpp if we had one.

        * platform/graphics/Font.h:
        (WebCore::Font::glyphZeroWidth):
        (WebCore::Font::isZeroWidthSpaceGlyph):
        (WebCore::Font::zeroGlyph): Deleted.
        (WebCore::Font::setZeroGlyph): Deleted.
        (WebCore::Font::widthForGlyph): Deleted.
        * platform/graphics/FontCascade.cpp:
        (WebCore::offsetToMiddleOfGlyph):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForCharacter):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphData::GlyphData):

            Return width too as part of GlyphData.

        (WebCore::GlyphPage::glyphDataForIndex):
        (WebCore::GlyphPage::setGlyphDataForCharacter):
        (WebCore::GlyphPage::setGlyphDataForIndex):
        (WebCore::GlyphPage::GlyphPage):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

            No need to lookup width separately now.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::advanceForGlyph):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::missingGlyphForFont):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFont):

2015-02-26  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix after r180717.

        * Modules/webdatabase/DatabaseThread.cpp: (WebCore::DatabaseUnpauseTask::doPerformTask):

2015-02-26  Ryosuke Niwa  <rniwa@webkit.org>

        isEditablePosition and related functions shouldn't move position out of table
        https://bugs.webkit.org/show_bug.cgi?id=129200

        Reviewed by Darin Adler.

        This patch removes the legacy editing position for elements display: table in its computed style.
        Previously, we used (table, 0) and (table, !0) to denote positions immediately before and after
        such an element for historical reasons. This forced us to update the style tree before computing
        the editability of a position because we have to check the editability of the position outside
        the element with display: table if the position was using such a legacy editing position.
        e.g. if a table was not editable (contenteditable=false), the position before the table (table, 0)
        should still be considered editable if the parent node of the table was editable.

        This patch replaces such a legacy editing position by using modern position types:
        PositionIsBeforeAnchor and PositionIsAfterAnchor.

        No new tests since there should be no change in the user perceived editing operations.

        * dom/Position.cpp:
        (WebCore::Position::previous): Setup the node and the offset correctly when the original position's
        type is PositionIsBeforeAnchor. Also return a position before or after node when the node we found
        is "atomic" (e.g. input, img, br, etc...) or it's a table. This avoids creating a legacy editing
        position inside a table.
        (WebCore::Position::next): Ditto.
        (WebCore::Position::atStartOfTree): Use atFirstEditingPositionForNode, which takes care of all types
        of positions.
        (WebCore::Position::atEndOfTree): Ditto.
        (WebCore::Position::downstream): Return a position before a node instead of a legacy editing position
        for an atomic element or a table element as done in the equivalent code in Position::upstream.
        (WebCore::Position::isCandidate): Don't treat a position inside a table to be a candidate. e.g.
        (table, 1) when there are more than two children of the table.

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position): PositionIterator internally uses legacy editing
        positions. So convert it to a modern position by returning a position before or after a table here.
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection): Check that the unsplittable element we found
        is actually empty before executing the simple code path for an empty unsplittable element. Without
        this check, block formatting a table element will fail.

        * editing/htmlediting.cpp:
        (WebCore::isEditablePosition): Use containerNode instead of deprecatedNode because the editability
        of a position before or after an element is determined by its parent, not the element itself.
        (WebCore::isAtUnsplittableElement): Ditto.
        (WebCore::isRichlyEditablePosition): Ditto. Removed the code that moved the starting node out of
        an element with display: table. This is the code removal for which this patch was made.
        (WebCore::editableRootForPosition): Ditto.

2015-02-26  Timothy Horton  <timothy_horton@apple.com>

        Implement <attachment> element appearance on Mac
        https://bugs.webkit.org/show_bug.cgi?id=142023

        Reviewed by Dean Jackson.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/html.css:
        (attachment):
        * platform/ThemeTypes.h:
        Add a new -webkit-appearance value, attachment.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFile):
        Let the renderer know when the file changes (so it can relayout and repaint).

        (WebCore::HTMLAttachmentElement::filePath):
        (WebCore::HTMLAttachmentElement::fileName):
        * html/HTMLAttachmentElement.h:
        Handy acccessors for the full path and the name of the file.

        * platform/spi/mac/IconServicesSPI.h: Added.
        * platform/spi/mac/LaunchServicesSPI.h: Added.
        Add some IconServices and LaunchServices SPI headers.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::RenderAttachment):
        Don't have a default intrinsic size; we'll adjust in layout().

        (WebCore::RenderAttachment::isSelected):
        (WebCore::RenderAttachment::isFocused):
        (WebCore::RenderAttachment::isSelectedOrFocused):
        Factor out from paintReplaced().

        (WebCore::RenderAttachment::layout):
        Use RenderTheme to compute the intrinsic size of this attachment.

        (WebCore::RenderAttachment::paintReplaced):
        Use RenderTheme to paint the attachment.

        (WebCore::RenderAttachment::representedFileChanged):
        When the represented file changes, we need to recompute the intrinsic size and repaint.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustAttachmentStyle):
        (WebCore::RenderTheme::paintAttachment):
        Plumb through the attachment appearance.

        * rendering/RenderAttachment.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintAttachment):
        (WebCore::RenderTheme::attachmentIntrinsicSize):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::attachmentIconBackgroundColor):
        (WebCore::attachmentIconBorderColor):
        (WebCore::AttachmentLayout):
        AttachmentLayout lays out the innards of the RenderThemeMac attachment
        presentation: an icon with an optional bordered background, with a label
        underneath it with an optional background.

        (WebCore::RenderThemeMac::attachmentIntrinsicSize):
        (WebCore::paintAttachmentIconBackground):
        (WebCore::paintAttachmentIcon):
        (WebCore::RenderThemeMac::paintAttachmentLabelBackground):
        (WebCore::RenderThemeMac::paintAttachmentLabel):
        (WebCore::RenderThemeMac::paintAttachment):
        Paint the attachment element. Paint the optional backgrounds (and swap
        out the text color) if the element is selected/focused.

2015-02-26  Doug Russell  <d_russell@apple.com>

        AX: Expose caret browsing preference to accessibility API
        https://bugs.webkit.org/show_bug.cgi?id=141862

        Reviewed by Chris Fleizach.

        Exposing the caret browsing setting on WebCore::Frame via the accessibility API would allow assistive tech apps to enable it contextually (for example, when the assistive tech app is running).
        Enabling caret browsing when assistive tech apps are running greatly improves the reliability of keyboard navigation on the web. Most especially in cases where selection would be disrupted by focus events.

        Tests: platform/mac/accessibility/caret-browsing-arrow-nav.html
               platform/mac/accessibility/caret-browsing-attribute.html
               platform/mac/accessibility/caret-browsing-tab-selection.html

        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::caretBrowsingEnabled):
        (WebCore::AccessibilityObject::setCaretBrowsingEnabled):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetTestValue:forAttribute:]):

2015-02-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary create() factory functions
        https://bugs.webkit.org/show_bug.cgi?id=142039

        Reviewed by Chris Dumez.

        Clean up remaining JSCryptoKeySerializationJWK::create, HTMLMediaSession::create,
        and DatabaseUnpauseTask::create.

        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
        (WebCore::DatabaseThread::setPaused):
        (WebCore::DatabaseUnpauseTask::create): Deleted.
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::importKey):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::create): Deleted.
        * html/HTMLMediaSession.h:

2015-02-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Save Console Evaluations into Command Line variables $1-$99 ($n)
        https://bugs.webkit.org/show_bug.cgi?id=142061

        Reviewed by Timothy Hatcher.

        * inspector/CommandLineAPIModuleSource.js:
        Replace $1-$4 "inspected objects" with $1-$99 "saved results".

        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::JSCommandLineAPIHost::inspectedObject):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::InspectableObject::get):
        (WebCore::CommandLineAPIHost::addInspectedObject):
        (WebCore::CommandLineAPIHost::inspectedObject):
        (WebCore::CommandLineAPIHost::clearInspectedObjects): Deleted.
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIHost.idl:
        Since we now just save the single $0 inspected object, eliminate
        keeping track of a list of 5 values.

2015-02-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary create() factory functions in CDMFoo, NamedNodeMap
        https://bugs.webkit.org/show_bug.cgi?id=141902

        Reviewed by Darin Adler.

        Create instance using std::make_unique<> in CDMFactory directly. To do that,
        CDMFactory uses lambdas. Additionally this patch removes NamedNodeMap::create() as well.

        No new tests, no behavior changes.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/CDMPrivateClearKey.h:
        (WebCore::CDMPrivateClearKey::CDMPrivateClearKey):
        (WebCore::CDMPrivateClearKey::create): Deleted.
        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h:
        (WebCore::CDMPrivateMediaPlayer::create): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::attributes):
        * dom/NamedNodeMap.h:
        (WebCore::NamedNodeMap::NamedNodeMap):
        (WebCore::NamedNodeMap::create): Deleted.
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        (WebCore::CDMPrivateMediaSourceAVFObjC::create): Deleted.

2015-02-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Move WebFilterEvaluator and NEFilterSource declarations to SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=142062

        Reviewed by Daniel Bates.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/ContentFilterMac.mm:
        * platform/spi/cocoa/NEFilterSourceSPI.h: Added.
        * platform/spi/cocoa/WebFilterEvaluatorSPI.h: Added.

2015-02-26  Anders Carlsson  <andersca@apple.com>

        Add API to remove all website data for the given data records
        https://bugs.webkit.org/show_bug.cgi?id=142060

        Reviewed by Beth Dakin.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeResourcesWithOrigins):
        New function that removes all resources that match the set of origins in a given session.

2015-02-26  Chris Dumez  <cdumez@apple.com>

        Rename DatabaseManager::manager() to DatabaseManager::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=142054

        Reviewed by Ryosuke Niwa.

        Rename DatabaseManager::manager() to DatabaseManager::singleton() as
        per coding style and use WTF::NeverDestroyed.

        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::~DatabaseContext):
        (WebCore::DatabaseContext::stopDatabases):
        (WebCore::DatabaseContext::databaseExceededQuota):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::singleton):
        (WebCore::DatabaseManager::manager): Deleted.
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore::DatabaseManager::~DatabaseManager): Deleted.
        * Modules/webdatabase/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didExceedQuota):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):

2015-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(GEOLOCATION) build after r180533
        https://bugs.webkit.org/show_bug.cgi?id=142053

        Reviewed by Chris Dumez.

        * Modules/geolocation/GeoNotifier.cpp:
        * Modules/geolocation/GeoNotifier.h:

2015-02-26  Dean Jackson  <dino@apple.com>

        [iOS Media] incorrect front padding on time values
        https://bugs.webkit.org/show_bug.cgi?id=142027
        <rdar://problem/19960790>

        Reviewed by Brent Fulgham.

        My last commit was updating the OS X file,
        not the iOS file.

        We don't want to prefix times with a "0".

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.formatTime):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.formatTime):

2015-02-26  Mark Lam  <mark.lam@apple.com>

        Rolling out r180602, r180608, r180613, r180617, r180671.
        <https://webkit.org/b/141990>

        Not reviewed.

        The r180602 solution does result in more work for GC when worker
        threads are in use.  Filip is uncomfortable with that.
        The EFL and GTK ports also seem to be unhappy with this change.
        Rolling out while we investigate.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        This patch implements initial parsing support for the -apple-trailing-word CSS property.
        This property has two possible (mutually exclusive) values: auto and
        -apple-partially-balanced. This property is inherited.

        The work for this property is behind the ENABLE(CSS_TRAILING_WORD) preprocessor define.

        This is an internal property that will allow us to control line breaking behavior for
        short paragraphs.

        Note that, because of the implementation of cssValueKeywordID() in CSSParser.cpp,
        the new value must be implemented as -webkit-partially-balanced. Using the -apple-
        prefix will work, but if you getComputedStyle(), it will return the -webkit- prefixed
        version.

        Test: platform/mac/fast/text/trailing-word-parse.html

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Turn internal representation into a
        CSS value.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Updated for new keyword property / value
        pair.
        (WebCore::isKeywordPropertyID): New property is a keyword property.
        (WebCore::CSSParser::parseValue): Use the keyword property codepath.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Convert to and from the internal
        representation and CSS values.
        (WebCore::CSSPrimitiveValue::operator TrailingWord):
        * css/CSSPropertyNames.in: New property.
        * css/CSSValueKeywords.in: New value.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Can't use SimpleLineLayout for this.
        * rendering/style/RenderStyle.h: Getter, setter and initial value.
        * rendering/style/RenderStyleConstants.h: Internal data type.
        * rendering/style/StyleRareInheritedData.h: One bit to control this style property.
        * rendering/style/StyleRareInheritedData.cpp: Update constructors and operators.

2015-02-26  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix a accidental deletion from r178674.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        Return the fake WebGL context.

2015-02-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Cleanup RenderSVGResourceClipper class.
        https://bugs.webkit.org/show_bug.cgi?id=142032.

        Reviewed by Darin Adler.
        
        This is a follow up for r180643: <http://trac.webkit.org/changeset/180643>.
        It includes cleanup for RenderSVGResourceClipper class.

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceClipper.h: Change ClipperData to be a
        typedef instead of a class and rename it to ClipperMaskImage. The purpose
        of having it a class even though it includes only one member was because
        we wanted it to be WTF_MAKE_FAST_ALLOCATED. We do not need to allocate it
        as a separate object on the heap anymore.
        
        (WebCore::RenderSVGResourceClipper::addRendererToClipper): Instead of doing
        double hash table lookups by calling HashMap::contains() and then HashMap::get(),
        we can use HashMap::add() instead.

2015-02-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Setting any of the <object> element plugin controlling attributes does not have any affect.
        https://bugs.webkit.org/show_bug.cgi?id=141936.

        Reviewed by Zalan Bujtas.

        When setting any of the <object> element plugin controlling attributes
        dynamically we need to mark the the element to be dirty by calling
        setNeedsStyleRecalc(), so it has to recreate its renderer when needed.
        
        Test: svg/as-object/svg-in-object-dynamic-attribute-change.html

        * dom/Element.h: Delete unimplemented function.
        
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute): Dirty the element by calling
        setNeedsStyleRecalc() when one of the plugin controlling attributes gets
        changed. We have to clear the m_useFallbackContent because the attribute's
        new value might fix the object rendering.
        
        * html/HTMLObjectElement.h: Add a function to clear m_useFallbackContent.
        
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle): We might need to 
        reconstruct the object renderer in the image case. This can happen if the
        image was rendering fallback content and the attribute's new value fixes
        the object rendering.

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Make build logs more legible by reducing noise
        https://bugs.webkit.org/show_bug.cgi?id=142034

        Reviewed by Alexey Proskuryakov.

        Modify batch files, makefiles, and DOS commands to remove
        uninteresting/unhelpful output.

        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCorePreBuild.cmd:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

2015-02-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [FreeType] REGRESSION(r180563): Introduced crashes
        https://bugs.webkit.org/show_bug.cgi?id=142044

        Reviewed by Martin Robinson.

        No new tests, should be caught by any woff font test.

        Use optionsPattern, not m_pattern, when m_pattern may be null.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::initializeWithFontFace):

2015-02-26  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: !length.isUndefined() in WebCore::GridLength::GridLength
        https://bugs.webkit.org/show_bug.cgi?id=141645

        Reviewed by Chris Dumez.

        This bug has been here since r110484 but was uncovered by
        r180140. The problem r110484 was trying to fix was that
        CSSPrimitiveValue::convertToLength<Length> ended up calling
        CSSPrimitiveValue::computeLengthDouble() which was apparently
        dereferencing conversionData.style() and
        conversionData.rootStyle() pointers without checking them. That's
        why that fix added this condition to convertToLength():

        isFontRelativeLength() && (!conversionData.style() || !conversionData.rootStyle())

        which is not correct, because for the 4 possible font relative
        length types, 3 of them just use the style() pointer and the other
        one just uses rootStyle() which BTW could be NULL. This erroneous
        condition makes that function to return Length(Undefined) more
        often than it should.

        From now on it only returns Length(Undefined) if the style()
        pointer is NULL and the font relative length type is one in the
        set (CSS_EMS, CSS_EXS, CSS_CHS);

        Test: fast/css-grid-layout/grid-with-relative-font-length-crash.html

        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertingToLengthRequiresNonNullStyle):
        (WebCore::CSSPrimitiveValue::convertToLength):


2015-02-26  Andreas Kling  <akling@apple.com>

        [Cocoa] Prod libcache to drop caches in memory pressure relief handler.
        <https://webkit.org/b/142024>
        <rdar://problem/19966096>

        Reviewed by Antti Koivisto.

        libcache already listens to the OS memory pressure notifications, but we still
        need to manually request a cleanup when doing an iOS process suspension, or when
        simulating memory pressure.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory): Call out to libcache's
        cache_simulate_memory_warning_event() to make sure that nonessential objects
        being kept alive by NSCaches get dropped when we need the memory.

2015-02-25  Zalan Bujtas  <zalan@apple.com>

        Black line across screen on Adobe Illustrator detail page (non-retina only)
        https://bugs.webkit.org/show_bug.cgi?id=141866

        Reviewed by Simon Fraser.

        Phase is relative to the destination origin. We need to take location information into account
        while snapping so that the result is inline with the snapped destination rect.
        (location affects the snapped size.)

        Test: fast/backgrounds/gradient-background-on-subpixel-position.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

2015-02-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use WEBCORE_EXPORT instead of Definition file
        https://bugs.webkit.org/show_bug.cgi?id=141734

        Reviewed by Alex Christensen.

        No change in functionality.

        * WebCore.vcxproj/WebCore.vcxproj: Correct bad Precompiled header
        settings on certain files.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Automatically updated
        by Visual Studio.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Ditto.
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj.filters: Ditto.
        * WebCore.vcxproj/WebCoreTestSupportCommon.props: Added.
        * WebCore.vcxproj/WebCoreTestSupportDebug.props: Added.
        * WebCore.vcxproj/WebCoreTestSupportDebugWinCairo.props: Added.
        * WebCore.vcxproj/WebCoreTestSupportProduction.props: Added.
        * WebCore.vcxproj/WebCoreTestSupportRelease.props: Added.
        * WebCore.vcxproj/WebCoreTestSupportReleaseWinCairo.props: Added.
        * WebCorePrefix.h: Provide proper export definitions for Windows.
        * bindings/js/JSCustomXPathNSResolver.cpp: Add missing #include
        needed by the new export style.
        * bindings/js/JSDOMWindowBase.h: Export class since DRT needs
        access to parts of it.
        * bindings/js/ScriptCachedFrameData.cpp: Add missing #include
        needed by the new export style.
        * bindings/scripts/CodeGeneratorJS.pm: Use different export macro
        when generating WebCoreTestSupport files, so that we don't confuse
        the linker when WebCore.lib and WebCoreTestSupport.lib try to
        both export WEBCORE_EXPORT symbols.
        (ExportLabelForClass):
        (GenerateHeader):
        * bridge/jsc/BridgeJSC.cpp: Add missing #include needed by the new
        export style.
        * css/CSSParser.cpp: Ditto.
        * dom/Document.cpp: Ditto.
        * html/HTMLImageLoader.cpp: Ditto.
        * inspector/CommandLineAPIModule.cpp: Ditto.
        * inspector/PageDebuggerAgent.cpp: Ditto.
        * inspector/PageRuntimeAgent.cpp: Ditto.
        * inspector/WorkerRuntimeAgent.cpp: Ditto.
        * page/DOMWindow.cpp: Ditto.
        * page/DOMWindow.h: Export the destructor, as it is needed by
        DumpRenderTree (on Windows).
        * page/Page.cpp: Add missing #include needed by the new export style.
        * platform/Logging.h: Remove conflicting export declaration.
        * platform/PlatformExportMacros.h: Update for Windows use.
        * testing/Internals.cpp: Add missing #include needed by the new export style.
        * testing/Internals.h: Use WEBCORE_TESTSUPPORT_EXPORT for things that
        are supposed to be exported by WebCoreTestSupport, not WebCore.
        * testing/js/WebCoreTestSupport.cpp: Add missing #include needed by
        new export style.
        * testing/js/WebCoreTestSupportPrefix.cpp: Added.
        * testing/js/WebCoreTestSupportPrefix.h: Added.
        * xml/XMLHttpRequest.h: Export the destructor.
        * xml/XSLStyleSheetLibxslt.cpp: Add missing #include needed by the new
        export style.
        * xml/XSLTProcessorLibxslt.cpp: Ditto.

2015-02-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary DatabaseFooTask::create
        https://bugs.webkit.org/show_bug.cgi?id=142002

        Reviewed by Darin Adler.

        DatabaseFooTask::create can be replaced with std::make_unique<>.

        No new tests, no behavior changes.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::closeImmediately):
        (WebCore::Database::tableNames):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseBackend::DatabaseCloseTask::create): Deleted.
        (WebCore::DatabaseBackend::DatabaseTransactionTask::create): Deleted.
        (WebCore::DatabaseBackend::DatabaseTableNamesTask::create): Deleted.

2015-02-25  Dean Jackson  <dino@apple.com>

        [iOS Media] incorrect front padding on time values
        https://bugs.webkit.org/show_bug.cgi?id=142027
        <rdar://problem/19960790>

        Reviewed by Brent Fulgham.

        We don't want to prefix times with a "0".

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.formatTime):

2015-02-25  Chris Dumez  <cdumez@apple.com>

        Make PublicURLManager suspendable
        https://bugs.webkit.org/show_bug.cgi?id=141977
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Make PublicURLManager suspendable by overriding ActiveDOMObject::canSuspend()
        and returning true. Nothing prevents suspending the PublicURLManager as its
        implementation never causes JS to be executed. No implementation for
        suspend() / resume() needs to be provided for the same reason.

        The fact that PublicURLManager wasn't suspendable was preventing pages using
        URL.createObjectURL() from entering the PageCache. Baidu.com search results
        pages are using the API for example.

        Test: fast/history/page-cache-createObjectURL.html

        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::canSuspend):
        * html/PublicURLManager.h:

2015-02-25  Zalan Bujtas  <zalan@apple.com>

        Cleanup BackgroundImageGeometry class.
        https://bugs.webkit.org/show_bug.cgi?id=141997

        Reviewed by Simon Fraser.

        This patch attempts to improve RenderBoxModelObject::calculateBackgroundImageGeometry() readability by
        removing redundant code and making image geometry operations explicit. BackgroundImageGeometry
        becomes a read only class (with the exception of the clip() method).

        No change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BackgroundImageGeometry::BackgroundImageGeometry):
        (WebCore::BackgroundImageGeometry::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::BackgroundImageGeometry::setNoRepeatX): Deleted.
        (WebCore::BackgroundImageGeometry::setNoRepeatY): Deleted.
        (WebCore::BackgroundImageGeometry::useFixedAttachment): Deleted.
        (WebCore::BackgroundImageGeometry::clip): Deleted.
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::BackgroundImageGeometry::clip):
        (WebCore::BackgroundImageGeometry::BackgroundImageGeometry): Deleted.
        (WebCore::BackgroundImageGeometry::setDestRect): Deleted.
        (WebCore::BackgroundImageGeometry::setPhase): Deleted.
        (WebCore::BackgroundImageGeometry::setPhaseX): Deleted.
        (WebCore::BackgroundImageGeometry::setPhaseY): Deleted.
        (WebCore::BackgroundImageGeometry::setTileSize): Deleted.
        (WebCore::BackgroundImageGeometry::setSpaceSize): Deleted.
        (WebCore::BackgroundImageGeometry::setHasNonLocalGeometry): Deleted.

2015-02-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Horizontal and vertical lines are clipped completely if clip-path is included in the tag but the referenced element is defined later.
        https://bugs.webkit.org/show_bug.cgi?id=141776.

        Reviewed by Dean Jackson.

        Tests: svg/clip-path/clip-path-line-use-before-defined-expected.svg
               svg/clip-path/clip-path-line-use-before-defined.svg

        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext): Ensure the renderer
        is added to m_clipper if it does not exist. The same renderer might have been 
        added to m_clipper in resourceBoundingBox().
        
        (WebCore::RenderSVGResourceClipper::addRendererToClipper): Add the renderer to
        m_clipper if it does not exist. Return the associated ClipperData.
        
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox): If the clipper is
        referenced before it is defined, add the renderer to m_clipper. While doing the
        layout() for the clipper, we can check if m_clipper has values or not. If it does
        have, we are going to mark the clipper for client invalidation which is done by
        the SVG root.
        
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::selfNeedsClientInvalidation): Define a 
        new function selfNeedsClientInvalidation() which controls marking the clipper 
        for client invalidation. In RenderSVGResourceClipper, override it so it checks
        m_clipper to force clients validation even if it the first time we do layout
        for this clipper.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout): Call the virtual function
        selfNeedsClientInvalidation() to check whether we need to mark the clipper for
        client invalidation.
        
        * svg/SVGElement.cpp: Delete unneeded header file.

2015-02-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] WinLauncher is not starting on Vista.
        https://bugs.webkit.org/show_bug.cgi?id=141905

        Reviewed by Alex Christensen.

        We have to soft link with Media Foundation functions to be able
        to start on Vista and WinXP.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::createSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::endSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::startCreateMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::createTopologyFromSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::createOutputNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSourceStreamNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySet):

2015-02-25  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r180018 ): Holding a rubber-band in place can get stuck
        https://bugs.webkit.org/show_bug.cgi?id=142020
        -and corresponding-
        rdar://problem/19945216

        Reviewed by Tom Horton.

        It was a mistaken assumption that it was necessary to return false in the zero-
        delta case. That is clearly conceptually wrong since false represents the DOM 
        doing something special with the event, which is clearly not the case if we never 
        even send the event to the DOM. Returning true will allow the rest of the 
        scrolling machinery the ability to handle the event.
        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):

2015-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLElement::collectStyleForPresentationAttribute duplicates a lot of code for contentEditableAttr
        https://bugs.webkit.org/show_bug.cgi?id=142003

        Reviewed by Sam Weinig.

        Utilized contentEditableType to reduce the code duplication.

        * html/HTMLElement.cpp:
        (WebCore::contentEditableType): Moved and added a version that takes AtomicString.
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):

2015-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Tracks growing beyond limits when they should not
        https://bugs.webkit.org/show_bug.cgi?id=140883

        Reviewed by Darin Adler.

        Our track sizing algorithm implementation incorrectly grew some
        tracks beyond limits when handling min-content and max-content
        base sizes. In those cases we should only grow "any affected track
        that happens to also have an intrinsic max track sizing function"
        or all of them if there are none.

        The problem was that we're using a vector of indexes pointing to
        the vector with the list of affected tracks. Those indexes become
        easily incorrect because the first thing we do in
        distributeSpaceToTracks() is to sort the vector with the affected
        tracks by growth potential.

        Instead of that we now pass a vector with pointers to the list of
        tracks allowed to grow over the limits. The size changes are now
        directly stored in the GridTracks (it's called plannedSize)
        instead of in a separate vector, so we don't need to worry about
        tracks being rearranged (and we also get rid of the ugly vector of
        indexes pointing to another vector).

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::plannedSize): New member with getter/setter.
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Pass a setXXX() function instead of a growXXX() one to ForItems().
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Renamed additionalBreadthSpace to extraSpace which is the term
        used by specs.
        (WebCore::RenderGrid::distributeSpaceToTracks): Use GridTrack's
        plannedSize instead of the old distribution vector.
        (WebCore::GridTrack::growBaseSize): Deleted.
        (WebCore::GridTrack::growGrowthLimit): Deleted.
        * rendering/RenderGrid.h:

2015-02-25  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA 1.1 'searchbox' role
        https://bugs.webkit.org/show_bug.cgi?id=142004

        Reviewed by Chris Fleizach.

        Add a new accessible SearchFieldRole to handle both the ARIA role
        and the "search" input type.

        No new tests. Instead, added a new test case to roles-exposed.html
        for the mapping, and updated roles-computedRoleString.html because
        there is now a one-to-one mapping between the "search" input type
        and an ARIA role.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::isSearchField):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isARIATextControl):
        (WebCore::AccessibilityObject::isARIAInput):
        (WebCore::initializeRoleMap):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2015-02-24  Simon Fraser  <simon.fraser@apple.com>

        Clarify some resizing terminology in ScrollView/FrameView
        https://bugs.webkit.org/show_bug.cgi?id=141996

        Reviewed by Zalan Bujtas.

        ScrollableArea/ScrollView/FrameView had some confusing terminology around
        contentsResized/visibleContentsResized/fixedLayoutSizeChanged.
        
        Clarify this by distinguishing between:
        1. Available size changes because of
            i) non-overlay scrollbar presence
           ii) ScrollableArea frame change
        2. Removing fixedLayoutSizeChanged() and just treating it like an
           available size change.
           
        contentsResized() is relegated to simply being a hook that allows Mac to
        flash overlay scrollbars.
        
        The confusingly named visibleContentsResized() is now updateContentsSize(),
        and is the way that a ScrollableArea tells its subclasss that it should recompute
        the size of the contents (i.e. do a layout).

        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize): No longer mysteriously skip the
        FrameView implementation of contentsResized(), which used to do a setNeedsLayout()
        which we didn't want to do from setContentsSize(), which itself happens as a result of layout.
        (WebCore::FrameView::adjustViewSize): Whitespace.
        (WebCore::FrameView::layout): Ditto.
        (WebCore::FrameView::availableContentSizeChanged): Called on frame size change, or scrollbar
        change.
        (WebCore::FrameView::updateContentsSize): This actually does the layout.
        (WebCore::FrameView::scrollbarStyleChanged): Always call the base class;  ScrollView::scrollbarStyleChanged
        will bail if not a forced update.
        (WebCore::FrameView::setCustomFixedPositionLayoutRect): Forces a layout via updateContentsSize() now.
        (WebCore::FrameView::contentsResized): Deleted.
        (WebCore::FrameView::fixedLayoutSizeChanged): Deleted.
        (WebCore::FrameView::visibleContentsResized): Deleted.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFixedLayoutSize): Calls availableContentSizeChanged() now.
        (WebCore::ScrollView::setUseFixedLayout): Ditto.
        (WebCore::ScrollView::availableContentSizeChanged): Update scrollbars if that's not
        the reason we are being called.
        (WebCore::ScrollView::updateScrollbars): contentsResized() was the thing that caused setNeedsLayout();
        replace it with availableContentSizeChanged(). visibleContentsResized() did the layout, and
        replace with updateContentsSize().
        (WebCore::ScrollView::setFrameRect): Call availableContentSizeChanged() now. This takes care of
        updating scrollbars, so no need to explicitly do that.
        (WebCore::ScrollView::scrollbarStyleChanged): Call the base class.
        (WebCore::ScrollView::fixedLayoutSizeChanged): Deleted.
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::availableContentSizeChanged): Call scrollAnimator->contentsResized()
        to flash the scrollbars.
        (WebCore::ScrollableArea::scrolledToRight):
        (WebCore::ScrollableArea::scrollbarStyleChanged): Call availableContentSizeChanged() since
        scrollbar style affects available space.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::updateContentsSize):
        (WebCore::ScrollableArea::scrollbarStyleChanged): Deleted.

2015-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Mavericks build attempt fix after r180609.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary):

2015-02-19  Roger Fong  <roger_fong@apple.com>

        WebGL: Destroy the GLContext if a GPU restart has been detected.
        https://bugs.webkit.org/show_bug.cgi?id=141567.
        <rdar://problem/18507496>

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::setWebGLContext): 
        Keep track of which WebGLRenderingContext is associated with the current GraphicsContext3D.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::checkGPUStatusIfNecessary): Helper method to check GPU status.
        (WebCore::GraphicsContext3D::GraphicsContext3D): 
        Don’t immediately abort the GPU process when the restart status is kCGLCPGPURestartStatusBlacklisted.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::forceContextLost): 
        Force the WebGLRenderingContext to be lost.
        (WebCore::GraphicsContext3D::drawArrays): Check GPU status after calling drawArrays.
        (WebCore::GraphicsContext3D::drawElements): Check GPU status after calling drawElements.
        * WebCore.xcodeproj/project.pbxproj: Add SPI header for iOS.
        * platform/spi/ios/OpenGLESSPI.h: Added.

2015-02-24  Stephanie Lewis  <slewis@apple.com>

        Unreviewed ios build fix after http://trac.webkit.org/changeset/180602.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

2015-02-24  Simon Fraser  <simon.fraser@apple.com>

        Use an enum for scrollbar style
        https://bugs.webkit.org/show_bug.cgi?id=141985

        Reviewed by Beth Dakin.

        Switch to an enum class for the scrollbar style (normal or overlay).

        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollbarStyleChanged):
        * page/FrameView.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarStyleChanged):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollbarStyleChanged):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

2015-02-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180599.
        https://bugs.webkit.org/show_bug.cgi?id=141998

        Lots of new test failures (Requested by smfr on #webkit).

        Reverted changeset:

        "Parsing support for -webkit-trailing-word"
        https://bugs.webkit.org/show_bug.cgi?id=141939
        http://trac.webkit.org/changeset/180599

2015-02-24  Sam Weinig  <sam@webkit.org>

        [Attachment] Give <attachment> elements an underlying File
        https://bugs.webkit.org/show_bug.cgi?id=141993

        Reviewed by Tim Horton.

        - Add a JS subclass for attachments so that <attachment>s are
          instances of HTMLAttachmentElement rather than HTMLElement.
        - Give HTMLAttachmentElements an underlying File that they
          are the representation of. Expose it via a new 'file' property.
        - Expose a new Internals function called window.internals.createFile(url)
          that allows creating File objects for testing.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/File.h:
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::~HTMLAttachmentElement):
        (WebCore::HTMLAttachmentElement::file):
        (WebCore::HTMLAttachmentElement::setFile):
        * html/HTMLAttachmentElement.h:
        * html/HTMLAttachmentElement.idl: Added.
        * html/HTMLTagNames.in:
        * testing/Internals.cpp:
        (WebCore::Internals::createFile):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-02-24  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for ARIA 1.1 'switch' role
        https://bugs.webkit.org/show_bug.cgi?id=141986

        Reviewed by Chris Fleizach.

        Map the role to ATK_ROLE_TOGGLE_BUTTON for Gtk and Efl; on the Mac, to
        AXCheckBox with a subrole of AXSwitch. Ensure it looks and acts like a
        widget to accessibility APIs (supports and emits notifications when
        toggled, doesn't have children, exposes a name and description when
        provided).

        Tests: accessibility/aria-switch-checked.html
               accessibility/aria-switch-sends-notification.html
               accessibility/aria-switch-text.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::isChecked):
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isARIAInput):
        (WebCore::AccessibilityObject::actionVerb):
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::supportsChecked):
        (WebCore::AccessibilityObject::checkboxOrRadioValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isSwitch):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2015-02-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        This patch implements initial parsing support for the -apple-trailing-word CSS property.
        This property has two possible (mutually exclusive) values: auto and
        -apple-partially-balanced. This property is inherited.

        The work for this property is behind the ENABLE(CSS_TRAILING_WORD) preprocessor define.

        This is an internal property that will allow us to control line breaking behavior for
        short paragraphs.

        Note that, because of the implementation of cssValueKeywordID() in CSSParser.cpp,
        the new value must be implemented as -webkit-partially-balanced. Using the -apple-
        prefix will work, but if you getComputedStyle(), it will return the -webkit- prefixed
        version.

        Test: platform/mac/fast/text/trailing-word-parse.html

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Turn internal representation into a
        CSS value.
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): Updated for new keyword property / value
        pair.
        (WebCore::isKeywordPropertyID): New property is a keyword property.
        (WebCore::CSSParser::parseValue): Use the keyword property codepath.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Convert to and from the internal
        representation and CSS values.
        (WebCore::CSSPrimitiveValue::operator TrailingWord):
        * css/CSSPropertyNames.in: New property.
        * css/CSSValueKeywords.in: New value.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Can't use SimpleLineLayout for this.
        * rendering/style/RenderStyle.h: Getter, setter and initial value.
        * rendering/style/RenderStyleConstants.h: Internal data type.
        * rendering/style/StyleRareInheritedData.h: One bit to control this style property.

2015-02-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove DecodingTask::create and DatabaseOpenTask::create
        https://bugs.webkit.org/show_bug.cgi?id=141966

        Reviewed by Anders Carlsson.

        These create() factory functions are redundant. We can use std::make_unique<> directly.

        No new tests, no behavior changes.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::decodeAsync):
        (WebCore::AsyncAudioDecoder::DecodingTask::create): Deleted.
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        * Modules/webdatabase/DatabaseTask.h:
        (WebCore::DatabaseBackend::DatabaseOpenTask::create): Deleted.

2015-02-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180578.
        https://bugs.webkit.org/show_bug.cgi?id=141992

        Broke scrolling in Inspector Console. (Requested by JoePeck on
        #webkit).

        Reverted changeset:

        "[Mac] WebKit abandons overlay scrollbar CALayers."
        https://bugs.webkit.org/show_bug.cgi?id=141943
        http://trac.webkit.org/changeset/180578

2015-02-24  Dean Jackson  <dino@apple.com>

        [ios Media] the inline controls are visible after pressing Done on iPhone
        https://bugs.webkit.org/show_bug.cgi?id=141987
        <rdar://problem/19944110>

        Reviewed by Beth Dakin.

        When exiting out of a playing video, we should show the
        start playback button if we don't allow inline media
        (such as on iPhone).

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton): Test for
        allowsInline as well.

2015-02-24  Zalan Bujtas  <zalan@apple.com>

        Pass FillLayer reference instead of pointer to RenderBoxModelObject::calculateBackgroundImageGeometry.
        https://bugs.webkit.org/show_bug.cgi?id=141982

        Reviewed by Simon Fraser.

        There should always be a valid FillLayer.

        No change in functionality.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::getBackgroundPaintedExtent):
        (WebCore::RenderBox::maskClipRect):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
        * rendering/RenderBoxModelObject.h:

2015-02-24  Dean Jackson  <dino@apple.com>

        [iOS Media] Be specific about which document to use for the timeline background canvas
        https://bugs.webkit.org/show_bug.cgi?id=141981

        Reviewed by Eric Carlson.

        In some cases, especially with nested iframes, the document
        reference for the shadow DOM might not be the one used
        to create a -webkit-canvas context for rendering via CSS.
        Explicitly get the context from the video's owner
        document.

        There is still a bug here:
        https://bugs.webkit.org/show_bug.cgi?id=141983

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.drawTimelineBackground):

2015-02-24  Zalan Bujtas  <zalan@apple.com>

        Remove unused BackgroundImageGeometry::m_destOrigin
        https://bugs.webkit.org/show_bug.cgi?id=141980

        Reviewed by Simon Fraser.

        Remove BackgroundImageGeometry::m_destOrigin and its dependencies.
        They are not used at all.

        No change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::BackgroundImageGeometry::relativePhase): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::BackgroundImageGeometry::destOrigin): Deleted.
        (WebCore::BackgroundImageGeometry::setDestOrigin): Deleted.
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawMaskForRenderer):

2015-02-24  Zalan Bujtas  <zalan@apple.com>

        RenderBoxModelObject::calculateBackgroundImageGeometry should return BackgroundImageGeometry.
        https://bugs.webkit.org/show_bug.cgi?id=141979

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::getBackgroundPaintedExtent):
        (WebCore::RenderBox::maskClipRect):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
        * rendering/RenderBoxModelObject.h:

2015-02-24  Zalan Bujtas  <zalan@apple.com>

        Switch BackgroundImageGeometry's m_phase from LayoutPoint to LayoutSize.
        https://bugs.webkit.org/show_bug.cgi?id=141972

        Reviewed by Simon Fraser.

        Image geometry's phase represents distance.

        No change in functionality.

        * WebCore.order:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsTilePhase):
        (WebCore::GraphicsLayer::contentsTilePhase):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computePatternTransformIfNeeded):
        (WebCore::TextureMapperLayer::setContentsTilePhase):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::BackgroundImageGeometry::relativePhase):
        (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
        (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
        * rendering/RenderBoxModelObject.h:
        (WebCore::BackgroundImageGeometry::phase):
        (WebCore::BackgroundImageGeometry::setPhase):
        (WebCore::BackgroundImageGeometry::setPhaseX):
        (WebCore::BackgroundImageGeometry::setPhaseY):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawMaskForRenderer):

2015-02-24  Andreas Kling  <akling@apple.com>

        [Mac] WebKit abandons overlay scrollbar CALayers.
        <https://webkit.org/b/141943>
        <rdar://problem/19932199>

        Reviewed by Beth Dakin.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        Use NSAnimationNonblockingThreaded to ensure that NSAnimations get cleaned up after they finish.
        The animation was indirectly retaining the overlay scrollbar's CALayer, causing significant
        amounts of abandoned memory to accumulate over time.

2015-02-24  Anders Carlsson  <andersca@apple.com>

        Implement more of the data fetching API
        https://bugs.webkit.org/show_bug.cgi?id=141975

        Reviewed by Andreas Kling.

        Add API for getting origins in a given session that has cached data.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::originsWithCache):

2015-02-24  Simon Fraser  <simon.fraser@apple.com>

        Use nullptr in more places in FrameView, RenderView, RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=141974

        Reviewed by Zalan Bujtas.

        0 -> nullptr in FrameView.h/cpp, RenderView.h/cpp, RenderObject.h/cpp.
        
        Rename FrameView::m_deferSetNeedsLayouts to FrameView::m_deferSetNeedsLayoutCount
        to make it more clear that it's a count.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layerForScrolling):
        (WebCore::FrameView::layerForHorizontalScrollbar):
        (WebCore::FrameView::layerForVerticalScrollbar):
        (WebCore::FrameView::layerForScrollCorner):
        (WebCore::FrameView::tiledBacking):
        (WebCore::FrameView::scrollLayerID):
        (WebCore::FrameView::layerForOverhangAreas):
        (WebCore::FrameView::setWantsLayerForTopOverHangArea):
        (WebCore::FrameView::setWantsLayerForBottomOverHangArea):
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::layoutRoot):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::hostWindow):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::setNeedsLayout):
        (WebCore::FrameView::enclosingScrollableArea):
        (WebCore::FrameView::parentFrameView):
        (WebCore::FrameView::paintControlTints):
        (WebCore::FrameView::adjustPageHeightDeprecated):
        (WebCore::FrameView::axObjectCache):
        * page/FrameView.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::nextInPreOrderAfterChildren):
        (WebCore::RenderObject::previousInPreOrder):
        (WebCore::RenderObject::firstLeafChild):
        (WebCore::RenderObject::lastLeafChild):
        (WebCore::RenderObject::traverseNext):
        (WebCore::RenderObject::firstLineBlock):
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::showRenderSubTreeAndMark):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::container):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::virtualContinuation):
        (WebCore::RenderObject::node):
        (WebCore::RenderObject::nonPseudoNode):
        (WebCore::RenderObject::localToAbsoluteQuad):
        (WebCore::RenderObject::absoluteQuads):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::outlineBoundsForRepaint):
        (WebCore::RenderObject::computeAbsoluteRepaintRect):
        (WebCore::RenderObject::selectionRect):
        (WebCore::RenderObject::imageChanged):
        (WebCore::RenderObject::addFocusRingRects):
        (WebCore::RenderObject::absoluteOutlineBounds):
        * rendering/RenderView.cpp:
        (WebCore::SelectionIterator::next):
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::pushMappingToContainer):
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::rendererAfterPosition):
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::rootBackgroundIsEntirelyFixed):
        * rendering/RenderView.h:

2015-02-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Brent Fulgham.

        Enable SymbolEnabled runtime flag in inspector context.

        * ForwardingHeaders/runtime/RuntimeFlags.h: Added.
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::javaScriptRuntimeFlags):
        (WebCore::JSDOMWindowBase::javaScriptExperimentsEnabled): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::javaScriptRuntimeFlags):
        (WebCore::JSWorkerGlobalScopeBase::javaScriptExperimentsEnabled): Deleted.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        * page/Settings.h:
        * page/Settings.in:

2015-02-24  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Support "sparse" in auto-placed items locked to a row/column
        https://bugs.webkit.org/show_bug.cgi?id=141748

        Reviewed by Sergio Villar Senin.

        The first step of grid item placement algorithm has been updated in
        order to support both "sparse" and "dense" modes. Current code is always
        doing a "dense" packing in this case.

        See: http://dev.w3.org/csswg/css-grid/#auto-placement-algo

        Test: fast/css-grid-layout/grid-item-auto-placement-fixed-row-column.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid): Add a cursor
        for each row/column and use it to place items in the right position.

2015-02-24  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Layout Test accessibility/roles-exposed.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=141960

        Reviewed by Martin Robinson.

        The test was failing because Gtk now uses GtkColorChooserDialog for the
        color input, making the input field a button which results in the color
        chooser dialog appearing. As a side effect of this change, the input now
        has an accessible role of ColorWell, which is currently mapped to
        ATK_ROLE_COLOR_CHOOSER (which is by definition the dialog which results
        upon activating the button input field). Changed the Gtk platform mapping
        to ATK_ROLE_BUTTON, leaving the Efl mapping as-is.

        No new tests. Instead, updated and unskipped failing test.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2015-02-24  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Fonts loaded via @font-face look bad
        https://bugs.webkit.org/show_bug.cgi?id=140994

        Reviewed by Martin Robinson.

        We've had several complaints that woff fonts look bad on some websites. This seems to be a
        combination of multiple issues. For one, we don't look at Fontconfig settings at all when
        creating a web font. This commit changes FontPlatformData::initializeWithFontFace to instead
        use sane default settings from Fontconfig when loading a web font, rather than accepting the
        default settings from GTK+, which are normally overridden by Fontconfig when loading system
        fonts. However, we will hardcode the hinting setting for web fonts to always force use of
        the light autohinter, so that we do not use a font's native hints. This avoids compatibility
        issues when fonts with poor native hinting are only tested in browsers that do not use the
        native hints. It also allows us to sidestep future security vulnerabilities in FreeType's
        bytecode interpreter.

        The net result of this is that there should be little noticable difference if you have GTK+
        set to use slight hinting (which forces use of the autohinter) unless you have customized
        Fontconfig configuration, but a dramatic improvement with particular fonts if you use medium
        or full hinting. This should reduce complaints about our font rendering on "fancy sites."

        No new tests, since the affected fonts we've found are not freely redistributable.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Force web fonts to be autohinted.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultCairoFontOptions): Renamed to disambiguate.
        (WebCore::getDefaultFontconfigOptions): Added.
        (WebCore::FontPlatformData::initializeWithFontFace): Always call
        FontPlatformData::setCairoOptionsFromFontConfigPattern. If the FontPlatformData was not
        created with an FcPattern (e.g. because this is a web font), call
        getDefaultFontconfigOptions to get a sane default FcPattern.
        (WebCore::FontPlatformData::setOrientation): Renamed call to getDefaultCairoFontOptions.
        (WebCore::getDefaultFontOptions): Deleted.

2015-02-24  Andreas Kling  <akling@apple.com>

        [Cocoa] Break internal reference cycle in WebCore::Font.
        <https://webkit.org/b/141941>
        <rdar://problem/19650570>

        Reviewed by Antti Koivisto.

        The Cocoa implementation of Font::platformCreateScaledFont() tried to be smart and use the FontCache.
        This didn't work out well when scaling a 0pt Font, since scaling 0pt by any factor will return 0pt.

        We'd have a 0pt font, scale it by 0.7 to get a small-caps variant, and then cache that small-caps
        variant (really "this") in Font::m_derivedData->smallCaps.

        Fix this by having Cocoa Font scaling do exactly what other platforms do: create a new Font every time.
        This stops us from accumulating tons of abandoned Font objects over time.

        * platform/graphics/Font.cpp:
        (WebCore::Font::verticalRightOrientationFont):
        (WebCore::Font::uprightOrientationFont):
        (WebCore::Font::smallCapsFont):
        (WebCore::Font::emphasisMarkFont):
        (WebCore::Font::brokenIdeographFont):
        (WebCore::Font::nonSyntheticItalicFont): Add assertions to guard against reference cycles inside a Font.

        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformCreateScaledFont): Always create a new Font when scaling an existing Font to a different size.

2015-02-24  Xabier Rodriguez Calvar <calvaris@igalia.com> and Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Streams API] Reading ReadableStream ready and closed attributes should not always create a new promise
        https://bugs.webkit.org/show_bug.cgi?id=141650

        Reviewed by Benjamin Poulain.

        The JSPromiseDeferred objects returned by JSReadableStream::ready and JSReadableStream::closed should be stored somewhere.
        This patch stores them as private slots in JSReadableStream.
        This is close to the description in https://streams.spec.whatwg.org/#rs-internal-slots.

        An alternative would be to have these objects as JSReadableStream class members, thus modifying the binding generator.
        That may be the cleanest solution, especially if other APIs express the same need.
        Another alternative is to store DeferredWrapper in ReadableStream objects.
        But it is currently preferred to keep DeferredWrapper in bindings/js code.

        Added new constructor for DeferredWrapper to use these stored values.
        Updated ready and closed methods to use that new constructor.
        Changes are covered by new test in streams/readablestream-constructor.html.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::DeferredWrapper):
        * bindings/js/JSDOMPromise.h:
        * bindings/js/JSReadableStreamCustom.cpp:
        (WebCore::closedPromiseSlotName):
        (WebCore::getOrCreatePromiseDeferredFromObject):
        (WebCore::readyPromiseSlotName):
        (WebCore::JSReadableStream::ready):
        (WebCore::JSReadableStream::closed):
        * bindings/js/ReadableStreamJSSource.cpp:
        (WebCore::setInternalSlotToObject):
        (WebCore::getInternalSlotFromObject):
        * bindings/js/ReadableStreamJSSource.h:

2015-02-24  Dhi Aurrahman  <diorahman@rockybars.com>

        Always serialize :lang()'s arguments to strings
        https://bugs.webkit.org/show_bug.cgi?id=141944

        Reviewed by Benjamin Poulain.

        As specified in [1] :lang()'s arguments are always serialized to strings.

        [1] http://dev.w3.org/csswg/cssom/#serializing-selectors

        Related tests are updated.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::init):
        (WebCore::CSSParserString::clear):
        (WebCore::CSSParserString::tokenType): Deleted.
        (WebCore::CSSParserString::setTokenType): Deleted.
        * css/CSSSelector.cpp:
        (WebCore::appendLangArgumentList):
        (WebCore::CSSSelector::setLangArgumentList):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::langArgumentList):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):

2015-02-24  Antti Koivisto  <antti@apple.com>

       Give TemporaryChange for m_inLoadPendingImages assertion a name so it actually does something.

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

2015-02-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180547 and r180550.
        https://bugs.webkit.org/show_bug.cgi?id=141957

        Broke 10 Windows tests. (Requested by bfulgham_ on #webkit).

        Reverted changesets:

        "REGRESSION(r179429): Can't type comments in Facebook"
        https://bugs.webkit.org/show_bug.cgi?id=141859
        http://trac.webkit.org/changeset/180547

        "Constructor returning null should construct an object instead
        of null"
        https://bugs.webkit.org/show_bug.cgi?id=141640
        http://trac.webkit.org/changeset/180550

2015-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Disable font loading events until our implementation gets updated to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=141938

        Reviewed by Andreas Kling.

        Revert r173531 for now since our implementation is outdated.

        * Configurations/FeatureDefines.xcconfig:

2015-02-23  Brent Fulgham  <bfulgham@apple.com>

        EventHandler references deleted Scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=141931
        <rdar://problem/19915210>

        Reviewed by Tim Horton.

        Tested by scrollbars/overflow-custom-scrollbar-crash.html

        Update the EventHandler class to use a WeakPtr to reference the
        last used Scrollbar, rather than retaining the Scrollbar and
        artificially extending its life. This keeps the EventHandler
        state in proper sync with the state of the render tree, and
        avoids cases where we have destroyed a ScrollableArea (and
        Scrollbar) but are still sending messages to a fake zombie
        version of the element.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * page/EventHandler.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar): Initialize WeakPtrFactory.
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::createWeakPtr): Added,

2015-02-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Geoffrey Garen.

        Enable SymbolEnabled runtime flag in inspector context.

        * ForwardingHeaders/runtime/RuntimeFlags.h: Added.
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::javaScriptRuntimeFlags):
        (WebCore::JSDOMWindowBase::javaScriptExperimentsEnabled): Deleted.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::javaScriptRuntimeFlags):
        (WebCore::JSWorkerGlobalScopeBase::javaScriptExperimentsEnabled): Deleted.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        * page/Settings.h:
        * page/Settings.in:

2015-02-23  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: add support for case-insensitive attribute matching
        https://bugs.webkit.org/show_bug.cgi?id=141880

        Reviewed by Andreas Kling.

        The value matching now has 3 cases:
        1) Case-sensitive.
        2) Case-insensitive.
        3) Legacy HTML Case-insensitive.

        The information to determine the case is split over 2 source:
        -To know if explicit case-insensitive is needed, we need to ask the selector
         for attributeValueMatchingIsCaseInsensitive().
        -To know if the legacy HTML behavior is needed, we need to test the attribute
         name filter with HTMLDocument::isCaseSensitiveAttribute().

        I decided to perform all those checks at the fragment creation step.
        This makes the register requirements and code generation more explicit.

        From there, everything is easy: switch() on the type of matching needed,
        and generate the code. The new case-insensitive case is a simplified version
        of the legacy HTML behavior without runtime check for the element type.

        Tests: fast/css/implicitly-case-insensitive-attribute-with-svg.html
               fast/selectors/case-insensitive-attribute-register-requirement-1.html
               fast/selectors/case-insensitive-attribute-register-requirement-2.html
               fast/selectors/querySelector-explicit-case-insensitive-attribute-match-with-svg.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::attributeSelectorCaseSensitivity):
        (WebCore::SelectorCompiler::AttributeMatchingInfo::AttributeMatchingInfo):
        (WebCore::SelectorCompiler::AttributeMatchingInfo::attributeCaseSensitivity):
        (WebCore::SelectorCompiler::AttributeMatchingInfo::canDefaultToCaseSensitiveValueMatch): Deleted.
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        Compute the type of value matching and store it on the AttributeMatchingInfo
        when creating the fragment.

        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        (WebCore::SelectorCompiler::attributeValueTestingRequiresExtraRegister):
        (WebCore::SelectorCompiler::attributeValueTestingRequiresCaseFoldingRegister): Deleted.
        In general, AttributeCaseSensitivity::CaseInsensitive does not require an extra
        register. I have made an exception for generateElementAttributeValueExactMatching()
        for simplicity. I use that register to load the StringImpl of the attribute
        being tested, that way I can use WTF::equalIgnoringCaseNonNull() directly.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeValueExactMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        Matching itself is just function calls. Unlike AttributeCaseSensitivity::HTMLLegacyCaseInsensitive,
        the behavior is consistent between XML and HTML.

2015-02-23  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Unreviewed build fix after r180532

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::buffered):
        Fixed typo.

2015-02-23  Chris Dumez  <cdumez@apple.com>

        Log using diagnostic logging which ActiveDOMObjects prevent using the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=141922
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Log using diagnostic logging which ActiveDOMObjects prevent using the
        PageCache.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::unsuspendableDOMObjectKey):
        * page/DiagnosticLoggingKeys.h:

2015-02-23  Chris Dumez  <cdumez@apple.com>

        Move GeoNotifier class to its own file
        https://bugs.webkit.org/show_bug.cgi?id=141918

        Reviewed by Andreas Kling.

        Move GeoNotifier class to its own file to make Geolocation class less
        crowded.

2015-02-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unnecessary PlatformTimeRanges::create()
        https://bugs.webkit.org/show_bug.cgi?id=141901

        Reviewed by Filip Pizlo.

        PlatformTimeRanges::create() functions have just created an instance of PlatformTimeRanges.
        This functionality can be replaced with std::make_unique<> use directly.

        No new tests, no behavior changes.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::buffered):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::bufferedAccountingForEndOfStream):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::buffered):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekable):
        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::create): Deleted.
        * platform/graphics/PlatformTimeRanges.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::buffered):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::buffered):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::buffered):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::buffered):

2015-02-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Partial clean up OwnPtr and PassOwnPtr in WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=141888

        Reviewed by Filip Pizlo.

        Use std::unique_ptr<> and std::make_unique<>. Besides this patch removes
        unnecessary OwnPtr.h|PasSOwnPtr.h includes.

        No new tests, no behavior changes.

        * platform/SharedBuffer.h:
        * platform/Supplementable.h:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        (WebCore::AudioSourceProviderGStreamer::create): Deleted.
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/TiledBackingStoreBackend.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/gtk/GamepadsGtk.cpp:

2015-02-23  Shivakumar JM  <shiva.jm@samsung.com>

        Default value of HTMLSelectElement size IDL attribute should be 0.
        https://bugs.webkit.org/show_bug.cgi?id=141795

        Reviewed by Andreas Kling.

        Default value of HTMLSelectElement size IDL attribute should be 0. 
        As in spec: http://www.w3.org/html/wg/drafts/html/master/forms.html#the-select-element, also this matches the behavior of Chrome, IE and
        Gecko.

        Test: fast/dom/select-size.html

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

2015-02-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
        https://bugs.webkit.org/show_bug.cgi?id=141729.

        Reviewed by Daniel Bates.

        Fix a build break which is caused by http://trac.webkit.org/changeset/180511/trunk.
        Two functions of GraphicsContext were made inline but they were kept WEBCORE_EXPORT.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::updatingControlTints):

2015-02-22  Dean Jackson  <dino@apple.com>

        [iOS] Max canvas size is lower than expected
        https://bugs.webkit.org/show_bug.cgi?id=141886
        <rdar://problem/19729246>

        Reviewed by Tim Horton.

        Use the same maximum canvas area for all ports,
        which bumps the iOS limit up from 4580 * 1145
        to 16k * 16k.

        * html/HTMLCanvasElement.cpp: Update MaxCanvasArea.

2015-02-23  Chris Dumez  <cdumez@apple.com>

        Add support for diagnostic logging messages sampling
        https://bugs.webkit.org/show_bug.cgi?id=141823
        <rdar://problem/19899030>

        Reviewed by Andreas Kling.

        Add support for diagnostic logging messages sampling to decrease the
        impact of diagnostic logging on CPU usage, while still getting useful
        overall results. This patch adds a ShouldSample argument to
        logDiagnosticMessage*() functions and logs 5% of the messages when
        sampling. Sampling is turned on for keys that are known to be verbose
        (e.g. per resource load logging).

        On the page load test I am tracking, CPU usage caused by diagnostic
        logging went down to 0.3% of UIProcess from 2.8% with this change.

        * history/PageCache.cpp:
        (WebCore::logPageCacheFailureDiagnosticMessage):
        (WebCore::logCanCachePageDecision):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::logNavigation):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        * loader/SubframeLoader.cpp:
        (WebCore::logPluginRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::logResourceLoaded):
        * loader/cache/CachedResource.cpp:
        (WebCore::logResourceRevalidationReason):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::logMemoryCacheResourceRequest):
        * page/DiagnosticLoggingClient.h:

2015-02-23  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
        https://bugs.webkit.org/show_bug.cgi?id=141729.

        Reviewed by Simon Fraser.

        When drawing an SVG image and the drawing context is set to be transparent,
        make sure this transparency is applied to the compositing layer.

        Test: svg/canvas/canvas-global-alpha-svg.html

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setAlpha): Make setAlpha() calls the platform
        function and sets 'm_state.alpha' to the input value.

        (WebCore::GraphicsContext::alpha): Add a new function 'alpha()' which
        returns the value of the global alpha.
        
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState): Add a new member
        'alpha' to the context state since the getter function CGContextGetAlpha
        is defined only in a private header file. Also move single line functions
        from the source file to the header file.
    
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformAlpha):
        (WebCore::GraphicsContext::setAlpha): Deleted.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformAlpha):
        (WebCore::GraphicsContext::setAlpha): Deleted.
        Rename setAlpha() to setPlatformAlpha() in the platform files. Add setAlpha()
        to the core file. setAlpha() will set the value of 'm_state.alpha' and call
        setPlatformAlpha().
    
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): If the drawing context is transparent, apply its
        global alpha value to the compositing layer.
        
2015-02-23  Eric Carlson  <eric.carlson@apple.com>

        Occasional crash in MediaPlayer::setPrivateBrowsingMode
        https://bugs.webkit.org/show_bug.cgi?id=141910

        Reviewed by Jer Noble.

        No new tests, I was unable to reproduce the crash.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::stopPeriodicTimers): Use EveryDelayedAction instead of -1.
        (WebCore::HTMLMediaElement::stop): Call clearMediaPlayer instead of just setting m_player
            to NULL.
        * html/HTMLMediaElement.h: Define EveryDelayedAction.

2015-02-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Redundant track language notifications
        https://bugs.webkit.org/show_bug.cgi?id=141908

        Reviewed by Žan Doberšek.

        Invoke languageChanged only if the language code actually
        changed.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):

2015-02-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash when media player is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=141248

        Reviewed by Darin Adler.

        A COM smart pointer is both released, and set to null.
        This means that the COM Release method is called twice, causing a crash.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::endSession):

2015-02-23  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove old FIXME in RenderGrid::placeItemsOnGrid()
        https://bugs.webkit.org/show_bug.cgi?id=141899

        Reviewed by Sergio Villar Senin.

        There was a FIXME about not re-resolving positions if the grid is grown during
        auto-placement. But as the spec has changed [1] and you can only refer to the
        explicit grid (even if you use for example grid-column: 1 / -1). It seems that
        we can get rid of this FIXME as it's not a causing a problem anymore.

        [1] http://dev.w3.org/csswg/css-grid/#grid-placement-int

        No new tests (no change in behavior).

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid): Remove FIXME.

2015-02-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move std::unique_ptr<>|make_unique<> to WebCore/page/scrolling
        https://bugs.webkit.org/show_bug.cgi?id=137877

        Reviewed by Sam Weinig.

        Clean up unnecessary OwnPtr.h|PassOwnPtr.h includes as well as
        change OwnPtr with std::unique_ptr<>|make_unique<>.

        No new tests, no behavior changes.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:

2015-02-22  Dean Jackson  <dino@apple.com>

        Print a console warning when HTMLCanvasElement exceeds the maximum size
        https://bugs.webkit.org/show_bug.cgi?id=141861
        <rdar://problem/19729145>

        Reviewed by Simon Fraser.

        Add a warning if we ever try to create a canvas that is
        too big.

        No test because:
        1. We can't ref-test against console messages.
        2. The output is platform specific.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):

2015-02-21  Sam Weinig  <sam@webkit.org>

        Convert the caps lock indicator to be implemented using the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=141868

        Reviewed by Dan Bernstein.

        - Re-adds 'caps-lock-indicator' as a valid -webkit-appearance value. It was removed
          in r74099 to work around a site bug, that should not be a problem anymore.
        - Converts the caps lock indicator to be implemented as part of the shadow DOM rather
          than a paint time effect. This gives the proper overflow behavior (it now clips) and
          behaves correctly in RTL.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        Make 'caps-lock-indicator' a valid -webkit-appearance value.

        * css/CSSValueKeywords.in:
        Remove comment that indicated that caps-lock-indicator was not a valid
        -webkit-appearance value.

        * css/html.css:
        (input::-webkit-caps-lock-indicator):
        Add new default style for the new -webkit-caps-lock-indicator pseudo-element. The
        trick employed here is to use a content: image to both implement the painting of
        the caps lock indicator, and to get the sizing right (shrink-to-fit, height: 100%).

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::capsLockIndicatorElement):
        (WebCore::HTMLInputElement::capsLockStateMayHaveChanged):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::capsLockStateMayHaveChanged):
        * html/InputType.h:
        (WebCore::InputType::capsLockIndicatorElement):
        Pipe notification of changes in the caps locks state to the <input> element
        rather than the RenderTextControlSingleLine. Also add an accessor for the caps
        lock indicator element in the shadow DOM.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::shouldHaveCapsLockIndicator):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::capsLockIndicatorElement):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator):
        (WebCore::TextFieldInputType::capsLockStateMayHaveChanged):
        * html/TextFieldInputType.h:
        Add a new element to the text field shadow DOM to act as the caps lock indicator.
        Give it a pseudo-element ID of -webkit-caps-lock-indicator so it can be referenced
        from CSS. The element is always in the DOM for a password field. It toggles between
        display: none and display: block depending on the state of the caps lock key.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        Pipe notification of changes in the caps locks state to the <input> element
        rather than the RenderTextControlSingleLine.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::paint): Deleted.
        (WebCore::RenderTextControlSingleLine::capsLockStateMayHaveChanged): Deleted.
        * rendering/RenderTextControlSingleLine.h:
        Remove logic for drawing the caps lock indicator.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintMeter):
        (WebCore::RenderTheme::adjustCapsLockIndicatorStyle):
        (WebCore::RenderTheme::paintCapsLockIndicator):
        (WebCore::RenderTheme::shouldHaveCapsLockIndicator):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintCapsLockIndicator): Deleted.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::shouldHaveCapsLockIndicator):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldHaveCapsLockIndicator):
        (WebCore::RenderThemeMac::paintCapsLockIndicator): Deleted.
        Now that the caps lock indicator is implemented like other aspects of form controls,
        the theme code can be converted to be similar as well.

2015-02-21  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build failure after including CoreMediaSoftLink.h in WebVideoFullscreenInterfaceAVKit.mm
        <http://webkit.org/b/141816>

        Attempt to fix the following build failure:

            WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:68:1: error: call to 'CoreMediaLibrary' is ambiguous
            SOFT_LINK(CoreMedia, CMTimeRangeContainsTime, Boolean, (CMTimeRange range, CMTime time), (range, time))
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            In file included from WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:34:
            In file included from WebCore/platform/cf/CoreMediaSoftLink.h:32:
            WebCore/platform/mac/SoftLinking.h:107:79: note: expanded from macro 'SOFT_LINK'
            <scratch space>:58:1: note: expanded from here
            CoreMediaLibrary
            ^~~~~~~~~~~~~~~~
            In file included from WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:34:
            WebCore/platform/cf/CoreMediaSoftLink.h:35:1: note: candidate function
            SOFT_LINK_FRAMEWORK_HEADER(WebCore, CoreMedia)
            ^
            In file included from WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:34:
            In file included from WebCore/platform/cf/CoreMediaSoftLink.h:32:
            WebCore/platform/mac/SoftLinking.h:298:18: note: expanded from macro 'SOFT_LINK_FRAMEWORK_HEADER'
            <scratch space>:42:1: note: expanded from here
            CoreMediaLibrary
            ^
            WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:67:1: note: candidate function
            SOFT_LINK_FRAMEWORK(CoreMedia)
            ^
            In file included from WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm:34:
            In file included from WebCore/platform/cf/CoreMediaSoftLink.h:32:
            WebCore/platform/mac/SoftLinking.h:46:18: note: expanded from macro 'SOFT_LINK_FRAMEWORK'
            <scratch space>:51:1: note: expanded from here
            CoreMediaLibrary
            ^

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Remove the
        SOFT_LINK_FRAMEWORK(CoreMedia) macro since the remaining
        SOFT_LINK() and SOFT_LINK_CONSTANT() macros can use the
        CoreMediaLibrary() method exposed by CoreMediaSoftLink.h.

2015-02-21  David Kilzer  <ddkilzer@apple.com>

        Add SOFT_LINK_CONSTANT_SOURCE() cross-platform macro and start using it
        <http://webkit.org/b/141816>

        Reviewed by Alexey Proskuryakov.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        - Remove CoreMediaSoftLinking.h.

        * platform/cf/CoreMediaSoftLink.cpp:
        - Add kCMTimeZero constant.
        * platform/cf/CoreMediaSoftLink.h:
        - Add SOFT_LINK_FRAMEWORK_HEADER() macro for CoreMedia.
        - Add kCMTimeZero constant.

        * platform/graphics/avfoundation/cf/CoreMediaSoftLinking.h: Remove.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        - Remove reference to CoreMediaSoftLinking.h and update comment.
        (WebCore::MediaPlayerPrivateAVFoundationCF::isAvailable):
        - Switch to using new method to check if a framework is
          available.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        - Remove all local soft-linking macros for CoreMedia.
          CoreMediaSoftLink.h handles everything now.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable):
        - Switch to using new method to check if a framework is
          available.

        * platform/mac/SoftLinking.h:
        (SOFT_LINK_FRAMEWORK_HEADER): Add.  Defines
        is_Name_FrameworkAvailable() macro.
        (SOFT_LINK_FRAMEWORK_SOURCE): Update to make it work with
        optional framework checks without a separate macro.
        (SOFT_LINK_CONSTANT_HEADER): Add.
        (SOFT_LINK_CONSTANT_SOURCE): Add.
        - Support soft-links to constants.

        * platform/win/SoftLinking.h:
        (SOFT_LINK_FRAMEWORK_HELPER): Add.  Copied from
        SOFT_LINK_LIBRARY_HELPER, with addition of namespace and
        non-static function.
        (SOFT_LINK_FRAMEWORK): Add.  Copied from SOFT_LINK_LIBRARY.
        (SOFT_LINK_DEBUG_FRAMEWORK): Add.  Copied from
        SOFT_LINK_DEBUG_LIBRARY.
        (SOFT_LINK_FRAMEWORK_HEADER): Add.  Defines
        is_Name_FrameworkAvailable() macro.
        (SOFT_LINK_FRAMEWORK_SOURCE): Redefine in terms of
        SOFT_LINK_FRAMEWORK/SOFT_LINK_DEBUG_FRAMEWORK.
        (SOFT_LINK_CONSTANT_HEADER): Add.
        (SOFT_LINK_CONSTANT_SOURCE): Add.
        - Support soft-links to constants.

2015-02-20  David Kilzer  <ddkilzer@apple.com>

        Make namespace configurable for SOFT_LINK_*_{HEADER,SOURCE}() macros
        <http://webkit.org/b/141849>

        Reviewed by Brent Fulgham.

        This patch does the following:
        - Add namespace argument to the SOFT_LINK_*_{HEADER,SOURCE}()
          macros for reuse in other projects.
        - Adds SOFT_LINK_FRAMEWORK_SOURCE() macro in preparation for Bug
          141816.
        - Adds back framework argument to SOFT_LINK_FUNCTION_HEADER()
          and includes framework name in generated function names.  This
          adds more entropy to the names in case there are two functions
          with the same name in different frameworks.

        * platform/cf/CoreMediaSoftLink.cpp:
        - Add FIXME about USE(COREMEDIA).
        - Switch from SOFT_LINK_FRAMEWORK() to
          SOFT_LINK_FRAMEWORK_SOURCE().
        * platform/cf/CoreMediaSoftLink.h:
        - Add FIXME about USE(COREMEDIA).
        - Add back framework argument to SOFT_LINK_FUNCTION_HEADER()
          macros.

        * platform/mac/SoftLinking.h:
        - Add missing header guards.
        - Add pragmas for different macro groups.
        (SOFT_LINK_FRAMEWORK_SOURCE): Add.
        (SOFT_LINK_FUNCTION_HEADER): Move. Add back framework argument.
        (SOFT_LINK_FUNCTION_SOURCE): Move.
        - Add framework name to generated function names.
        - Incorporates namespace so that it doesn't have to be listed in
          the *SoftLink.{cpp,h} file.

        * platform/win/SoftLinking.h:
        - Add pragmas for different macro groups.
        (SOFT_LINK_FRAMEWORK_SOURCE): Add.
        (SOFT_LINK_FUNCTION_HEADER): Move. Add back framework argument.
        (SOFT_LINK_FUNCTION_SOURCE): Move.
        - Add framework name to generated function names.
        - Incorporates namespace so that it doesn't have to be listed in
          the *SoftLink.{cpp,h} file.

2015-02-20  Brent Fulgham  <bfulgham@apple.com>

        [Gtk] Unreviewed build fix.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone): Forget to update two
        uses of ScrollableArea.

2015-02-20  Brent Fulgham  <bfulgham@apple.com>

        Scrollbars and ScrollAnimators must always have a ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=141855

        Reviewed by Simon Fraser.

        No change in functionality.
        
        Change users of the scrollAnimator() method to expect a reference instead of a pointer. Also get rid of
        a number of unnecessary nullptr checks.

        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesCornerPresentPseudoClass):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::setFixedVisibleContentRect):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEventPhase):
        * platform/PopupMenuClient.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::handleWheelEvent):
        (WebCore::ScrollAnimator::notifyPositionChanged):
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::scrollableArea):
        * platform/ScrollAnimatorNone.cpp:
        * platform/ScrollAnimatorNone.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollAnimator):
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::notifyScrollPositionChanged):
        (WebCore::ScrollableArea::scrollPositionChanged):
        (WebCore::ScrollableArea::handleWheelEvent):
        (WebCore::ScrollableArea::handleTouchEvent):
        (WebCore::ScrollableArea::mouseEnteredScrollbar):
        (WebCore::ScrollableArea::mouseExitedScrollbar):
        (WebCore::ScrollableArea::didAddScrollbar):
        (WebCore::ScrollableArea::willRemoveScrollbar):
        (WebCore::ScrollableArea::verticalScrollbarLayerDidChange):
        (WebCore::ScrollableArea::horizontalScrollbarLayerDidChange):
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::createNativeScrollbar):
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::scrollbarOverlayStyle):
        (WebCore::Scrollbar::isScrollableAreaActive):
        (WebCore::Scrollbar::offsetDidChange):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::mouseEntered):
        (WebCore::Scrollbar::mouseExited):
        (WebCore::Scrollbar::mouseUp):
        (WebCore::Scrollbar::shouldParticipateInHitTesting):
        (WebCore::Scrollbar::isWindowActive):
        (WebCore::Scrollbar::invalidateRect):
        (WebCore::Scrollbar::convertToContainingView):
        (WebCore::Scrollbar::convertFromContainingView):
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::scrollableArea):
        (WebCore::Scrollbar::disconnectFromScrollableArea): Deleted.
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimatorIOS::handleTouchEvent):
        (WebCore::ScrollAnimatorIOS::determineScrollableAreaForTouchSequence):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        (-[WebScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (-[WebScrollbarPainterDelegate scrollAnimator]):
        (-[WebScrollbarPainterDelegate layer]):
        (-[WebScrollbarPainterDelegate mouseLocationInScrollerForScrollerImp:]):
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:animateAlphaTo:duration:]):
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollAnimatorMac::immediateScrollTo):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::verticalScrollbarLayerDidChange):
        (WebCore::ScrollAnimatorMac::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        (WebCore::ScrollAnimatorMac::isAlreadyPinnedInDirectionOfGesture):
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        (WebCore::ScrollAnimatorMac::stretchAmount):
        (WebCore::ScrollAnimatorMac::canScrollHorizontally):
        (WebCore::ScrollAnimatorMac::canScrollVertically):
        (WebCore::ScrollAnimatorMac::absoluteScrollPosition):
        (WebCore::ScrollAnimatorMac::immediateScrollByWithoutContentEdgeConstraints):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        (WebCore::ScrollAnimatorMac::setVisibleScrollerThumbRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar):
        (WebCore::RenderListBox::destroyScrollbar):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::createScrollbar):
        * rendering/RenderMenuList.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar):
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderScrollbar.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::createScrollbar):
        * rendering/RenderSearchField.h:

2015-02-20  Enrica Casucci  <enrica@apple.com>

        [WK2] Add support for font panel on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=141777

        Reviewed by Tim Horton.

        This patch adds the necessary hooks to the Editor class to support
        the font panel.

        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::applyFontStyles):

2015-02-20  Zalan Bujtas  <zalan@apple.com>

        Invalid assert in CompositeEditCommand::insertNodeAfter/insertNodeBefore
        https://bugs.webkit.org/show_bug.cgi?id=141854

        Reviewed by Ryosuke Niwa.

        Inserting content before/after the body as the result of editing is a valid operation.
        This assert was originally introduced to cover cases where edited content would get moved
        out of body. However, asserting such operation properly is not possible atm.

        Test: editing/inserting/insert-as-body-sibling.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeBefore):
        (WebCore::CompositeEditCommand::insertNodeAfter):

2015-02-20  Chris Dumez  <cdumez@apple.com>

        [WK2] Add more detailed diagnostic logging for measuring network cache efficacy
        https://bugs.webkit.org/show_bug.cgi?id=141803
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Add more diagnostic logging keys for the network cache.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::missingValidatorFieldsKey):
        (WebCore::DiagnosticLoggingKeys::noLongerInCacheKey):
        (WebCore::DiagnosticLoggingKeys::isReloadIgnoringCacheDataKey):
        (WebCore::DiagnosticLoggingKeys::isAttachmentKey):
        (WebCore::DiagnosticLoggingKeys::isConditionalRequestKey):
        (WebCore::DiagnosticLoggingKeys::cacheControlNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::uncacheableStatusCodeKey):
        (WebCore::DiagnosticLoggingKeys::unsupportedHTTPMethodKey):
        (WebCore::DiagnosticLoggingKeys::unusableCachedEntryKey):
        (WebCore::DiagnosticLoggingKeys::varyingHeaderMismatchKey):
        (WebCore::WebCore::DiagnosticLoggingKeys::notHTTPFamilyKey):
        (WebCore::DiagnosticLoggingKeys::notInCacheKey):
        (WebCore::DiagnosticLoggingKeys::noLongerInCacheFailureKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::unhandledRequestFailureKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::unusableCachedEntryFailureKey): Deleted.
        * page/DiagnosticLoggingKeys.h:

2015-02-20  Tim Horton  <timothy_horton@apple.com>

        <attachment> turns the wrong blue when you highlight it
        https://bugs.webkit.org/show_bug.cgi?id=141853

        Reviewed by Simon Fraser.

        * rendering/RenderAttachment.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldDrawSelectionTint):
        (WebCore::RenderReplaced::paint):
        * rendering/RenderReplaced.h:
        Don't draw the selection tint for RenderAttachment.

2015-02-20  Tim Horton  <timothy_horton@apple.com>

        Allow <attachment> elements to be focused
        https://bugs.webkit.org/show_bug.cgi?id=141847

        Reviewed by Enrica Casucci.

        * css/html.css:
        (attachment:focus):
        Disable focus rings for <attachment>.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::setFocus):
        * html/HTMLAttachmentElement.h:
        Allow HTMLAttachmentElement to get editing focus.
        Let RenderAttachment know when focus changes.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::paintReplaced):
        Paint the background in cyan when we are inside the selection or have focus.
        Otherwise, it will be gray.

        (WebCore::RenderAttachment::focusChanged):
        When focus changes, repaint.

        * rendering/RenderAttachment.h:

2015-02-20  Brent Fulgham  <bfulgham@apple.com>

        Rename ScrollElasticityController to ScrollController
        https://bugs.webkit.org/show_bug.cgi?id=141842

        Reviewed by Simon Fraser.

        No change in functionality.

        * PlatformMac.cmake:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::startSnapRubberbandTimer):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::isRubberBandInProgress):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        * platform/mac/ScrollController.h: Copied from WebCore/platform/mac/ScrollElasticityController.h.
        (WebCore::ScrollControllerClient::~ScrollControllerClient):
        (WebCore::ScrollElasticityControllerClient::~ScrollElasticityControllerClient): Deleted.
        * platform/mac/ScrollController.mm: Copied from WebCore/platform/mac/ScrollElasticityController.mm.
        (WebCore::ScrollController::ScrollController):
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::snapRubberBandTimerFired):
        (WebCore::ScrollController::isRubberBandInProgress):
        (WebCore::ScrollController::stopSnapRubberbandTimer):
        (WebCore::ScrollController::snapRubberBand):
        (WebCore::ScrollController::shouldRubberBandInHorizontalDirection):
        (WebCore::ScrollElasticityController::ScrollElasticityController): Deleted.
        (WebCore::ScrollElasticityController::handleWheelEvent): Deleted.
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired): Deleted.
        (WebCore::ScrollElasticityController::isRubberBandInProgress): Deleted.
        (WebCore::ScrollElasticityController::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollElasticityController::snapRubberBand): Deleted.
        (WebCore::ScrollElasticityController::shouldRubberBandInHorizontalDirection): Deleted.
        * platform/mac/ScrollElasticityController.h: Removed.
        * platform/mac/ScrollElasticityController.mm: Removed.

2015-02-20  Alexey Proskuryakov  <ap@apple.com>

        Remove svn:keywords property.

        As far as I can tell, the property had no effect on any of these files, but also,
        when it has effect it's likely harmful.

        * Modules/mediacontrols/assets-apple-iOS.svg: Removed property svn:keywords.
        * Modules/mediacontrols/mediaControlsBase.css: Removed property svn:keywords.
        * Modules/mediacontrols/mediaControlsBase.js: Removed property svn:keywords.
        * bindings/js/JSDeviceMotionEventCustom.cpp: Removed property svn:keywords.
        * css/CSSKeyframeRule.cpp: Removed property svn:keywords.
        * css/CSSKeyframeRule.h: Removed property svn:keywords.
        * css/CSSKeyframesRule.cpp: Removed property svn:keywords.
        * css/CSSKeyframesRule.h: Removed property svn:keywords.
        * css/WebKitCSSFilterValue.cpp: Removed property svn:keywords.
        * css/WebKitCSSFilterValue.h: Removed property svn:keywords.
        * css/plugIns.css: Removed property svn:keywords.
        * dom/AnimationEvent.cpp: Removed property svn:keywords.
        * dom/AnimationEvent.h: Removed property svn:keywords.
        * dom/DeviceMotionClient.h: Removed property svn:keywords.
        * dom/DeviceMotionController.cpp: Removed property svn:keywords.
        * dom/DeviceMotionController.h: Removed property svn:keywords.
        * dom/DeviceMotionData.cpp: Removed property svn:keywords.
        * dom/DeviceMotionData.h: Removed property svn:keywords.
        * dom/DeviceMotionEvent.cpp: Removed property svn:keywords.
        * dom/DeviceMotionEvent.h: Removed property svn:keywords.
        * html/canvas/ANGLEInstancedArrays.cpp: Removed property svn:keywords.
        * html/canvas/ANGLEInstancedArrays.h: Removed property svn:keywords.
        * html/canvas/OESTextureFloatLinear.cpp: Removed property svn:keywords.
        * html/canvas/OESTextureFloatLinear.h: Removed property svn:keywords.
        * html/canvas/OESTextureHalfFloatLinear.cpp: Removed property svn:keywords.
        * html/canvas/OESTextureHalfFloatLinear.h: Removed property svn:keywords.
        * html/shadow/MediaControlsApple.cpp: Removed property svn:keywords.
        * html/shadow/MediaControlsApple.h: Removed property svn:keywords.
        * page/Frame.h: Removed property svn:keywords.
        * page/scrolling/ScrollingConstraints.cpp: Removed property svn:keywords.
        * page/scrolling/ScrollingConstraints.h: Removed property svn:keywords.
        * page/scrolling/ScrollingStateStickyNode.cpp: Removed property svn:keywords.
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Removed property svn:keywords.
        * page/scrolling/mac/ScrollingTreeStickyNode.h: Removed property svn:keywords.
        * platform/ControlStates.h: Removed property svn:keywords.
        * platform/ScrollbarTheme.cpp: Removed property svn:keywords.
        * platform/graphics/GraphicsLayerUpdater.cpp: Removed property svn:keywords.
        * platform/graphics/GraphicsLayerUpdater.h: Removed property svn:keywords.
        * platform/graphics/ca/TileController.h: Removed property svn:keywords.
        * platform/graphics/ca/mac/WebTiledBackingLayer.h: Removed property svn:keywords.
        * platform/graphics/filters/FilterOperation.cpp: Removed property svn:keywords.
        * platform/graphics/filters/FilterOperation.h: Removed property svn:keywords.
        * platform/graphics/filters/FilterOperations.h: Removed property svn:keywords.
        * platform/ios/SystemMemory.h: Removed property svn:keywords.
        * platform/mock/ScrollbarThemeMock.cpp: Removed property svn:keywords.
        * platform/mock/ScrollbarThemeMock.h: Removed property svn:keywords.
        * platform/spi/cocoa/ServersSPI.h: Removed property svn:keywords.
        * platform/text/mac/ios-encodings.txt: Removed property svn:keywords.
        * rendering/FilterEffectRenderer.cpp: Removed property svn:keywords.
        * rendering/FilterEffectRenderer.h: Removed property svn:keywords.
        * rendering/RenderGeometryMap.cpp: Removed property svn:keywords.
        * rendering/RenderGeometryMap.h: Removed property svn:keywords.
        * rendering/RenderMediaControlElements.h: Removed property svn:keywords.
        * rendering/TextAutoSizing.cpp: Removed property svn:keywords.
        * rendering/TextAutoSizing.h: Removed property svn:keywords.
        * rendering/style/StylePendingImage.h: Removed property svn:keywords.

2015-02-20  Brent Fulgham  <bfulgham@apple.com>

        [Mac] REGRESSION: Scroll snap points broken after r180018
        https://bugs.webkit.org/show_bug.cgi?id=141821
        <rdar://problem/19898333>

        Reviewed by Simon Fraser.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::platformNotifySnapIfNecessary): Added stub.
        (WebCore::EventHandler::handleWheelEvent): Call new 'platformNotifySnapIfNecessary' method
        to catch the 'ended wheel' gesture.
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformNotifySnapIfNecessary): Added. If the wheel event signifies
        the end of a wheel/swipe gesture, let the snap logic decide if it should do anything
        (i.e., trigger an animation)
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::processWheelEventForScrollSnap): Added.
        * platform/ScrollAnimator.h:

2015-02-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] cleanup AirPlay code
        https://bugs.webkit.org/show_bug.cgi?id=141811

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: IOS_AIRPLAY -> WIRELESS_PLAYBACK_TARGET.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Ditto.
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl:

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::externalDeviceDisplayName): Ditto.
        (WebCore::MediaControlsHost::externalDeviceType):

        * dom/EventNames.h: Ditto.
        * dom/EventNames.in:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Ditto.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Ditto.
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): Ditto.
        (WebCore::HTMLMediaSession::applyMediaPlayerRestrictions): Ditto.
        * html/HTMLMediaSession.h:

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Ditto.
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:

        * page/Settings.in: Ditto.

        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm: Ditto.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::showPlaybackTargetPicker): Deleted.
        (WebCore::MediaPlayer::hasWirelessPlaybackTargets): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::showPlaybackTargetPicker): Deleted.
        (WebCore::MediaPlayerPrivateInterface::hasWirelessPlaybackTargets): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): IOS_AIRPLAY -> WIRELESS_PLAYBACK_TARGET.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer): Ditto.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Ditto.

2015-02-20  Dhi Aurrahman  <diorahman@rockybars.com>

        Language ranges containing asterisks must be quoted as strings
        https://bugs.webkit.org/show_bug.cgi?id=141659

        Reviewed by Benjamin Poulain.

        As specified in [1], the language ranges containing asterisks must be quoted as strings.

        [1] http://dev.w3.org/csswg/selectors-4/#the-lang-pseudo.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::realLex):

2015-02-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr in MediaPlayerFoo classes
        https://bugs.webkit.org/show_bug.cgi?id=137765

        Reviewed by Ryosuke Niwa.

        As a step to use std::unique_ptr|std::make_unique<>, this patch changes use of OwnPtr|PassOwnPtr
        with std::unique_ptr<>|std::make_unique<>. To remove all create() factory function, lambdas is
        used in registerMediaEngine().

        No new tests, no behavior changes.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::NullMediaPlayerPrivate):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::createNullMediaPlayer): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::create): Deleted.
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationCF::create): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::create): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::create): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamer::create): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine):
        (WebCore::MediaPlayerPrivateQTKit::create): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaFoundation::create): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):
        (WebCore::MockMediaPlayerMediaSource::create): Deleted.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:

2015-02-19  David Kilzer  <ddkilzer@apple.com>

        Rename SOFT_LINK_FUNCTION_{DECL,IMPL}() to SOFT_LINK_FUNCTION_{HEADER,SOURCE}()

        Rubber-stamped by Brent Fulgham.

        "HEADER" and "SOURCE" seem clearer than "DECL" and "IMPL", and
        Brent agreed when I talked to him in person.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        * platform/mac/SoftLinking.h:
        * platform/win/SoftLinking.h:
        - Do the rename.

2015-02-19  David Kilzer  <ddkilzer@apple.com>

        Move more CoreMedia soft-linked functions to CoreMediaSoftLink.{cpp,h}
        <http://webkit.org/b/141791>

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebCore.unexp:
        - Remove five more symbols.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        - Remove all local soft-links and include CoreMediaSoftLink.h.
          Note that SOFT_LINK_FRAMEWORK_OPTIONAL() should not have been
          used here since we didn't use the optional function soft-link
          method.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCFNetwork.props:
        * WebCore.xcodeproj/project.pbxproj:
        - Add CoreMediaSPI.h to the project.

        * platform/cf/CoreMediaSoftLink.cpp:
        * platform/cf/CoreMediaSoftLink.h:
        - Add three cross-platform symbols, five Cocoa-only symbols, and
          two Windows-only symbols (based on current usage, not
          availability on each platform).
        - Include CoreMediaSPI.h header.
        - Include <CoreMedia/CoreMedia.h> instead of just CMTime.h.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        - Remove all CoreMedia soft-linked functions.  Constants remain.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        - Remove one CoreMedia soft-linked method.

        * platform/graphics/avfoundation/MediaTimeAVFoundation.cpp:
        - Remove all CoreMedia soft-linked funtions.  With this change,
          we are already realizing space savings for duplicate
          SOFT_LINK_FRAMEWORK() calls.  (On Windows, there was code
          generated for many unused functions included by
          CoreMediaSoftLinking.h.)

        * platform/graphics/avfoundation/cf/CoreMediaSoftLinking.h:
        - Remove all CoreMedia soft-linked funtions.  Constants remain.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        - Remove duplicate header included by CoreMediaSoftLink.h.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        - Remove all CoreMedia soft-linked funtions.  Constants remain.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        - Remove three CoreMedia soft-linked methods.

        * platform/mac/PlatformClockCM.mm:
        - Remove two CoreMedia soft-linked methods.

        * platform/mac/SerializedPlatformRepresentationMac.mm:
        - Remove only CoreMedia soft-linked funtion.  It wasn't even
          used.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        - Remove two CoreMedia soft-linked method.

        * platform/spi/cf/CoreMediaSPI.h:
        - Add for SPI from CMNotificationCenter.h.

2015-02-19  David Hyatt  <hyatt@apple.com>

        Columns are splitting unsplittable content.
        https://bugs.webkit.org/show_bug.cgi?id=141807
        <rdar://problem/18387659>

        Reviewed by Dean Jackson.

        Added inline-table-dynamic-movement.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::pageLogicalTopForOffset):
        (WebCore::RenderBlockFlow::pageLogicalHeightForOffset):
        Patch these functions to always check the layout state for a zero
        pageLogicalHeight, since that is actually our indicator that we're
        doing column balancing and don't have a height set yet.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::isPageLogicalHeightKnown):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::setAndConstrainColumnHeight):
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        * rendering/RenderMultiColumnSet.h:
        The function for deciding whether the logical height of the columns was
        known was checking for a zero computedColumnHeight. However, a column set
        can legitimately compute a zero column height, and with the fix to examine
        the layout state, this bug was exposed.

        The fix is to add a new variable that caches whether or not the column height
        has been computed, so that even if it computes to zero, we aren't fooled.

2015-02-19  Chris Dumez  <cdumez@apple.com>

        [iOS] Fix inefficiencies in ResourceResponse::platformLazyInit()
        https://bugs.webkit.org/show_bug.cgi?id=141744

        Reviewed by Alexey Proskuryakov.

        Fix inefficiencies in iOS's ResourceResponse::platformLazyInit()
        implementation, similarly to what was already done for Mac in:
        <http://trac.webkit.org/changeset/174717>

        The following changes were made:
        - Add missing "initLevel == AllFields" check before initializing
          uncommon fields. This bug was causing us to initialize uncommon
          fields even if called with 'CommonFieldsOnly' initLevel.
        - Bypass the first pass populating common HTTP headers in
          m_httpHeaderFields if the initLevel is AllFields. If called
          with AllFields initLevel, we will end up populating all HTTP
          headers later on so this first pass is redundant.
        - Use C++11 range loop to iterator over commonHeaderFields array
          for readability.
        - Use CFDictionaryApplyFunction() to populate m_httpHeaderFields
          for the CFDictionaryRef containing the headers instead of creating
          copies of keys and values using CFDictionaryGetKeysAndValues() and
          then iterating over those. This avoids allocating Vectors for keys /
          values and avoids unnecessary copying.


2015-02-18  Dean Jackson  <dino@apple.com>

        Sufficiently small media controls should remove toolbar elements
        https://bugs.webkit.org/show_bug.cgi?id=141780
        <rdar://problem/16548548>
        <rdar://problem/17598778>
        <rdar://problem/18351963>

        Reviewed by Eric Carlson.

        Implement some logic where elements on the media controls are
        hidden when there isn't enough room. We start by dropping
        the scrubber, then the various buttons on the right hand
        side.

        This solution isn't perfect. If we had perfection, it would
        be because we get resize events and respond accordingly. Instead
        we check the size when the user has pinch-zoomed, or when
        we start/stop playing.

        This is going to cause some extra layout, because we need
        to know the size of things before we can work out which
        bits to hide.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls): Remove the minimum width. This can
        cause the controls to get clipped.
        (audio::-webkit-media-controls-spacer): Add this empty element to
        replace the scrubber when it is hidden.
        (audio::-webkit-media-controls-timeline-container):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Remember our size so we don't churn.
        (ControllerIOS.prototype.createControls): Create a new spacer element.
        (ControllerIOS.prototype.configureInlineControls):
        (ControllerIOS.prototype.showControls): Check if we need to hide stuff.
        (ControllerIOS.prototype.updateControls):
        (ControllerIOS.prototype.setPlaying): Ditto.
        (ControllerIOS.prototype.set pageScaleFactor): Ditto.
        (ControllerIOS.prototype.scheduleUpdateLayoutForDisplayedWidth): Trigger an update
        asap. In this case it's probably ok to be in a bad state for a frame, or
        we are inside setup and we know that we'll layout soon.
        (ControllerIOS.prototype.updateLayoutForDisplayedWidth): The actual code
        that hides elements.

2015-02-19  Tim Horton  <timothy_horton@apple.com>

        Move the software-only ImageBuffer::m_context to ImageBufferData
        https://bugs.webkit.org/show_bug.cgi?id=141784

        Reviewed by Simon Fraser.

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        * platform/graphics/cg/ImageBufferDataCG.h:
        Move m_context to ImageBufferData in the software-only section;
        for accelerated contexts, the GraphicsContext is owned by the IOSurface wrapper.
        This will make it harder for ImageBuffer to make the mistake of using
        m_context blindly without thinking when it will often be null.

2015-02-18  Andreas Kling  <akling@apple.com>

        REGRESSION(r179347): Clearing the PageCache no longer clears the PageCache.
        <https://webkit.org/b/141788>

        Reviewed by Anders Carlsson.

        Once again we've fallen into the TemporaryChange trap:

            TemporaryChange<unsigned>(m_member, temporaryValue);

        The code above doesn't actually do anything. Since the TemporaryChange local is not named,
        it immediately goes out of scope and restores the original value of m_member.

        Unless someone knows a C++ trick to prevent these, we'll need to add a style checker pass
        to catch bugs like this. Whatever we do will be done separately from this bug.

        Test: fast/history/page-cache-clearing.html

        * history/PageCache.cpp:
        (WebCore::PageCache::pruneToSizeNow): Name the local so it lives longer.

        * testing/Internals.cpp:
        (WebCore::Internals::clearPageCache):
        (WebCore::Internals::pageCacheSize):
        * testing/Internals.h:
        * testing/Internals.idl: Add a way to clear the page cache and query its size from
        window.internals to facilitate writing a simple test for this bug.

2015-02-18  Alexey Proskuryakov  <ap@apple.com>

        Roll out r180280.

        Crashes under IDBDatabase::closeConnection.
        https://bugs.webkit.org/show_bug.cgi?id=141745
        rdar://problem/19816412

        * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::closeConnection):

2015-02-18  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS Simulator build after r180308.

        * platform/graphics/cg/ImageBufferDataCG.h:

2015-02-18  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r174761) Dangling spanner pointer in RenderMultiColumnSpannerPlaceholder.
        https://bugs.webkit.org/show_bug.cgi?id=138224

        Reviewed by Dave Hyatt.

        It's wrong to call flowThreadRelativeWillBeRemoved(child).
        RenderMultiColumnFlowThread::removeFlowChildInfo() does not mean that the child is actually about to be removed.
        Should this introduce any regressions, we need to deal with those separately.

        Test: fast/multicol/crash-when-spanner-gets-moved-around.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::removeFlowChildInfo): Deleted.
        * rendering/RenderMultiColumnFlowThread.h:

2015-02-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] CFData leak in CDMSessionAVFoundationCF
        https://bugs.webkit.org/show_bug.cgi?id=141765
        <rdar://problem/141765>

        Reviewed by Joseph Pecoraro.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        (WebCore::CDMSessionAVFoundationCF::generateKeyRequest): use 'adoptCF'
        so we don't double-increment the retain count.

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Adopt WebCore::IOSurface in ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=141751

        Reviewed by Simon Fraser.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface): Deleted.
        (WebCore::ImageBuffer::ImageBuffer):
        Make use of cachedCGColorSpace.
        Make use of WebCore::IOSurface.
        Remove the unused size argument from ImageBufferDataCG.
        Clear the IOSurface once we've allocated it; WebCore::IOSurface doesn't
        do this for us, unlike wkIOSurfaceContextCreate.
        Apply the flipping and scale factor to whichever context we made.
        We don't need to setIsAcceleratedContext anymore because it's always
        false for software contexts, and WebCore::IOSurface will set it for
        any accelerated contexts.

        (WebCore::ImageBuffer::context):
        If we are IOSurface-backed, return WebCore::IOSurface's GraphicsContext.

        (WebCore::ImageBuffer::flushContext):
        Make use of context(); m_context is now null for accelerated ImageBuffers.

        (WebCore::ImageBuffer::copyNativeImage):
        Adopt in-line with the Create functions for clarity. Make use of
        IOSurface::createImage instead of wkIOSurfaceContextCreateImage.

        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::ImageBuffer::toDataURL):
        Make use of context(); m_context is now null for accelerated ImageBuffers.

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        Indentation fix, and use nullptr.

        (WebCore::convertScanline):
        Grammar fix (is -> are).

        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        Grab the IOSurfaceRef from the IOSurface wrapper. Eventually these things
        should be made more convenient by the wrapper.

        * platform/graphics/cg/ImageBufferDataCG.h:
        Drop the unused size argument from the constructor.
        Reorganize and label the various members which are only used
        for a particular type of ImageBufferDataCG.

        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::ensureGraphicsContext):
        IOSurface-backed GraphicsContexts are always considered accelerated.

        (IOSurface::create):
        (IOSurface::IOSurface):
        Add a constructor that take an extra size to use when making the CGContext;
        it can only be less than the actual backing IOSurface size.
        This is needed for r160121.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Remove old WKSI IOSurface-related functions.

2015-02-18  Alex Christensen  <achristensen@webkit.org>

        Prepare to use WEBCORE_EXPORT on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=141735

        Reviewed by Brent Fulgham.

        * bindings/js/GCController.h:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        * bindings/scripts/test/JS/JSreadonly.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * dom/make_names.pl:
        (printNamesHeaderFile):
        * history/HistoryItem.h:
        * loader/FrameLoader.h:
        * loader/LoaderStrategy.h:
        * loader/ResourceLoadScheduler.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.h:
        * page/DatabaseProvider.h:
        * page/Page.h:
        * page/PageConsoleClient.h:
        * page/PageOverlay.h:
        * platform/FileSystem.h:
        * platform/MemoryPressureHandler.h:
        * platform/ThreadGlobalData.h:
        * platform/URL.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/network/BlobDataFileReference.h:
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/sql/SQLiteDatabase.h:
        * rendering/ScrollBehavior.h:
        * rendering/break_lines.h:
        Add and move some WEBCORE_EXPORT macros.

2015-02-18  Anders Carlsson  <andersca@apple.com>

        Rename LocalizedStringsMac.cpp to LocalizedStringsCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=141767

        Reviewed by Tim Horton.

        Also, move it to platform/cocoa instead of platform/mac.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/LocalizedStringsCocoa.mm: Renamed from Source/WebCore/platform/mac/LocalizedStringsMac.cpp.

2015-02-18  Antti Koivisto  <antti@apple.com>

        Rename FontGlyphs to FontCascadeFonts
        https://bugs.webkit.org/show_bug.cgi?id=141754

        Reviewed by Andreas Kling.

        "It is better than Impl."

        The purpose of the class to own to create and own the realized Font instances and the associated caches
        for FontCascade instances.

2015-02-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180286.
        https://bugs.webkit.org/show_bug.cgi?id=141766

        Caused >50 crashed LayoutTests (Requested by jernoble on
        #webkit).

        Reverted changeset:

        "Page::userContentController() should return a reference, not
        a pointer"
        https://bugs.webkit.org/show_bug.cgi?id=141764
        http://trac.webkit.org/changeset/180286

2015-02-18  David Kilzer  <ddkilzer@apple.com>

        Consolidate soft-linked CMTimeMakeWithSeconds() function
        <http://webkit.org/b/141655>

        Reviewed by Brent Fulgham.

        * Configurations/WebCore.unexp: Remove workaround for
        CMTimeMakeWithSeconds() weak external.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        - Add CoreMediaSoftLink.{cpp,h} to the project.

        * platform/cf/CoreMediaSoftLink.cpp: Add.
        * platform/cf/CoreMediaSoftLink.h: Add.
        - Implement new strategy where code for soft-linking is only
          in one place, and the header can simply be included wherever a
          soft-linked method is needed.

        * platform/graphics/avfoundation/MediaTimeAVFoundation.cpp:
        * platform/graphics/avfoundation/cf/CoreMediaSoftLinking.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        * platform/mac/PlatformClockCM.mm:
        - Remove old soft-linking strategy and include
          CoreMediaSoftLink.h.

        * platform/mac/SoftLinking.h:
        (SOFT_LINK_FUNCTION_DECL): Add.  New macro function used for
        header declaration.  Split out from SOFT_LINK() macro.  Also
        stop violating C++ standards by redeclaring an inline function
        with the exact same signature as an extern "C" function.  This
        now matches what we do on Windows (where Visual C++ already
        prevented these shenanigans).
        (SOFT_LINK_FUNCTION_IMPL): Add.  New macro function used for
        source implementation.  Split out the from SOFT_LINK() macro.

        * platform/win/SoftLinking.h:
        (SOFT_LINK_FRAMEWORK): Map mac/SoftLinking.h macro name to
        Windows macros so we can simplify CoreMediaSoftLink.{cpp,h}.
        (SOFT_LINK_FUNCTION_DECL): Add.
        (SOFT_LINK_FUNCTION_IMPL): Add.
        - New macro functions split out from SOFT_LINK_DLL_IMPORT()
          macro for header declaration and source implementation.
        - We assume the __cdecl calling convention because that's what
          all Apple libraries use, and so we are able to use the exact
          same macro function on both Mac and Windows to simplify
          CoreMediaSoftLink.{cpp,h}.

2015-02-18  Brady Eidson  <beidson@apple.com>

        Page::userContentController() should return a reference, not a pointer
        https://bugs.webkit.org/show_bug.cgi?id=141764

        Reviewed by Jer Noble.

        No new tests (No behavior change)

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::shouldHaveWebKitNamespaceForWorld):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::setUserContentController):
        * page/Page.h:
        (WebCore::Page::userContentController):
        * page/UserMessageHandlersNamespace.cpp:
        (WebCore::UserMessageHandlersNamespace::handler):

2015-02-18  Roger Fong  <roger_fong@apple.com>

        WebGL2: Promote various WebGL1 extensions to core for WebGL2.
        https://bugs.webkit.org/show_bug.cgi?id=141446
        <rdar://problem/19633715>

        Reviewed by Brent Fulham.

        Tests covered by WebGL2 conformance tests.

        This patch promotes the following WebGL1 extensions to core in WebGL2:
        OES_element_index_uint 
        EXT_sRGB 
        EXT_blend_minmax 
        EXT_frag_depth 
        EXT_shader_texture_lod
        OES_standard_derivatives 
        
        The latter 3 are enabled by default now for GLSL1, though we will get these extensions 
        for free when GLSL3 becomes available.

        WebGL2 binding code should actually fall back to base implementation for getFramebufferAttachmentParameter.
        * bindings/js/JSWebGL2RenderingContextCustom.cpp: 
        (WebCore::JSWebGL2RenderingContext::getFramebufferAttachmentParameter): Deleted.
        * html/canvas/WebGL2RenderingContext.idl: Ditto.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension): Enable WEBGL_lose_context as an extension again.
        It was not promoted to core as I originally thought it had been.
        (WebCore::WebGL2RenderingContext::getSupportedExtensions): Ditto.
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext): Promote the 3 shader extensions for GLSL1 to core.
        (WebCore::WebGL2RenderingContext::initializeShaderExtensions): Ditto.
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter): Promote SRGB extension to core.
        (WebCore::WebGL2RenderingContext::renderbufferStorage): Ditto.
        (WebCore::WebGL2RenderingContext::hint): Ditto.
        (WebCore::WebGL2RenderingContext::validateTexFuncFormatAndType): Ditto.
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative): Promote OES_element_index_uint extension to core.
        (WebCore::WebGL2RenderingContext::validateDrawElements): Ditto.
        (WebCore::WebGL2RenderingContext::validateBlendEquation): Promote EXT_blend_minmax extension to core.
        * html/canvas/WebGL2RenderingContext.h:

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Copied form WebGLRenderingContextBase.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Ditto.
        (WebCore::WebGLRenderingContext::hint): Ditto.
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Ditto.
        (WebCore::WebGLRenderingContext::validateDrawElements): Ditto.
        (WebCore::WebGLRenderingContext::validateBlendEquation): Ditto.
        * html/canvas/WebGLRenderingContext.h:

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateIndexArrayConservative): Deleted.
        (WebCore::WebGLRenderingContextBase::validateDrawElements): Deleted.
        (WebCore::WebGLRenderingContextBase::getExtension): Deleted.
        (WebCore::WebGLRenderingContextBase::getFramebufferAttachmentParameter): Deleted.
        (WebCore::WebGLRenderingContextBase::hint): Deleted.
        (WebCore::WebGLRenderingContextBase::renderbufferStorage): Deleted.
        (WebCore::WebGLRenderingContextBase::validateBlendEquation): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:

2015-02-18  Alexey Proskuryakov  <ap@apple.com>

        Streamline unexported function build fixes
        https://bugs.webkit.org/show_bug.cgi?id=141761

        Reviewed by Alex Christensen.

        * Configurations/WebCore.unexp: Added some functions for symbols only used on newer
        OS versions. Removed a special case for NodeList, to handle it uniformly with Node.

        * Configurations/WebCore.xcconfig: Made the unexported list unconditional, because
        it's not only Xcode 5 that is affected.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateHeader): We already had a hack for
        Node, NodeList needs an exactly the same one. Also updated the comments.

2015-02-18  Chris Dumez  <cdumez@apple.com>

        Access FontCache global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141726

        Reviewed by Daniel Bates.

        Access FontCache global instance via singleton() static member function,
        as per coding style.

2015-02-18  Alexey Proskuryakov  <ap@apple.com>

        Crashes under IDBDatabase::closeConnection.
        https://bugs.webkit.org/show_bug.cgi?id=141745
        rdar://problem/19816412

        Reviewed by David Kilzer.

        * Modules/indexeddb/IDBDatabase.cpp: (WebCore::IDBDatabase::closeConnection):
        Add a missing protector.

2015-02-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Justified ruby can cause lines to grow beyond their container
        https://bugs.webkit.org/show_bug.cgi?id=141732

        Reviewed by David Hyatt.

        After we re-layout RenderRubyRuns, this can change the environment upon which
        ruby's overhang calculation is sensitive to. Before this patch, we would recalculate
        the overhang after the RenderRubyRun gets relaid out. However, doing such causes the
        effective width of the RenderRubyRun to change, which causes out subsequent
        justification calculations to be off.

        Therefore, we have a cycle; the amount of ruby overhang can change the justification
        in a line, and the layout of the line affects the ruby overhang calculation. Instead
        of performing a layout in a loop until it converges, this patch simply observes that
        having a flush right edge is more valuable than having a perfectly correct overhang.
        It therefore simply removes the secondary overhang calculation.

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

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText):
        (WebCore::RenderBlockFlow::computeExpansionForJustifiedText):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):

2015-02-18  Chris Dumez  <cdumez@apple.com>

        Evict dead resources in MemoryCache in MemoryPressureHandler::releaseNoncriticalMemory()
        https://bugs.webkit.org/show_bug.cgi?id=141723

        Reviewed by Andreas Kling.

        Evict dead resources from the MemoryCache on non-critical memory
        pressure. On critical memory pressure, we already evict ALL resources
        from the MemoryCache. It is a good idea to start by evicting resources
        we care less about on non-critical warning to decrease the chances of
        getting a critical warning and thus having to clear the whole
        MemoryCache.

        * loader/cache/MemoryCache.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseNoncriticalMemory):
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
        (WebCore::MemoryPressureHandler::releaseMemory):
        Call releaseCriticalMemory() before releaseNoncriticalMemory()
        as releaseCriticalMemory() is more aggressive. Doing it the
        other way around would mean that on critical warning, we would
        first evict dead resources, then evict all resources. It is
        more efficient to evict all resources first, as it makes the
        non-critical operation (evict dead resources) a no-op.

2015-02-18  Eric Carlson  <eric.carlson@apple.com>

        [iOS] pause video when a tab moves to the background on some devices
        https://bugs.webkit.org/show_bug.cgi?id=141753
        <rdar://problem/19814562>

        Reviewed by Jer Noble.

        Test: media/video-background-tab-playback.html

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::clientDataBufferingTimerFired): Pause video when the element becomes
            hidden if the BackgroundTabPlaybackRestricted is set.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Rename BackgroundPlaybackNotPermitted
             to BackgroundProcessPlaybackRestricted.
        (WebCore::MediaSessionManager::applicationWillEnterForeground): Ditto.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Set BackgroundTabPlaybackRestricted on
            devices with restricted memory. BackgroundPlaybackNotPermitted -> BackgroundProcessPlaybackRestricted.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Add support for BackgroundTabPlaybackRestricted.
            BackgroundPlaybackNotPermitted -> BackgroundProcessPlaybackRestricted.

2015-02-16  David Hyatt  <hyatt@apple.com>

        Wrong element's style is used for text-decoration-style.
        https://bugs.webkit.org/show_bug.cgi?id=141673
        <rdar://problem/19876774>

        Reviewed by Dean Jackson.

        Added fast/text/text-underline-style.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        Add arguments for fetching styles.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/InlineTextBox.h:
        Remove the passed in TextDecorationStyle and instead patch the code to fetch the styles in the same
        way it fetches the colors.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColorsAndStyles):
        (WebCore::RenderObject::getTextDecorationColors): Deleted.
        * rendering/RenderObject.h:
        Add style fetching to the same function that fetches colors and rename it.

2015-02-18  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180260): Try to fix incremental builds by changing UserContentController.cpp

        Attempt to fix this linker error by making a non-coding change:

            Undefined symbols for architecture i386:
              "__ZN7WebCore17ContentExtensions24ContentExtensionsBackendC1Ev", referenced from:
                  __ZN7WebCore21UserContentController20addUserContentFilterERKN3WTF6StringES4_ in UserContentController.o
            ld: symbol(s) not found for architecture i386

        This should have been fixed by r180266, but perhaps Xcode didn't
        recognize that it needed to rebuild this source file.

        * page/UserContentController.cpp: Update copyright.

2015-02-18  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from CanvasRenderingContext2D.
        <https://webkit.org/b/141749>

        Reviewed by Gyuyoung Kim.

        Switch from using PassRefPtr to RefPtr/Ref in CanvasRenderingContext2D.

        * html/TextMetrics.h:
        (WebCore::TextMetrics::create): Changed create() helper to return Ref.

        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::prepareGradientForDashboard): Changed to take a reference.

        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::webkitGetImageDataHD): Made these return RefPtr. Also did
        a bunch of 0 -> nullptr conversion, removed a bunch of unnecessary RefPtr::release() calls,
        and changed a PassRefPtr argument to RefPtr&&.

        (WebCore::CanvasRenderingContext2D::measureText): Made this return Ref.

2015-02-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r180260.
        https://bugs.webkit.org/show_bug.cgi?id=141757

        Broke the 32-bit builders (Requested by jessieberlin on
        #webkit).

        Reverted changeset:

        "Add a trivial code generator for the DFA"
        https://bugs.webkit.org/show_bug.cgi?id=141017
        http://trac.webkit.org/changeset/180260

2015-02-17  Anders Carlsson  <andersca@apple.com>

        Add API for clearing in-memory caches to WKWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=141724

        Reviewed by Tim Horton.

        Add a version of evictResources that takes a session id.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::evictResources):

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Remove more references to WebCore.exp.in
        https://bugs.webkit.org/show_bug.cgi?id=141747

        Reviewed by Alexey Proskuryakov.

        * WebCore.xcodeproj/project.pbxproj:

2015-02-17  Benjamin Poulain  <benjamin@webkit.org>

        Add a trivial code generator for the DFA
        https://bugs.webkit.org/show_bug.cgi?id=141017

        Reviewed by Andreas Kling.

        Nothing fancy yet, this is just doing a literal translation from the DFA
        to machine code. It is extremely inefficient at the moment.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::ContentExtensionsBackend):
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        (WebCore::ContentExtensions::addActionToHashSet):
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL):
        * contentextensions/ContentExtensionsBackend.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::nextState): Deleted.
        (WebCore::ContentExtensions::DFA::actions): Deleted.
        * contentextensions/DFA.h:
        (WebCore::ContentExtensions::DFA::size):
        (WebCore::ContentExtensions::DFA::nodeAt):
        * contentextensions/DFACompiler.cpp: Added.
        (WebCore::ContentExtensions::compileDFA):
        (WebCore::ContentExtensions::DFACodeGenerator::DFACodeGenerator):
        (WebCore::ContentExtensions::DFACodeGenerator::compile):
        (WebCore::ContentExtensions::DFACodeGenerator::lowerStateMachine):
        (WebCore::ContentExtensions::DFACodeGenerator::lowerNode):
        (WebCore::ContentExtensions::DFACodeGenerator::getNextCharacter):
        (WebCore::ContentExtensions::DFACodeGenerator::callAddActionFunction):
        * contentextensions/DFACompiler.h: Copied from Source/WebCore/contentextensions/DFA.h.

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Rename ScopedEventQueue::instance() to singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141738

        Reviewed by Daniel Bates.

        Rename ScopedEventQueue::instance() to singleton(), as per coding
        style. Also modernize the code a little bit.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchScopedEvent):
        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::singleton):
        (WebCore::ScopedEventQueue::dispatchAllEvents):
        (WebCore::ScopedEventQueue::incrementScopingLevel):
        (WebCore::ScopedEventQueue::decrementScopingLevel):
        (WebCore::ScopedEventQueue::ScopedEventQueue): Deleted.
        (WebCore::ScopedEventQueue::~ScopedEventQueue): Deleted.
        (WebCore::ScopedEventQueue::instance): Deleted.
        * dom/ScopedEventQueue.h:
        (WebCore::EventQueueScope::EventQueueScope):
        (WebCore::EventQueueScope::~EventQueueScope):

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Remove dead code from FontCache
        https://bugs.webkit.org/show_bug.cgi?id=141741

        Reviewed by Daniel Bates.

        Remove dead code from FontCache:
        - getFontFamilyForCharacters() has no implementation.
        - SimpleFontFamily is unused.

        * platform/graphics/FontCache.h:

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Rename CSSPropertyAnimationWrapperMap::instance() to singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141739

        Reviewed by Simon Fraser.

        Rename CSSPropertyAnimationWrapperMap::instance() to singleton(), as
        per coding style.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::singleton):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::animationOfPropertyIsAccelerated):
        (WebCore::CSSPropertyAnimation::animatableShorthandsAffectingProperty):
        (WebCore::CSSPropertyAnimation::propertiesEqual):
        (WebCore::CSSPropertyAnimation::getPropertyAtIndex):
        (WebCore::CSSPropertyAnimation::getNumProperties):
        (WebCore::CSSPropertyAnimationWrapperMap::instance): Deleted.

2015-02-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180224): Remove unused generate-export-file script
        <http://webkit.org/b/141491>

        * generate-export-file: Removed.  This was the script used to
        create WebCore.exp files for iOS since we couldn't compile a
        host-side tool to run like we did on Mac OS X.  Dont't tell
        anyone, but this was an epic hack I created while merging open
        source changes to the internal iOS WebKit repository around the
        time that the WebCore.exp.in file was created.  End of an era.

2015-02-17  David Kilzer  <ddkilzer@apple.com>

        SoftLinking.h: Update copyright and license; clean up whitespace

        * platform/win/SoftLinking.h:

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Slight CachedPage class clean up
        https://bugs.webkit.org/show_bug.cgi?id=141693

        Reviewed by Andreas Kling.

        Slight CachedPage class clean up:
        - Drop unnecessary m_timeStamp data member
        - Protect m_needsCaptionPreferencesChanged data member with
          #if ENABLE(VIDEO_TRACK)
        - Merge destroy() method into the destructor as this is the
          only caller
        - Update clear() to reset 2 data members that were missing

2015-02-17  Anders Carlsson  <andersca@apple.com>

        Silence two -Wcast-qual warnings.
        rdar://problem/19758266

        * platform/ios/wak/WKUtilities.c:
        (WKRetain):
        (WKRelease):

2015-02-17  Zalan Bujtas  <zalan@apple.com>

        Minor RenderTable* class cleanups.
        https://bugs.webkit.org/show_bug.cgi?id=141707

        Reviewed by Andreas Kling.

        Use in-class initializer where possible.
        Remove redundant code.
        Move multiline implementations out of class declaration.

        No change in functionality.

        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::insertedIntoTree):
        (WebCore::RenderTableCaption::willBeRemovedFromTree):
        (WebCore::RenderTableCaption::containingBlockLogicalWidthForContent): Deleted.
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::colSpan):
        (WebCore::RenderTableCell::rowSpan):
        (WebCore::RenderTableCell::setCol):
        (WebCore::RenderTableCell::col):
        (WebCore::RenderTableCell::section):
        (WebCore::RenderTableCell::table):
        (WebCore::RenderTableCell::rowIndex):
        (WebCore::RenderTableCell::styleOrColLogicalWidth):
        (WebCore::RenderTableCell::logicalHeightForRowSizing):
        (WebCore::RenderTableCell::isBaselineAligned):
        (WebCore::RenderTableCell::borderAdjoiningTableStart):
        (WebCore::RenderTableCell::borderAdjoiningTableEnd):
        (WebCore::RenderTableCell::borderAdjoiningCellBefore):
        (WebCore::RenderTableCell::borderAdjoiningCellAfter):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::enclosingColumnGroupIfAdjacentBefore):
        (WebCore::RenderTableCol::enclosingColumnGroupIfAdjacentAfter):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::setRowIndex):
        (WebCore::RenderTableRow::rowIndex):
        (WebCore::RenderTableRow::borderAdjoiningTableStart):
        (WebCore::RenderTableRow::borderAdjoiningTableEnd):
        (WebCore::RenderTableRow::table):
        (WebCore::RenderTableSection::firstRow):
        (WebCore::RenderTableSection::lastRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::dirtiedRows):
        (WebCore::RenderTableSection::dirtiedColumns):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        (WebCore::CellSpan::CellSpan):
        (WebCore::RenderTableSection::borderAdjoiningTableStart):
        (WebCore::RenderTableSection::borderAdjoiningTableEnd):
        (WebCore::RenderTableSection::cellAt):
        (WebCore::RenderTableSection::primaryCellAt):
        (WebCore::RenderTableSection::rowRendererAt):
        (WebCore::RenderTableSection::outerBorderLeft):
        (WebCore::RenderTableSection::outerBorderRight):
        (WebCore::RenderTableSection::outerBorderTop):
        (WebCore::RenderTableSection::outerBorderBottom):
        (WebCore::RenderTableSection::numRows):
        (WebCore::RenderTableSection::recalcCellsIfNeeded):
        (WebCore::RenderTableSection::rowBaseline):
        (WebCore::RenderTableSection::fullTableRowSpan):
        (WebCore::CellSpan::start): Deleted.
        (WebCore::CellSpan::end): Deleted.

2015-02-16  Dean Jackson  <dino@apple.com>

        REGRESSION: Video control fails to hide after playback begins in reflowable EPUB files
        https://bugs.webkit.org/show_bug.cgi?id=141689
        <rdar://problem/19689286>

        Reviewed by Eric Carlson.

        The iBooks app turns off the requirement for a user gesture
        before triggering playback. When we moved to script-based
        media controls there were a few regressions in this setup.
        This makes them behave a lot more like iOS 7.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.setPlaying): We don't want to hide the controls
        yet, just start a hiding timer.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton): If we've ever
        played before, we don't want to show the big start button. If we
        are in the middle of construction, we do want to show it. We no
        longer care about the case where you're not in setup and have
        the relaxed restrictions (we still want to show the start button
        in that case).
        (ControllerIOS.prototype.showControls): When we show the controls,
        make sure our timeline is up to date. This is necessary for the
        cases where we automatically show the controls, such as when we hit
        the end of a video.
        (ControllerIOS.prototype.updateTime): Make sure to pass the forceUpdate
        parameter on to the super-method.
        (ControllerIOS.prototype.setPlaying):
        (ControllerIOS.prototype.progressFillStyle): Deleted.

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Access MemoryPressureHandler global instance via a singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141691

        Reviewed by Andreas Kling.

        Access MemoryPressureHandler global instance via a singleton() static
        member function as per coding style. Also make all other member
        functions non-static as callers can just use singleton() to get the
        instance and access methods. This avoid having to call
        MemoryPressureHandler::singleton() from member functions.

        * bindings/js/ScriptController.cpp:
        (WebCore::collectGarbageAfterWindowShellDestruction):
        * history/PageCache.cpp:
        (WebCore::PageCache::canCache):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        (WebCore::FrameView::computeCoverageRect):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::singleton):
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
        (WebCore::memoryPressureHandler): Deleted.
        * platform/MemoryPressureHandler.h:
        (WebCore::MemoryPressureHandler::setLowMemoryHandler):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::respondToMemoryPressureCallback):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::createTilesInActiveGrid):
        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::shouldUseMinimalTileCoverage):
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::addLayer):
        * platform/ios/TileControllerMemoryHandlerIOS.cpp:
        (WebCore::TileControllerMemoryHandler::tileControllerGainedUnparentedTiles):
        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::waitForMemoryPressureEvent):

2015-02-17  Alex Christensen  <achristensen@webkit.org>

        Remove WebCore.exp.in and clean up.
        https://bugs.webkit.org/show_bug.cgi?id=141491

        Reviewed by Andreas Kling.

        * Configurations/WebCore.xcconfig:
        Don't use exported symbols files.
        * DerivedSources.make:
        Don't generate export files.
        * WebCore.exp.in: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        Removed WebCoreExportFileGenerator targets.
        * make-export-file-generator: Removed.

2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Use HashMap::add instead of get/contains + set in DOMObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=141558

        Rubber-stamped by Žan Doberšek.

        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::getOrCreateDOMObjectCacheFrameObserver):
        (WebKit::DOMObjectCache::put):

2015-02-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GObject DOM bindings object are cached forever
        https://bugs.webkit.org/show_bug.cgi?id=141558

        Reviewed by Sergio Villar Senin.

        Rework the DOMObjectCache to avoid having to manually clear the
        objects when the frame is destroyed, using a FrameDestructionObserver
        instead. When a new object associated to a Frame is added to the
        cache, a FrameDestructionObserver is created for the frame if
        needed, and the DOM object is tracked by the observer too. When
        the frame is detached from the page all its objects are cleared,
        and if the aren't additional references, the object is finalized
        and removed from the cache normally.
        This patch also simplifies and modernizes the code to make it
        easier to read an maintain.

        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::DOMObjectCacheData::DOMObjectCacheData): Add constructor
        to initialize its members and simplify the callers.
        (WebKit::DOMObjectCacheData::clearObject): Remove the references
        added by the cache, ensuring the GObject is not finalized until
        the method returns.
        (WebKit::DOMObjectCacheData::refObject): Adds a reference owned by
        the cache.
        (WebKit::domObjectCacheFrameObservers): Map a frame to a FrameDestructionObserver.
        (WebKit::getOrCreateDOMObjectCacheFrameObserver): Create a new
        FrameDestructionObserver for the given Frame or return the
        existing one.
        (WebKit::domObjects): Map wrapped object to wrapper object.
        (WebKit::DOMObjectCache::forget): Remove the wrapped object from
        the cache.
        (WebKit::DOMObjectCache::get): Return the wrapped object if it is
        in the cache, increasing the cache references.
        (WebKit::DOMObjectCache::put): Add the wrapper object to the cache
        for the given wrapped object. If it's a Node and has a frame add
        the node to the FrameDestructionObserver corresponding to the frame.
        (WebKit::getFrameFromHandle): Deleted.
        (WebKit::weakRefNotify): Deleted.
        (WebKit::DOMObjectCache::clearByFrame): Deleted.
        (WebKit::DOMObjectCache::~DOMObjectCache): Deleted.
        * bindings/gobject/DOMObjectCache.h:

2015-02-17  ChangSeok Oh  <changseok.oh@collabora.com>

        REGRESSION(r180050): It broke the !ENABLE(CSS_GRID_LAYOUT) build
        https://bugs.webkit.org/show_bug.cgi?id=141647

        Reviewed by Csaba Osztrogonác.

        No new tests since this just fixes a build break.

        * dom/Position.cpp: Add a build guard ENABLE(CSS_GRID_LAYOUT) for RenderGrid.
        (WebCore::Position::isCandidate):

2015-02-16  Chris Dumez  <cdumez@apple.com>

        Keep all memory cache resources in ListHashSets
        https://bugs.webkit.org/show_bug.cgi?id=141667

        Reviewed by Andreas Kling.

        Keep all memory cache resources in ListHashSets instead of manual linked
        lists. This simplifies the code a lot and is also more efficient for
        retrieving / removing particular CachedResources.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        (WebCore::MemoryCache::removeFromLRUList):
        (WebCore::MemoryCache::insertInLRUList):
        (WebCore::MemoryCache::dumpLRULists):
        (WebCore::MemoryCache::lruListFor): Deleted.
        * loader/cache/MemoryCache.h:

2015-02-16  Benjamin Poulain  <benjamin@webkit.org>

        CSS JIT: finish :nth-last-child()
        https://bugs.webkit.org/show_bug.cgi?id=141629

        Reviewed by Andreas Kling.

        This patch adds the matcher for :nth-child(An+B of selector list) and
        fix a small bug I discovered while working on it.

        The matcher is straightforward: count the next siblings matching the selector,
        nothing fancy.

        While working on it I noticed I forgot the test for IsParsingChildrenFinished
        on the simple version of :nth-last-child(). I add it in both matcher, write
        a couple of tests, the first part of the tests now succeed, but the second part
        fails...

        What happened is:
        1) We interupt the parsing to execute the JavaScript.
           From there, we force the style resolution to get the computed style.
        2) When resolving the style, the early check for isFinishedParsingChildren()
           quits the function early. This is done *before* we marked the parent
           for :nth-last-child() style resolution.
        3) After the script, parsing resume and the following elements are added.
        4) When resolving the style, only the new elements are marked dirty,
           the elements pending their :nth-last-child() style never get udpated.

        To fix the problem, I moved the test for FinishedParsingChildren after
        the parent marking.

        Honestly, those early return for FinishedParsingChildren need to be refined
        and they should be tested properly. We should not do this kind of things
        for Query for example.

        Tests: fast/selectors/nth-last-child-cannot-match-during-parsing-1.html
               fast/selectors/nth-last-child-cannot-match-during-parsing-2.html
               fast/selectors/nth-last-child-of-cannot-match-during-parsing-1.html
               fast/selectors/nth-last-child-of-cannot-match-during-parsing-2.html
               fast/selectors/nth-last-child-of-register-requirement.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        Fix the tree marking.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        The fragment creation was already done, all I had to do was
        accept the compile.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        :nth-child() and :nth-last-child() with a selector list are heavier than :not()
        and :matches(), move them accordingly.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChild):
        More the early return after the tree marking.

        (WebCore::SelectorCompiler::setParentAffectedByLastChildOf):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChildOf):
        New matcher, nothing optimized yet.

2015-02-16  Tim Horton  <timothy_horton@apple.com>

        Adopt CAMachPort-as-layer-contents
        https://bugs.webkit.org/show_bug.cgi?id=141687
        <rdar://problem/19393233>

        Reviewed by Simon Fraser.

        No new tests, just a performance bump.

        * platform/cocoa/MachSendRight.h:
        (WebCore::MachSendRight::operator bool):
        Add an operator bool() that checks if the underlying port is nonnull.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add some SPI.

2015-02-15  Sam Weinig  <sam@webkit.org>

        Add experimental <attachment> element support
        https://bugs.webkit.org/show_bug.cgi?id=141626

        Reviewed by Tim Horton.

        Adds scaffolding for an experimental implementation of an <attachment> element
        which can represent a file attachment (e.g. NSTextAttachment in NSAttributedString
        parlance).

        The implementation is guarded by both an #ifdef (ENABLE(ATTACHMENT_ELEMENT)) and 
        a setting (Settings::attachmentElementEnabled()).

        Tests: fast/attachment/attachment-disabled-dom.html
               fast/attachment/attachment-disabled-rendering.html
               fast/attachment/attachment-dom.html
               fast/attachment/attachment-rendering.html

        * Configurations/FeatureDefines.xcconfig:
        Add new ENABLE_ATTACHMENT_ELEMENT macro.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * dom/make_names.pl:
        Add support for checking a setting to determine if a particular tag should be exposed.

        * html/HTMLAttachmentElement.cpp: Added.
        * html/HTMLAttachmentElement.h: Added.
        Stub out the basics of the new element.

        * html/HTMLElementsAllInOne.cpp:
        Add HTMLAttachmentElement.cpp.

        * html/HTMLTagNames.in:
        Add 'attachment'.

        * page/Settings.in:
        Add attachmentElementEnabled setting.

        * rendering/RenderAttachment.cpp: Added.
        * rendering/RenderAttachment.h: Added.
        Stub out the basics of the new render. We will probably want to replace this with
        a non-replaced render, but this will do as a placeholder for now.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAttachment):
        Add predicate for type casting.

        * rendering/RenderingAllInOne.cpp:
        Add RenderAttachment.cpp.

2015-02-16  Andreas Kling  <akling@apple.com>

        GC (almost) immediately when navigating under memory pressure.
        <https://webkit.org/b/141663>

        Reviewed by Geoffrey Garen.

        Since the PageCache is already disabled in memory pressure situations,
        we know that detaching the old window shell on navigation is basically
        guaranteed to generate a bunch of garbage, we can soften the memory
        peak a bit by doing a GC right away instead of scheduling one for soon(tm).

        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        (WebCore::GCController::garbageCollectOnNextRunLoop):
        (WebCore::GCController::gcTimerFired):
        * bindings/js/GCController.h:

            Add a GCController::garbageCollectOnNextRunLoop() complement to the
            "soon" and "now" options. There was already a zero timer in here for
            non-CF builds, so I just used that same timer to implement this
            and have the non-CF code path call garbageCollectOnNextRunLoop().

        * bindings/js/ScriptController.cpp:
        (WebCore::collectGarbageAfterWindowShellDestruction):
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::clearWindowShell):

            Under system memory pressure conditions, schedule a full GC on next
            runloop iteration instead of just asking for it to happen soon.
            We do it on next runloop to ensure that there's no pointer to the
            window object on the stack.

2015-02-16  Enrica Casucci  <enrica@apple.com>

        Emoji sequences do not render properly.
        https://bugs.webkit.org/show_bug.cgi?id=141661
        rdar://problem/19820463

        Reviewed by Sam Weinig.

        Emoji sequences and emoji with variations should be rendered
        using the Complex code path and should be treated as graphemes.
        This change modifies advanceByCombiningCharacterSequence to add
        this logic.

        Test: fast/text/emoji.html

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::advanceByCombiningCharacterSequence): Implements a simple
        logic to treat emoji sequences and emoji with variations as graphemes.
        * platform/text/CharacterProperties.h: Added.
        (WebCore::isEmojiGroupCandidate):
        (WebCore::isEmojiModifier):
        (WebCore::isVariationSelector):
        * rendering/RenderText.cpp:
        (WebCore::isEmojiGroupCandidate): Deleted.
        (WebCore::isEmojiModifier): Deleted.

2015-02-16  Zalan Bujtas  <zalan@apple.com>

        RenderTableRow should check if it has access to its ancestor chain.
        https://bugs.webkit.org/show_bug.cgi?id=141668

        Reviewed by Andreas Kling.

        Preventive fix.

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableRow.h:

2015-02-16  Jer Noble  <jer.noble@apple.com>

        [iOS] Build fix: declare undeclared identifier 'credential'.

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

2015-02-16  Jer Noble  <jer.noble@apple.com>

        [iOS] Unable to play .mp4 file over http with basic http authentication
        https://bugs.webkit.org/show_bug.cgi?id=141503
        rdar://problem/15799844

        Reviewed by Alexey Proskuryakov.

        On iOS, CFNetwork is used for authentication, so the NSURLAuthenticationChallenge
        provided by AVAssetResourceLoader needs to be shoehorned into a AuthenticationChallenge
        object by way of CFURLAuthChallengeRef.

        Create a new class, WebCoreNSURLAuthenticationChallengeClient, whose sole purpose
        is to take AuthenticationChallengeClient callbacks and pass them along to a
        NSURLAuthenticationChallenge sender.

        Create a NSURLAuthenticationChallenge out of the CF version through an SPI, and add
        that SPI to a new header. Drive-by fix: take two of our existing SPI calls and move
        them into that same header.

        * WebCore.xcodeproj/project.pbxproj: Add CFNSURLConnectionSPI.h to project.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::create): Factory.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::WebCoreNSURLAuthenticationChallengeClient): Simple constructor.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedCredential): Pass to m_challenge.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedRequestToContinueWithoutCredential): Ditto.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedCancellation): Ditto.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedRequestToPerformDefaultHandling): Ditto.
        (WebCore::WebCoreNSURLAuthenticationChallengeClient::receivedChallengeRejection): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
            Create an AuthenticationChallenge out of the nsChallenge and client and pass it up
            to the HTMLMediaElement.
        * platform/network/mac/AuthenticationMac.mm:
        * platform/spi/cocoa/CFNSURLConnectionSPI.h: Added.

2015-02-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Revert a change in SVGRenderSupport::mapLocalToContainer committed for fixing <https://bugs.webkit.org/show_bug.cgi?id=119626>.
        https://bugs.webkit.org/show_bug.cgi?id=138439

        Reviewed by Darin Adler.

        The change http://trac.webkit.org/changeset/164861 was ported from Blink
        but it was was revert later because it broke Chrome SVG rendering. It also
        broke the WebKit SVG text search highlighting.
        
        Tests: svg/transforms/svg-geometry-crash.html: This test was added by the
        blamed change. A new but correct solution is required to fix the assertion.

        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderSupport.cpp:
        Notice that TransformState.applyTransform() does matrix-left-multiplication,
        i.e. state = transform * state. But operator*() of AffineTransform and
        MatrixTransform  does right multiply, i.e. this = this * transform.
        
        (WebCore::SVGRenderSupport::localToParentTransform): Have the calculation
        of the SVG localToParentTransform in one shared function.
        
        (WebCore::SVGRenderSupport::mapLocalToContainer): Revert the Blink change.
        If the parent is the SVG root, the transform state should be equal to
        transform = svg_to_css_mapping * local_to_parent_mapping * transform.
        
        (WebCore::SVGRenderSupport::pushMappingToContainer): Get the localToParent
        transform to be pushed in the geometryMap. If the parent is the SVG root,
        localToParent = svg_to_css_mapping * local_to_parent_mapping. The original
        code was doing the opposite and this is the cause of the assertion which 
        was fixed wrongly by reversing the correct multiplication order in 
        SVGRenderSupport::mapLocalToContainer().

2015-02-16  Zalan Bujtas  <zalan@apple.com>

        RenderTableCell can't access its parent while in detached state.
        https://bugs.webkit.org/show_bug.cgi?id=141639
        rdar://problem/19850760

        Reviewed by Simon Fraser.

        Null check against ancestor chain so that certain methods in RenderTableCell can
        be called even if the renderer is not yet attached.

        Test: fast/table/table-cell-crash-when-detached-state.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        * rendering/RenderTableCell.h:

2015-02-16  David Hyatt  <hyatt@apple.com>

        Add ifdefs to avoid adjusting Ruby selection rects to avoid overlap on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=141651
        <rdar://problem/19182526>
        
        Reviewed by Simon Fraser.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionBottom):

2015-02-16  David Kilzer  <ddkilzer@apple.com>

        SoftLinking.h: Update copyright and license; clean up whitespace

        * platform/mac/SoftLinking.h:

2015-02-12  David Hyatt  <hyatt@apple.com>

        text-underline-position:under has multiple correctness issues
        https://bugs.webkit.org/show_bug.cgi?id=141528

        Reviewed by Dean Jackson.

        Added a bunch of new tests in fast/text

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::maxLogicalBottomForTextDecorationLine):
        (WebCore::InlineFlowBox::minLogicalTopForTextDecorationLine):
        (WebCore::InlineFlowBox::computeMaxLogicalBottom): Deleted.
        * rendering/InlineFlowBox.h:
        These functions have been re-written to take an enclosing renderer that specified the
        decoration. This way they can properly limit the bottom/top computation to only line boxes
        that are contained inside the renderer.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        Tweak the call to get the decoration colors now that quirks mode has been removed.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::enclosingRendererWithTextDecoration):
        * rendering/RenderElement.h:
        New function that finds the enclosing renderer that specified a text decoration. For now
        this is only used in the "under" position computation, but soon we'll be using it
        everywhere.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderObject.h:
        Remove the quirks mode argument, since we were always passing true anyway (making the argument dead).

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::maxLogicalBottom): Deleted.
        * rendering/RootInlineBox.h:
        Get rid of these functions and just have InlineTextBoxStyle's computeUnderLineOffset function call
        the InlineFlowBox functions directly.

        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        Re-written to fetch the enclosingRendererWithTextDecoration so that it can be passed to the logical top/bottom
        computation to limit which line boxes get included.

2015-02-16  Brent Fulgham  <bfulgham@apple.com>

        FEGaussianBlur::calculateUnscaledKernelSize does unspeakable things with signed and unsigned values
        https://bugs.webkit.org/show_bug.cgi?id=141596
        <rdar://problem/19837103>

        Reviewed by Zalan Bujtas.

        No new tests. Covered by css3/filters/huge-blur-value.html

        Avoid overflowing the signed integer values by not converting from unsigned
        until the maximum size has been clamped to the expected max.

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):

2015-02-13  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Invalid initialization of track sizes with non spanning grid items
        https://bugs.webkit.org/show_bug.cgi?id=140763

        Reviewed by Antti Koivisto.

        Content sized tracks with non-spanning grid items were not
        properly sized because the growth limit was sometimes infinity
        (-1) after calling resolveContentBasedTrackSizingFunctions() when
        it should not. This patch adds an special initialization phase for
        non-spanning grid items as the new track sizing algorithm
        describes.

        Granted, that was handled in the old algorithm in
        distributeSpaceToTracks() as a special case. The problem is that
        it regressed after the optimization added in r173868 because that
        method is no longer called when the space to distribute is 0.

        That's why we could fix this by allowing calls to
        distributeSpaceToTracks() with spaceToDistribute>=0 but by fixing
        it with an explicit initialization our implementation becomes
        closer to the new algorithm and the initialization is now explicit
        in the code instead of a side effect of calling
        distributeSpaceToTracks() with no space to be distributed. It also
        brings a slight performance improvement as we save sorts and hash
        lookups.

        I also took the change to add caching to several GridTrackSize
        methods that were hot on the profiler (each one accounted for ~1%
        of the total time, now they account for ~0.3% each).

        Test: fast/css-grid-layout/grid-initialize-span-one-items.html

        * rendering/RenderGrid.cpp:
        (WebCore::GridItemWithSpan::span): New helper method for ASSERTs.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Exclude non spanning grid items from the calls to
        resolveContentBasedTrackSizingFunctionsForItems().
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        New method to resolve track sizes only using non-spanning grid
        items.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Ensure that it isn't called for non-spanning grid items.
        * rendering/RenderGrid.h:
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize): Cache return values.
        (WebCore::GridTrackSize::setLength): Ditto.
        (WebCore::GridTrackSize::setMinMax): Ditto.
        (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes): New method
        that caches the return values for hasXXXTrackBreadth() methods.
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth): Use
        the cached return value.
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth):
        Ditto.
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth):
        Ditto.

2015-02-16  Milan Crha  <mcrha@redhat.com>

        [GTK] Loading page into WebView shows g_closure_unref warning
        https://bugs.webkit.org/show_bug.cgi?id=127474

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::gobjectDestroyed):

2015-02-13  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Remove the usage of Length(Undefined) in GridLength
        https://bugs.webkit.org/show_bug.cgi?id=141562

        Reviewed by Chris Dumez.

        From Blink r164154 by <timloh@chromium.org>

        The patch simplifies some of the logic in creating and applying
        GridLength and GridTrackSize values to RenderStyles by using the
        constructors for initialisation instead of deferring to setters.

        The rationale behind this change is that neither of
        createGridTrackSize() nor createGridTrackBreadth() should be able
        to fail, so these are changed to return objects directly instead
        of taking an out reference (note that in general failing in
        applying properties is incorrect and we should catch these in the
        parser).

        The quirk value across to the Lengths was also removed because it
        doesn't apply to Grid.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::createGridTrackBreadth): Return a
        GridLength instead of a bool.
        (WebCore::StyleBuilderConverter::createGridTrackSize): Return a
        GridTrackSize instead of a bool.
        (WebCore::StyleBuilderConverter::createGridTrackList): Do not
        create temporary GridTrackSizes with undefined Lengths.
        (WebCore::StyleBuilderConverter::convertGridTrackSize): Ditto.
        * rendering/style/GridLength.h:
        (WebCore::GridLength::GridLength): It now requires a mandatory
        Length argument.
        (WebCore::GridLength::length): Deleted.
        (WebCore::GridLength::setFlex): Deleted.
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize): It now requires a
        mandatory GridLength argument.
        (WebCore::GridTrackSize::length): Removed no longer valid ASSERTs.
        (WebCore::GridTrackSize::minTrackBreadth): Ditto.
        (WebCore::GridTrackSize::maxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::setLength): Deleted.
        (WebCore::GridTrackSize::setMinMax): Deleted.
        * rendering/style/RenderStyle.h:

2015-02-13  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Removing text node does not remove its associated markers
        https://bugs.webkit.org/show_bug.cgi?id=140999

        Reviewed by Ryosuke Niwa.

        Removing text node via script does not remove its markers.
        For example, running the following script:

        <script>
            var div = document.getElementById("testElement");
            div.focus();
            document.execCommand("InsertText", false, "welllcome ");

            // Give a time async spellchecker to show its markers and
            // remove the node.
            setTimeout(function() { div.removeChild(div.firstChild); }, 100);
        </script>

        will cause that DocumentMarkerController still stores the markers for
        detached node.

        The same issue occurs when the text gets cleared, for example,
        <script>
            input.value = ""; // for HTMLTextAreaElement, HTMLInputElement
            // or
            div.innerHTML = ""; // for content editable
        </script>

        No new tests. Internals marker APIs operate on text node attached
        to the element. To test it we could expose document().markers().hasMarkers()
        but there is no more useful cases where it could be used.
        Another obstacle is that we are in isInShadowTree() so that there is
        no possible to register on "DOMSubtreeModified" event.
        Test cases attached to the bug:
        1. input.value = ""  https://bug-140999-attachments.webkit.org/attachment.cgi?id=245704
        2. elem.removeChild(textNode) https://bug-140999-attachments.webkit.org/attachment.cgi?id=246515

        Remove markers when text nodes are about to remove.
        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved):
        Fixes input.value = ""
        (WebCore::Document::nodeWillBeRemoved):
        Fixes elem.removeChild(textNode)

2015-02-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180082): WebCore Debug builds fail on Mavericks due to weak export symbols
        <http://webkit.org/b/141607>

        This should fix the build, but leaves a FIXME list in
        WebCore.unexp.

        * Configurations/WebCore.unexp: Add weak externals with a FIXME
        statement so they can be removed later.  It's more important to
        fix the build first.

        * Configurations/WebCore.xcconfig: Change XCODE_VERSION_MINOR to
        XCODE_VERSION_MAJOR since the internal bots use version 5.1.1
        which still has the error.

2015-02-15  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove unused XHR replay code
        https://bugs.webkit.org/show_bug.cgi?id=141622

        Reviewed by Timothy Hatcher.

        XHR Replay functionality became unused with the last frontend rewrite.
        Remove instrumentation and data storage classes only used by this feature.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClientImpl): Deleted.
        (WebCore::InspectorInstrumentation::willLoadXHRImpl): Deleted.
        (WebCore::InspectorInstrumentation::didFailXHRLoadingImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorInstrumentation::willLoadXHR): Deleted.
        (WebCore::InspectorInstrumentation::didFailXHRLoading): Deleted.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::didFinishXHRLoading):
        (WebCore::InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorResourceAgent::willLoadXHR): Deleted.
        (WebCore::InspectorResourceAgent::didFailXHRLoading): Deleted.
        (WebCore::InspectorResourceAgent::replayXHR): Deleted.
        * inspector/InspectorResourceAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::clear):
        (WebCore::XHRReplayData::create): Deleted.
        (WebCore::XHRReplayData::XHRReplayData): Deleted.
        (WebCore::NetworkResourcesData::xhrReplayData): Deleted.
        (WebCore::NetworkResourcesData::setXHRReplayData): Deleted.
        (WebCore::NetworkResourcesData::reuseXHRReplayData): Deleted.
        * inspector/NetworkResourcesData.h:
        (WebCore::XHRReplayData::method): Deleted.
        (WebCore::XHRReplayData::url): Deleted.
        (WebCore::XHRReplayData::async): Deleted.
        (WebCore::XHRReplayData::formData): Deleted.
        (WebCore::XHRReplayData::headers): Deleted.
        (WebCore::XHRReplayData::includeCredentials): Deleted.
        (WebCore::NetworkResourcesData::ResourceData::xhrReplayData): Deleted.
        (WebCore::NetworkResourcesData::ResourceData::setXHRReplayData): Deleted.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::internalAbort):
        (WebCore::XMLHttpRequest::sendForInspectorXHRReplay): Deleted.
        * xml/XMLHttpRequest.h:

2015-02-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash when accessing an item in SVGTransformList and then removing a previous item from this list.
        https://bugs.webkit.org/show_bug.cgi?id=141550.

        Reviewed by David Kilzer.

        * svg/properties/SVGMatrixTearOff.h:
        (WebCore::SVGMatrixTearOff::create): Fix a compilation error on the release build.
        The ASSERT() here references a parameter which is not used anywhere else. We need 
        to change it to ASSERT_UNUSED(). 

2015-02-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash when accessing an item in SVGTransformList and then removing a previous item from this list.
        https://bugs.webkit.org/show_bug.cgi?id=141550.

        Reviewed by Darin Adler.

        Tests: LayoutTests/svg/dom/SVGTransformList-basics.xhtml: This test is modified to
        include a new test case.

        * svg/properties/SVGMatrixTearOff.h: m_value of SVGMatrixTearOff will be a null
        pointer. There is no point in having SVGMatrixTearOff points to the parent and
        the property of the parent at the same time.
        
        (WebCore::SVGMatrixTearOff::create): SVGMatrixTearOff will hold a pointer to
        the parent SVGPropertyTearOff<SVGTransform>. But it should overrides setValue()
        and propertyReference() so it can set and get the SVGMatrix from the SVGTransform
        parent.
        
        (WebCore::SVGMatrixTearOff::SVGMatrixTearOff): Pass a nullptr to the base class.
        SVGMatrixTearOff will act as a proxy of the parent. It does not hold any data by
        itself but it knows what property to set and get from the parent.
        
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::create): Add a create method which can take a pointer value.
        
        (WebCore::SVGPropertyTearOff::propertyReference):
        (WebCore::SVGPropertyTearOff::setValue): Make these functions virtual so concrete classes
        like SVGMatrixTearOff can override them.
        
        (WebCore::SVGPropertyTearOff::SVGPropertyTearOff): Add a new constructor.

2015-02-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash when accessing an item in SVGLengthList and then replacing it with a previous item in the list.
        https://bugs.webkit.org/show_bug.cgi?id=141552.

        Reviewed by Darin Adler.

        Tests: LayoutTests/svg/dom/SVGLengthList-basics.xhtml: This test is modified to
        include a new test case.

        * svg/properties/SVGListPropertyTearOff.h: Commit the removal of the replacing item
        before trying to detach the wrapper of the item which going to be replaced.

2015-02-15  David Kilzer  <ddkilzer@apple.com>

        CoreText only needs to be soft-linked on Windows

        More work towards the Maverick Debug build fix:

        REGRESSION (r180082): WebCore Debug builds fail on Mavericks due to weak export symbols
        <http://webkit.org/b/141607>

        * page/CaptionUserPreferencesMediaAF.cpp:

2015-02-15  Alexey Proskuryakov  <ap@apple.com>

        More build fixing.

        * platform/cocoa/TelephoneNumberDetectorCocoa.cpp:

2015-02-14  Alexey Proskuryakov  <ap@apple.com>

        More internal build fixing.

        DDDFACache.h is not an actual private header, so we were using open source
        redeclaration of DDDFACacheRef with an internal function prototype from DDDFAScanner.h.

        * platform/cocoa/TelephoneNumberDetectorCocoa.cpp:
        (WebCore::TelephoneNumberDetector::phoneNumbersScanner):

2015-02-14  Benjamin Poulain  <benjamin@webkit.org>

        Add the initial matching implementation for attribute selectors with case-insensitive value
        https://bugs.webkit.org/show_bug.cgi?id=141615

        Reviewed by Andreas Kling.

        Tests: fast/css/case-insensitive-attribute-selector-specificity.html
               fast/css/case-insensitive-attribute-selector-styling-html-1.html
               fast/css/case-insensitive-attribute-selector-styling-html-2.html
               fast/css/case-insensitive-attribute-selector-styling-html-3.html
               fast/css/case-insensitive-attribute-selector-styling-xhtml-1.xhtml
               fast/css/case-insensitive-attribute-selector-styling-xhtml-2.xhtml
               fast/css/case-insensitive-attribute-selector-styling-xhtml-3.xhtml
               fast/selectors/case-insensitive-attribute-bascis.html
               fast/selectors/case-insensitive-attribute-matching-style-attribute.html
               fast/selectors/case-insensitive-attribute-style-update.html
               fast/selectors/case-insensitive-attribute-with-case-sensitive-name.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        We already had case-insensitive value matching due to some legacy HTML
        behaviors where some attribute values would be matched case-insensitively
        depending on the attribute name.

        For this patch, I just re-use the same mechanism. I used branches to try
        to convey the idea that matching is case sensitive by default unless
        the selector has a flag or we are in the weird HTML exception.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        Disable that case in the CSS JIT for now, I'll implement it later.

2015-02-14  David Kilzer  <ddkilzer@apple.com>

        Declare soft-linked functions with extern "C" linkage

        More work towards the Maverick Debug build fix:

        REGRESSION (r180082): WebCore Debug builds fail on Mavericks due to weak export symbols
        <http://webkit.org/b/141607>

        * platform/mac/SoftLinking.h: Try declaring soft-linked
        functions with extern "C" linkage to see if they stop appearing
        as weak externals.  This has the added benefit that if the
        function signature changes, we'll get a build failure.

2015-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] RetainPtr member cleanup, possible leaks
        https://bugs.webkit.org/show_bug.cgi?id=141616

        Reviewed by Andreas Kling.

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        Adopt the allocated object to avoid a possible leak.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        Adopt to avoid unnecessary retain/autorelease.

2015-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        IncompleteMetaDataCue leak seen on leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=141611

        Reviewed by Eric Carlson.        

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.h:
        (WebCore::IncompleteMetaDataCue::IncompleteMetaDataCue): Deleted.
        (WebCore::IncompleteMetaDataCue::~IncompleteMetaDataCue): Deleted.
        (WebCore::IncompleteMetaDataCue::cueData): Deleted.
        (WebCore::IncompleteMetaDataCue::startTime): Deleted.
        Convert to a struct and hold a list of structs instead of pointers.

        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):
        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes):
        (WebCore::InbandMetadataTextTrackPrivateAVF::flushPartialCues):
        Update use of IncompleteMetaDataCue and modernize related code.

2015-02-09  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove some unnecessary Inspector prefixes from class names in Inspector namespace
        https://bugs.webkit.org/show_bug.cgi?id=141372

        Reviewed by Joseph Pecoraro.

        * WebCore.exp.in:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::dispatchMessageFromFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorForwarding.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorReplayAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * loader/EmptyClients.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        * page/PageDebuggable.h:
        * testing/Internals.cpp:
        (WebCore::Internals::closeDummyInspectorFrontend):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::disconnectFromInspector):

2015-02-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180082): WebCore Debug builds fail on Mavericks due to weak export symbols
        <http://webkit.org/b/141607>

        Work towards fixing the Mavericks Debug build.

        * dom/Document.h:
        (WebCore::Document::setAnnotatedRegionsDirty):
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/Node.h:
        (WebCore::Node::hasEditableStyle):
        * dom/Position.h:
        (WebCore::Position::Position):
        * editing/FrameSelection.h:
        (WebCore::DragCaretController::clear):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::originalRequest):
        - Do not mark inline methods for export.

2015-02-14  Alexey Proskuryakov  <ap@apple.com>

        rel="noreferrer" should make window.opener null
        https://bugs.webkit.org/show_bug.cgi?id=141579

        Reviewed by Darin Adler.

        Tests: http/tests/navigation/target-blank-opener-post.html
               http/tests/navigation/target-blank-opener.html

        We used to avoid passing window.opener policy by temporarily storing it in a FrameLoader
        member variable. This works for some clients - ones that invoke delegate callbacks
        synchronously - but not in the general case.

        So, changed to passing the policy explicitly.

        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::suppressOpenerInNewFrame): Deleted.
        * loader/FrameLoaderTypes.h:
        * loader/NavigationScheduler.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):

2015-02-14  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r180082): WebCore build on Mountain Lion fails due to weak export for i386
        <rdar://problem/19838127>

        * Configurations/WebCore.unexp: Add missing symbol.

2015-02-13  Chris Dumez  <cdumez@apple.com>

        RenderListItem resets its marker's style on style change even if the diff is StyleDifferenceEqual
        https://bugs.webkit.org/show_bug.cgi?id=141572
        <rdar://problem/19759818>

        Reviewed by Simon Fraser.

        Do not unnecessarily update the marker's style in RenderListItem::styleDidChange()
        if the RenderStyle diff is StyleDifferenceEqual. Doing so can cause unnecessary
        layouts.

        This was causing high cpu usage on
        http://www.nokogiri.org/tutorials/searching_a_xml_html_document.html because there
        is an animation that changes the style every second (but the diff is equal) and the
        RenderListItem keeps resetting its marker's margin, which triggers a layout and the
        RenderListMarker re-computes its margin during layout and updates its style again.

        With this change, CPU usage on the page goes from 150% to 20%. There is only a style
        recalc happening every second, no more relayouts and repaints.

        Test: fast/repaint/list-item-equal-style-change-no-repaint.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):

2015-02-13  Timothy Horton  <timothy_horton@apple.com>

        Make WebCore::IOSurface have single ownership instead of refcounting
        https://bugs.webkit.org/show_bug.cgi?id=141578

        Reviewed by Anders Carlsson.

        In the interests of making it harder to misuse and to make it more like
        ImageBuffer, our IOSurface wrapper should have single ownership.

        This will also allow future changes which depend on temporarily
        consuming an IOSurface to more easily enforce correct usage.

        * WebCore.exp.in:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::takeSurface):
        (WebCore::IOSurfacePool::addSurface):
        (WebCore::IOSurfacePool::insertSurfaceIntoPool):
        (WebCore::IOSurfacePool::tryEvictInUseSurface):
        (WebCore::IOSurfacePool::tryEvictOldestCachedSurface):
        (WebCore::IOSurfacePool::collectInUseSurfaces):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::create):
        (IOSurface::createFromSendRight):
        (IOSurface::createFromSurface):
        (IOSurface::createFromImage):
        Make IOSurface::create()s return a unique_ptr, and adjust everywhere.

2015-02-12  Enrica Casucci  <enrica@apple.com>

        Additional emoji group support.
        https://bugs.webkit.org/show_bug.cgi?id=141539
        rdar://problem/19727527

        Reviewed by Sam Weinig.

        Adding some new emoji ligatures.
        Updated existing test to include the new sequences.

        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):
        * rendering/RenderText.cpp:
        (WebCore::isEmojiGroupCandidate):

2015-02-13  Alex Christensen  <achristensen@webkit.org>

        Really stop using export files.
        https://bugs.webkit.org/show_bug.cgi?id=141521

        Reviewed by Mark Rowe.

        * Configurations/WebCore.xcconfig:
        Don't use exported symbols files.
        * Configurations/WebCore.unexp:
        Added list of symbols not to export (needed by Xcode 5.0.2).

2015-02-13  Zalan Bujtas  <zalan@apple.com>

        Simplify ASSERT in lastRubyRun().
        https://bugs.webkit.org/show_bug.cgi?id=141574

        Reviewed by Daniel Bates.

        r180064 made some of the conditions in the ASSERT redundant.

        Covered by existing tests.

        * rendering/RenderRuby.cpp:
        (WebCore::lastRubyRun):

2015-02-13  Brent Fulgham  <bfulgham@apple.com>

        [Mac, iOS] Adjust pagination behavior for Mail.app printing use
        https://bugs.webkit.org/show_bug.cgi?id=141569
        <rdar://problem/14912763>

        Reviewed by Anders Carlsson.

        * page/Settings.in: Add new pagination setting flag.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::messageContainerName): Added.
        (WebCore::needsPaginationQuirk): Added.
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination): Don't move the message content
        div to a new page when using this special printing mode.

2015-02-13  Daniel Bates  <dabates@apple.com>

        [iOS] DumpRenderTree.app fails to link due to undefined classes
        <rdar://problem/19831228>

        Following r179945, DumpRenderTree.app fails to link due to undefined symbols:

        Undefined symbols for architecture x86_64:
          "_OBJC_CLASS_$_WebEvent", referenced from:
              objc-class-ref in libDumpRenderTree.a(EventSendingController.o)
          "_OBJC_CLASS_$_WebUndefined", referenced from:
              objc-class-ref in libDumpRenderTree.a(ObjCController.o)

        We need to export the classes WebScriptObject and WebEvent.

        * bindings/objc/WebScriptObject.h:
        * platform/ios/WebEvent.h:

2015-02-13  Andreas Kling  <akling@apple.com>

        CachedResource::clearLoader() should self-destruct if nothing else retains the CachedResource.
        <https://webkit.org/b/141568>
        <rdar://problem/19800310>

        Reviewed by Antti Koivisto.

        Anything that may cause CachedResource::canDelete() to return true must also make sure
        to call CachedResource::deleteIfPossible(), or we risk leaking the CachedResource.
        This is because CachedResource employs an extremely convoluted lifetime mechanism that
        depends on its presence in a number of collections, as well as internal counters and
        state.

        This is a speculative fix for a potential CachedResource leak that I'm not sure exists
        in practice, but let's be good citizens here.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::clearLoader):

2015-02-13  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash at WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset + 2357
        https://bugs.webkit.org/show_bug.cgi?id=141566
        rdar://problem/19826075

        Reviewed by Andreas Kling.

        Null check m_mediaSource before dereferencing.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):

2015-02-13  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r174761): Invalid cast in WebCore::lastRubyRun / WebCore::RenderRubyAsBlock::addChild
        https://bugs.webkit.org/show_bug.cgi?id=137929
        rdar://problem/18723492

        Reviewed by Chris Dumez.

        Ensure that the child renderer is a RenderRubyRun.

        Test: fast/ruby/crash-with-before-after-on-ruby.html

        * rendering/RenderRuby.cpp:
        (WebCore::lastRubyRun):

2015-02-13  Simon Fraser  <simon.fraser@apple.com>

        Crashes under RenderLayer::hitTestLayer under determinePrimarySnapshottedPlugIn()
        https://bugs.webkit.org/show_bug.cgi?id=141551

        Reviewed by Zalan Bujtas.
        
        It's possible for a layout to dirty the parent frame's state, via the calls to
        ownerElement()->scheduleSetNeedsStyleRecalc() that RenderLayerCompositor does when
        iframes toggle their compositing mode.
        
        That could cause FrameView::updateLayoutAndStyleIfNeededRecursive() to fail to 
        leave all the frames in a clean state. Later on, we could enter hit testing,
        which calls document().updateLayout() on each frame's document. Document::updateLayout()
        does layout on all ancestor documents, so in the middle of hit testing, we could
        layout a subframe (dirtying an ancestor frame), then layout another frame, which
        would forcing that ancestor to be laid out while we're hit testing it, thus
        corrupting the RenderLayer tree while it's being iterated over.
        
        Fix by having FrameView::updateLayoutAndStyleIfNeededRecursive() do a second
        layout after laying out subframes, which most of the time will be a no-op.
        
        Also add a stronger assertion, that this frame and all subframes are clean
        at the end of FrameView::updateLayoutAndStyleIfNeededRecursive() for the
        main frame.

        Various existing frames tests hit the new assertion if the code change is removed,
        so this is covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::needsStyleRecalcOrLayout):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):

2015-02-12  Simon Fraser  <simon.fraser@apple.com>

        determinePrimarySnapshottedPlugIn() should only traverse visible Frames
        https://bugs.webkit.org/show_bug.cgi?id=141547
        Part of rdar://problem/18445733.

        Reviewed by Anders Carlsson.

        There's an expectation from clients that FrameView::updateLayoutAndStyleIfNeededRecursive()
        updates layout in all frames, but it uses the widget tree, so only hits frames
        that are parented via renderers (i.e. not display:none frames or their descendants).
        
        Moving towards a future where we remove Widgets, fix by adding a FrameTree 
        traversal function that only finds rendered frames (those with an ownerRenderer).
        
        Not testable.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::firstRenderedChild):
        (WebCore::FrameTree::nextRenderedSibling):
        (WebCore::FrameTree::traverseNextRendered):
        (printFrames):
        * page/FrameTree.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):

2015-02-13  Alexey Proskuryakov  <ap@apple.com>

        TimerBase::m_heapInsertionOrder calculation is racy
        https://bugs.webkit.org/show_bug.cgi?id=141554

        Reviewed by Anders Carlsson.

        Use an atomic increment.

        * platform/Timer.cpp: (WebCore::TimerBase::setNextFireTime):

2015-02-13  Andreas Kling  <akling@apple.com>

        [iOS] Refine GC behavior in response to process suspension and memory pressure.
        <https://webkit.org/b/141543>
        <rdar://problem/19738024>

        Reviewed by Geoffrey Garen.

        Do an immediate full garbage collection when the web process is about to
        be suspended (when another tab is moving to the foreground on iOS.)
        This ensures that we make a best effort to reduce the process footprint
        before we lose the ability to execute code.

        When receiving a memory pressure warning, tell the garbage collector to
        accelerate its next collection (by calling garbageCollectSoon().)
        This gives us some confidence that a collection will happen within a
        reasonable timeframe, but doesn't risk dooming us to a loop of endless
        garbage collections.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):

2015-02-13  Antti Koivisto  <antti@apple.com>

        Add some RELEASE_ASSERTs to try to catch crashes in StyleResolver::loadPendingImages
        https://bugs.webkit.org/show_bug.cgi?id=141561

        Reviewed by Simon Fraser.

        One possibility is that loads triggered by loadPendingImages end up synchronously destroying or re-entering
        style resolver. Try to catch these in release builds.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::~StyleResolver):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::loadPendingImages):
        * css/StyleResolver.h:

2015-02-13  ChangSeok Oh  <changseok.oh@collabora.com>

        Div having contentEditable and display:grid cannot be edited if it is empty.
        https://bugs.webkit.org/show_bug.cgi?id=141465

        Reviewed by Ryosuke Niwa.

        This bug is quite similar to webkit.org/b/141218. RenderGrid should be also treated as a candidate
        for visible position as like RenderFlexibleBox. The only different situation between them is
        that RenderGrid has a bug setting "0px" for logicalHeight when it is empty. RenderGrid should also have
        a minimum height of a single line if it is editable as well as RenderFlexibleBox does.

        Test: fast/events/key-events-in-editable-gridbox.html

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        (WebCore::Position::isRenderedCharacter):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutGridItems):

2015-02-12  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r176262): Invalid cast in WebCore`WebCore::RootInlineBox::selectionTop
        https://bugs.webkit.org/show_bug.cgi?id=138992

        Reviewed by Dave Hyatt.

        RenderRubyText requires the ancestor chain to be (RenderRubyAsInline | RenderRubyAsBlock) -> RenderRubyRun -> RenderRubyText.
        This patch ensures that we create RenderRubyText for an <rt> element only when
        the expected ancestor chain is guaranteed.

        Test: fast/ruby/crash-when-ruby-is-set-to-inline-block.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): treat inline-block <ruby> as block.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRubyInline):
        (WebCore::RenderObject::isRubyBlock):
        (WebCore::RenderObject::isRuby): Deleted.
        * rendering/RenderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        * rendering/RenderRuby.h: add support for is<RenderRubyAsBlock>(renderer) and for is<RenderRubyAsInline>(renderer)
        The isRuby() method does not follow the is*() -> maps to one class pattern.
        (WebCore::isRuby):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::staticCreateRubyRun):

2015-02-13  Csaba Osztrogonac  <ossy@webkit.org>

        Fix the gperf related build issue on the WinCairo bot
        https://bugs.webkit.org/show_bug.cgi?id=141507

        Reviewed by Alex Christensen.

        * platform/ColorData.gperf: Modified property svn:eol-style.

2015-02-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, remove empty directories.

        * loader/icon/wince: Removed.
        * platform/graphics/wince: Removed.
        * storage/wince: Removed.

2015-02-12  Timothy Horton  <timothy_horton@apple.com>

        Crashes under detectItemAroundHitTestResult when DataDetectors is not available
        https://bugs.webkit.org/show_bug.cgi?id=141549
        <rdar://problem/19180955>

        Reviewed by Dan Bernstein.

        * editing/mac/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        Bail out from data detection if either of the relevant frameworks aren't loaded.

2015-02-12  Dean Jackson  <dino@apple.com>

        [iOS Media] Audio should hide timeline scrubber until playback starts
        https://bugs.webkit.org/show_bug.cgi?id=141542
        <rdar://problem/19820685>

        Reviewed by Eric Carlson.

        We regressed from the system behaviour in iOS 7, where the timeline
        scrubber for an audio element is not shown until the user starts
        playback.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (video::-webkit-media-controls-panel): Fix the alignment of the flexbox.
        (audio::-webkit-media-controls-status-display): Add the style for the status display.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.configureInlineControls): Start hidden if we are an <audio>.
        (ControllerIOS.prototype.configureFullScreenControls): Drive by comment change.
        (ControllerIOS.prototype.setPlaying): Unhide the timeline.

2015-02-12  Chris Dumez  <cdumez@apple.com>

        Drop the quirks-mode exception for CSS MIME types
        https://bugs.webkit.org/show_bug.cgi?id=141501

        Reviewed by Alexey Proskuryakov.

        Drop the quirks-mode exception for CSS MIME types.
        This matches Firefox's behavior.

        This patch is based on the following Blink revision:
        http://src.chromium.org/viewvc/blink?view=revision&revision=189669

        Tests:
        - http/tests/misc/css-accept-any-type.html
        - http/tests/security/cross-origin-css.html

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parseAuthorStyleSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText):
        (WebCore::CachedCSSStyleSheet::canUseSheet):
        * loader/cache/CachedCSSStyleSheet.h:

2015-02-12  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Should not send wheel events with a delta of 0
        https://bugs.webkit.org/show_bug.cgi?id=141537
        -and corresponding-
        rdar://problem/18903118

        Reviewed by Simon Fraser.

        This code should not have been removed entirely to accommodate rubber-banding, it 
        just needs to return false instead of true in order to allow the MayBegin and 
        Ended phases to be handled by the ElasticityController.
        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent):

2015-02-12  Dean Jackson  <dino@apple.com>

        [iOS Media] Implement 3-style media timeline (buffered, played, unavailable)
        https://bugs.webkit.org/show_bug.cgi?id=141526
        <rdar://problem/19603337>

        Reviewed by Eric Carlson and Antoine Quint.

        Implement a 3-style media scrubber for iOS. This draws white for
        the region that has been played (before the playhead), black
        for the region that is buffered, and is hollow for the rest.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.updateProgress): Update progress is now completely
        shared between OS X and iOS. This calls the implementation specific
        drawTimelineBackground.
        (Controller.prototype.drawTimelineBackground): Move the OS X code to here.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline): New styles for the timeline. Updated thumb image, etc.
        (video::-webkit-media-controls-timeline::-webkit-slider-runnable-track):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb:active):
        (video::-webkit-media-controls-time-remaining-display):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Create a globally unique canvas context name in the constructor.
        (ControllerIOS.prototype.createControls): Set the background of the timeline to a canvas.
        (ControllerIOS.prototype.addRoundedRect): Helper function.
        (ControllerIOS.prototype.drawTimelineBackground): Draw the 3-style content.
        (ControllerIOS.prototype.updateProgress): Deleted.

2015-02-12  Daniel Bates  <dabates@apple.com>

        Fix some Mac linker warnings
        https://bugs.webkit.org/show_bug.cgi?id=141522

        Reviewed by Alex Christensen.

        Following <https://trac.webkit.org/changeset/179945>, the linker warns about the following hidden WebCore symbols:
        
        ld: warning: cannot export hidden symbol __ZN7WebCore20LogNotYetImplementedE from /.../OpenSource/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/x86_64/Logging.o
        ld: warning: cannot export hidden symbol _wkCreateURLPasteboardFlavorTypeName from /.../OpenSource/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/x86_64/WebCoreSystemInterface.o
        ld: warning: cannot export hidden symbol _wkCreateURLNPasteboardFlavorTypeName from /.../OpenSource/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/x86_64/WebCoreSystemInterface.o

        * WebCore.exp.in: Remove symbols for functions wkCreateURLPasteboardFlavorTypeName and wkCreateURLNPasteboardFlavorTypeName.
        * platform/Logging.h: Export WTFLogChannel for LogNotYetImplemented, which is referenced from
        notImplementedLoggingChannel() in file NotImplemented.cpp. We make use of the associated
        header, NotImplemented.h, in both WebKit and WebKit2.
        * platform/mac/WebCoreSystemInterface.mm: Remove declarations for functions
        wkCreateURLPasteboardFlavorTypeName and wkCreateURLNPasteboardFlavorTypeName that
        were inadvertently not removed in r25494.

2015-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash inspecting styles of element with mutated stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=141451

        Reviewed by Timothy Hatcher.

        Test: inspector/css/stylesheet-with-mutations.html

        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::didMutateRules):
        Keep a flag on the CSSStyleSheet to know when it has had a rule
        mutation from the contents.

        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        When completely replacing the stylesheet's contents, we will have
        destroyed any previous rules, so clear the has mutations flag.

        (WebCore::selectorsFromSource):
        Previously there was a mismatch between the rules the parsed
        SourceData had, and the actual CSSSelectors we were iterating.
        We use the SourceData so we can get the exact user authored
        text instead of generated longhands from actualy selector objects.
        Add an ASSERT and bail to catch and more gracefully handle
        any possible mismatches in the future.

        (WebCore::InspectorStyleSheet::styleSheetMutated):
        (WebCore::InspectorStyleSheet::ensureParsedDataReady):
        When a CSSStyleSheet has been mutated beyond the inspector's
        knowledge right now, fall back to readonly generated selectors.
        We should better handle this in the future:
        <https://webkit.org/b/141450> Web Inspector: Better support for CSSOM StyleSheet mutations (insertRule/deleteRule)

2015-02-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179987.
        https://bugs.webkit.org/show_bug.cgi?id=141525

        caused debug tests to fail (Requested by alexchristensen on
        #webkit).

        Reverted changeset:

        "[CSS Grid Layout] Invalid initialization of track sizes with
        non spanning grid items"
        https://bugs.webkit.org/show_bug.cgi?id=140763
        http://trac.webkit.org/changeset/179987

2015-02-12  Brian J. Burg  <burg@cs.washington.edu>

        REGRESSION(r178060): empty arguments are passed when logging to system console
        https://bugs.webkit.org/show_bug.cgi?id=141511

        Reviewed by Timothy Hatcher.

        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::messageWithTypeAndLevel): Change premature move to copyRef.

2015-02-12  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed debug build fix after r179980.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewportSize):
        Explicitly call constructor.

2015-01-23  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Invalid initialization of track sizes with non spanning grid items
        https://bugs.webkit.org/show_bug.cgi?id=140763

        Reviewed by Antti Koivisto.

        Content sized tracks with non-spanning grid items were not
        properly sized because the growth limit was sometimes infinity
        (-1) after calling resolveContentBasedTrackSizingFunctions() when
        it should not. This patch adds an special initialization phase for
        non-spanning grid items as the new track sizing algorithm
        describes.

        Granted, that was handled in the old algorithm in
        distributeSpaceToTracks() as a special case. The problem is that
        it regressed after the optimization added in r173868 because that
        method is no longer called when the space to distribute is 0.

        That's why we could fix this by allowing calls to
        distributeSpaceToTracks() with spaceToDistribute>=0 but by fixing
        it with an explicit initialization our implementation becomes
        closer to the new algorithm and the initialization is now explicit
        in the code instead of a side effect of calling
        distributeSpaceToTracks() with no space to be distributed. It also
        brings a slight performance improvement as we save sorts and hash
        lookups.

        I also took the change to add caching to several GridTrackSize
        methods that were hot on the profiler (each one accounted for ~1%
        of the total time, now they account for ~0.3% each).

        Test: fast/css-grid-layout/grid-initialize-span-one-items.html

        * rendering/RenderGrid.cpp:
        (WebCore::GridItemWithSpan::span): New helper method for ASSERTs.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        Exclude non spanning grid items from the calls to
        resolveContentBasedTrackSizingFunctionsForItems().
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
        New method to resolve track sizes only using non-spanning grid
        items.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Ensure that it isn't called for non-spanning grid items.
        * rendering/RenderGrid.h:
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::GridTrackSize): Cache return values.
        (WebCore::GridTrackSize::setLength): Ditto.
        (WebCore::GridTrackSize::setMinMax): Ditto.
        (WebCore::GridTrackSize::cacheMinMaxTrackBreadthTypes): New method
        that caches the return values for hasXXXTrackBreadth() methods.
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth): Use
        the cached return value.
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadth): Ditto.
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth):
        Ditto.
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth):
        Ditto.

2015-02-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove the USE(ACCELERATED_COMPOSITING) guard from the
        MediaPlayerPrivateGStreamerBase destructor.

        The guard was removed in r163079. It was still defined through CMake
        for the EFL and GTK ports when the guarded code was introduced in
        r172828. In r171741 the macro was finally removed for the GTK and EFL
        ports as well, but the guards for the affected code weren't updated
        so TextureMapperPlatformLayer::Client::platformLayerWillBeDestroyed()
        wasn't being called anymore.

        Rubber-stamped by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):

2015-02-11  Darin Adler  <darin@apple.com>

        Streamline and simplify SVGSVGElement and related classes
        https://bugs.webkit.org/show_bug.cgi?id=141463

        Reviewed by Antti Koivisto.

        * dom/Document.cpp: Removed unneeded include of SVGSVGElement.h.
        * loader/FrameLoader.cpp: Ditto.
        * rendering/RenderBoxModelObject.cpp: Ditto.
        * rendering/svg/RenderSVGForeignObject.cpp: Ditto.
        * svg/SVGImageElement.cpp: Ditto.
        * svg/SVGMarkerElement.cpp: Ditto.
        * svg/SVGPathElement.cpp: Ditto.
        * svg/SVGPatternElement.cpp: Ditto.
        * svg/SVGTransform.cpp: Ditto.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor): Updated to call the SVGSVGElement function
        named scrollToAnchor (was setupInitialView). Also refactored to avoid repeating
        the expression frame().document() so often.

        * platform/graphics/FloatSize.h: Added operator/.

        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::rootElement): Rearranged to use early return.
        (WebCore::SVGDocument::zoomAndPanEnabled): Ditto.
        (WebCore::SVGDocument::startPan): Ditto. Also used FloatPoint math instead
        of breaking things apart into x and y.
        (WebCore::SVGDocument::updatePan): Ditto.

        * svg/SVGDocument.h: Removed some unneeded includes and forward declarations.
        Moved function bodies out of the class to make it more readable. Renamed
        m_translate to m_panningOffset and made it a FloatSize instead of FloatPoint.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations): Use a modern for loop
        and update since timeContainer() now returns a reference.

        * svg/SVGSVGElement.cpp: Removed many unneeded includes.
        (WebCore::SVGSVGElement::SVGSVGElement): Moved initialization of scalars to
        the class definition. Updated since m_timerContainer is a Ref (later should
        change it to be a std::unique_ptr or just directly contained in SVGSVGElement).
        (WebCore::SVGSVGElement::~SVGSVGElement): Removed comment that doesn't say much,
        but is worded in a confusing way.
        (WebCore::SVGSVGElement::contentScriptType): Use NeverDestroyed instead of
        DEPRECATED_DEFINE_STATIC_LOCAL.
        (WebCore::SVGSVGElement::contentStyleType): Ditto.
        (WebCore::SVGSVGElement::viewport): Streamlined a bit.
        (WebCore::SVGSVGElement::pixelUnitToMillimeterX): Ditto.
        (WebCore::SVGSVGElement::pixelUnitToMillimeterY): Ditto.
        (WebCore::SVGSVGElement::currentView): Changed to return a reference.
        (WebCore::SVGSVGElement::frameForCurrentScale): Added. Helper for the two
        functions below.
        (WebCore::SVGSVGElement::currentScale): Updated to use frameForCurrentScale.
        (WebCore::SVGSVGElement::setCurrentScale): Ditto.
        (WebCore::SVGSVGElement::setCurrentTranslate): Optimized the case where there
        is no change to the translation. Also changed the data member's name to
        m_currentTranslate to more directly match the DOM API naming.
        (WebCore::SVGSVGElement::parseAttribute): Simplified the parsing a bit, and
        changed to pass a reference to SVGZoomAndPan::parseAttribute.
        (WebCore::SVGSVGElement::svgAttributeChanged): Tweaked formatting and removed
        code that converts the renderer pointer to a RenderObject* unnecessarily.
        (WebCore::SVGSVGElement::suspendRedraw): Removed FIXME about implementing this,
        since we don't really plan to do that.
        (WebCore::SVGSVGElement::unsuspendRedraw): Ditto.
        (WebCore::SVGSVGElement::unsuspendRedrawAll): Ditto.
        (WebCore::SVGSVGElement::forceRedraw): Ditto.
        (WebCore::SVGSVGElement::collectIntersectionOrEnclosureList): Changed return
        type to Ref, and pass in a function instead of an enumeration value.
        (WebCore::SVGSVGElement::getIntersectionList): Updated for above.
        (WebCore::SVGSVGElement::getEnclosureList): Ditto.
        (WebCore::SVGSVGElement::checkIntersection): Use && instead of early return
        for the null check.
        (WebCore::SVGSVGElement::checkEnclosure): Ditto.
        (WebCore::SVGSVGElement::createSVGLength): Use initialization list syntax
        for greater brevity.
        (WebCore::SVGSVGElement::createSVGAngle): Ditto.
        (WebCore::SVGSVGElement::createSVGPoint): Ditto.
        (WebCore::SVGSVGElement::createSVGMatrix): Ditto.
        (WebCore::SVGSVGElement::createSVGRect): Ditto.
        (WebCore::SVGSVGElement::createSVGTransform): Removed unneeded explicit
        constructor invocation.
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix): Removed unneeded cast.
        (WebCore::SVGSVGElement::insertedInto): Updated since timeContainer() now
        returns a reference.
        (WebCore::SVGSVGElement::setCurrentTime): Use isfinite instead of isnan, so
        we won't store infinity as the current time.
        (WebCore::SVGSVGElement::currentViewBoxRect): Renamed locals and changed
        to use initializer lists for brevity.
        (WebCore::SVGSVGElement::currentViewportSize): Streamlined code by using
        initializer lists, using local variables only for things used more than once,
        and using the / operator defined above.
        (WebCore::SVGSVGElement::viewBoxToViewTransform): Use the concatenate function
        in a way that is more straightforward, rather than doing it with a temporary.
        (WebCore::SVGSVGElement::scrollToAnchor): Renamed this from
        setupInitialView.
        (WebCore::SVGSVGElement::inheritViewAttributes): Changed this to work with
        references rather than pointers.
        (WebCore::SVGSVGElement::getElementById): Use getAllElementsById as the
        FIXME comment suggested for better efficiency when there are a lot of descendants
        of the <svg> element at the cost of making it less efficient if there are
        a lot of elements all with the desired ID, but not inside the <svg> element.
        (WebCore::SVGSVGElement::isValid): Moved here from the header.

        * svg/SVGSVGElement.h: Removed unneeded forward declarations. Moved the
        animated properties to the top of the file, then other DOM, the other
        public members. Changed return types to references and Ref. Moved
        function bodies out of the class definition. Made createSVGNumber inline.

        * svg/SVGViewElement.cpp: Removed unneeded includes.
        (WebCore::SVGViewElement::isSupportedAttribute): Deleted.
        (WebCore::SVGViewElement::parseAttribute): Changed to not rely on
        isSupportedAttribute. Eventually I will do this in all the SVG classes.

        * svg/SVGViewSpec.cpp: Removed unneeded include of SVGSVGElement.h.
        (WebCore::SVGViewSpec::parseViewSpec): Updated for change in the name
        of the parse function in the SVGZoomAndPan class.

        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::isKnownAttribute): Deleted.
        (WebCore::SVGZoomAndPan::addSupportedAttributes): Deleted.
        (WebCore::SVGZoomAndPan::parse): Renamed from parseZoomAndPan since
        this is a member of the SVGZoomAndPan class and also has an argument
        of SVGZoomAndPanType.
        (WebCore::SVGZoomAndPan::parseAttributeValue): Added. Helper so the
        template function is not so big. Also write it in a simpler way.
        (WebCore::SVGZoomAndPan::ref): Deleted.
        (WebCore::SVGZoomAndPan::deref): Deleted.
        (WebCore::SVGZoomAndPan::setZoomAndPan): Deleted.

        * svg/SVGZoomAndPan.h: Removed unneeded includes. Reformatted the enum.
        Moved function bodies out of the class definition. Removed many unneeded
        functions.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedInto): Updated since timeContainer
        now returns a reference rather than a pointer.

2015-02-11  Darin Adler  <darin@apple.com>

        SVGUseElement follow-up improvements
        https://bugs.webkit.org/show_bug.cgi?id=141382

        Reviewed by Antti Koivisto.

        * loader/cache/CachedSVGDocumentClient.h: Removed unneeded forward declaration.

        * page/EventHandler.cpp: Removed unneeded include of SVGUseElement.h.
        * rendering/svg/RenderSVGViewportContainer.cpp: Ditto.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::clearTargetDependencies): Removed too-specific
        check that assumed that SVG elements in shadow trees are always for <use> elements.
        This amounted to an unneeded optimization that could be removed with no bad effect.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingElement): Removed the assertions so this could
        be used more freely outside of cases where the shadow tree state is fully consistent.
        It's fine to have this just be a mechanical getter; there's nothing super-tricky
        here that needs to be caught by the assertion.
        (WebCore::SVGElement::title): Removed unneeded special handling for titles inside
        the shadow tree.

        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::create): Added an overload that doesn't require explicitly
        passing in the tag name.
        * svg/SVGGElement.h: Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::create): Ditto.
        * svg/SVGSVGElement.h: Ditto.

        * svg/SVGUseElement.cpp: Removed a lot of unneeded includes.
        (WebCore::SVGUseElement::SVGUseElement): Removed code to initialize some booleans.
        We do that in the class definition now.
        (WebCore::SVGUseElement::create): Removed the code that calls the
        ensureUserAgentShadowRoot function unconditionally. That's properly done when
        needed; no need to do it here.
        (WebCore::SVGUseElement::~SVGUseElement): Removed unneeded code to destroy the
        shadow tree (that happens automatically) and simplified the code to stop loading
        the external document.
        (WebCore::SVGUseElement::isSupportedAttribute): Deleted.
        (WebCore::SVGUseElement::parseAttribute): Simplified this. Removed assumptions
        about the intersection of various sets of attributes, and also removed the
        isSupportedAttribute function. This seems to serve no purpose here, or in any
        other SVG element class. I plan to remove it everywhere over time.
        (WebCore::isWellFormedDocument): Deleted.
        (WebCore::SVGUseElement::insertedInto): Simplified code by removing all the
        special cases during initial parsing, and did the invalidation here rather than
        deferring it to didNotifySubtreeInsertions. Added a call to the new function,
        updateExternalDocument, since that won't do anything when the element is not
        in a document.
        (WebCore::SVGUseElement::didNotifySubtreeInsertions): Deleted.
        (WebCore::SVGUseElement::removedFrom): Added code to call clearShadowTree and
        updateExternalDocument. Both are efficient when doing nothing, and both are
        appropriate since the element is no longer in a document.
        (WebCore::SVGUseElement::referencedDocument): Deleted. No longer needed.
        (WebCore::SVGUseElement::externalDocument): Streamlined the logic here, removing
        multiple unneeded checks.
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone): Renamed since
        "target clone" is clear enough within this class, without explicitly stating
        "shadow tree". All the clones are in the shadow tree.
        (WebCore::SVGUseElement::svgAttributeChanged): Removed unneeded code calling
        isSupportedAttribute. Changed the code that detects changes in href to just
        call updateExternalDocument (for the document URL) and invalidateShadowTree
        (for the fragment). Also updated the transferSizeAttributesToTargetClone logic
        to only trigger on width and height and updated names.
        (WebCore::SVGUseElement::willAttachRenderers): Updated for the new name of
        m_shouldRebuildShadowTree and added a call through to the base class.
        (WebCore::createAllowedElementSet): Added. A more efficient way to implement
        the initialization of the set for isDisallowedElement.
        (WebCore::isDisallowedElement): Simplified this by using the function above,
        and also overloaded for both SVGElement and Element for a tiny efficiency boost.
        (WebCore::SVGUseElement::clearShadowTree): Renamed form clearResourceReferences.
        This is a much more straightforward name. Also deleted the code that sets the
        m_needsShadowTreeRecreation flag to false. That should be done by the build
        function, not here.
        (WebCore::SVGUseElement::buildPendingResource): Made this just invalidate the
        shadow tree now instead of explicitly building it.
        (WebCore::SVGUseElement::updateShadowTree): Moved the code to create a shadow
        tree here from buildPendingResource. ALso changed the logic so that we
        always blow away the old shadow tree. Moved the comment about rebuilding things
        every time here. Updated the code to use the findTarget and cloneTarget functions,
        eliminating the buildShadowTree function entirely. Moved the call to
        transferSizeAttributesToShadowTreeTargetClone inside cloneTarget. Also updated
        for the name change for m_shouldRebuildShadowTree.
        (WebCore::SVGUseElement::targetClone): Renamed from shadowTreeTargetClone.
        No need to emphasize "shadow tree" since that's where all clones are.
        (WebCore::isDirectReference): Streamlined a bit using "using namespace".
        (WebCore::SVGUseElement::toClipPath): Rewrote to use early return and updated
        for name changes. Also used ASCIILiteral.
        (WebCore::SVGUseElement::rendererClipChild): Changed local variable names.
        (WebCore::removeDisallowedElementsFromSubtree): Wrote the iteration in a
        slightly more idiomatic style.
        (WebCore::SVGUseElement::findTarget): Added. This new function implements
        the rule for finding a valid target for a use element. This replaces logic
        that was duplicated in two different places and it also includes all the
        rules that were formerly in the isValidTarget function. Also, this implements
        a correct check for a cycle that handles cases the code in isValidTarget did not.
        (WebCore::SVGUseElement::isValidTarget): Deleted.
        (WebCore::SVGUseElement::cloneTarget): Added. Helper function used both when
        cloning the target of the top level <use> elements and for other <use> elements
        inside the shadow tree.
        (WebCore::cloneDataAndChildren): Added. Helper function that allows both the
        <use> and <symbol> element expanding functions to be shorter and share more code.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Removed unneeded checks
        of cachedDocumentIsStillLoading. Used the new findTarget function, which handles
        finding the target cross-document correctly. Removed the incorrect use of
        referencedDocument when creating new elements and finding targets. Refactored
        to use the new cloneDataAndChildren function and also moved the code that removes
        the special attributes here, replacing the transferAttributesToShadowTreeReplacement
        function. Made a few other simplifications.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Ditto, just like the
        <use> changes only simpler.
        (WebCore::SVGUseElement::transferEventListenersToShadowTree): Made this const.
        Removed unneeded assertions.
        (WebCore::SVGUseElement::invalidateShadowTree): Updated for name change.
        (WebCore::SVGUseElement::invalidateDependentShadowTrees): Removed assertion.
        (WebCore::SVGUseElement::transferAttributesToShadowTreeReplacement): Deleted.
        (WebCore::SVGUseElement::selfHasRelativeLengths): Tweaked names.
        (WebCore::SVGUseElement::notifyFinished): Removed the inDocument check, since
        this function will only be called for elements that are in a document.
        (WebCore::SVGUseElement::cachedDocumentIsStillLoading): Deleted.
        (WebCore::SVGUseElement::finishParsingChildren): Removed the code that calls
        buildPendingResource here. Shadow tree updating is driven solely by renderer
        generation now.
        (WebCore::SVGUseElement::updateExternalDocument): Replaced setCachedDocument
        with this. This function knows how to load a different document if the URL
        has changed, or leave it alone if not, and also stop the load if it should.
        (WebCore::SVGUseElement::isValid): Moved this here from the header, since it's
        always being called virtually.
        (WebCore::SVGUseElement::haveLoadedRequiredResources): Ditto.
        (WebCore::SVGUseElement::setHaveFiredLoadEvent): Ditto.
        (WebCore::SVGUseElement::haveFiredLoadEvent): Ditto.
        (WebCore::SVGUseElement::svgLoadEventTimer): Ditto.

        * svg/SVGUseElement.h: Removed unneeded include. Moved the animated properties
        to the top of the class because they are public DOM API and so are logical to
        list first. I'd like to do that for other classes too over time. Changed to
        derive privately from CachedSVGDocumentClient. Made the function
        invalidateDependentShadowTrees private. Removed didNotifySubtreeInsertions,
        isSupportedAttribute, clearResourceReferences, buildShadowTree,
        transferAttributesToShadowTreeReplacement, isParserInserted, and
        m_wasInsertedByParser. Added updateExternalDocument, cloneTarget, targetClone,
        updateShadowTree, and clearShadowTree. Also did a couple other renames,
        including renaming m_cachedDocument to m_externalDocument.

        * svg/svgtags.in: Removed constructorNeedsCreatedByParser from the <use>
        element since we don't have to handle constructing by the parser specially.

2015-02-11  Dhi Aurrahman  <diorahman@rockybars.com>

        CSS selector JIT compilation support for :lang()
        https://bugs.webkit.org/show_bug.cgi?id=140818

        Reviewed by Benjamin Poulain.

        Add the JIT support for :lang(), to ensure :lang() no longer force the engine to
        the slow path.

        Test: fast/selectors/lang-chained-multiple.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Get rid of the FunctionType::CannotCompile
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsInLanguage):

2015-02-11  Alex Christensen  <achristensen@webkit.org>

        Fix more weak external symbol errors.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * page/make_settings.pl:
        (printGetterAndSetter):
        Remove some WEBCORE_EXPORT macros.

2015-02-11  Alex Christensen  <achristensen@webkit.org>

        Do not export functions defined in headers.
        This prevents weak external symbol errors in some configurations.

        * dom/Range.h:
        (WebCore::Range::startContainer):
        (WebCore::Range::startOffset):
        (WebCore::Range::endContainer):
        (WebCore::Range::endOffset):
        * inspector/InspectorController.h:
        * page/Settings.h:
        (WebCore::Settings::setMediaKeysStorageDirectory):
        * page/make_settings.pl:
        (printGetterAndSetter):
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        (WebCore::ProtectionSpace::encodingRequiresPlatformData):
        * platform/text/TextEncoding.h:
        (WebCore::TextEncoding::decode):
        Removed WEBCORE_EXPORT macros.

2015-02-11  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=141345
        <rdar://problem/19632080>

        Reviewed by Sam Weinig.

        Add a few more diagnostic logging keys for the network cache efficacy
        logging.

2015-02-11  Sam Weinig  <sam@webkit.org>

        REGRESSION(r179166): Crash when accessing document.dir on a document with no elements
        <rdar://problem/19804351>
        https://bugs.webkit.org/show_bug.cgi?id=141480

        Reviewed by Chris Dumez.

        Test: fast/dom/document-dir-empty-document-crash.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir):
        Don't unnecessarily dereference the documentElement. is<HTMLHtmlElement>() will handle null just fine.

2015-02-11  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/141492> extract-localizable-strings.pl shouldn't update the target file if the contents haven't changed

        Avoid updating the target file if the contents haven't changed. This prevents Xcode from copying the identical
        file into the framework and resigning it, which avoids the resulting relinking of all targets that depend on
        the framework.

        Reviewed by Dan Bernstein.

        * extract-localizable-strings.pl: Write our output to a temporary file. If the output differs from the
        existing contents of the target file, move the temporary file over the target file. Otherwise, delete
        the temporary file.

2015-02-11  Chris Dumez  <cdumez@apple.com>

        Turn recent assertions into release assertions to help track down crash in DocumentLoader::stopLoadingForPolicyChange()
        https://bugs.webkit.org/show_bug.cgi?id=141484
        <rdar://problem/13811738>

        Reviewed by Andy Estes.

        Turn recent assertions into release assertions to help track down crash in
        DocumentLoader::stopLoadingForPolicyChange(). This should increase the
        likelyhood of tripping them so that we better understand why this happens.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::detachFromFrame):

2015-02-11  Jer Noble  <jer.noble@apple.com>

        [MSE] SampleMap::addRange() returns an inverted iterator_range, possibly causing a crash when that iterator_range is traversed.
        https://bugs.webkit.org/show_bug.cgi?id=141479
        rdar://problem/19067597

        Reviewed by Chris Dumez.

        When looking backwards through a presentationOrder map to find samples, we then reverse our iterators
        and put them in an iterator_range to return to the caller. But in addition to reversing the iterators
        themselves, we also need to put them in the iterator_range in reverse order, so that when the caller
        iterates from iterator_range.first -> iterator_range.second, they don't end up off the end of the
        the underlying storage.

        * Modules/mediasource/SampleMap.cpp:
        (WebCore::PresentationOrderSampleMap::findSamplesWithinPresentationRangeFromEnd):

2015-02-11  Simon Fraser  <simon.fraser@apple.com>

        Improve the showFrameTree() output slightly
        https://bugs.webkit.org/show_bug.cgi?id=141482

        Reviewed by Zalan Bujtas.

        Have showFrameTree() show the Frame's RenderView so it can be correlated with
        layer dumps, and show styleRecalc and needsLayout state.

        * page/FrameTree.cpp:
        (printFrames):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive): Add an explanatory
        comment about why we don't walk the Frame tree.

2015-02-11  Alex Christensen  <achristensen@webkit.org>

        Stop using WebCore.exp.in on Mac and iOS.
        https://bugs.webkit.org/show_bug.cgi?id=141413

        Reviewed by Dan Bates.

        * Configurations/Base.xcconfig:
        Make symbols hidden by default unless exported by WEBCORE_EXPORT macros.
        * platform/PlatformExportMacros.h:
        Start using WEBCORE_EXPORT on Mac and iOS (but not Windows yet).

2015-02-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Div having contentEditable and display:flex cannot be edited if it is empty.
        https://bugs.webkit.org/show_bug.cgi?id=141218

        Reviewed by Ryosuke Niwa.

        RenderFlexibleBox should be treated as a candidate for visible position. Visible selection
        in an editable area is recalculated whenever an inner value of div is changed. If the inner value
        is empty, the visible selection recalculated with DeleteSelectionCommand::m_endingPostion
        is not correct. Because RenderBlockFlow is only considered but not RenderFlexibleBox
        in Position::isCandidate so that a calculated ending VisiblePosition for an editable div
        having "display : flex" goes weird and VisibleSelection is empty accordingly.

        Test: fast/events/key-events-in-editable-flexbox.html

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):

2015-02-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Activate ReliefLogger of a memory pressure handler for linux system.
        https://bugs.webkit.org/show_bug.cgi?id=123611

        Reviewed by Anders Carlsson.

        Put more logs for the time when a system goes under memory pressure or viceversa.

        No new tests since no engine behavior changed.

        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::waitForMemoryPressureEvent): Wait a memory pressure event
        from cgroup in a seperated thread. Once a pressure event happens, respondToMemoryPressure()
        would be called to get back some resources.
        (WebCore::MemoryPressureHandler::install): Install memoryPressureHandler module
        to make it work.

2015-02-11  Alex Christensen  <achristensen@webkit.org>

        Final preparations to switch to WEBCORE_EXPORT.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        Export the vtable and a function.

2015-02-11  Sam Weinig  <sam@webkit.org>

        performance.now can crash if accessed from a window that has navigated
        <rdar://problem/16892506>
        https://bugs.webkit.org/show_bug.cgi?id=141478

        Reviewed by Alexey Proskuryakov.

        Test: fast/performance/performance-now-crash-on-navigated-window.html

        * page/Performance.cpp:
        (WebCore::Performance::now):
        Check for a null frame, which can happen when the window has been navigated.

2015-02-10  Alexey Proskuryakov  <ap@apple.com>

        URL::setUser and URL::setPass don't percent encode
        https://bugs.webkit.org/show_bug.cgi?id=141453
        rdar://problem/14844503&16551802&19623145

        Reviewed by Darin Adler.

        Tests: fast/url/url-credentials-escaping.html
               http/tests/xmlhttprequest/basic-auth-credentials-escaping.html

        Start adding some code that performs escaping in a way that matches the URL Standard.
        Right now, it's only used where we failed to do any escaping at all, and over time,
        we'll be moving towards a new implementation.

        * html/URLUtils.h:
        (WebCore::URLUtils<T>::username):
        (WebCore::URLUtils<T>::password):
        * platform/URL.cpp:
        (WebCore::isSchemeFirstChar):
        (WebCore::URL::user):
        (WebCore::URL::pass):
        (WebCore::URL::encodedUser):
        (WebCore::URL::encodedPass):
        (WebCore::URL::setUser):
        (WebCore::URL::setPass):
        (WebCore::encodeWithURLEscapeSequences):
        * platform/URL.h:

2015-02-11  Alex Christensen  <achristensen@webkit.org>

        Add a few more WEBCORE_EXPORT macros for debug and iOS builds.

        * page/EventHandler.h:
        * page/ios/WebEventRegion.h:
        * platform/sql/SQLiteDatabaseTracker.h:

2015-02-11  Darin Adler  <darin@apple.com>

        REGRESSION(r179476): It broke the !ENABLE(PICTURE_SIZES) build
        https://bugs.webkit.org/show_bug.cgi?id=141327

        Reviewed by Csaba Osztrogonác.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        Put #if around use of m_sizesAttribute.

2015-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179921.
        https://bugs.webkit.org/show_bug.cgi?id=141473

        caused about 30 test failures on yosemite and mavericks
        (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Div having contentEditable and display:flex cannot be edited
        if it is empty."
        https://bugs.webkit.org/show_bug.cgi?id=141218
        http://trac.webkit.org/changeset/179921

2015-02-11  ChangSeok Oh  <changseok.oh@collabora.com>

        Div having contentEditable and display:flex cannot be edited if it is empty.
        https://bugs.webkit.org/show_bug.cgi?id=141218

        Reviewed by Ryosuke Niwa.

        RenderFlexibleBox should be treated as a candidate for visible position. Visible selection
        in an editable area is recalculated whenever an inner value of div is changed. If the inner value
        is empty, the visible selection recalculated with DeleteSelectionCommand::m_endingPostion
        is not correct. Because RenderBlockFlow is only considered but not RenderFlexibleBox
        in Position::isCandidate so that a calculated ending VisiblePosition for an editable div
        having "display : flex" goes weird and VisibleSelection is empty accordingly.

        Test: fast/events/key-events-in-editable-flexbox.html

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):

2015-02-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179910.
        https://bugs.webkit.org/show_bug.cgi?id=141464

        Caused assertions on debug bots (Requested by ap on #webkit).

        Reverted changeset:

        "[WK2] Add logging to validate the network cache efficacy
        (Part 2)"
        https://bugs.webkit.org/show_bug.cgi?id=141345
        http://trac.webkit.org/changeset/179910

2015-02-10  Chris Dumez  <cdumez@apple.com>

        Optimize MutableStyleProperties::removePropertiesInSet()
        https://bugs.webkit.org/show_bug.cgi?id=141460

        Reviewed by Andreas Kling.

        Optimize MutableStyleProperties::removePropertiesInSet() by doing an
        in-place removal of the vector properties, using the new and efficient
        Vector::removalAllMatching().

        I see a ~11% speed-up on CSS/CSSPropertySetterGetter.html performance
        test.

        This change was inspired by the following Blink revision:
        https://src.chromium.org/viewvc/blink?view=rev&revision=189387

        Test: PerformanceTests/CSS/CSSPropertySetterGetter.html

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::removePropertiesInSet):

2015-02-10  Alex Christensen  <achristensen@webkit.org>

        [Win] Fix debug build after r179807.
        https://bugs.webkit.org/show_bug.cgi?id=141461

        Reviewed by Benjamin Poulain.

        * dom/TypedElementDescendantIterator.h:
        Explicitly call Iterator constructor to reduce complexity when iterating descendantsOfType.

2015-02-10  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=141345

        Reviewed by Antti Koivisto.

        Add a few more diagnostic logging keys for the network cache efficacy
        logging.

2015-02-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179896.
        https://bugs.webkit.org/show_bug.cgi?id=141452

        broke linking debug builds (Requested by thorton on #webkit).

        Reverted changeset:

        "Stop using WebCore.exp.in on Mac and iOS."
        https://bugs.webkit.org/show_bug.cgi?id=141413
        http://trac.webkit.org/changeset/179896

2015-02-10  Alex Christensen  <achristensen@webkit.org>

        Fix bindings tests after r179886.

        * bindings/scripts/test/ObjC/DOMFloat64Array.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNondeterministic.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:

2015-02-10  Alex Christensen  <achristensen@webkit.org>

        Stop using WebCore.exp.in on Mac and iOS.
        https://bugs.webkit.org/show_bug.cgi?id=141413

        Reviewed by Dan Bates.

        * Configurations/Base.xcconfig:
        Make symbols hidden by default unless exported by WEBCORE_EXPORT macros.
        * platform/PlatformExportMacros.h:
        Start using WEBCORE_EXPORT on Mac and iOS (but not Windows yet).

2015-02-10  Chris Dumez  <cdumez@apple.com>

        Add another assertion to help track down crash in DocumentLoader::stopLoadingForPolicyChange()
        https://bugs.webkit.org/show_bug.cgi?id=141447
        <rdar://problem/13811738>

        Reviewed by Alexey Proskuryakov.

        Add another assertion to help track down crash in
        DocumentLoader::stopLoadingForPolicyChange().

        The trace seems to hint that frameLoader() returns null when
        stopLoadingForPolicyChange() is called. frameLoader() can only return
        null after DocumentLoader::detachFromFrame() has been called.
        Also, stopLoadingForPolicyChange() here is called from the
        DocumentLoader::continueAfterContentPolicy() policy callback which
        requires m_waitingForContentPolicy to be true. Therefore, we should
        assert that m_waitingForContentPolicy is false when m_frame is cleared
        in DocumentLoader::detachFromFrame().

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

2015-02-10  Alex Christensen  <achristensen@webkit.org>

        Stop using WebCore.exp.in on Mac and iOS.
        https://bugs.webkit.org/show_bug.cgi?id=141413

        Reviewed by Dan Bates.

        * Configurations/Base.xcconfig:
        Make symbols hidden by default unless exported by WEBCORE_EXPORT macros.
        * platform/PlatformExportMacros.h:
        Start using WEBCORE_EXPORT on Mac and iOS (but not Windows yet).

2015-02-10  Alex Christensen  <achristensen@webkit.org>

        Add more WEBCORE_EXPORT macros for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=141430

        Reviewed by Tim Horton.

        * bindings/objc/WebScriptObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        * dom/Event.h:
        * dom/Node.h:
        * editing/FrameSelection.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLMediaSession.h:
        * page/Frame.h:
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/wak/WAKAppKitStubs.h:
        * platform/ios/wak/WAKClipView.h:
        * platform/ios/wak/WAKScrollView.h:
        * platform/ios/wak/WAKView.h:
        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WAKWindow.mm:
        * platform/ios/wak/WKContentObservation.h:
        * platform/ios/wak/WKGraphics.h:
        * platform/ios/wak/WebCoreThread.h:
        * platform/ios/wak/WebCoreThread.mm:
        * platform/ios/wak/WebCoreThreadRun.h:
        * platform/ios/wak/WebCoreThreadSystemInterface.h:
        * platform/network/ios/QuickLook.h:
        * platform/text/TextBreakIterator.h:

2015-02-09  David Hyatt  <hyatt@apple.com>

        text-underline-position: under is broken
        https://bugs.webkit.org/show_bug.cgi?id=141400
        <rdar://problem/18569583>

        Reviewed by Simon Fraser.

        Added fast/text/text-underline-position-under.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeMaxLogicalBottom):
        (WebCore::InlineFlowBox::computeMaxLogicalTop): Deleted.
        * rendering/InlineFlowBox.h:
        Switch to using the bottom to compute the offset. Using the top is incorrect, since
        the heights of boxes can vary.

        Fix a bug where the y() of the box was being used instead of the logical value, making the result
        wrong for vertical text.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::maxLogicalBottom):
        (WebCore::RootInlineBox::maxLogicalTop): Deleted.
        Switch to using the bottom instead of the top. Make sure the root box contributes its own bottom,
        since the old code just ignored the root's placement.

        * rendering/RootInlineBox.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        Call the bottom function now instead of the top.

2015-02-10  Chris Dumez  <cdumez@apple.com>

        Add assertion to help track down WebCore::DocumentLoader::stopLoadingForPolicyChange() crash
        https://bugs.webkit.org/show_bug.cgi?id=141441
        <rdar://problem/13811738>

        Reviewed by Alexey Proskuryakov.

        Add assertion to help track down a crash in
        WebCore::DocumentLoader::stopLoadingForPolicyChange().

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        Make sure the DocumentLoader is not waiting for a content policy
        response when it is destroyed. If this were to happen, then the
        lambda function passed to PolicyChecker::checkContentPolicy()
        would outlive the DocumentLoader. This is an issue because
        that lambda function captures [this], which is the DocumentLoader.
        This would cause DocumentLoader::continueAfterContentPolicy() to
        be called after the DocumentLoader has been destroyed, which would
        explain the crash.

2015-02-07  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r168046): Crash in WebCore::InlineBox::renderer / WebCore::RenderFlowThread::checkLinesConsistency
        https://bugs.webkit.org/show_bug.cgi?id=133462

        Reviewed by David Hyatt.

        RenderFlowThread::m_lineToRegionMap stores pointers to the root inlineboxes in the block flow.
        Normally root inlineboxes remove themselves from this map in their dtors. However when collapsing an anonymous block,
        we detach the inline tree first and destroy them after. The detached root boxes can't access
        the flowthread containing block and we end up with dangling pointers in this map.
        Call removeFlowChildInfo() before detaching the subtree to ensure proper pointer removal.

        Test: fast/multicol/newmulticol/crash-when-switching-to-floating.html

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

2015-02-10  Julien Isorce  <j.isorce@samsung.com>

        Render: properly update body's background image
        https://bugs.webkit.org/show_bug.cgi?id=140183

        When HTML and BODY renderers are both composited the
        skipBodyBackground condition should also take into account
        if the HTML's layer can draw its contents.

        Reviewed by Darin Adler.

        Test: animations/animation-background-image.html

        * rendering/RenderBox.cpp:
        (WebCore::skipBodyBackground): Do not skip
        if document's layer cannot draw its content.
        Previously both body and html did not paint the background
        when they are both composited.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentChanged): Also redisplay
        the content.

2015-02-10  Eric Carlson  <eric.carlson@apple.com>

        [iOS] don't get out of sync when interrupt/resume calls are not balanced
        https://bugs.webkit.org/show_bug.cgi?id=141310

        Reviewed by Jer Noble.

        No new tests, updated media/video-interruption-with-resume-allowing-play.html.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): Count interruptions.
        (WebCore::MediaSession::endInterruption): Ignore calls when m_interruptionCount is already zero.
        * platform/audio/MediaSession.h:

2015-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GMutexLocker build issue
        https://bugs.webkit.org/show_bug.cgi?id=141381

        Reviewed by Žan Doberšek.

        Use always WTF::GMutexLocker because newer glib versions have a
        GMutexLocker in the public API.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::provideInput):
        (WebCore::AudioSourceProviderGStreamer::handleAudioBuffer):
        (WebCore::AudioSourceProviderGStreamer::clearAdapters):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockSampleMutex):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStart):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):
        (webKitWebSrcQueryWithParent):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):
        (webKitWebSrcSetMediaPlayer):
        (StreamingClient::createReadBuffer):
        (StreamingClient::handleResponseReceived):
        (StreamingClient::handleDataReceived):
        (StreamingClient::handleNotifyFinished):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):

2015-02-09  Alex Christensen  <achristensen@webkit.org>

        Update WEBCORE_EXPORT to prepare to start using it.
        https://bugs.webkit.org/show_bug.cgi?id=141409

        Reviewed by Tim Horton.

        * bindings/js/JSDOMGlobalObject.h:
        * bindings/objc/DOMInternal.h:
        * bindings/objc/ExceptionHandlers.mm:
        * bindings/objc/WebScriptObjectPrivate.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNondeterministic.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:
        * css/StyleProperties.h:
        * dom/DeviceMotionData.h:
        * dom/Node.h:
        * dom/Position.h:
        * dom/ScriptExecutionContext.h:
        * editing/Editor.h:
        * editing/htmlediting.h:
        * html/HTMLInputElement.h:
        * html/TimeRanges.h:
        * loader/FrameLoader.h:
        * loader/cache/CacheValidation.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconDatabase.h:
        * page/DatabaseProvider.h:
        * page/DiagnosticLoggingKeys.h:
        * page/EventHandler.h:
        * page/FrameSnapshotting.h:
        * page/MainFrame.h:
        * page/PageConsoleClient.h:
        * page/PageOverlay.h:
        * platform/CrossThreadCopier.h:
        * platform/FileSystem.h:
        * platform/PlatformSpeechSynthesizer.h:
        * platform/RemoteCommandListener.h:
        * platform/RuntimeApplicationChecks.h:
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontGlyphs.h:
        * platform/graphics/FontRanges.h:
        * platform/graphics/GeometryUtilities.h:
        * platform/graphics/GlyphPage.h:
        * platform/graphics/Region.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileController.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/network/BlobDataFileReference.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/create-http-header-name-table:
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/sql/SQLiteDatabaseTracker.h:
        * platform/sql/SQLiteStatement.h:
        * rendering/HitTestLocation.h:
        * rendering/HitTestResult.h:
        * storage/StorageEventDispatcher.h:
        Added WEBCORE_EXPORT macros.

2015-02-09  Chris Dumez  <cdumez@apple.com>

        Check for self-assignment in Length::operator=(const Length&)
        https://bugs.webkit.org/show_bug.cgi?id=141402

        Reviewed by Andreas Kling.

        Check for self-assignment in Length::operator=(const Length&) as
        calling memcpy() with the same source and destination addresses has
        undefined behavior.

        * platform/Length.h:
        (WebCore::Length::operator=):

2015-02-09  Roger Fong  <roger_fong@apple.com>

        WebGL: Update 1.0.2 conformance layout tests and address new failure.
        https://bugs.webkit.org/show_bug.cgi?id=141408.
        <rdar://problem/19773236>

        Reviewed by Dean Jackson.

        Tests covered by updated 1.0.2 conformance tests.

        * html/canvas/WebGLRenderingContextBase.cpp: 
        Return null string instead of empty string if parameter validation fails.
        (WebCore::WebGLRenderingContextBase::getProgramInfoLog):
        (WebCore::WebGLRenderingContextBase::getShaderInfoLog):
        (WebCore::WebGLRenderingContextBase::getShaderSource):

2015-02-09  Timothy Horton  <timothy_horton@apple.com>

        Avoid using a HashMap for DisplayRefreshMonitorManager, which rarely has more than one item
        https://bugs.webkit.org/show_bug.cgi?id=141353

        Reviewed by Anders Carlsson.

        No new tests, because there's no behavior change.

        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitorManager.h:
        Use a Vector of RefPtr<DisplayRefreshMonitor> instead of a HashMap
        from uint64_t to RefPtr<DisplayRefreshMonitor>. There's usually only one
        display, so there's usually only one DisplayRefreshMonitor. Linear search
        on the Vector will be faster than the hash lookup in all conceivable cases.
        This also avoids the situation mentioned in the comments in DisplayRefreshMonitorManager.h
        where we don't know enough about PlatformDisplayID to safely hash it.

2015-02-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Disable the currentTime estimation code in HTMLMediaElement for Yosemite+
        https://bugs.webkit.org/show_bug.cgi?id=141399

        Reviewed by Eric Carlson.

        Apparenty -[AVPlayer rate] means different things for HLS and progressive content; for progressive,
        the -rate is the actual rate of playback. For HLS, the -rate is the requested rate, and will return
        the requested value even if time is not progressing.

        We added the currentTime estimation engine because asking AVFoundation for its -currentTime used to
        be expensive, but we've been assured that in recent iOS and OS X releases, -currentTime should be
        very fast. That, in combination with the HLS behavior of -rate and how it breaks the currentTime
        estimation, means we should probably turn it off for iOS and Yosemite.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime): Move implementation to .mm.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime): Disable on iOS and >=10.10.

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

        WebGL 2: Texture call format, internal format, and type validation.
        https://bugs.webkit.org/show_bug.cgi?id=141318.
        <rdar://problem/19733828>

        Reviewed by Brent Fulgham.

        Tests will be covered by WebGL2 conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter): Add missing ExceptionCode argument.
        (WebCore::WebGL2RenderingContext::copyTexImage2D): Validate texture formats based on GLES3 spec.
        (WebCore::WebGL2RenderingContext::texSubImage2DBase): Validate using internal format from texture target.
        (WebCore::WebGL2RenderingContext::texSubImage2DImpl): Validate using internal format from texture target.
        (WebCore::WebGL2RenderingContext::texSubImage2D): Validate using internal format from texture target.
        (WebCore::WebGL2RenderingContext::validateTexFuncParameters): Do extra validation for copyTexImage2D.
        (WebCore::WebGL2RenderingContext::validateTexFuncFormatAndType): Validate internal format, format and type combination.
        (WebCore::WebGL2RenderingContext::validateTexFuncData): Validate new data types.
        This method now accepts an internal format argument.
        (WebCore::WebGL2RenderingContext::baseInternalFormatFromInternalFormat):
        Helper method to convert internal format to base internal format.
        * html/canvas/WebGL2RenderingContext.h:

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Moved from WebGLRenderingContextBase.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Ditto.
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType): Ditto.
        (WebCore::WebGLRenderingContext::validateTexFuncData): Ditto.
        * html/canvas/WebGLRenderingContext.h:

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        (WebCore::WebGLRenderingContextBase::validateTexFunc):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D): Deleted.
        (WebCore::WebGLRenderingContextBase::texSubImage2DBase): Deleted.
        (WebCore::WebGLRenderingContextBase::texSubImage2DImpl): Deleted.
        (WebCore::WebGLRenderingContextBase::texSubImage2D): Deleted.
        (WebCore::WebGLRenderingContextBase::validateTexFuncFormatAndType): Deleted.
        (WebCore::WebGLRenderingContextBase::validateTexFuncParameters): Deleted.
        (WebCore::WebGLRenderingContextBase::validateTexFuncData): Deleted.
        * html/canvas/WebGLRenderingContextBase.h: Modify validation type enums to differentiate between CopyImage, TexImage and TexSubImage calls.
        (WebCore::ScopedDrawingBufferBinder::ScopedDrawingBufferBinder):  Moved from WebGLRenderingContextBase.
        (WebCore::ScopedDrawingBufferBinder::~ScopedDrawingBufferBinder): Ditto.
        (WebCore::clip1D): Ditto.
        (WebCore::clip2D): Ditto.
        * platform/graphics/GraphicsContext3D.h: Rename a typo'ed enum.

2015-02-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179494.
        https://bugs.webkit.org/show_bug.cgi?id=141395

        Caused slowdown in a WebKit client test scenario (Requested by
        kling on #webkit).

        Reverted changeset:

        "[Cocoa] Make decoded image data purgeable ASAP."
        https://bugs.webkit.org/show_bug.cgi?id=140298
        http://trac.webkit.org/changeset/179494

2015-02-09  Jer Noble  <jer.noble@apple.com>

        [WebAudio] AudioBufferSourceNodes should accurately play backwards if given a negative playbackRate.
        https://bugs.webkit.org/show_bug.cgi?id=140955

        Reviewed by Eric Carlson.

        Tests: webaudio/audiobuffersource-negative-playbackrate-interpolated.html
               webaudio/audiobuffersource-negative-playbackrate.html

        Add support for playing an AudioBufferSourceNode at a negative playbackRate. Change the meaning of
        start() to set the initial playback position at the end of the play range if the rate of playback
        is negtive.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode): Allow the playbackRate AudioParam to range from [-32, 32].
        (WebCore::AudioBufferSourceNode::renderFromBuffer): Change variable names from "start" and "end" to "min" and "max"
            for clarity. Add a non-interpolated and interpolated render step for negative playback.
        (WebCore::AudioBufferSourceNode::start): Drive-by fix: default value of grainDuration is not 0.02.
        (WebCore::AudioBufferSourceNode::startPlaying): Start playing at the end of the buffer for negative playback.
        (WebCore::AudioBufferSourceNode::totalPitchRate): Allow the pitch to be negative.

2015-02-09  Darin Adler  <darin@apple.com>

        Try to fix build on platforms that use SVG "all in one" file (Windows).

        * svg/SVGAElement.cpp: Don't do "using namespace HTMLNames;" outside of
        function boundaries, because that will be inherited by other files.
        (WebCore::SVGAElement::isURLAttribute): Use XLinkNames directly here
        instead of using HTMLNames implicitly.

        * svg/SVGElement.cpp: Don't do "using namespace HTMLNames;" outside of
        function boundaries, because that will be inherited by other files.
        (WebCore::populateAttributeNameToCSSPropertyIDMap): Instead do it in here.
        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap): And here.
        (WebCore::populateCSSPropertyWithSVGDOMNameToAnimatedPropertyTypeMap): And here.
        (WebCore::SVGElement::parseAttribute): And use HTMLNames directly here
        instead of implicitly.

2015-02-09  Eric Carlson  <eric.carlson@apple.com>

        [iOS] exit from fullscreen when player view controller calls delegate
        https://bugs.webkit.org/show_bug.cgi?id=141350

        Reviewed by Jer Noble.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscree:]): New, ask delegate
            to exit from fullscreen.

2015-02-06  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: resolvedInitialPosition <= resolvedFinalPosition in WebCore::GridSpan::GridSpan
        https://bugs.webkit.org/show_bug.cgi?id=141328

        Reviewed by Darin Adler.

        Whenever
        GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition()
        was trying to place an item with span, it was completely ignoring
        the resolvedInitialPosition returned by
        GridResolvedPosition::resolveGridPositionAgainstOppositePosition()
        and only using the finalResolvedPosition. This works with an
        unlimited grid which can indefinitely grow. But if the item spans
        over the grid track limits, then it might happen that the final
        resolved position is placed before the initial resolved position,
        something that is forbidden.

        The solution is to directly use the GridSpan returned by
        GridResolvedPosition::resolveGridPositionAgainstOppositePosition(), if the item
        does not surpass the track limits then the returned initialResolvedPosition
        is identical to the provided one, otherwise it's properly corrected to respect
        track boundaries.

        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):

2015-01-22  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Tracks' growth limits must be >= base sizes
        https://bugs.webkit.org/show_bug.cgi?id=140540

        Reviewed by Antti Koivisto.

        The track sizing algorithm is supposed to avoid those situations
        but they easily (specially when we mix absolute lengths and
        intrinsic lengths in min and max track sizing functions) and
        frequently appear. In those cases the outcome from the algorithm
        is wrong, tracks are not correctly sized.

        In order to fulfill the restriction, m_usedBreadth and
        m_maxBreadth are now private members of GridTrack and the class
        now provides a couple of methods to modify them respecting the
        growthLimit >= baseSize precondition.

        Apart from that, the members and methods of GridTrack were also
        renamed to match the ones used in the recent algorithm rewrite:
        usedBreadth became baseSize and maxBreadth is now growthLimit.

        Although the algorithm was not modified at all, this change
        detected and fixed several invalid results (tracks and/or grids
        bigger than expected).

        * rendering/RenderGrid.cpp:
        (WebCore::GridTrack::GridTrack): Renamed fields and methods. Added
        assertions.
        (WebCore::GridTrack::baseSize): Renamed from usedBreadth.
        (WebCore::GridTrack::growthLimit): Renamed from maxBreadth.
        (WebCore::GridTrack::setBaseSize):
        (WebCore::GridTrack::setGrowthLimit):
        (WebCore::GridTrack::growBaseSize): Renamed from growUsedBreadth.
        (WebCore::GridTrack::growGrowthLimit): Renamed from growMaxBreadth.
        (WebCore::GridTrack::growthLimitIsInfinite): New helper method.
        (WebCore::GridTrack::growthLimitIfNotInfinite): Renamed from
        maxBreadthIfNotInfinite.
        (WebCore::GridTrack::isGrowthLimitBiggerThanBaseSize): New helper
        method to verify ASSERTs are true.
        (WebCore::GridTrack::ensureGrowthLimitIsBiggerThanBaseSize): Ditto.
        (WebCore::GridTrackForNormalization::GridTrackForNormalization):
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::sortByGridTrackGrowthPotential):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::GridTrack::growUsedBreadth): Renamed to growBaseSize.
        (WebCore::GridTrack::usedBreadth): Renamed to baseSize.
        (WebCore::GridTrack::growMaxBreadth): Renamed to growGrowthLimit.
        (WebCore::GridTrack::maxBreadthIfNotInfinite): Renamed to
        growthLimitIfNotInfinite.
        * rendering/RenderGrid.h:

2015-02-08  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver appears unresponsive when JavaScript alerts are triggered via focus or blur events
        https://bugs.webkit.org/show_bug.cgi?id=140485

        Reviewed by Anders Carlsson.

        If setting an accessibility attribute results in a modal alert being displayed, it can cause VoiceOver
        to hang. A simple solution is perform the actual work after a short delay, which will ensure the call
        returns without hanging.

        Test: platform/mac/accessibility/setting-attributes-is-asynchronous.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

2015-02-08  Benjamin Poulain  <benjamin@webkit.org>

        Add parsing support for CSS Selector L4's case-insensitive attribute
        https://bugs.webkit.org/show_bug.cgi?id=141373

        Reviewed by Darin Adler.

        This patch adds parsing for the case-insensitive attribute value
        matching of CSS Selectors Level 4: http://dev.w3.org/csswg/selectors-4/#attribute-case
        Excuse of a grammar: http://dev.w3.org/csswg/selectors-4/#grammar

        This patch also covers serialization for CSSOM. The serialization
        is defined here: http://dev.w3.org/csswg/cssom/#serializing-selectors

        Matching is completely ignored in this patch. All the simple selectors
        are treated as regular attribute selectors.

        Tests: fast/css/parsing-css-attribute-case-insensitive-value-1.html
               fast/css/parsing-css-attribute-case-insensitive-value-2.html
               fast/css/parsing-css-attribute-case-insensitive-value-3.html
               fast/css/parsing-css-attribute-case-insensitive-value-4.html

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::setAttributeValueMatchingIsCaseInsensitive):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::setAttributeValueMatchingIsCaseInsensitive):
        (WebCore::CSSSelector::attributeValueMatchingIsCaseInsensitive):

2015-02-08  Darin Adler  <darin@apple.com>

        Fix CMake-based build.

        * CMakeLists.txt: Added a dependency on the CMakeLists.txt itself, analogous
        to the one I added in DerivedSources.make.

2015-02-08  Darin Adler  <darin@apple.com>

        Fix debug build.

        * bindings/js/JSEventListener.h: Removed a call to forwardEventListeners.

2015-02-08  Darin Adler  <darin@apple.com>

        Remove the SVG instance tree
        https://bugs.webkit.org/show_bug.cgi?id=140602

        Reviewed by Dean Jackson.

        * CMakeLists.txt: Removed SVGElementInstance source files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

        * bindings/js/JSEventListener.cpp:
        (WebCore::forwardsEventListeners): Deleted. Only returned true for JSSVGElementInstance.
        (WebCore::correspondingElementWrapper): Deleted. Only used for JSSVGElementInstance.
        (WebCore::createJSEventListenerForAttribute): Deleted. Argument type was JSSVGElementInstance.
        (WebCore::createJSEventListenerForAdd): Removed most of the code; later we can delete this entirely.

        * bindings/js/JSEventListener.h: Removed the overload of createJSEventListenerForAttribute
        that takes a JSSVGElementInstance.

        * bindings/js/JSSVGElementInstanceCustom.cpp: Removed.

        * dom/ContainerNodeAlgorithms.h: Updated comment to reflect the fact that
        this code is really now only used for ContainerNode and no longer needs to
        exist in a generic form.

        * dom/EventTarget.h: Removed forward declaration of SVGElementInstance.
        * svg/SVGElement.h: Ditto.

        * dom/EventTargetFactory.in: Removed SVGElementInstance.

        * svg/SVGElementInstance.cpp: Removed.
        * svg/SVGElementInstance.h: Removed.
        * svg/SVGElementInstance.idl: Removed.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedInto): Removed obsolete comment.
        (WebCore::SVGUseElement::instanceTreeIsLoading): Deleted. Unused
        function that I forgot to delete in my last patch. It also had a
        glaring mistake, a missing "return" before the recursive call to
        itself that would cause it to return false when it should return true.

        * svg/SVGUseElement.h: Removed instanceTreeIsLoading.

        * dom/EventDispatcher.cpp: Removed include of SVGElementInstance.h.
        * page/EventHandler.cpp: Ditto.
        * rendering/svg/RenderSVGViewportContainer.cpp: Ditto.
        * svg/SVGAElement.cpp: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.
        * svg/SVGAnimateMotionElement.cpp: Ditto.
        * svg/SVGAnimatedTypeAnimator.h: Ditto.
        * svg/SVGAnimationElement.cpp: Ditto.
        * svg/SVGCircleElement.cpp: Ditto.
        * svg/SVGClipPathElement.cpp: Ditto.
        * svg/SVGComponentTransferFunctionElement.cpp: Ditto.
        * svg/SVGCursorElement.cpp: Ditto.
        * svg/SVGElement.cpp: Ditto.
        * svg/SVGEllipseElement.cpp: Ditto.
        * svg/SVGFEBlendElement.cpp: Ditto.
        * svg/SVGFEColorMatrixElement.cpp: Ditto.
        * svg/SVGFECompositeElement.cpp: Ditto.
        * svg/SVGFEConvolveMatrixElement.cpp: Ditto.
        * svg/SVGFEDiffuseLightingElement.cpp: Ditto.
        * svg/SVGFEDisplacementMapElement.cpp: Ditto.
        * svg/SVGFEDropShadowElement.cpp: Ditto.
        * svg/SVGFEGaussianBlurElement.cpp: Ditto.
        * svg/SVGFEImageElement.cpp: Ditto.
        * svg/SVGFELightElement.cpp: Ditto.
        * svg/SVGFEMergeNodeElement.cpp: Ditto.
        * svg/SVGFEMorphologyElement.cpp: Ditto.
        * svg/SVGFEOffsetElement.cpp: Ditto.
        * svg/SVGFESpecularLightingElement.cpp: Ditto.
        * svg/SVGFETileElement.cpp: Ditto.
        * svg/SVGFETurbulenceElement.cpp: Ditto.
        * svg/SVGFilterElement.cpp: Ditto.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp: Ditto.
        * svg/SVGForeignObjectElement.cpp: Ditto.
        * svg/SVGGElement.cpp: Ditto.
        * svg/SVGGradientElement.cpp: Ditto.
        * svg/SVGGraphicsElement.cpp: Ditto.
        * svg/SVGImageElement.cpp: Ditto.
        * svg/SVGLineElement.cpp: Ditto.
        * svg/SVGLinearGradientElement.cpp: Ditto.
        * svg/SVGMarkerElement.cpp: Ditto.
        * svg/SVGMaskElement.cpp: Ditto.
        * svg/SVGPathElement.cpp: Ditto.
        * svg/SVGPatternElement.cpp: Ditto.
        * svg/SVGPolyElement.cpp: Ditto.
        * svg/SVGRadialGradientElement.cpp: Ditto.
        * svg/SVGRectElement.cpp: Ditto.
        * svg/SVGSVGElement.cpp: Ditto.
        * svg/SVGScriptElement.cpp: Ditto.
        * svg/SVGStopElement.cpp: Ditto.
        * svg/SVGSymbolElement.cpp: Ditto.
        * svg/SVGTRefElement.cpp: Ditto.
        * svg/SVGTextContentElement.cpp: Ditto.
        * svg/SVGTextElement.cpp: Ditto.
        * svg/SVGTextPathElement.cpp: Ditto.
        * svg/SVGTextPositioningElement.cpp: Ditto.

2015-02-07  Dean Jackson  <dino@apple.com>

        Tweak inline playback controls to match system spec
        https://bugs.webkit.org/show_bug.cgi?id=141375
        <rdar://problem/19760754>

        Reviewed by Sam Weinig.

        Rework the UI of the inline media controls on iOS, to
        better match the system specification. I've batched a
        few changes into one patch because many of them are
        inter-dependent, and not very aggressive. Changes are:

        - updated artwork for the buttons.
        - separate artwork for normal and active states.
        - background images are now explicitly sized and positioned
          in the middle of the element, allowing audio and video
          to use the same glyphs even though the elements are
          different sizes.
        - use plus-darker blend mode on the button glyphs.
        - rearranged some of the rules to group things in a
          logical order.
        - time should front-pad a "0" character, if less than 10.
        - no need for an "active" class on the Airplay button (although
          I won't be surprised if this changes back).

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        (video::-webkit-media-controls-wireless-playback-picker-button.active): Deleted.
        (audio::-webkit-media-controls-wireless-playback-picker-button.active): Deleted.
        (audio::-webkit-media-controls-play-button:active): Deleted.
        (audio::-webkit-media-controls-play-button.paused): Deleted.
        (video::-webkit-media-controls-timeline): Deleted.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): No need
        for the "active" class.
        (ControllerIOS.prototype.formatTime): Pad with a leading zero.

2015-02-08  Darin Adler  <darin@apple.com>

        Make SVGUseElement work without creating any SVGElementInstance objects
        https://bugs.webkit.org/show_bug.cgi?id=141374

        Reviewed by Sam Weinig.

        * dom/ElementIterator.h: Changed the * and -> operators to be const.
        There is no need for the iterator itself to be modified just to dereference it.

        * dom/TypedElementDescendantIterator.h: Added DoubleTypedElementDescendantIterator.
        This allows callers to call descendantsOfType on two elements, as long as the caller
        can guarantee that both have the same number of descendants of that type. It's handy
        for walking a tree of cloned elements to set up something between each original and
        its clone. In the future we might instead change the cloning machinery so it can do
        this work as we clone, and if so, we could consider deleting this.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::correspondingElement): Made this const.
        (WebCore::SVGElement::invalidateInstances): Got rid of the rule that said "this can
        only be done for an element in a document", since it's useful to do this on an element
        that has just been removed from a document. Removed the "updateStyleIfNeeded" call
        here now that the other changes make it no longer needed. Removed an unimportant
        assertion that we only invalidate use elements that are in a document; that's not
        a necessary restriction. Streamlined the logic a bit.

        * svg/SVGElement.h: Made correspondingElement const.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedInto): Removed an assertion about
        m_targetElementInstance since that's gone now.
        (WebCore::SVGUseElement::svgAttributeChanged): Changed code that transfers
        size attributes to the shadow tree to use shadowTreeTargetClone instead of
        m_targetElementInstance.
        (WebCore::SVGUseElement::clearResourceReferences): Removed code to detach
        m_targetElementInstance, and also the call to removeAllTargetReferencesForElement,
        because we no longer use those.
        (WebCore::SVGUseElement::buildPendingResource): Moved the code to build the
        shadow tree in here and deleted the buildShadowAndInstanceTree function.
        Also changed logic so that we use a pending resource any time the target is not
        a valid one. That helps us correctly handle cases where we initially have an
        invalid target, but later get a value one
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Deleted. The code here
        was greatly simplified and moved into buildPendingResource.
        (WebCore::SVGUseElement::buildInstanceTree): Deleted.
        (WebCore::SVGUseElement::hasCycleUseReferencing): Deleted. Cycles are now
        detected by the new isValidTarget function and so there's no need for a
        separate explicit check for a cycle.
        (WebCore::associateClonesWithOriginals): Added. Helper that makes
        functions that build the shadow tree simpler and easier to read.
        (WebCore::associateReplacementCloneWithOriginal): Added. Helper to
        make associateReplacementClonesWithOriginals simple.
        (WebCore::associateReplacementClonesWithOriginals): Added. Helper that
        makes functions that build the shadow tree simpler and easier to read.
        (WebCore::SVGUseElement::buildShadowTree): Call associateClonesWithOriginals
        since associateInstancesWithShadowTreeElements no longer does this.
        (WebCore::SVGUseElement::isValidTarget): Added. Covers all the different
        reasons a target might not be valid: type of element, reference cycles, and
        also "not in document" (refactored in here; not sure when that can happen
        in practice, might be possible to remove it later).
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Add checks for
        documents that are still loading; this used to be checked when building the
        instance tree. Added calls to associateReplacementClonesWithOriginals and
        associateClonesWithOriginals; that used to be done by later in the
        associateInstancesWithShadowTreeElements function. Use isValidTarget so
        we handle cycles as well as invalid target types.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Added a call to
        associateReplacementClonesWithOriginals, since we can no longer do that in
        associateInstancesWithShadowTreeElements.
        (WebCore::SVGUseElement::associateInstancesWithShadowTreeElements): Deleted.
        (WebCore::SVGUseElement::instanceForShadowTreeElement): Deleted.
        (WebCore::SVGUseElement::invalidateDependentShadowTrees): Removed a comment
        that simply restated the name of the function.

        * svg/SVGUseElement.h: Removed instanceForShadowTreeElement,
        buildShadowAndInstanceTree, detachInstance, buildInstanceTree,
        hasCycleUseReferencing, associateInstancesWithShadowTreeElements,
        instanceForShadowTreeElement, and m_targetElementInstance. Added isValidTarget.

2015-02-08  Chris Dumez  <cdumez@apple.com>

        [WK2] Add logging to validate the network cache efficacy (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=141269
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Export an extra symbol.

        * WebCore.exp.in:

2015-02-07  Chris Fleizach  <cfleizach@apple.com>

        AX: The input element with type="search" has no default focus outline
        https://bugs.webkit.org/show_bug.cgi?id=140326

        Reviewed by Darin Adler.

        The platform RenderTheme takes care of the search field, and that code
        was missing a check for whether the element was focused.

        Test: fast/css/focus-ring-exists-for-search-field.html

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

2015-02-07  Tim Horton  <timothy_horton@apple.com>

        Add some dictionary lookup tests
        https://bugs.webkit.org/show_bug.cgi?id=141355

        Reviewed by Darin Adler.

        Tests: platform/mac/editing/dictionary-lookup/dictionary-lookup-input.html
               platform/mac/editing/dictionary-lookup/dictionary-lookup-inside-selection.html
               platform/mac/editing/dictionary-lookup/dictionary-lookup-outside-selection.html
               platform/mac/editing/dictionary-lookup/dictionary-lookup-rtl.html
               platform/mac/editing/dictionary-lookup/dictionary-lookup.html

        * WebCore.exp.in:
        Remove an unneeded export.

        * editing/mac/DictionaryLookup.h:
        Use OBJC_CLASS instead of @class so that this can be included in pure-C++ files.

        * testing/Internals.cpp:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation):
        * testing/Internals.h:
        * testing/Internals.idl:
        Expose rangeForDictionaryLookupAtHitTestResult fairly directly to JavaScript.

2015-02-07  Chris Dumez  <cdumez@apple.com>

        Add Vector::removeFirstMatching() / removeAllMatching() methods taking lambda functions
        https://bugs.webkit.org/show_bug.cgi?id=141321

        Reviewed by Darin Adler.

        Use new Vector::removeFirstMatching() / removeAllMatching() methods.

2015-02-07  Darin Adler  <darin@apple.com>

        Stop dispatching events to with SVGElementInstance objects as their targets
        https://bugs.webkit.org/show_bug.cgi?id=141108

        Reviewed by Anders Carlsson.

        Test: svg/custom/use-event-retargeting.html

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules): Replaced the code that retargeted
        events at SVGElementInstance objects with code that retargets them at the use
        element instead. Also wrote the code in a simpler way.

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

        [Mac] Set -contentsScale on AVPlayerLayer to allow AVPlayer to select the appropriate HLS variant.
        https://bugs.webkit.org/show_bug.cgi?id=141354
        rdar://problem/19717591

        Reviewed by Darin Adler.

        AVPlayer will try to determine the correct HLS variant based on the bounds of an AVPlayerLayer.
        When not in a layer tree, AVFoundation is not able to determine the correct mapping from logical
        units to pixel values. To provide AVPlayer with that scaling value, set -contentsScale based on
        both the current device scale and the current page scale.

        Since this needs to be set at initialization time, before the AVPlayer is has any AVPlayerItems,
        add some plumbing up from MediaPlayer to as the HTMLMediaElement for the appropriate contents
        scale.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerContentsScale):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerContentsScale):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsScale):

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

        ASan complains about plugins/snapshotting/snapshot-plugin-not-quite-blocked-by-image.html
        https://bugs.webkit.org/show_bug.cgi?id=141352
        rdar://problem/19717490

        Reviewed by Anders Carlsson.

        * dom/Document.cpp: (WebCore::Document::ensurePlugInsInjectedScript): This string
        is not null terminated.

2015-02-06  Zalan Bujtas  <zalan@apple.com>

        ASSERT repaintContainer->hasLayer() in WebCore::RenderObject::repaintUsingContainer
        https://bugs.webkit.org/show_bug.cgi?id=140750

        Reviewed by Simon Fraser.

        There's a short period of time when RenderObject::layer() still returns a valid pointer
        even though we already cleared the hasLayer() flag.
        Do not use the layer as repaint container in such cases.

        Test: compositing/repaint-container-assertion-when-toggling-compositing.html

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

2015-02-06  Chris Dumez  <cdumez@apple.com>

        Have SQLiteStatement::database() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=141348

        Reviewed by Andreas Kling.

        Have SQLiteStatement::database() return a reference as it can never
        return null.

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLiteStatement):
        * platform/sql/SQLiteStatement.h:
        (WebCore::SQLiteStatement::database):

2015-02-06  Brent Fulgham  <bfulgham@apple.com>

        Add youtube-nocookie URL to isYouTubeURL predicate 
        https://bugs.webkit.org/show_bug.cgi?id=141347
        <rdar://problem/19430657>

        Reviewed by Eric Carlson.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::isYouTubeURL): Update for additional youtube-nocookie site.

2015-02-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Invalid cast in WebCore::SVGAnimateElement::calculateAnimatedValue.
        https://bugs.webkit.org/show_bug.cgi?id=135171.

        Reviewed by Dean Jackson.

        The bug happens when an SVG element is animated by <animateMotion> followed by an
        <animateColor> or an <animate> and the values of the "attributeName" in both elements
        are the same. The problem is <animateMotion> should not have an attribute to animate.
        If it does by fuzz or by mistake, then we assume the <animateMotion> and the <animate>
        animate the same attribute for the same element target. Therefore we schedule them in
        the same AnimationVector in SMILTimeContainer::schedule(). When we call
        SVGAnimateElementBase::calculateAnimatedValue() for an SVGAnimateColorElement and the
        resultElement is SVGAnimateMotionElement, we fail to cast it to SVGAnimateElementBase
        because SVGAnimateMotionElement is derived from SVGAnimationElement which is the base
        class of all animate elements including SVGAnimateElementBase.

        The fix is to nullify setting "attributeName" of an SVGAnimationElement. By doing so,
        "attributeName" and its value will be ignored from the <animateMotion> which is correct.
        
        Tests: svg/animations/animate-montion-invalid-attribute.svg.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::setAttributeName):
        Do not call SVGAnimationElement::setAttributeName() since SVGAnimationElement should
        not have an attribute to animate. We prevent this by bypassing the parent in the class 
        hierarchy: SVGAnimationElement and calling SVGSMILElement::setAttributeName() directly.
        
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setAttributeName): Deleted.
        * svg/SVGAnimationElement.h:
        SVGAnimationElement should not have an attribute to animate. So implement its
        setAttributeName() as a null function.

2015-02-06  Simon Fraser  <simon.fraser@apple.com>

        Convert the compositing overlap map to use LayoutRects
        https://bugs.webkit.org/show_bug.cgi?id=141346
        rdar://problem/18206365

        Reviewed by Zalan Bujtas.
        
        If two compositing layers were adjoining but not overlapping, but happened to
        have non-integral offsets, then using enclosing IntRects in the overlap map
        would cause us to think they are overlapping, and create unnecessary backing store.
        
        Fix by converting the overlap map to use LayoutRects.

        Test: compositing/layer-creation/subpixel-adjacent-layers-overlap.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::OverlapMapContainer::add):
        (WebCore::OverlapMapContainer::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::add):
        (WebCore::RenderLayerCompositor::OverlapMap::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::RectList::append):
        (WebCore::RenderLayerCompositor::OverlapMap::RectList::intersects):
        (WebCore::RenderLayerCompositor::logLayerInfo):
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

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

        Ref-ify various getters that return HTMLCollection.
        <https://webkit.org/b/141336>

        Reviewed by Anders Carlsson.

        Make all the getters that return HTMLCollection objects (and never return nullptr)
        return Ref instead of RefPtr.

        Removed a couple of useless null checks that were exposed by this change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * dom/Document.cpp:
        (WebCore::Document::ensureCachedCollection):
        (WebCore::Document::images):
        (WebCore::Document::applets):
        (WebCore::Document::embeds):
        (WebCore::Document::plugins):
        (WebCore::Document::scripts):
        (WebCore::Document::links):
        (WebCore::Document::forms):
        (WebCore::Document::anchors):
        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        (WebCore::Document::iconURLs):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::ensureCachedHTMLCollection):
        * dom/Element.h:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions):
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::children):
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::elements):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elements):
        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::areas):
        * html/HTMLMapElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectedOptions):
        (WebCore::HTMLSelectElement::options):
        * html/HTMLSelectElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::rows):
        (WebCore::HTMLTableElement::tBodies):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::insertCell):
        (WebCore::HTMLTableRowElement::deleteCell):
        (WebCore::HTMLTableRowElement::cells):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::insertRow):
        (WebCore::HTMLTableSectionElement::deleteRow):
        (WebCore::HTMLTableSectionElement::rows):
        * html/HTMLTableSectionElement.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::updateTickMarkValues):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):

2015-02-06  Brent Fulgham  <bfulgham@apple.com>

        [iOS] Implement audio track selection in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=131236
        <rdar://problem/16552632>

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenModelVideoElement.h:
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::selectAudioMediaOption): Provide implementation.
        (WebVideoFullscreenModelVideoElement::updateLegibleOptions): Add audio track information
        to menu displayed to user.

2015-02-06  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Implement Append Error algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=139439

        Reviewed by Jer Noble.

        If Source Buffer has not received first init segment, then it shall call endOfStream after receiving
        Media Segment, as per Media Source spec. (from 17 July 2014) in paragraph 3.5.1 point 6.1.

        Based this change on Editor's Draft 12 December 2014, as it clarifies order of events.

        Test: media/media-source/media-source-append-media-segment-without-init.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::streamEndedWithError):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::validateInitializationSegment):
        (WebCore::SourceBuffer::appendError):
        * Modules/mediasource/SourceBuffer.h:

2015-02-06  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION: Lookup doesn't work in RTL
        https://bugs.webkit.org/show_bug.cgi?id=141338
        <rdar://problem/19738407>

        Reviewed by Dan Bernstein.

        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        * editing/mac/DictionaryLookup.mm:
        (WebCore::rangeExpandedAroundPositionByCharacters):
        Positions are independent of writing direction, so we don't
        need to (and shouldn't) do anything special for RTL here.

2015-02-06  Maciej Stachowiak  <mjs@apple.com>

        REGRESSION(r179706): Caused memory corruption on some tests (Requested by _ap_ on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=141324

        Reviewed by Alexey Proskuryakov.

        No new tests. This is caught by existing tests under ASAN, and I don't know how to reproduce
        it without ASAN.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild): Give up
        and just always invalidate the next line. It's too hard to come up
        with the condition that catches all needed cases, doesn't itself
        cause a crash, and isn't overzealous. And we do this for the
        previous line anyway.  Also clean up the code a bit since it
        confusingly reuses a variable, and declares it uninitialized, for
        no good reason.

2015-02-05  Dhi Aurrahman  <diorahman@rockybars.com>

        Remove duplicate loop after r179532
        https://bugs.webkit.org/show_bug.cgi?id=141300

        Reviewed by Benjamin Poulain.

        No new tests, no behavior changed.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):

2015-02-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179725.
        https://bugs.webkit.org/show_bug.cgi?id=141320

        caused 2 layout tests to fail (Requested by zalan on #webkit).

        Reverted changeset:

        "[MSE] Implement Append Error algorithm."
        https://bugs.webkit.org/show_bug.cgi?id=139439
        http://trac.webkit.org/changeset/179725

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

        [iOS] Run a full garbage collection on memory warning.
        <https://webkit.org/b/141313>
        <rdar://problem/19738024>

        Reviewed by Chris Dumez.

        Make sure that we run a full GC when trying to free up memory, as this might
        be our last chance to execute before the kernel suspends this process.

        This aligns WebKit2 with the old WebKit1 behavior.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::platformReleaseMemory):


2015-02-05  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        Fix ASSERTION FAILED: !root->needsLayout() in FrameView::layout()
        https://bugs.webkit.org/show_bug.cgi?id=141032

        Reviewed by Darin Adler.

        This patch moves the !root->needsLayout() assert statement above
        updateLayerPositionsAfterLayout() that can modify dirty bit system
        when we have RenderMarquee.

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

2015-02-05  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Implement Append Error algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=139439

        Reviewed by Jer Noble.

        If Source Buffer has not received first init segment, then it shall call endOfStream after receiving
        Media Segment, as per Media Source spec. (from 17 July 2014) in paragraph 3.5.1 point 6.1.

        Based this change on Editor's Draft 12 December 2014, as it clarifies order of events.

        Test: media/media-source/media-source-append-media-segment-without-init.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::streamEndedWithError):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::validateInitializationSegment):
        (WebCore::SourceBuffer::appendError):
        * Modules/mediasource/SourceBuffer.h:

2015-02-05  Maciej Stachowiak  <mjs@apple.com>

        Crash due to failing to dirty a removed text node's line box
        https://bugs.webkit.org/show_bug.cgi?id=136544

        Reviewed by David Hyatt.
        
        Test: fast/text/remove-text-node-linebox-not-dirty-crash.html

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild): Make the check for dirtying the next
        line box a bit more inclusive to avoid a case of a line box for a destroyed render object not
        being dirtied. In particular, when the text node's parent has no line boxes but contains BRs.

2015-02-05  Chris Dumez  <cdumez@apple.com>

        Free memory read under MemoryCache::pruneLiveResourcesToSize()
        https://bugs.webkit.org/show_bug.cgi?id=141292
        <rdar://problem/19725522>

        Reviewed by Antti Koivisto.

        In MemoryCache::pruneLiveResourcesToSize(), we were iterating over the
        m_liveDecodedResources ListHashSet and possibly calling
        CachedResource::destroyDecodedData() on the current value. Doing so
        would cause a call to ListHashSet::remove() to remove the value pointed
        by the current iterator, thus invalidating our iterator.

        In this patch, we increment the ListHashSet iterator *before* calling
        CachedResource::destroyDecodedData(), while the current iterator is
        still valid. Note that this is safe because unlike iteration of most
        WTF Hash data structures, iteration is guaranteed safe against mutation
        of the ListHashSet, except for removal of the item currently pointed to
        by a given iterator.

        Test: http/tests/cache/memory-cache-pruning.html

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):

2015-02-05  Jer Noble  <jer.noble@apple.com>

        [Mac] HLS <video> will not fire 'progress' events, only 'stalled'.
        https://bugs.webkit.org/show_bug.cgi?id=141284

        Reviewed by Brent Fulgham.

        Test: http/tests/media/hls/hls-progress.html

        totalBytes() will always return 0 for HLS streams, which will cause didLoadingProgress() to always
        return false. Skip this optimization. 

        Drive-by fix: duration() will always return 0 for this class as well. Use durationMediaTime() instead.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::didLoadingProgress):

2015-02-05  Darin Adler  <darin@apple.com>

        Move InstanceInvalidationGuard/UpdateBlocker to SVGElement from SVGElementInstance
        https://bugs.webkit.org/show_bug.cgi?id=141148

        Reviewed by Brent Fulgham and Anders Carlsson.

        Inspired by this change Rob Buis made in Blink:

            http://src.chromium.org/viewvc/blink?view=revision&revision=173343

        I actually wrote the whole thing and then discovered we did it almost identically.

        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGElementAnimatedPropertyList::setInstanceUpdatesBlocked): Added this
        helper function to get around a circular header dependency.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction): Use setInstanceUpdatesBlocked.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFrom): Use invalidateInstances.
        (WebCore::SVGElement::finishParsingChildren): Ditto.
        (WebCore::SVGElement::svgAttributeChanged): Ditto.
        (WebCore::SVGElement::childrenChanged): Ditto.
        (WebCore::SVGElement::setInstanceUpdatesBlocked): Added an assertion that will
        catch anyone who nests InstanceUpdateBlocker by accident.
        (WebCore::SVGElement::invalidateInstances): Moved this here from
        SVGElementInstance::invalidateAllInstancesOfElement. I had already modified this
        so it had nothing to do with SVGElementInstance, so it was a simple matter of
        converting this into a member function. Added a FIXME about the mysterious
        updateStyleIfNeeded that makes multiple tests fail if it's removed.

        * svg/SVGElement.h: Added public InstanceUpdateBlocker class, protected
        InstanceInvalidationGuard class, and private invalidateInstances function.
        Unlike the ones in SVGElementInstance these use references so they are then
        not copyable without using the WTF_MAKE_NONCOPYABLE macro.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Deleted.
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker): Deleted.
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker): Deleted.
        * svg/SVGElementInstance.h: Removed InvalidationGuard, InstanceUpdateBlocker, and
        invalidateAllInstancesOfElement. Didn't do any further cleanup since we soon will
        delete this entire file.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::svgAttributeChanged): Updated to use new name and reference
        instead of pointer.
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::applyCSSPropertyToTargetAndInstances): Ditto.
        (WebCore::removeCSSPropertyFromTargetAndInstances): Ditto.
        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Ditto.
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation): Ditto.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged): Ditto.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged): Ditto.
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged): Ditto.
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::svgAttributeChanged): Ditto.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged): Ditto.
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::svgAttributeChanged): Ditto.
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged): Ditto.
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::svgAttributeChanged): Ditto.
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged): Ditto.
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged): Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::svgAttributeChanged): Ditto.
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged): Ditto.
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged): Ditto.
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged): Ditto.
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::svgAttributeChanged): Ditto.
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged): Ditto.
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::svgAttributeChanged): Ditto.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged): Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged): Ditto.
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged): Ditto.
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::svgAttributeChanged): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged): Ditto.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged): Ditto.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::svgAttributeChanged): Ditto.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged): Ditto.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged): Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged): Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::svgAttributeChanged): Ditto.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged): Ditto.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::svgAttributeChanged): Ditto.
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::svgAttributeChanged): Ditto.
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::svgAttributeChanged): Ditto.
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged): Ditto.
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::svgAttributeChanged): Ditto.

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

        Remind ourselves to remove work-around code
        https://bugs.webkit.org/show_bug.cgi?id=141289

        Unreviewed gardening: Add a reminder FIXME to CSSParser
        so we can remove the MSVC-specific hack in the future.

        * css/CSSParser.cpp:

2015-02-05  Zalan Bujtas  <zalan@apple.com>

        Do not destroy RenderQuote's text fragment child when quotation mark string is changing.
        https://bugs.webkit.org/show_bug.cgi?id=141271
        rdar://problem/18169375

        Reviewed by Antti Koivisto.

        Similar approach as https://codereview.chromium.org/679593004/

        This patch ensures that laying out a RenderQuote does not force a sibling RenderQuote's
        child renderer(RenderText) to be destroyed.
        BreakingContext holds a pointer to the next renderer on the line (BreakingContext::m_nextObject).
        While laying out the line, initiated by BreakingContext, placing the current renderer could end up destroying the "next" renderer.
        This happens when the pseudo after quotation mark(RenderQuote) becomes floated, the sibling <q>'s pseudo
        before text needs to be changed (from " to ') so that we don't end up with 2 sets of the same opening
        strings.
        The fix is to reuse the RenderTextFragment object instead of destroy/recreate it.

        Test: fast/css/content/quote-crash-when-floating.html

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::fragmentChild):
        (WebCore::RenderQuote::updateText):
        * rendering/RenderQuote.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText):
        (WebCore::RenderTextFragment::setContentString):
        * rendering/RenderTextFragment.h:

2015-02-04  Dean Jackson  <dino@apple.com>

        [Media iOS] Add a debug setting to always show the optimized fullscreen button
        https://bugs.webkit.org/show_bug.cgi?id=141277
        <rdar://problem/19724471>

        Reviewed by Eric Carlson.

        Add a debug option so that we can test the optimized fullscreen
        control on media that doesn't support it.

        * Modules/mediacontrols/mediaControlsiOS.js: Add gSimulateOptimizedFullscreenAvailable.
        (ControllerIOS.prototype.createControls): Check the setting.
        (ControllerIOS.prototype.configureInlineControls): Ditto.
        (ControllerIOS.prototype.formatTime): Drive-by whitespace cleanup.
        (ControllerIOS.prototype.handleBaseGestureChange):
        (ControllerIOS.prototype.handleWrapperTouchStart):
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd):
        (ControllerIOS.prototype.handlePresentationModeChange): Drive-by variable renaming.

2015-02-05  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar <calvaris@igalia.com>

        [Streams API] Implement a barebone ReadableStream interface
        https://bugs.webkit.org/show_bug.cgi?id=141045

        Reviewed by Benjamin Poulain.

        This patch implements the ReadableStream IDL (https://streams.spec.whatwg.org/#rs-model).
        No functionality is yet added.
        ReadableStreamSource is expected to be implemented for native sources (such as HTTP sources)
        as well as JavaScript source through ReadableStreamJSSource.

        Test: streams/readablestream-constructor.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * Modules/streams/ReadableStream.cpp: Added.
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStream::ReadableStream):
        (WebCore::ReadableStream::~ReadableStream):
        (WebCore::ReadableStream::state):
        (WebCore::ReadableStream::closed):
        (WebCore::ReadableStream::ready):
        * Modules/streams/ReadableStream.h: Added.
        * Modules/streams/ReadableStream.idl: Added.
        * Modules/streams/ReadableStreamSource.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSReadableStreamCustom.cpp: Added.
        (WebCore::JSReadableStream::read):
        (WebCore::JSReadableStream::ready):
        (WebCore::JSReadableStream::closed):
        (WebCore::JSReadableStream::cancel):
        (WebCore::JSReadableStream::pipeTo):
        (WebCore::JSReadableStream::pipeThrough):
        (WebCore::constructJSReadableStream):
        * bindings/js/ReadableStreamJSSource.cpp: Added.
        (WebCore::ReadableStreamJSSource::create):
        (WebCore::ReadableStreamJSSource::ReadableStreamJSSource):
        (WebCore::ReadableStreamJSSource::setInternalError):
        * bindings/JSReadableStreamJSSource.h: Added.

2015-02-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed project file corrections.

        Correct some parsing errors caused by recent manual editing of
        the project files.

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

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

        [iOS] add method to toggle playback when in the background
        https://bugs.webkit.org/show_bug.cgi?id=141270

        Reviewed by Dean Jackson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController togglePlaybackEvenWhenInBackground:]): Added.

2015-02-04  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Support ClearKey encryption with AES128-encrypted HLS
        https://bugs.webkit.org/show_bug.cgi?id=140825

        Reviewed by Eric Carlson.

        Test: http/tests/media/clearkey/clear-key-hls-aes128.html

        Add support for ClearKey encryption when used with an AES-128 encrypted HLS stream.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories): Add the CDMPrivateClearKey factory.
        * Modules/encryptedmedia/CDMPrivateClearKey.cpp:
        (WebCore::CDMPrivateClearKey::supportsKeySystem): Support the "org.w3c.clearkey" key system.
        (WebCore::CDMPrivateClearKey::supportsKeySystemAndMimeType): Ditto.
        (WebCore::CDMPrivateClearKey::supportsMIMEType): Ditto.
        (WebCore::CDMPrivateClearKey::createSession): Create a CDMSessionClearKey.
        * Modules/encryptedmedia/CDMPrivateClearKey.h:
        (WebCore::CDMPrivateClearKey::create): Simple factory.
        (WebCore::CDMPrivateClearKey::~CDMPrivateClearKey): Virtual destructor.
        (WebCore::CDMPrivateClearKey::CDMPrivateClearKey): Simple destructor.
        * Modules/encryptedmedia/CDMSessionClearKey.cpp: Added.
        (WebCore::clearKeyVM): Static method returning the VM to be used by JSON parsing.
        (WebCore::CDMSessionClearKey::CDMSessionClearKey): Simple constructor.
        (WebCore::CDMSessionClearKey::~CDMSessionClearKey): Simple destructor.
        (WebCore::CDMSessionClearKey::generateKeyRequest): Store the initData, ensure that it consists of a UTF8-encoded key
            URI, and return same.
        (WebCore::CDMSessionClearKey::releaseKeys): Purged all cached keys.
        (WebCore::CDMSessionClearKey::update): Parse raw JSON-encoded JWK keys, rejecting non-AES, non-oct keys.
        (WebCore::CDMSessionClearKey::cachedKeyForKeyID): Return cached keys.
        * Modules/encryptedmedia/CDMSessionClearKey.h:

        Add support for the "org.w3c.clearkey" CDM to MediaPlayerPrivateAVFoundationObjC, and do so in a platform-agnostic
        way by simply asking for raw key data from MediaPlayerClient when notified that a key has been added.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::keySystemIsSupported):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        (WebCore::fulfillRequestWithKeyData): Added utility method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::keyAdded):

        Pipe a keyAdded() notification down to MediaPlayer and a cachedKeyForKeyId() request up to CDMSessionClearKey:

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::cachedKeyForKeyId):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::keyAdded):
        (WebCore::MediaKeys::cachedKeyForKeyId):
        * Modules/encryptedmedia/MediaKeys.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::keyAdded):
        * html/HTMLMediaElement.h:
        * platform/graphics/CDMSession.h:
        (WebCore::CDMSession::cachedKeyForKeyID):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyAdded):
        (WebCore::MediaPlayer::cachedKeyForKeyId):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCachedKeyForKeyId):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::keyAdded):

        Add new files to project:

        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

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

        Unreviewed, rolling out r179618.
        https://bugs.webkit.org/show_bug.cgi?id=141263

        Off-by-one error causing flaky behavior in webaudio
        /audiobuffersource-negative-playbackrate.html (Requested by
        jernoble_ on #webkit).

        Reverted changeset:

        "[WebAudio] AudioBufferSourceNodes should accurately play
        backwards if given a negative playbackRate."
        https://bugs.webkit.org/show_bug.cgi?id=140955
        http://trac.webkit.org/changeset/179618

2015-02-03  David Hyatt  <hyatt@apple.com>

        Tables don't repaginate properly when the pagination height changes or the pagination offset changes.
        https://bugs.webkit.org/show_bug.cgi?id=141207
        <rdar://problem/18387659>

        Reviewed by Dean Jackson.

        Added fast/multicol/table-dynamic-movement.html

        Change markForPaginationRelayoutIfNeeded to be called always and to check needsLayout inside it.

        Make RenderTable override markForPaginationRelayoutIfNeeded and also dirty the sections if the table
        ended up getting marked for relayout.

        Make sure rows do the right thing as well.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::positionNewFloats):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::markForPaginationRelayoutIfNeeded):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):

2015-02-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When using SVG as an image, we should load datauri images when these images are not in the image cache.
        https://bugs.webkit.org/show_bug.cgi?id=99677.

        Reviewed by Darin Adler.
        
        Data URI sub-resources are not loaded because the networking context of FrameLoader
        attached to the SubResourceLoader is set to null. This is done intentionally to
        disallow any resource from loading external sub-resources. For example if an <img>
        tag has its 'src' attribute points to an svg file, this svg is not allowed to load
        an external image through the 'xlink' attribute of an <image> element. This restriction
        is not valid if the value of the 'xlink' attribute is a data URI. In this case the image 
        should be loaded into memory since there is no network traffic involved. All we need
        to do is to decode the data part of the URI.
        
        The fix is to pass the root FrameLoader, which has a valid NetworkingContext, through
        the FrameLoaderClient, to the ResourceHandle::create() which uses the NetworkingContext
        to decode the data and fire the load events of the data URI resources.

        Tests:  svg/as-image/svg-image-with-data-uri-background.html
                svg/as-image/svg-image-with-data-uri-from-canvas.html
                svg/as-image/svg-image-with-data-uri-images-disabled.html
                svg/as-image/svg-image-with-data-uri-reloading.html
                svg/as-image/svg-image-with-data-uri-use-data-uri.svg
                svg/as-image/svg-image-with-svg-data-uri.html

        * accessibility/AccessibilityRenderObject.cpp:
        Remove unreferenced header file.

        * loader/FrameLoaderClient.h:
        Define the null virtual function dataProtocolLoader() which should return the FrameLoader
        for loading data URI resources.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::dataProtocolFrameLoader):
        * loader/ResourceLoader.h:
        Add ResourceLoader::dataProtocolFrameLoader() which returns the root FrameLoader. The
        root FrameLoader is used to get a valid NetworkingContext which can be passed to
        ResourceHandle::create() when url().protocolIsData().

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::load):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldPerformImageLoad):
        (WebCore::CachedResourceLoader::shouldDeferImageLoad):
        * loader/cache/CachedResourceLoader.h:
        Allow loading data URI sub-resources as long as loading images is not disabled. Also we
        need to call setDataProtocolLoader() before calling setData() for the isSVGImage case, 
        setData() will create a page by calling Page::createPageFromBuffer() via SVGImage::dataChanged(),
        and we need to pass the correct FrameLoaderClient to the created FrameLoader of the main
         frame of this page.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::dataChanged):
        * svg/graphics/SVGImage.h:
        Create a new FrameLoaderClient of type SVGFrameLoaderClient and set it in pageConfiguration
        which is used when creating the page from the SVG data URI.

        * WebCore.xcodeproj/project.pbxproj:
        * svg/graphics/SVGImageChromeClient.h: Removed.
        * svg/graphics/SVGImageClients.h: Added.
        Add a new class SVGImageChromeClient which overrides the function dataProtocolLoader().
        Rename the header file SVGImageChromeClient.h to be SVGImageClients.h since it now 
        includes the classes SVGImageChromeClient and SVGFrameLoaderClient.

2015-02-04  Timothy Horton  <timothy_horton@apple.com>

        Fix a misplaced include in CaptionUserPreferencesMediaAF
        https://bugs.webkit.org/show_bug.cgi?id=141239

        Reviewed by Jer Noble.

        * page/CaptionUserPreferencesMediaAF.cpp:
        CoreText is a system header, and there's already a good spot for it!

2015-02-04  Jer Noble  <jer.noble@apple.com>

        [WebAudio] AudioBufferSourceNodes should accurately play backwards if given a negative playbackRate.
        https://bugs.webkit.org/show_bug.cgi?id=140955

        Reviewed by Eric Carlson.

        Tests: webaudio/audiobuffersource-negative-playbackrate-interpolated.html
               webaudio/audiobuffersource-negative-playbackrate.html

        Add support for playing an AudioBufferSourceNode at a negative playbackRate. Change the meaning of
        start() to set the initial playback position at the end of the play range if the rate of playback
        is negtive.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode): Allow the playbackRate AudioParam to range from [-32, 32].
        (WebCore::AudioBufferSourceNode::renderFromBuffer): Change variable names from "start" and "end" to "min" and "max"
            for clarity. Add a non-interpolated and interpolated render step for negative playback.
        (WebCore::AudioBufferSourceNode::start): Drive-by fix: default value of grainDuration is not 0.02.
        (WebCore::AudioBufferSourceNode::startPlaying): Start playing at the end of the buffer for negative playback.
        (WebCore::AudioBufferSourceNode::totalPitchRate): Allow the pitch to be negative.

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

        video.attribute should not return true just because of fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=141219

        Reviewed by Dean Jackson.

        No new tests, updated media/video-fullscreeen-only-controls.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.shouldHaveControls):
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.isFullScreen):

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls): Don't consider fullscreen status.
        (WebCore::HTMLMediaElement::configureMediaControls): Create controls if a video element
            isn't allowed to play inline, or if it is in fullscreen.

2015-02-04  Mark Lam  <mark.lam@apple.com>

        Remove concept of makeUsableFromMultipleThreads().
        <https://webkit.org/b/141221>

        Reviewed by Mark Hahnenberg.

        No new tests.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):

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

        [iOS WK2] Assert in ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren() on tab switching
        https://bugs.webkit.org/show_bug.cgi?id=141223
        rdar://problem/18458993

        Reviewed by Tim Horton.
        
        It's possible to submit a RemoteLayerTree transaction that contains data
        about a created layer, but doesn't have any properties for that layer. This
        happens when the newly created layer isn't reached during the traversal that
        gathers layer properties (i.e. it's not rooted). However, whether we create
        a scrolling layer or not requires having properties; they are missing, so we
        create a normal layer, but then the scrolling tree commit asserts that we
        should have a scrolling layer.
        
        Fix by making scrolling layers have a corresponding layer type, which is
        stored in layer creation properties. This required exposing layer types
        up through GraphicsLayer, but that allows for some nice cleanup:
        
        1. No need to have the hokey shouldUseTiledBacking() GraphicsLayerClient hack
           for creating the page tiled layer.
        2. The notion of "custom behaviors" can be removed from GraphicsLayer entirely.

        Not testable because it requires tab switching.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::initialize):
        (WebCore::GraphicsLayer::setCustomBehavior): Deleted.
        (WebCore::GraphicsLayer::customBehavior): Deleted.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::shouldUseTiledBacking): Deleted.
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::updateCustomBehavior): Deleted.
        (WebCore::GraphicsLayerCA::setCustomBehavior): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::moveAnimations):
        (WebCore::GraphicsLayerCA::copyAnimations):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::commonInit):
        (PlatformCALayerMac::updateCustomBehavior): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateScrollingLayers):
        (WebCore::RenderLayerBacking::shouldUseTiledBacking): Deleted.
        * rendering/RenderLayerBacking.h:

2015-02-04  Dean Jackson  <dino@apple.com>

        [Media] Fullscreen button should always come last in inline controls (141245)
        https://bugs.webkit.org/show_bug.cgi?id=141245
        <rdar://problem/19714622>

        Reviewed by Eric Carlson.

        Make sure the optimizedFullscreen button is inserted before the
        normal fullscreen button.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.configureInlineControls):

2015-02-04  Dean Jackson  <dino@apple.com>

        REGRESSION: AirPlay button not visible but present in inline toolbar
        https://bugs.webkit.org/show_bug.cgi?id=141244
        <rdar://problem/19328322>

        Reviewed by Eric Carlson.

        Replace the use of mask-image with a background-image (which matches
        what the other buttons are doing).

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        (video::-webkit-media-controls-wireless-playback-picker-button):
        (audio::-webkit-media-controls-wireless-playback-picker-button):
        (video::-webkit-media-controls-wireless-playback-picker-button.active):
        (audio::-webkit-media-controls-wireless-playback-picker-button.active):

2015-02-04  Chris Dumez  <cdumez@apple.com>

        Add removeFirst(value) / removeAll(value) methods to WTF::Vector
        https://bugs.webkit.org/show_bug.cgi?id=141192

        Reviewed by Benjamin Poulain.

        Use new Vector::removeFirst(value) / removeAll(value) API to simplify the
        code a bit.

        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::unregisterClient):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::removeFormElement):
        (WebCore::HTMLFormElement::removeImgElement):
        (WebCore::removeFromVector): Deleted.
        * page/Chrome.cpp:
        (WebCore::Chrome::unregisterPopupOpeningObserver):
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::uninstallPageOverlay):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::removeFromParent):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimations::remove):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::addSearchResult):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::removeCaption):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::unschedule):

2015-02-03  Maciej Stachowiak  <mjs@apple.com>

        Crash when printing snapshotted plugins
        https://bugs.webkit.org/show_bug.cgi?id=141212

        Reviewed by Simon Fraser.

        Test: plugins/snapshotting/print-snapshotted-plugin.html

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::childShouldCreateRenderer): New
        method. If the current renderer is a snapshotted plugin, only
        allow children to create renderers if they are part of the
        snapshot shadow dom. Otherwise RenderEmbeddedObject invariants
        will be violated. This DOM class can have many other renderers, but they
        can just follow their own rules.
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay): Make this
        const-correct, and don't create UA shadow DOM as a side effect if it doesn't
        already exist.
        * html/HTMLPlugInImageElement.h:

2015-02-03  Chris Dumez  <cdumez@apple.com>

        Regression(r179584): Assertion hit in toResourceLoadPriority() on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=141230

        Reviewed by Alexey Proskuryakov.

        Handle -1 priority value again in toResourceLoadPriority() as it seems to
        be returned by CFNetwork on some configurations.

        No new tests, already covered by existing tests.

        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toResourceLoadPriority):

2015-02-03  Chris Dumez  <cdumez@apple.com>

        Drop ResourceLoadPriorityUnresolved resource load priority and use Optional<> instead
        https://bugs.webkit.org/show_bug.cgi?id=141186

        Reviewed by Antti Koivisto.

        Drop ResourceLoadPriorityUnresolved resource load priority value and use
        Optional<ResourceLoadPriority> when needed instead. If the Optional
        doesn't have a value, then it means it is unresolved. Having
        ResourceLoadPriorityUnresolved in ResourceLoadPriority was confusing
        because this value is only valid in CachedResourceRequest, it is not
        a valid value in CachedResource or in ResourceRequest. After this
        refactoring, it now becomes more obvious.

2015-02-03  Chris Dumez  <cdumez@apple.com>

        REGRESSION(176609): Very high memory usage in Canvas/reuse.html performance test
        https://bugs.webkit.org/show_bug.cgi?id=139812

        Reviewed by Geoffrey Garen.

        Update DOMTimerFireState.elementsChangedOutsideViewport to keep only
        weak pointers to the Elements, instead of ref'ing them, so as to not
        extend their life unnecessarily (by preventing garbage-collection).
        The same approach was already adopted in r176496 for
        DOMTimer.m_elementsCausingThrottling to address the same issue.

        No new tests, already covered by Canvas/reuse.html performance test.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::setScriptMadeNonUserObservableChangesToElement):
        (WebCore::DOMTimerFireState::elementsChangedOutsideViewport):

2015-02-03  Jer Noble  <jer.noble@apple.com>

        [MSE] Setting timestampOffset does not change the timestamps in the actual sample, leading to visual and audible errors.
        https://bugs.webkit.org/show_bug.cgi?id=140929

        Reviewed by Alexey Proskuryakov.

        Fixes http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html.

        Only apply the timestamp offset to the actual sample after step 1.6, where we may loop back to
        the top, to avoid double-offsetting the same sample.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2015-02-03  Jeremy Jones  <jeremyj@apple.com>

        Restore interface before exiting optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=141167

        Reviewed by Simon Fraser.

        This change allows the user interface to be restored before exiting optimized fullscreen mode.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Add declaration.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 
        (-[WebAVPlayerController playerViewController:restoreUserInterfaceForOptimizedFullscreenStopWithCompletionHandler:]): Added.
        (WebVideoFullscreenInterfaceAVKit::fullscreenMayReturnToInline): Added.
        * platform/spi/ios/AVKitSPI.h: Add new SPI.

2015-02-03  Jeremy Jones  <jeremyj@apple.com>

        Prevent flicker when exiting fullscreen by synchronizing transactions.
        https://bugs.webkit.org/show_bug.cgi?id=140897

        Reviewed by Tim Horton.

        Synchronize across CAContexts when moving the video layer between layer hierarchies.
        Normally transactions involving multiple CAContexts are not synchronized.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        * platform/spi/cocoa/QuartzCoreSPI.h: add additional CAContext SPI declarations.

2015-02-03  Ryosuke Niwa  <rniwa@webkit.org>

        Smart quoting could move the caret backwards in some configurations
        https://bugs.webkit.org/show_bug.cgi?id=141203
        <rdar://problem/17452543>

        Reviewed by Enrica Casucci.

        The bug was caused by markAndReplaceFor not running the code to preserve the selection after
        text replacement only when smart quote is enabled. Furthermore, when smart link was disabled,
        we never applied smart quote due to the following condition at line 2502:

        if (!(shouldPerformReplacement || shouldCheckForCorrection || shouldMarkLink) || !doReplacement)
            continue;

        This condition prevented the code to apply smart quote from running when both continuous
        spellchecking, smart link, and text replacement are disabled.

        Fixed the bug by treating smart quotes and smart dashes like any other text replacement and set
        shouldPerformReplacement to true whenever either one of those text checking options are present.

        Smart link didn't have this issue due to the explicit check for shouldMarkLink.

        Smart dashes didn't suffer this problem either because dashes replacement happens only once
        the caret has moved past the dashes but his patch makes go through the same code path to preserve
        the selection as well for consistency.

        Test: editing/inserting/smart-quote-with-all-configurations.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

2015-02-02  Enrica Casucci  <enrica@apple.com>

        Additional emoji support.
        https://bugs.webkit.org/show_bug.cgi?id=141047
        rdar://problem/19045135

        Reviewed by Darin Adler.

        Adds support for emoji modifiers and group emoji.

        Test: editing/deleting/delete-emoji.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::characterRangeCodePath):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::cursorMovementIterator):
        * rendering/RenderText.cpp:
        (WebCore::isEmojiGroupCandidate):
        (WebCore::isEmojiModifier):
        (WebCore::RenderText::previousOffsetForBackwardDeletion):

2015-02-03  Jer Noble  <jer.noble@apple.com>

        Passing invalid values to OfflineAudioContext's constructor should not crash.
        https://bugs.webkit.org/show_bug.cgi?id=141197

        Reviewed by Darin Adler.

        Test: webaudio/offlineaudiocontext-constructor.html

        Throw a SYNTAX_ERR exception if passed in a zero for channelCount or numberOfSamples. This avoids
        a crash where OfflineAudioDestinationNode is passed a null renderTarget.

        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):

2015-02-03  Jer Noble  <jer.noble@apple.com>

        [MSE] Setting timestampOffset does not change the timestamps in the actual sample, leading to visual and audible errors.
        https://bugs.webkit.org/show_bug.cgi?id=140929

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-timeoffset.html

        Changing timestampOffset will correctly offset the presentation and decode times within SourceBuffer and
        will correctly modify things like buffered ranges. But those changes need to be reflected in the underlying
        MediaSample for decoders to decode and display the samples at the correct times.

        Add a method to MediaSample which allows the caller to offset timestamps of the underlying PlatformMediaSample.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Call offsetTimestampsBy() on the sample.
        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::offsetTimestampsBy): Create a new sample with the same underlying data
            but with a new timing info array, each timing info offset by the requested amount.
        * platform/mock/mediasource/MockBox.h:
        (WebCore::MockBox::offsetTimestampsBy): Offset m_presentationTimestamp and m_decodeTimestamp;
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::offsetTimestampsBy): Pass to MockBox.

2015-02-03  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Crash in CDMSessionMediaSourceAVFObjC::layerDidReceiveError() - NSError not KVO compliant for key NSUnderlyingError.
        https://bugs.webkit.org/show_bug.cgi?id=140529

        Reviewed by Darin Adler.

        The underlying error should be fetched from the userInfo dictionary, not the error itself.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::systemCodeForError):

2015-02-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179548.
        https://bugs.webkit.org/show_bug.cgi?id=141201

        Hits debug assertions in 50+ SVG tests (Requested by brrian on
        #webkit).

        Reverted changeset:

        "Move InstanceInvalidationGuard/UpdateBlocker to SVGElement
        from SVGElementInstance"
        https://bugs.webkit.org/show_bug.cgi?id=141148
        http://trac.webkit.org/changeset/179548

2015-02-03  Jer Noble  <jer.noble@apple.com>

        [Mac] HLS audio is not correctly selected according to system language
        https://bugs.webkit.org/show_bug.cgi?id=140398
        rdar://problem/19218487

        Reviewed by Darin Adler.

        Test: http/tests/media/hls/hls-audio-tracks-locale-selection.html

        When AVMediaSelectionOptions come and go and no explicit track selection choice has
        been made, automatically pick the most appropriate track according to the user's
        current preferred locale settings.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC): Set m_shouldSelectOptionAutomatically
            to true by default.
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions): If m_shouldSelectOptionAutomatically is set
            pick the most appropriate media selection option.
        (WebCore::MediaSelectionGroupAVFObjC::setSelectedOption): Set m_shouldSelectOptionAutomatically to false.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Remove these automatic selection
            requests as they are ineffective when -appliesMediaSelectionCriteriaAutomatically is NO.

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

        Move InstanceInvalidationGuard/UpdateBlocker to SVGElement from SVGElementInstance
        https://bugs.webkit.org/show_bug.cgi?id=141148

        Reviewed by Brent Fulgham.

        Inspired by this change Rob Buis made in Blink:

            http://src.chromium.org/viewvc/blink?view=revision&revision=173343

        I actually wrote the whole thing and then discovered we did it almost identically.

        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGElementAnimatedPropertyList::setInstanceUpdatesBlocked): Added this
        helper function to get around a circular header dependency.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::executeAction): Use setInstanceUpdatesBlocked.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::removedFrom): Use invalidateInstances.
        (WebCore::SVGElement::finishParsingChildren): Ditto.
        (WebCore::SVGElement::svgAttributeChanged): Ditto.
        (WebCore::SVGElement::childrenChanged): Ditto.
        (WebCore::SVGElement::setInstanceUpdatesBlocked): Added an assertion that will
        catch anyone who nests InstanceUpdateBlocker by accident.
        (WebCore::SVGElement::invalidateInstances): Moved this here from
        SVGElementInstance::invalidateAllInstancesOfElement. I had already modified this
        so it had nothing to do with SVGElementInstance, so it was a simple matter of
        converting this into a member function. Added a FIXME about the mysterious
        updateStyleIfNeeded that makes multiple tests fail if it's removed.

        * svg/SVGElement.h: Added public InstanceUpdateBlocker class, protected
        InstanceInvalidationGuard class, and private invalidateInstances function.
        Unlike the ones in SVGElementInstance these use references so they are then
        not copyable without using the WTF_MAKE_NONCOPYABLE macro.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Deleted.
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::InstanceUpdateBlocker): Deleted.
        (WebCore::SVGElementInstance::InstanceUpdateBlocker::~InstanceUpdateBlocker): Deleted.
        * svg/SVGElementInstance.h: Removed InvalidationGuard, InstanceUpdateBlocker, and
        invalidateAllInstancesOfElement. Didn't do any further cleanup since we soon will
        delete this entire file.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::svgAttributeChanged): Updated to use new name and reference
        instead of pointer.
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::applyCSSPropertyToTargetAndInstances): Ditto.
        (WebCore::removeCSSPropertyFromTargetAndInstances): Ditto.
        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Ditto.
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation): Ditto.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged): Ditto.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged): Ditto.
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged): Ditto.
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::svgAttributeChanged): Ditto.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged): Ditto.
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::svgAttributeChanged): Ditto.
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged): Ditto.
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::svgAttributeChanged): Ditto.
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged): Ditto.
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged): Ditto.
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged): Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::svgAttributeChanged): Ditto.
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged): Ditto.
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged): Ditto.
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged): Ditto.
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::svgAttributeChanged): Ditto.
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged): Ditto.
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::svgAttributeChanged): Ditto.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged): Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged): Ditto.
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged): Ditto.
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::svgAttributeChanged): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged): Ditto.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged): Ditto.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::svgAttributeChanged): Ditto.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged): Ditto.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged): Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged): Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::svgAttributeChanged): Ditto.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged): Ditto.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::svgAttributeChanged): Ditto.
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::svgAttributeChanged): Ditto.
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::svgAttributeChanged): Ditto.
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::svgAttributeChanged): Ditto.
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged): Ditto.
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::svgAttributeChanged): Ditto.

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

        REGRESSION (r170576): Storage leaks in parsing of CSS image sizes
        https://bugs.webkit.org/show_bug.cgi?id=141026

        Reviewed by Brent Fulgham.

        Forgot to actually fix the leak in the successful parse case!

        * css/CSSParser.cpp:
        (WebCore::CSSParser::sourceSize): Added a call to destroy.

2015-02-02  Benjamin Poulain  <benjamin@webkit.org>

        JIT Compile simple cases of :nth-last-child()
        https://bugs.webkit.org/show_bug.cgi?id=141053

        Reviewed by Andreas Kling.

        This patch adds the code generator for :nth-last-child(), skipping
        any :nth-last-child(An+B of selector list).

        The code generator is boring here, nothing fancy.
        There is no optimization opportunity here so it is basically the same
        speed as the code generated by Clang when the simple selector is alone.

        The only reason to JIT compile this is to avoid going to slow-path
        for every selector that contain :nth-last-child().

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addNthChildType):
        The code creating the intermediate representation of :nth-child() is exactly
        the same as what we need for :nth-last-child(). I extracted the code from addPseudoClassType()
        and share it for both simple selectors.

        (WebCore::SelectorCompiler::addPseudoClassType):
        I fail :nth-last-child(An+B of selector list). Let's add it later.

        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        Oops, there was a bug with nthChildOfFilters.

        (WebCore::SelectorCompiler::hasAnyCombinators):
        (WebCore::SelectorCompiler::computeBacktrackingMemoryRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::setChildrenAffectedByBackwardPositionalRules):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChild):

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

        Simple line layout: Rename FlowContentsIterator to TextFragmentIterator.
        https://bugs.webkit.org/show_bug.cgi?id=141177

        Rubber-stamped by Antti Koivisto

        FlowContentsIterator is easy to confuse with FlowContents::Iterator.
        TextFragmentIterator reflects the functionality better.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::setOverflowedFragment):
        (WebCore::SimpleLineLayout::LineState::overflowedFragment):
        (WebCore::SimpleLineLayout::LineState::appendFragment):
        (WebCore::SimpleLineLayout::begin):
        (WebCore::SimpleLineLayout::end):
        (WebCore::SimpleLineLayout::preWrap):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp: Renamed from Source/WebCore/rendering/SimpleLineLayoutFlowContentsIterator.cpp.
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        (WebCore::SimpleLineLayout::TextFragmentIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::textWidth):
        (WebCore::SimpleLineLayout::nextBreakablePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::findNextNonWhitespace):
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::runWidth):
        * rendering/SimpleLineLayoutTextFragmentIterator.h: Renamed from Source/WebCore/rendering/SimpleLineLayoutFlowContentsIterator.h.
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::start):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::end):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::width):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::type):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isCollapsed):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isBreakable):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::isEmpty):
        (WebCore::SimpleLineLayout::TextFragmentIterator::style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::segmentForPosition):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragment::split):
        (WebCore::SimpleLineLayout::TextFragmentIterator::characterAt):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isLineBreak):
        (WebCore::SimpleLineLayout::TextFragmentIterator::isEnd):

2015-02-02  Chris Dumez  <cdumez@apple.com>

        Add diagnostic logging for ResourceResponse's source
        https://bugs.webkit.org/show_bug.cgi?id=141170
        <rdar://problem/19632080>

        Reviewed by Antti Koivisto.

        Add diagnostic logging for ResourceResponse's source (network, disk
        cache, disk cache after validation) to give us an idea of our network
        cache efficacy.

        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        (WebCore::ResourceLoader::didReceiveResponse):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::networkKey):
        (WebCore::DiagnosticLoggingKeys::diskCacheKey):
        (WebCore::DiagnosticLoggingKeys::diskCacheAfterValidationKey):
        (WebCore::DiagnosticLoggingKeys::resourceResponseKey):
        (WebCore::DiagnosticLoggingKeys::scriptKey):
        (WebCore::DiagnosticLoggingKeys::sourceKey):
        * page/DiagnosticLoggingKeys.h:

2015-02-02  Dhi Aurrahman  <diorahman@rockybars.com>

        Optimize matchesLangPseudoClass() of :lang()
        https://bugs.webkit.org/show_bug.cgi?id=140873

        Reviewed by Darin Adler.

        Avoid unnecessary memory allocation.

        No new tests, no behavior changed.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::equalIgnoringASCIICase):
        (WebCore::containslanguageSubtagMatchingRange):
        (WebCore::matchesLangPseudoClass):

2015-02-02  Roger Fong  <roger_fong@apple.com>

        WebGL2: Implement spec section 3.7.1 Setting and getting state (Part 2).
        https://bugs.webkit.org/show_bug.cgi?id=141096
        <rdar://problem/15002469>

        Reviewed by Brent Fulgham.

        This patch handles some of the valid arguments that could be passed into getParameter.
        The unhandled cases will be implemented as the associated WebGL2 features are implemented.
        In addition, getParameter queries that return 64 bit integer currently just return 0 as 
        we need to use ::glGetInteger64v which is only available in GLES 3.0 headers.
        I will be adding these headers in a future patch.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::toJS): Accept a 64 bit integer type.
        * html/canvas/WebGL2RenderingContext.cpp: Handle various parameter inputs.
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLGetInfo.cpp: Add a 64 bit integer type.
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getInt64):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getInt64Parameter):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getInteger64v):

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

        Simple line layout: use std::upper_bound in splitFragmentToFitLine()
        https://bugs.webkit.org/show_bug.cgi?id=141146

        Reviewed by Antti Koivisto.

        Replace the custom binary search implementation with std::upper_bound and
        move splitting functionality to TextFragment.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::FragmentForwardIterator::FragmentForwardIterator):
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator++):
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator!=):
        (WebCore::SimpleLineLayout::FragmentForwardIterator::operator*):
        (WebCore::SimpleLineLayout::begin):
        (WebCore::SimpleLineLayout::end):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        * rendering/SimpleLineLayoutFlowContentsIterator.cpp:
        (WebCore::SimpleLineLayout::FlowContentsIterator::runWidth):
        * rendering/SimpleLineLayoutFlowContentsIterator.h:
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::split):

2015-02-02  Geoffrey Garen  <ggaren@apple.com>

        Use FastMalloc (bmalloc) instead of BlockAllocator for GC pages
        https://bugs.webkit.org/show_bug.cgi?id=140900

        Reviewed by Mark Hahnenberg.

        Re-landing just the HandleBlock piece of this patch.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2015-02-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] 64-bit build fix after r179492.

        * WebCore.vcxproj/WebCore.vcxproj: Forgot to build these files
        as standalone under 64-bit target.

2015-02-02  Benjamin Poulain  <bpoulain@apple.com>

        Clean up attribute handling: part 2 - attributeNode
        https://bugs.webkit.org/show_bug.cgi?id=141109

        Reviewed by Andreas Kling.

        Our implementation was covering some old legacy behaviors of Firefox,
        even copying bugs in some cases.

        The spec (https://dom.spec.whatwg.org) now defines the behavior precisely,
        let's move a bit closer to that.

        Tests: fast/dom/Element/attribute-ascii-case-insensitive-3.html
               fast/dom/Element/attribute-setAttributeNode-multiple-times.html
               fast/dom/Element/attribute-setAttributeNodeNS-multiple-times.html
               fast/dom/Element/mozilla-dom-base-tests/test_bug1075702.html
               fast/dom/Element/mozilla-dom-base-tests/test_bug339494.html
               fast/dom/Element/mozilla-dom-base-tests/test_bug364092.xhtml
               fast/dom/Element/setAttributeNode-overriding-lowercase-values.html

        * dom/Element.cpp:
        (WebCore::findAttrNodeInList):
        New getter for the name-without-namespace case.

        (WebCore::Element::setAttributeNode):
        This one is the tricky one: https://dom.spec.whatwg.org/#dom-element-setattributenode

        When setAttributeNode() is used with an AttributeNode without namespace,
        getting the old value behaves like getAttribute(), with ASCII lowercase name matching.
        When used with a namespace, getting the old value behaves like getAttributeNS().

        Setting the value is a whole different story, the name used always keeps
        the original case.

        Now that's a bit tricky for us because AttributeNodes are just legacy stuff we don't
        used internally.

        We have 4 cases to handle:
        1) The name being set is lowercase, there was no conflicting name on the element.
           That's easy, we just override any node that would exist, set the name otherwise.
        2) The name is lowercase but there was an existing attribute for it.
           -We create a new AttributeNode for the name to represent the old name.
           -We check the names are the same with attribute.name().matches(attrNode->qualifiedName())
            and override the value.
        3) The name has uppercase characters, there is no conflicting name.
           We would not find an element to remove, we just use setAttributeInternal() as usual
           to add the attribute;
        4) The name has uppercase characters, there is a lowercase conflicing name.
           This is the weird behavior: we need to nuke the old attribute, then add the new attribute
           with a different case.

           First we remove the attribute with a lowercase name with removeAttributeInternal().
           That becomes the old node.

           There might still be an element of the same name as what we are trying to add. We don't want
           to add another version of the same attribute. We need to use findAttributeIndexByName() again
           to find if there is a conflicting attribute. Then we call setAttributeInternal() which handle
           the both the cases where there was an element or not.

        (WebCore::Element::setAttributeNodeNS):
        This should work like any "NS" method.

        (WebCore::Element::removeAttributeNode):
        The method removeAttributeNode() is supposed to be exact.

        (WebCore::Element::getAttributeNode):
        (WebCore::Element::hasAttribute):
        (WebCore::Element::attrIfExists):
        * dom/Element.h:
        * dom/ElementData.cpp:
        (WebCore::ElementData::findAttributeIndexByNameSlowCase): Deleted.
        (WebCore::ElementData::findAttributeIndexByNameForAttributeNode): Deleted.
        Kill the slow case, every caller has been updated now.
        * dom/ElementData.h:
        (WebCore::ElementData::findAttributeIndexByName):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::matchesIgnoringCaseForLocalName): Deleted.

2015-02-02  peavo@outlook.com  <peavo@outlook.com>

        Memory is written to after deallocated, in GraphicsLayer::setMaskLayer.
        https://bugs.webkit.org/show_bug.cgi?id=141168

        Reviewed by Brent Fulgham.

        Visual Studio detected that a deallocated heap block had been modified in GraphicsLayer::setMaskLayer,
        when called from RenderLayerBacking::updateChildClippingStrategy.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):

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

        [Cocoa] Make decoded image data purgeable ASAP.
        <https://webkit.org/b/140298>
        <rdar://problem/19623377>

        Reviewed by Antti Koivisto.

        Re-landing this patch since it turned out to not be the cause of
        the memory regression we saw around that revision.

        Mark decoded images as "transient" which makes CoreGraphics mark
        the backing stores as purgeable shortly after they're used.

        The decoded representation will remain in CoreGraphics's caches
        indefinitely unless the kernel gets starved and needs the pages.

        Most resources will now reach a state where the encoded data is
        mmap'ed from disk cache (once the entire resource is downloaded)
        and the decoded data is purgeable.

        This also has the side effect of making the MemoryCache more
        palatial since the decoded data cost can be deducted for images,
        allowing us to cache more resources.

        Note that the worst case for this new behavior would be something
        like hovering below 100% memory utilization and constantly having
        to drop and re-decode images. While churny, it still beats
        crashing the process, plus there's tiling to remove many of the
        reasons we'd need the decoded data.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2015-02-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support console.table
        https://bugs.webkit.org/show_bug.cgi?id=141058

        Reviewed by Timothy Hatcher.

        * inspector/CommandLineAPIModuleSource.js:
        Include "table(foo)" as an alias of "console.table(foo)" on
        the command line.

2015-02-02  Roger Fong  <roger_fong@apple.com>

        [Win] Build fix following r179482.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSBindingsAllInOne.cpp:
        * platform/graphics/GraphicsContext3D.h:

2015-02-02  Chris Dumez  <cdumez@apple.com>

        Access MemoryCache singleton using MemoryCache::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141104

        Reviewed by Andreas Kling.

        Access MemoryCache singleton using MemoryCache::singleton() static
        member function, instead of a free function, as per the recent
        coding style discussion on WebKit-dev.

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

        Ambiguous naming: Do not call replacedContentRect()'s return value paint rect.
        https://bugs.webkit.org/show_bug.cgi?id=141125

        Reviewed by Simon Fraser.

        It's the content box rect with the object-fit adjustment.

        No change in functionality.

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::replacedContentRect):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):

2015-02-02  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r179476.
        https://bugs.webkit.org/show_bug.cgi?id=141026

        Reviewed by Anders Carlsson.

        MSVC has a compiler bug that forces us to make some explicit statements about how
        the passed pointer values are handled.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::SourceSize::SourceSize):
        (WebCore::CSSParser::sourceSize):
        * css/CSSParser.h:

2015-02-02  Benjamin Poulain  <benjamin@webkit.org>

        Get rid of invalidSelectorVector, use Bison's error recovery instead
        https://bugs.webkit.org/show_bug.cgi?id=141147

        Reviewed by Darin Adler.

        * css/CSSGrammar.y.in:
        Instead of reducing a null selector, we can use a real parsing error
        to get out of invalid selector endings.

        When that happens, Bison will pop the stack until it can reduce any
        valid error recovery rules.

        The problem is to make sure there is no floating values because
        none of the reduce block between the error and the recovery would
        be executed.

        In this case, "nth_selector_ending" is a non-recursive production of
        the NTHCHILDFUNCTIONS. In turn, NTHCHILDFUNCTIONS are productions
        of the non-recursive "pseudo". "pseudo" is only used as a trivial
        production of "specifier". "specifier" is only used by "specifier_list".

        "specifier_list" has error recovery code -> no production could have
        generated a floating values between "specifier_list" and "nth_selector_ending".

2015-01-30  Roger Fong  <roger_fong@apple.com>

        WebGL2: Implement spec section 3.7.1 Setting and getting state (Part 1).
        https://bugs.webkit.org/show_bug.cgi?id=141096
        <rdar://problem/15002469>

        Reviewed by Brent Fulgham.

        This patch implements the WebGL2 versions of getParameter, getIndexedParameter and isEnabled.
        It also removes the WebGL1 implementations from WebGLRenderingContextBase and moves it to WebGLRenderingContext.
        I’ve stubbed out most of the parameters for now, some of which will be implemented in Part 2, 
        and the rest as the our WebGL2 implementation progresses.        

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getIndexedParameter):
        (WebCore::WebGL2RenderingContext::getParameter):
        (WebCore::WebGL2RenderingContext::validateCapability):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::validateCapability):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getParameter): Deleted.
        (WebCore::WebGLRenderingContextBase::validateCapability): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:
        * platform/graphics/GraphicsContext3D.h:

2015-02-02  Daniel Bates  <dabates@apple.com>

        [iOS] ASSERTION FAILED: m_scriptExecutionContext->isContextThread() in ContextDestructionObserver::observeContext
        https://bugs.webkit.org/show_bug.cgi?id=141057
        <rdar://problem/19068790>

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where we would create-/delete- the RSA crypto keys and dispatch callbacks on the wrong
        thread in WebKit1 for iOS. In iOS WebKit1 we should perform such operations on thread WebThread.

        This change is covered by existing layout tests.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):

2015-02-02  Jeremy Jones  <jeremyj@apple.com>

        Prevent crash when accessing WebAVPlayerController.delegate.
        https://bugs.webkit.org/show_bug.cgi?id=140893

        Reviewed by Darin Adler.

        This patch aims to prevent a null delegate access during invalidation by adding null checks before accessing the delegate, by making explicit the recreation of m_playerController, and by consolidating and correcting the teardown sequence.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenInterface.h: add resetMediaState()
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: ditto.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController playerViewController:shouldExitFullScreenWithReason:]): Check for null before accessing delegate.
        (-[WebAVPlayerController play:]): ditto.
        (-[WebAVPlayerController pause:]): ditto.
        (-[WebAVPlayerController togglePlayback:]): ditto.
        (-[WebAVPlayerController setPlaying:]): ditto.
        (-[WebAVPlayerController beginScrubbing:]): ditto.
        (-[WebAVPlayerController endScrubbing:]): ditto.
        (-[WebAVPlayerController seekToTime:]): ditto.
        (-[WebAVPlayerController beginScanningForward:]): ditto.
        (-[WebAVPlayerController endScanningForward:]): ditto.
        (-[WebAVPlayerController beginScanningBackward:]): ditto.
        (-[WebAVPlayerController endScanningBackward:]): ditto.
        (-[WebAVPlayerController seekToBeginning:]): ditto.
        (-[WebAVPlayerController seekToEnd:]): ditto.
        (-[WebAVPlayerController setCurrentAudioMediaSelectionOption:]): ditto.
        (-[WebAVPlayerController setCurrentLegibleMediaSelectionOption:]): ditto.
        (-[WebAVPlayerController layoutSublayersOfLayer:]): ditto.
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit): initialize m_playerController
        (WebVideoFullscreenInterfaceAVKit::resetMediaState): Added.
        (WebVideoFullscreenInterfaceAVKit::setDuration): remove playerController()
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime): ditto.
        (WebVideoFullscreenInterfaceAVKit::setRate): ditto.
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions): ditto.
        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges): ditto.
        (WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse): ditto.
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions): ditto.
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions): ditto.
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback): ditto.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): ditto.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard): ditto.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): consolidated cleanup code from invalidate()
        (WebVideoFullscreenInterfaceAVKit::invalidate): consolidate cleanup code.
        (WebVideoFullscreenInterfaceAVKit::playerController): Deleted.
        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
        (WebVideoFullscreenModelVideoElement::setVideoElement): call resetMediaState()

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

        REGRESSION (r170576): Storage leaks in parsing of CSS image sizes
        https://bugs.webkit.org/show_bug.cgi?id=141026

        Reviewed by Anders Carlsson.

        * css/CSSGrammar.y.in: Fixed all the shift/reduce conflicts caused
        by the ENABLE_PICTURE_SIZES code by removing all the redundant
        maybe_space which caused them. Rearranged the productions for
        ENABLE_PICTURE_SIZES to tighten up the code quite a bit. Changed
        the code to build up the source size vector as a Vector instead of
        a special class, and use the SourceSize struct from inside the
        CSSParser class.'

        * css/CSSParser.cpp:
        (WebCore::CSSParser::setupParser): Changed this to take a StringView.
        In the future we can change all the parsing functions to take StringView,
        since they don't work with the String in place.
        (WebCore::CSSParser::parseSizesAttribute): Changed to return a vector
        of SourceSize instead of a SourceSizeList. This is better because it's
        a real CSS data structure that does not contain a CSSParserValue.
        (WebCore::CSSParser::sourceSize): Added. Helper that creates a
        SourceSize, mapping parser data structures into real CSS ones.

        * css/CSSParser.h: Updated for changes above.

        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery): Use std::make_unique and the copy
        constructor directly instead of using a MediaQuery::copy function.

        * css/MediaQueryExp.cpp: Streamlined the class a little bit.
        * css/MediaQueryExp.h: Removed unneeded includes. Moved functions out
        of the class body so the class is easier to read. Removed the unneeded
        copy function.

        * css/SourceSizeList.cpp:
        (WebCore::SourceSize::match): Changed to use WTF::move instead
        of releasing and then re-creating the unique_ptr.
        (WebCore::computeLength): Added a comment to explain this function
        is using an incorrect strategy. Also added some type checking code
        to handle cases where a null or non-primitive CSS value might be
        returned. Probably dead code, but we don't want to risk a bad cast.
        Worthe cleaning up when we fix the strategy.
        (WebCore::SourceSizeList::getEffectiveSize): Updated since the
        vector now contains actual SourceSize objects rather than pointers
        to SourceSize objects on the heap.

        * css/SourceSizeList.h: Changed the CSSParserValue argument to be
        an rvalue reference to make it clearer that we take ownership of it
        when it's moved in. Added a move constructor and a destructor. Added
        comments explaining that it's not correct design to use a
        CSSParserValue here, outside the parser. Changed SourceSizeList's
        append function to move a SourceSize in rather than a unique_ptr.
        Made getEffectiveSize private. Moved the various inline functions to
        the bottom of the file to make the class definitions easier to read.


        * css/SourceSizeList.cpp: Made almost everything about this private
        to this source file instead of public in the header.
        (WebCore::match): Made this a free function instead of a member function
        and made it take the media query expression as an argument.
        (WebCore::computeLength): Changed the argument type to CSSValue*,
        rather than using CSSParserValue here outside the parser.
        (WebCore::parseSizesAttribute): Streamlined and simplified this.
        Now that the parser builds the list in the correct order, there was
        no need to iterate backwards any more so we could use a modern for
        loop.

        * css/SourceSizeList.h: Removed almost everything in this header.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute): Call the
        parseSizesAttribute function as free function since it's no longer
        a member of a SourceSizeList class.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        Ditto.

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

        Fix some leaks found by the leak bot
        https://bugs.webkit.org/show_bug.cgi?id=141149

        Reviewed by Alexey Proskuryakov.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::importKey): Changed argument types to std::unique_ptr for better code clarity.
        (WebCore::JSSubtleCrypto::importKey): Use WTF::move instead of release.
        (WebCore::JSSubtleCrypto::wrapKey): Fixed leaks by adding missing delete calls to the
        case where we get a DOM exception.
        (WebCore::JSSubtleCrypto::unwrapKey): Ditto.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQuery::SelectorQuery): Use WTF::move here. Not clear how this could
        have caused the storage leak, but it does seem obviously missing. The leak is pretty big,
        implying that we leak almost all CSSSelectorList objects we parse; not sure this fixes it.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse): Added code to
        deleted the unguarded pointer if postTaskForModeToWorkerGlobalScope fails.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck): Ditto.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions): Added missing adoptNS.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::updateDocumentMarkerResources): Added missing release.

2015-02-01  Chris Dumez  <cdumez@apple.com>

        Use more references in HistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=141133

        Reviewed by Andreas Kling.

        Use more references in HistoryItem instead of pointers.

2015-02-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179467 and r179470.
        https://bugs.webkit.org/show_bug.cgi?id=141144

        Broke svg/custom/use-events-crash.svg (Requested by ap on
        #webkit).

        Reverted changesets:

        "Stop dispatching events with SVGElementInstance objects as
        their targets"
        https://bugs.webkit.org/show_bug.cgi?id=141108
        http://trac.webkit.org/changeset/179467

        "REGRESSION(r179467): svg/custom/use-events-crash.svg times
        out"
        http://trac.webkit.org/changeset/179470

2015-01-31  Darin Adler  <darin@apple.com>

        Stop dispatching events to with SVGElementInstance objects as their targets
        https://bugs.webkit.org/show_bug.cgi?id=141108

        Reviewed by Anders Carlsson.

        Test: svg/custom/use-event-retargeting.html

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules): Replaced the code that retargeted
        events at SVGElementInstance objects with code that retargets them at the use
        element instead. Also wrote the code in a simpler way.

2015-02-01  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Optimize TextureMapperLayer::removeAllChildren()
        https://bugs.webkit.org/show_bug.cgi?id=140734

        Reviewed by Chris Dumez.

        Instead of removing the children from the Vector member one by one,
        move the Vector out and iterate through the ex-children, clearing
        out the pointer to the parent.

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

2015-02-01  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Avoid unnecessary TransformationMatrix copies in GraphicsLayerTransform
        https://bugs.webkit.org/show_bug.cgi?id=140735

        Reviewed by Chris Dumez.

        * platform/graphics/GraphicsLayerTransform.cpp:
        (WebCore::GraphicsLayerTransform::combined): Return a const reference to the matrix.
        (WebCore::GraphicsLayerTransform::combinedForChildren): Ditto.
        (WebCore::GraphicsLayerTransform::combineTransforms): First copy the parent transform,
        then apply the translation and multiplication. Previously this copied the parent
        transform into a temporary object, performed the translation and multiplication, and
        copied that temporary object again when assigning to the member variable.
        (WebCore::GraphicsLayerTransform::combineTransformsForChildren): Mark const. m_childrenDirty
        and m_combinedForChildren members are marked mutable.
        * platform/graphics/GraphicsLayerTransform.h:

2015-01-31  Myles C. Maxfield  <litherum@gmail.com>

        REGRESSION (r177689): Emoji variation sequences rendered incorrectly (as characters from other non-emoji font)
        https://bugs.webkit.org/show_bug.cgi?id=141112

        Reviewed by Sam Weinig.

        Typo in r177689.

        Test: platform/mac/fast/text/combining-mark-paint.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

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

        Unreviewed, rolling out r178183.
        https://bugs.webkit.org/show_bug.cgi?id=141132

        Caused more mallocing than the volatility saved. (Requested by
        kling on #webkit).

        Reverted changeset:

        "[Cocoa] Make decoded image data purgeable ASAP."
        https://bugs.webkit.org/show_bug.cgi?id=140298
        http://trac.webkit.org/changeset/178183

2015-01-31  Chris Dumez  <cdumez@apple.com>

        Use simpler CachedResourceMap structure in MemoryCache with CACHE_PARTITIONING enabled
        https://bugs.webkit.org/show_bug.cgi?id=141110

        Reviewed by Antti Koivisto.

        Use simpler CachedResourceMap structure in MemoryCache with CACHE_PARTITIONING
        enabled. Previously, we would be using a HashMap of HashMap to store
        CachedResources. The outer HashMap would use the URL as key and the inner
        HashMap would use the partition name as key. This would make traversing the
        structure overly complicated, especially considering that the code needs to
        traverse a simple HashMap if CACHE_PARTITIONING is disabled.

        This patch updates the CachedResourceMap structure to be a simple HashMap,
        whose key is an std::pair<URL, String /* partitionName */>. Having a flat
        structure simplifies the traversal code a lot and enables more code sharing
        between CACHE_PARTITIONING and !CACHE_PARTITIONING. This shouldn't regress
        performance because we always have both a URL and a partition name when we
        need to look up a resource. We never need to retrieve all resources with
        a particular URL.

        This patch also switches to using a URL as key instead of a String as we
        always have a URL has input.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequestImpl):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::remove):
        After removing the resource from the CachedResourceMap, remove the
        sessionID from m_sessionResources if the CachedResourceMap is now
        empty. Previously, no code was removing sessionIDs from
        m_sessionResources.

        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::getOriginsWithCache):
        (WebCore::MemoryCache::getStatistics):
        (WebCore::MemoryCache::setDisabled):
        * loader/cache/MemoryCache.h:

2015-01-31  Sam Weinig  <sam@webkit.org>

        Merge the iOS implementations of GraphicsContext::drawText and GraphicsContext::drawBidiText with the platform independent ones
        https://bugs.webkit.org/show_bug.cgi?id=141131

        Reviewed by Antti Koivisto.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        The only difference between the two implementation here was the iOS one returns the length of
        the text that was drawn. As all platforms now support that, we can merge by keeping the iOS one.

        (WebCore::GraphicsContext::drawBidiText):
        This function had a few differences:
            - iOS returns the length of the text that was drawn.
                Since this is not used anywhere, I dropped this ability.
            - iOS took additional inputs of initial bidi status and run length (and returned the
              the final bidi status as an out parameter)
                Since this was also unused, I dropped it.
            - iOS used the fact that font.drawText() returns the length that was drawn, to avoid
              measuring the text twice.
                I kept this, since all platforms now support this.

        * platform/graphics/GraphicsContext.h:
        Update signatures. Remove WEBCORE_EXPORT for function that is not used outside of WebCore.

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

        Shrink RenderBlock.
        <https://webkit.org/b/141129>

        Reviewed by Antti Koivisto.

        Get rid of the bitfield in RenderBlock by moving the essential bits to
        RenderElement (plenty of space in the bitfield there.)

        RenderBlock also had a cache of its line-height, but it doesn't appear
        to help any of the benchmarks that we're tracking so I'd say it's okay
        to lose this optimization.

        This knocks 8 bytes off of RenderBlock (and all of its subclasses.)

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::recomputeLogicalWidth):
        (WebCore::RenderBlock::lineHeight):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::setHasMarginBeforeQuirk):
        (WebCore::RenderBlock::setHasMarginAfterQuirk):
        (WebCore::RenderBlock::setHasBorderOrPaddingLogicalWidthChanged):
        (WebCore::RenderBlock::hasMarginBeforeQuirk):
        (WebCore::RenderBlock::hasMarginAfterQuirk):
        (WebCore::RenderBlock::hasBorderOrPaddingLogicalWidthChanged):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::invalidateLineLayoutPath):
        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineLayoutPath):
        (WebCore::RenderBlockFlow::setLineLayoutPath):
        (WebCore::RenderBlockFlow::setHasMarkupTruncation):
        (WebCore::RenderBlockFlow::hasMarkupTruncation):
        (WebCore::RenderBlockFlow::simpleLineLayout):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setRenderBlockHasMarginBeforeQuirk):
        (WebCore::RenderElement::setRenderBlockHasMarginAfterQuirk):
        (WebCore::RenderElement::setRenderBlockHasBorderOrPaddingLogicalWidthChanged):
        (WebCore::RenderElement::renderBlockHasMarginBeforeQuirk):
        (WebCore::RenderElement::renderBlockHasMarginAfterQuirk):
        (WebCore::RenderElement::renderBlockHasBorderOrPaddingLogicalWidthChanged):
        (WebCore::RenderElement::setRenderBlockFlowLineLayoutPath):
        (WebCore::RenderElement::setRenderBlockFlowHasMarkupTruncation):
        (WebCore::RenderElement::renderBlockFlowLineLayoutPath):
        (WebCore::RenderElement::renderBlockFlowHasMarkupTruncation):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeLineRegionInfo):

2015-01-31  Chris Dumez  <cdumez@apple.com>

        Remove useless PageCache::singleton() call from PageCache member function
        https://bugs.webkit.org/show_bug.cgi?id=141127

        Reviewed by Andreas Kling.

        * history/PageCache.cpp:
        (WebCore::PageCache::get):

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove empty #if/#endif

        Rubber-stamped by Antti Koivisto.

        * platform/graphics/FontPlatformData.h:

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove support for disabling drawing of emoji
        https://bugs.webkit.org/show_bug.cgi?id=141126

        Reviewed by Antti Koivisto.

        Remove unused support for disabling the drawing of emoji.

        * WebCore.exp.in:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::emojiDrawingEnabled): Deleted.
        (WebCore::GraphicsContext::setEmojiDrawingEnabled): Deleted.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove even more Mountain Lion support
        https://bugs.webkit.org/show_bug.cgi?id=141124

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):
        (-[WebAccessibilityObjectWrapper subrole]):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::drawLayerContents):
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView _focusRingVisibleRect]):

2015-01-30  Sam Weinig  <sam@webkit.org>

        Merge SimpleFontDataIOS.mm and SimpleFontDataMac.mm into FontCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=141101

        Rubber-stamped by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj:
        Remove SimpleFontDataIOS.mm and SimpleFontDataMac.mm. Add FontCocoa.mm.

        * platform/graphics/Font.h:
        Remove a few CG only functions from the header that can be implemented as static functions
        in the implementation file.

        * platform/graphics/cocoa/FontCocoa.mm: Copied from Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm.
        (WebCore::fontFamilyShouldNotBeUsedForArabic):
        (WebCore::Font::platformInit):
        (WebCore::Font::platformCharWidthInit):
        (WebCore::Font::platformCreateScaledFont):
        (WebCore::Font::determinePitch):
        (WebCore::renderingStyle):
        (WebCore::advanceForColorBitmapFont):
        (WebCore::hasCustomTracking):
        (WebCore::canUseFastGlyphAdvanceGetter):
        (WebCore::Font::platformWidthForGlyph):
        (WebCore::Font::compositeFontReferenceFont):
        (WebCore::copyFontTableForTag): Deleted.
        (WebCore::Font::renderingStyle): Deleted.
        Merge in the iOS specific parts.

        * platform/graphics/ios/SimpleFontDataIOS.mm: Removed.
        * platform/graphics/mac/SimpleFontDataMac.mm: Removed.

2015-01-31  Zalan Bujtas  <zalan@apple.com>

        Regression(r179438) Simple line layout: ASSERTION at SimpleLineLayout::FlowContentsIterator::runWidth().
        https://bugs.webkit.org/show_bug.cgi?id=141121

        Reviewed by Antti Koivisto.

        When a breakable text fragment does not fit the current line, we split it.
        The first part stays on the current line, while the second part gets pushed to the next line.
        In certain cases, the first part could end up being empty.
        This patch ensures that we don't measure empty fragments.

        Covered by existing tests.

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

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

        Unreviewed, rolling out r179426.
        https://bugs.webkit.org/show_bug.cgi?id=141119

        "caused a memory use regression" (Requested by Guest45 on
        #webkit).

        Reverted changeset:

        "Use FastMalloc (bmalloc) instead of BlockAllocator for GC
        pages"
        https://bugs.webkit.org/show_bug.cgi?id=140900
        http://trac.webkit.org/changeset/179426

2015-01-30  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Improve FlowContentsIterator::TextFragment's encapsulation.
        https://bugs.webkit.org/show_bug.cgi?id=141090

        Reviewed by Andreas Kling.

        Make members private to avoid accidental change in TextFragment.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::addFragment):
        (WebCore::SimpleLineLayout::LineState::addWhitespace):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        * rendering/SimpleLineLayoutFlowContentsIterator.cpp:
        (WebCore::SimpleLineLayout::FlowContentsIterator::nextTextFragment):
        * rendering/SimpleLineLayoutFlowContentsIterator.h:
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::start):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::end):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::width):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::type):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::isCollapsed):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::isBreakable):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::isEmpty):

2015-01-30  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Make LineState fragment handling simpler.
        https://bugs.webkit.org/show_bug.cgi?id=141100

        Reviewed by Andreas Kling.

        New fragments are appeneded to the Run's last entry
        instead of accumulating them until after a new run is required. 
        (whitespace collapse or line end)
        LineState::appendFragment manages whitespace collapsing now.
        This makes createLineRuns() logic lighter and no need to "flush"
        the LineState when the line ends.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp: Make LineState members private and introduce getters.
        (WebCore::SimpleLineLayout::LineState::setAvailableWidth):
        (WebCore::SimpleLineLayout::LineState::setLogicalLeftOffset):
        (WebCore::SimpleLineLayout::LineState::setOverflowedFragment):
        (WebCore::SimpleLineLayout::LineState::availableWidth):
        (WebCore::SimpleLineLayout::LineState::logicalLeftOffset):
        (WebCore::SimpleLineLayout::LineState::overflowedFragment):
        (WebCore::SimpleLineLayout::LineState::hasTrailingWhitespace):
        (WebCore::SimpleLineLayout::LineState::isWhitespaceOnly):
        (WebCore::SimpleLineLayout::LineState::fits):
        (WebCore::SimpleLineLayout::LineState::firstCharacterFits):
        (WebCore::SimpleLineLayout::LineState::width):
        (WebCore::SimpleLineLayout::LineState::appendFragment): Append each fragment to the Run 
        by either creating a new run or expanding the last one.
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace): Remove trailing whitespace from
        the Run's and reset the trailing whitespace variables.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::LineState::createRun): Deleted.
        (WebCore::SimpleLineLayout::LineState::addFragment): Deleted.
        (WebCore::SimpleLineLayout::LineState::addWhitespace): Deleted.
        (WebCore::SimpleLineLayout::LineState::hasWhitespaceOnly): Deleted.

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Drop HistoryItem's m_prev / m_next
        https://bugs.webkit.org/show_bug.cgi?id=141105

        Reviewed by Zalan Bujtas.

        Drop HistoryItem's m_prev / m_next. Those are no longer needed after
        the PageCache refactoring in <http://trac.webkit.org/r179347>.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:

2015-01-30  Jeongmin Kim  <jm86.kim@lge.com>

        Update the comment in RenderLayer for clarity as related code location is changed
        https://bugs.webkit.org/show_bug.cgi?id=141103

        Reviewed by Simon Fraser.

        Update the comment in RenderLayer for clarity as related code location is changed
        The repainting in implicitClose() that is now called in setVisualUpdatesAllowed(bool) is removed

        * rendering/RenderLayer.cpp:
        (WebCore::shouldSuppressPaintingLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Optimize MemoryCache::getSessionMap() a bit
        https://bugs.webkit.org/show_bug.cgi?id=141069

        Reviewed by Anders Carlsson.

        Optimize MemoryCache::getSessionMap() a bit by doing 1 HashMap lookup
        instead of previously 3. Also rename the method to
        ensureSessionResourceMap() as we usually don't use "get" prefix for
        getters and the implementation will also create the HashMap value if
        the key is not found.

        Also add a alternative sessionResourceMap() method which returns
        the HashMap value if the key exists but doesn't try to create it if
        missing. This is actually what we really want for some call sites.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequest):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::remove):
        (WebCore::MemoryCache::getSessionMap): Deleted.
        * loader/cache/MemoryCache.h:

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Unreviewed. Remove outdated comment.

        * loader/cache/MemoryCache.cpp:

2015-01-30  Eric Carlson  <eric.carlson@apple.com>

        Remove MediaPlayerProxy.h
        https://bugs.webkit.org/show_bug.cgi?id=141087

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Remove reference to MediaPlayerProxy.h.
        * platform/graphics/mac/MediaPlayerProxy.h: Removed.

2015-01-30  Geoffrey Garen  <ggaren@apple.com>

        Use FastMalloc (bmalloc) instead of BlockAllocator for GC pages
        https://bugs.webkit.org/show_bug.cgi?id=140900

        Reviewed by Mark Hahnenberg.

        Re-landing just the HandleBlock piece of this patch.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Update MemoryCache code to use more references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=141099

        Reviewed by Andreas Kling.

2015-01-30  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ASSERT in InspectorTimelineAgent::internalStop
        https://bugs.webkit.org/show_bug.cgi?id=141039

        Reviewed by Timothy Hatcher.

        Don't unconditionally stop the environment stopwatch, since it could have
        already stopped due to the debugger pausing.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStop):

2015-01-30  Chris Dumez  <cdumez@apple.com>

        When no background-size is specified on the 2nd background layer, it takes the first instead of the initial value
        https://bugs.webkit.org/show_bug.cgi?id=141059

        Reviewed by Antti Koivisto.

        This patch fixes fill size support for 'initial' value.

        Test: fast/css/background-layers-initial-size.html

        * css/CSSToStyleMap.cpp:
        - Add check for initial values and set fill size to initialFillSize()
          in this case (which is 'auto'). Previously, we were handling all
          non CSSPrimitiveValues the same way and setting the fill size type
          to SizeNone, which means no size (not 'auto').
        - Clean up the rest of the function (no behavior change).

        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        - Initialize m_sizeLength to SizeNone instead of calling
          initialFillSizeType(). There is no behavior change here. However,
          initialFillSizeType() was not supposed to return SizeNone.
        - Stop explicitly initializing m_sizeLength to LengthSize() as this
          is already what happens implicitly.

        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::initialFillSize):
        Return FillSize() instead of FillSize(SizeNone, LengthSize()).
        FillSize() is equivalent to FillSize(SizeLength, LengthSize())
        which is resolved to 'auto'. SizeNone means no size which isn't
        what we want as an initial value.

        (WebCore::FillLayer::initialFillSizeType): Deleted.
        (WebCore::FillLayer::initialFillSizeLength): Deleted.
        Remove Individual initialFillSizeType() / initialFillSizeLength()
        functions now that all caller use initialFillSize() instead.

2015-01-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179403.
        https://bugs.webkit.org/show_bug.cgi?id=141091

        Broke fast/files/workers/worker-apply-blob-url-to-xhr.html
        (Requested by ap_ on #webkit).

        Reverted changeset:

        "Optimize MemoryCache::getSessionMap() a bit"
        https://bugs.webkit.org/show_bug.cgi?id=141069
        http://trac.webkit.org/changeset/179403

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Rename shared() static member functions to singleton() for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=141088

        Reviewed by Ryosuke Niwa and Benjamin Poulain.

        Rename shared() static member functions to singleton() for singleton
        classes as per the recent coding style change.

2015-01-30  Matthew Mirman  <mmirman@apple.com>

        Added ClientRect as an interface that requires attributes 
        on instance for compatibility.
        https://bugs.webkit.org/show_bug.cgi?id=141063
        <rdar://problem/18437653>

        Reviewed by Oliver Hunt.

        Added a new test to LayoutTests/js/resources/JSON-stringify.js

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

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Optimize MemoryCache::getSessionMap() a bit
        https://bugs.webkit.org/show_bug.cgi?id=141069

        Reviewed by Anders Carlsson.

        Optimize MemoryCache::getSessionMap() a bit by doing 1 HashMap lookup
        instead of previously 3. Also rename the method to sessionResources()
        as we usually don't use "get" prefix for getters.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::sessionResources):
        (WebCore::MemoryCache::add):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::resourceForRequest):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::remove):
        (WebCore::MemoryCache::getSessionMap): Deleted.
        * loader/cache/MemoryCache.h:

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Store MemoryCache's live decoded resources in a ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=141051

        Reviewed by Antti Koivisto.

        Store MemoryCache's live decoded resources in a ListHashSet instead of
        a linked list. The frequent operations are:
        1. Add items to one end
        2. Remove items from the other end or anywhere in the container by value

        Using a ListHashSet instead of a manual linked list results in *much*
        simpler / shorter code and is fast for all operations (faster than
        linked list even for removing an given element from the container given
        its value). The previous implementation required us to keep a lot of
        pointers up-to-date, which was error prone.

        This is a first step towards simplifying the MemoryCache implementation.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::setDecodedSize):
        (WebCore::CachedResource::didAccessDecodedData):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::inLiveDecodedResourcesList): Deleted.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        (WebCore::MemoryCache::removeFromLiveDecodedResourcesList):
        (WebCore::MemoryCache::insertInLiveDecodedResourcesList):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::inLiveDecodedResourcesList):

2015-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        [cairo] Fix #if guards in platform/graphics/cairo directory
        https://bugs.webkit.org/show_bug.cgi?id=141076

        Reviewed by Sergio Villar Senin.

        * platform/graphics/cairo/BackingStoreBackendCairo.h:
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        * platform/graphics/cairo/CairoUtilities.cpp:
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/cairo/DrawErrorUnderline.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        * platform/graphics/cairo/FloatRectCairo.cpp:
        * platform/graphics/cairo/FontCairo.cpp:
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/cairo/ImageCairo.cpp:
        * platform/graphics/cairo/IntRectCairo.cpp:
        * platform/graphics/cairo/OwnPtrCairo.cpp:
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/cairo/PlatformPathCairo.cpp:
        * platform/graphics/cairo/PlatformPathCairo.h:
        * platform/graphics/cairo/RefPtrCairo.cpp:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/cairo/TileCairo.h:
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:

2015-01-29  Darin Adler  <darin@apple.com>

        Remove SVGUseElement.instanceRoot and all tests that depend on it
        https://bugs.webkit.org/show_bug.cgi?id=141025

        Reviewed by Anders Carlsson.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::instanceRoot): Deleted.
        * svg/SVGUseElement.h: Removed instanceRoot.
        * svg/SVGUseElement.idl: Ditto.

2015-01-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build with newer Clang.

        * platform/graphics/ca/GraphicsLayerCA.h:

2015-01-29  Sam Weinig  <sam@webkit.org>

        Try to fix the iOS build.

        * WebCore.exp.in:

2015-01-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r179368.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Don't use the no longer
        valid isPrinterFont method.

2015-01-29  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r179368

        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::equalForTextAutoSizing):

2015-01-29  Simon Fraser  <simon.fraser@apple.com>

        Border-radius clipping on a stacking context causes descendants to not render
        https://bugs.webkit.org/show_bug.cgi?id=140536

        Reviewed by Zalan Bujtas.
        
        Fix one of the issues introduced in r178029. The changes in GraphicsLayerCA
        failed to adhere to the "set a bit and flush later" pattern that this class uses,
        instead poking the platform layers directly. This caused an issue where the bounds
        of the clipping layer would later be set to 0x0, causing content to disappear.
        
        Fix by changing the "applyClippingBorder" function to "setMasksToBoundsRect"
        and have it update via a new MasksToBoundsRectChanged dirty bit.

        In order to avoid clobbering the mask layer used to clip contents, we need another
        shape mask layer, so rename m_shapeMaskLayer to m_contentsShapeMaskLayer, then
        introduce a new m_shapeMaskLayer which is used for masks-to-bounds clipping. Update
        the reflection cloning code to correctly clone this layer.

        Test: compositing/clipping/border-radius-stacking-context-clip.html

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::maskToBoundsRect):
        (WebCore::GraphicsLayer::setMasksToBoundsRect):
        (WebCore::GraphicsLayer::applyClippingBorder): Deleted.
        (WebCore::GraphicsLayer::clearClippingBorder): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::willBeDestroyed):
        (WebCore::GraphicsLayerCA::setMasksToBoundsRect):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::updateMasksToBoundsRect):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
        (WebCore::GraphicsLayerCA::applyClippingBorder): Deleted.
        (WebCore::GraphicsLayerCA::clearClippingBorder): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateChildClippingStrategy): Add a FIXME since
        this code is trying to access geometry and we may not have done layout yet.
        Also, to clear the rounded rect, just set a non-rounded rect the size of the layer.

2015-01-29  Sam Weinig  <sam@webkit.org>

        Remove support for screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=141038

        Reviewed by Tim Horton.

        - Removes the screen font substitution setting (which was only on in Mountain Lion)
        - Remove the concept of a printer font, from the family of Font related classes.

        * WebCore.exp.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::initializeFontStyle):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault): Deleted.
        (WebCore::Settings::setScreenFontSubstitutionEnabled): Deleted.
        * page/Settings.h:
        (WebCore::Settings::screenFontSubstitutionEnabled): Deleted.
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault): Deleted.
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionFontDataCacheKey::makeFlagKey):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::isPrinterFont): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::equalForTextAutoSizing):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::usePrinterFont): Deleted.
        (WebCore::FontDescription::setUsePrinterFont): Deleted.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isCompositeFontReference):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::isPrinterFont): Deleted.
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getSystemFontFallbackForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::Font::platformCreateScaledFont):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::Font::compositeFontReferenceFont):
        (WebCore::Font::platformCreateScaledFont):
        * platform/mac/DragImageMac.mm:
        (WebCore::fontFromNSFont):
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2015-01-20  David Hyatt  <hyatt@apple.com>

        Japanese line breaking rules need to be respected before and after Ruby.
        https://bugs.webkit.org/show_bug.cgi?id=91588
        <rdar://problem/17306535>

        Reviewed by Dean Jackson.

        Added fast/ruby/ruby-punctuation-avoid-breaking.html.

        This patch has to add support for following line breaking rules at both
        sides of a Ruby boundary. For breaking before a Ruby, unfortunately we
        just hard-code the rules (and apply this hard-coding only to Ruby and not
        to other inline replaced elements).

        For breaking after a Ruby we do better. The Ruby run caches its prior characters
        and line layout is able to obtain them and use them when deciding whether or not
        to break. This means for the "after" side of a Ruby, we're able to behave the same
        as if no Ruby was used.

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::cachePriorCharactersIfNeeded):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::cachePriorCharactersIfNeeded):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::updatePriorContextFromCachedBreakIterator):
        (WebCore::RenderRubyRun::canBreakBefore):
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::canBreakBefore):
        * rendering/RenderRubyText.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):

2015-01-28  Beth Dakin  <bdakin@apple.com>

        Remove more Mountain Lion code from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=141014

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetSpelling):
        (AXAttributedStringAppendText):
        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        * editing/cocoa/HTMLConverter.mm:
        (_dateForString):
        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::supported):
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault):
        (WebCore::Settings::initializeDefaultFontFamilies):
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState):
        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage): Deleted.
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::languageForAVMediaSelectionOption):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::state):
        (IOSurface::isVolatile):
        (IOSurface::setIsVolatile):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::Font::platformInit):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::drawArraysInstanced):
        (WebCore::Extensions3DOpenGL::drawElementsInstanced):
        (WebCore::Extensions3DOpenGL::vertexAttribDivisor):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cocoa/ProtectionSpaceCocoa.h:
        (WebCore::ProtectionSpace::encodingRequiresPlatformData):
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::ProtectionSpace::encodingRequiresPlatformData):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        * platform/spi/cf/CFNetworkSPI.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2015-01-29  Benjamin Poulain  <bpoulain@apple.com>

        Remove an extraneous check from the parser of :not()
        https://bugs.webkit.org/show_bug.cgi?id=141021

        Reviewed by Darin Adler.

        * css/CSSGrammar.y.in:
        :not() takes a selector list, it can be null if there selector list is invalid,
        but there cannot be a invalid pointer.

2015-01-29  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r179347

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

2015-01-29  Andreas Kling  <akling@apple.com>

        JavaScript bindings constructors should take Ref<ImplType>&&.
        <https://webkit.org/b/140952>

        Reviewed by Darin Adler.

        When constructing a JS wrapper object, there is always going to be a
        corresponding DOM object.

        Tweak the JavaScript DOM bindings generator to spit out constructors
        that take the DOM object by Ref&& rather than PassRefPtr.

        This avoids generating unnecessary null checks around every instance
        of wrapper construction.

        * bindings/js/JSDOMBinding.h:
        (WebCore::createWrapper):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):

2015-01-29  Chris Dumez  <cdumez@apple.com>

        Clean up / modernize PageCache class
        https://bugs.webkit.org/show_bug.cgi?id=141009

        Reviewed by Darin Adler.

        Clean up / modernize PageCache class:
        - Use more references instead of pointers
        - Use a ListHashSet<Ref<HistoryItem>> internally instead of a linked
          list of HistoryItem*. This avoids having the ref/unref HistoryItems
          manually and maintaining the list size separately. It also simplifies
          the code dealing with the container and makes looking up HistoryItems
          faster as a bonus. Similarly to the previous implementation, we are
          adding elements to one end and removing from the opposite end when
          pruning to drop old history items first. Note that even though the
          previous implementation was called LRUList, it did not move items to
          the front when accessed. The new implementation doesn't either.
         - Rename "capacity" to "maxSize" to avoid confusing with containers'
           capacity (which doesn't limit the size of the container).
         - Use unsigned instead of int for all values that are supposed to be
           positive.
         - Do not explicitely define the default constructor and let the
           compiler generate it for us (and use in-class initialization for
           members)
         - Fix indentation in the header.

2015-01-29  Julien Isorce  <j.isorce@samsung.com>

        HTMLImageLoader: fix build failure on assert condition after r179340
        https://bugs.webkit.org/show_bug.cgi?id=140722

        Reviewed by Csaba Osztrogonác.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::imageChanged): image() directly
        returns a CachedImage*.

2015-01-29  Julien Isorce  <j.isorce@samsung.com>

        CachedImage: ensure clients overrides imageChanged instead of notifyFinished
        https://bugs.webkit.org/show_bug.cgi?id=140722

        Reviewed by Tim Horton.

        imageChanged is called whenever a frame of an image changes
        because we got more data from the network.

        notifyFinished was called when the image was entirely loaded.

        The problem was that some clients were implementing only
        imageChanged (ex: RenderBox), some only notifyFinished and
        some both (ex: RenderImage) which made the situation difficult
        to understand and to maintain.

        For example when the image finished loading, both imageChanged
        and notifyFinished were called with the difference that for the
        first one isLoaded() returned false.
        It could result in functions being called twice in a row,
        ex: contentChanged(ImageChanged).

        So this patch tries to simplify the situation by marking
        CachedImageClient::notifyFinished final in order to prevent
        clients from implementing it.
        Indeed this patch ensure that CachedImage clients implement
        and only implement imageChanged function.

        Also Clients can now differentiate intermediate and end
        calls by checking isLoaded() in imageChanged.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::imageChanged): Added instead
        of notifyFinished.
        (WebCore::HTMLImageLoader::notifyFinished): Deleted.
        * html/HTMLImageLoader.h:

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::imageChanged): Added instead
        of notifyFinished.
        (WebCore::ImageLoader::notifyFinished): Deleted.
        * loader/ImageLoader.h:

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::finishLoading): Explicilty mark image as
        loaded and before notifying observers. So that it avoids to call
        notifyFinished (from CachedResource::finishLoading).

        * loader/cache/CachedImageClient.h:
        Make CachedImageClient::notifyFinished final to make sure
        sub classes implement imageChanged instead.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::notifyFinished): Deleted.
        ImageChanged already exists and is more clever than notifyFinished.
        Indeed invalidateBackgroundObscurationStatus() will be called by
        RenderReplaced::layout() upon call to setNeedsLayout() in
        RenderImage::imageDimensionsChanged.
        Also contentChanged(ImageChanged) is now called only when necessary.
        * rendering/RenderImage.h:

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::imageChanged): Added instead
        of notifyFinished.
        (WebCore::SVGFEImageElement::notifyFinished): Deleted.
        * svg/SVGFEImageElement.h:

2015-01-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Poor performance on IE's Chalkboard benchmark.
        https://bugs.webkit.org/show_bug.cgi?id=140753.

        Reviewed by Zalan Bujtas.

        Test: PerformanceTests/SVG/UnderTheSeeBenchmark.html
              PerformanceTests/SVG/WorldcupBenchmark.html
              
        The SVG rendering code was not skipping the SVG elements which are outside the
        clipping rectangle. We were drawing all the SVG elements even if some of them
        are completely outside the clipping rectangle. The fix is to pass the correct
        dirty rectangle to the ScrollView which then gets propagated to the SVG renderers.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):
        SVGImage::draw() needs to pass the intersection of 'srcRect' and context->clipBounds(),
        to ScrollView::paint(). This will ensure RenderSVGShape::paint() gets the correct
        clipping rectangle. If there is no intersection between the boundingBox of the
        RenderSVGShape and the clipping rectangle, the RenderSVGShape will not be drawn.

2015-01-28  Brent Fulgham  <bfulgham@apple.com>

        Scroll snap points do not work in the vertical direction
        https://bugs.webkit.org/show_bug.cgi?id=141001
        <rdar://problem/19632089>

        Reviewed by Beth Dakin.

        New scroll snap tests are being prepared separately. A manual test case is attached to the issue.

        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBoxForSingleAxis): We want to consider momentum end phase
        when dealing with Scroll Snap Points.
        * platform/mac/AxisScrollSnapAnimator.mm:
        (WebCore::AxisScrollSnapAnimator::handleWheelEvent): We do NOT want to bail out early here. In fact, it's strange
        that this code was like this at all, since it meant a large number of cases were not being used. We also want to
        trigger the scroll snap animation (when applicable) upon an inertia scroll end.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::gestureShouldBeginSnap): Added.
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching): If we have automatic elasticity, and we have active scroll
        snap points, we want to let the scroll snap animator deal with the gesture.
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching): Ditto.

2015-01-28  Benjamin Poulain  <bpoulain@apple.com>

        Start fixing the handling of Element's attributes when they contain non-ASCII characters
        https://bugs.webkit.org/show_bug.cgi?id=141016

        Reviewed by Ryosuke Niwa.

        Attribute handling does not work properly when the attribute name contains non-ASCII character.

        The HTML parser tokenize those names as ASCII lowercase. Some of the code is CSS and Element use
        unicode lowercase for the names. This breaks all the APIs as soon as a name contains a character
        that is non-ASCII and uppercase since some APIs change it, other don't.

        This patch is a first step toward fixing this mess, it only address the simple cases.
        The HTML spec says the names should be compared ASCII case-insensitive, to I spread that behavior
        to places that were using unicode.

        Tests: fast/css/attribute-ascii-case-insensitive-html.html
               fast/css/attribute-ascii-case-insensitive-xhtml-expected.xhtml
               fast/css/attribute-ascii-case-insensitive-xhtml.xhtml
               fast/css/attribute-ascii-case-insensitive-xml-in-html.html
               fast/dom/Element/attribute-ascii-case-insensitive-1.html
               fast/dom/Element/attribute-ascii-case-insensitive-2.html
               fast/selectors/attribute-ascii-case-insensitive-style-update.html
               fast/selectors/element-matches-attribute-ascii-case-insensitive-html.html
               fast/selectors/querySelector-attribute-ascii-case-insensitive-html.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::setAttribute):
        * dom/Element.cpp:
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::hasAttribute):
        * dom/ElementData.cpp:
        (WebCore::ElementData::findAttributeIndexByNameSlowCase):
        * dom/ElementData.h:
        (WebCore::ElementData::findAttributeIndexByName):

2015-01-28  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Drop uncommitted/committed terms from LineState.
        https://bugs.webkit.org/show_bug.cgi?id=141005

        Reviewed by Antti Koivisto.

        Fragments form segments and segments turn into runs on the lines.
        We add fragments only when they fit so they should not be in 'uncommitted' state at all.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::createRun):
        (WebCore::SimpleLineLayout::LineState::addFragment):
        (WebCore::SimpleLineLayout::LineState::addWhitespace):
        (WebCore::SimpleLineLayout::LineState::hasWhitespaceOnly):
        (WebCore::SimpleLineLayout::LineState::width):
        (WebCore::SimpleLineLayout::LineState::firstCharacterFits):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns): Unnecessary assert.
        (WebCore::SimpleLineLayout::LineState::commitAndCreateRun): Deleted.
        (WebCore::SimpleLineLayout::LineState::addUncommitted): Deleted.
        (WebCore::SimpleLineLayout::LineState::addUncommittedWhitespace): Deleted.

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Regression(r177494): Bad cast to WebKitCSSResourceValue in StyleBuilderConverter::convertMaskImageOperations()
        https://bugs.webkit.org/show_bug.cgi?id=140991
        <rdar://problem/19625305>

        Reviewed by Antti Koivisto.

        convertMaskImageOperations() was assuming that the CSSValueList's values
        were always WebKitCSSResourceValue values. However, they can be
        CSSInitialValues as well so we should check before casting.

        Test: css3/masking/mask-image-initial-value-crash.html

        * css/StyleBuilderConverter.h:
        (WebCore::maskImageValueFromIterator):
        (WebCore::StyleBuilderConverter::convertMaskImageOperations):

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Remove dead code from MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=140964

        Reviewed by Andreas Kling.

        Remove dead code from MemoryCache, make more things private and
        clean up a little bit.

        * WebCore.exp.in:
        * inspector/InspectorResourceAgent.cpp:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::removeImageFromCache):
        (WebCore::MemoryCache::pruneLiveResources):
        (WebCore::MemoryCache::pruneDeadResources):
        (WebCore::MemoryCache::pruneDeadResourcesToSize):
        (WebCore::MemoryCache::remove):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        (WebCore::MemoryCache::setDisabled):
        (WebCore::MemoryCache::resourceForURL): Deleted.
        (WebCore::MemoryCache::pruneLiveResourcesToPercentage): Deleted.
        (WebCore::MemoryCache::pruneDeadResourcesToPercentage): Deleted.
        (WebCore::MemoryCache::evict): Deleted.
        (WebCore::MemoryCache::removeUrlFromCache): Deleted.
        (WebCore::MemoryCache::removeRequestFromCache): Deleted.
        (WebCore::MemoryCache::pruneToPercentage): Deleted.
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::LRUList::LRUList): Deleted.
        (WebCore::MemoryCache::remove): Deleted.
        (WebCore::MemoryCache::setPruneEnabled): Deleted.
        (WebCore::MemoryCache::minDeadCapacity): Deleted.
        (WebCore::MemoryCache::maxDeadCapacity): Deleted.
        (WebCore::MemoryCache::capacity): Deleted.
        (WebCore::MemoryCache::liveSize): Deleted.
        (WebCore::MemoryCache::deadSize): Deleted.
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-01-28  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove CSS.setPropertyText, CSS.toggleProperty and related dead code
        https://bugs.webkit.org/show_bug.cgi?id=140961

        Reviewed by Timothy Hatcher.

        No new tests, no behavior changed.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setPropertyText): Deleted.
        (WebCore::InspectorCSSAgent::toggleProperty): Deleted.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyle::setPropertyText): Deleted.
        (WebCore::InspectorStyle::toggleProperty): Deleted.
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Deleted.
        (WebCore::InspectorStyleSheet::setPropertyText): Deleted.
        (WebCore::InspectorStyleSheet::toggleProperty): Deleted.
        (WebCore::InspectorStyleSheet::rememberInspectorStyle): Deleted.
        (WebCore::InspectorStyleSheet::forgetInspectorStyle): Deleted.
        (WebCore::InspectorStyleSheet::revalidateStyle): Deleted.
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleTextEditor.cpp: Removed.
        * inspector/InspectorStyleTextEditor.h: Removed.

2015-01-28  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move FlowContents iterator interface to FlowContentsIterator.
        https://bugs.webkit.org/show_bug.cgi?id=140944

        Reviewed by Antti Koivisto.

        This patch cleans up FlowContents's interface by moving the iterator functionality
        to this new FlowContentsIterator class.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::addUncommitted):
        (WebCore::SimpleLineLayout::LineState::addUncommittedWhitespace):
        (WebCore::SimpleLineLayout::preWrap):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::Style::Style): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::nextTextFragment): Deleted.
        (WebCore::SimpleLineLayout::nextBreakablePosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition): Deleted.
        (WebCore::SimpleLineLayout::findNextNonWhitespace): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::textWidth): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::runWidth): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::Iterator::Iterator):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator*):
        (WebCore::SimpleLineLayout::FlowContents::begin):
        (WebCore::SimpleLineLayout::FlowContents::end):
        (WebCore::SimpleLineLayout::FlowContents::length):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator++):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator==):
        (WebCore::SimpleLineLayout::FlowContents::Iterator::operator!=):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPosition):
        (WebCore::SimpleLineLayout::FlowContents::TextFragment::TextFragment): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::TextFragment::isEmpty): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::hasOneSegment): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::style): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::characterAt): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::isLineBreak): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::isEnd): Deleted.
        * rendering/SimpleLineLayoutFlowContentsIterator.cpp: Copied from Source/WebCore/rendering/SimpleLineLayoutFlowContents.cpp.
        (WebCore::SimpleLineLayout::FlowContentsIterator::Style::Style):
        (WebCore::SimpleLineLayout::FlowContentsIterator::FlowContentsIterator):
        (WebCore::SimpleLineLayout::FlowContentsIterator::nextTextFragment):
        (WebCore::SimpleLineLayout::FlowContentsIterator::textWidth):
        (WebCore::SimpleLineLayout::nextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContentsIterator::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::findNextNonWhitespace):
        (WebCore::SimpleLineLayout::FlowContentsIterator::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContentsIterator::runWidth):
        * rendering/SimpleLineLayoutFlowContentsIterator.h: Copied from Source/WebCore/rendering/SimpleLineLayoutFlowContents.h.
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::FlowContentsIterator::TextFragment::isEmpty):
        (WebCore::SimpleLineLayout::FlowContentsIterator::style):
        (WebCore::SimpleLineLayout::FlowContentsIterator::segmentForPosition):
        (WebCore::SimpleLineLayout::FlowContentsIterator::characterAt):
        (WebCore::SimpleLineLayout::FlowContentsIterator::isLineBreak):
        (WebCore::SimpleLineLayout::FlowContentsIterator::isEnd):

2015-01-28  Beth Dakin  <bdakin@apple.com>

        Remove Mountain Lion code from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=141007

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * page/AlternativeTextClient.h:
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::initializeDefaultFontFamilies):
        * platform/cocoa/SystemVersion.mm:
        (WebCore::callGestalt): Deleted.
        (WebCore::createSystemMarketingVersion): Deleted.
        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms):
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::supportsAcceleratedFilterAnimations):
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::platformInit):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::phaseForEvent):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):
        * platform/network/cocoa/CredentialCocoa.mm:
        (WebCore::toCredentialPersistence):
        * platform/spi/cocoa/CoreTextSPI.h:

2015-01-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error in media player implementation.
        https://bugs.webkit.org/show_bug.cgi?id=141004

        Reviewed by Brent Fulgham.

        MediaPlayer::cachedResourceLoader() returns a pointer to the resource loader, not a reference.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::createVideoWindow):

2015-01-28  Jeremy Jones  <jeremyj@apple.com>

        Prevent implicit animation when setting fullscreen background to clear.
        https://bugs.webkit.org/show_bug.cgi?id=140888

        Reviewed by Eric Carlson.

        This patch decreases flicker when exiting fullscreen by preventing
        an implicit animation when changing the background to clear.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal):

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Use an enum class for createFontFamilyValue()'s fromSystemFontID argument
        https://bugs.webkit.org/show_bug.cgi?id=140981

        Reviewed by Darin Adler.

        Use an enum class for createFontFamilyValue()'s fromSystemFontID argument
        instead of a simple enum, as suggested by Sam. This is a bit nicer.

        Also, use a boolean type for CSSFontFamily.fromSystemFontID instead of
        the enum type to facilitate handling. Using a enum (class) for
        CSSFontFamily's fromSystemFontID member is not useful as it is always
        accessed by name.

        * css/CSSFontFamily.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemFont):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):
        * css/CSSValuePool.h:

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Fix typo in markPagesForVistedLinkStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=140977

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * history/CachedPage.h:
        (WebCore::CachedPage::markForVisitedLinkStyleRecalc):
        (WebCore::CachedPage::markForVistedLinkStyleRecalc): Deleted.
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVisitedLinkStyleRecalc):
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc): Deleted.
        * history/PageCache.h:

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed. Remove duplicate friend class statement after r179255.

        * history/PageCache.h:

2015-01-28  Darin Adler  <darin@apple.com>

        Make SVGElement::instancesForElement point to elements in the shadow tree, not SVGElementInstance objects
        https://bugs.webkit.org/show_bug.cgi?id=140984

        Reviewed by Anders Carlsson.

        Refactoring of code that is pretty well covered by existing tests, so
        not adding new tests.

        Inspired by work Rob Buis did in Blink:

            http://src.chromium.org/viewvc/blink?view=revision&revision=173275

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear): Removed code to zero m_lastInstanceUnderMouse.
        (WebCore::instanceAssociatedWithShadowTreeElement): Deleted.
        (WebCore::EventHandler::updateMouseEventTargetNode): Removed code that used
        m_lastInstanceUnderMouse to track events on an object after recloning.
        This behavior doesn't seem to be needed to pass any existing tests, and Rob
        removed it from Blink, so I'll take it out and we can bring if back, based
        on the original element rather than on the SVGElementInstance, if we find we
        need to restore the behavior in the future.

        * page/EventHandler.h: Removed m_lastInstanceUnderMouse.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::determineAnimatedPropertyType):
        Changed this function to take a reference and to call the updated version
        of the targetElement.animatedPropertyTypesForAttribute function.
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue): Updated to pass
        a reference rather than a pointer.
        (WebCore::SVGAnimateElementBase::resetAnimatedType): Updated to pass
        references rather than pointers.
        (WebCore::applyCSSPropertyToTarget): Updated to take a reference.
        (WebCore::removeCSSPropertyFromTarget): Ditto.
        (WebCore::applyCSSPropertyToTargetAndInstances): Ditto. Also use a modern
        for loop, and iterate over shadow tree instances, not over SVGElementInstance.
        (WebCore::removeCSSPropertyFromTargetAndInstances): Ditto.
        (WebCore::notifyTargetAboutAnimValChange): Ditto.
        (WebCore::notifyTargetAndInstancesAboutAnimValChange): Ditto.
        (WebCore::SVGAnimateElementBase::clearAnimatedType): More of the same.
        (WebCore::SVGAnimateElementBase::applyResultsToTarget): Ditto.
        (WebCore::SVGAnimateElementBase::resetAnimatedPropertyType): Ditto.

        * svg/SVGAnimateElementBase.h: Changed determineAnimatedPropertyType to take
        a reference rahter than a pointer.

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget): Updated to use the
        new instances instead of SVGElementInstance. Also added code to skip work if
        the transform is not changing, and use the assignment operator instead of
        breaking one matrix down and calling setMatrix on the other.

        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        Changed to take a reference rather than a pointer, and rewrote to streamline,
        using modern for loops and using the new instances set.

        * svg/SVGAnimatedTypeAnimator.h: Removed the constructors from the
        SVGElementAnimatedProperties struct since we can build them just fine without
        them. Changed findAnimatedPropertiesForAttributeName to take a reference.

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation): Pass a
        reference rather than a pointer. Also streamlined the code a bit and removed
        a comment that tried to say exactly what the code was doing, but was outdated.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Disconnect all instances from this element
        and also disconnect the corresponding element from this element if it itself
        is an instance. This guarantees we have no dangling pointers.
        (WebCore::SVGElement::mapInstanceToElement): Deleted.
        (WebCore::SVGElement::removeInstanceMapping): Deleted.
        (WebCore::SVGElement::instances): Renamed from instancesForElement and changed
        to be a set of SVG element instances in the shadow tree, rather than
        SVGElementInstance objects.
        (WebCore::SVGElement::correspondingElement): Tweaked assertion a little and use
        nullptr instead of 0.
        (WebCore::SVGElement::correspondingUseElement): Added. Finds the use element
        that owns the shadow tree this element is in by following the host element
        pointer from the shadow root.
        (WebCore::SVGElement::setCorrespondingElement): Added code to insert or remove
        this element from the instances set of the corresponding element.
        (WebCore::SVGElement::animatedPropertyTypesForAttribute): Renamed from
        animatedPropertyTypeForAttribute and switched to use a return value instead of
        an out argument.
        (WebCore::SVGElement::addEventListener): Updated to use instances rather than
        the old instancesForElement.
        (WebCore::SVGElement::removeEventListener): Ditto.
        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute): Pass a reference.
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute): Ditto.
        (WebCore::SVGElement::isPresentationAttributeWithSVGDOM): Updated to use the
        new function from AttributeToPropertyMap.

        * svg/SVGElement.h: Changed animatedPropertyTypesForAttribute name to be plural
        since it returns a vector of types, and made it use a return value instead of
        an out argument. Added the correspondingUseElement function, and removed the
        mapInstanceToElement and removeInstanceMapping functions.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance): Removed now-unneeded call to
        mapInstanceToElement. This is now handled entirely by the SVGElement itself.
        (WebCore::SVGElementInstance::detach): Removed now-unneeded call to
        removeInstanceMapping. This is now handled entirely by the SVGElement itself.
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement): Rewrote to be
        based on the instances set; logic is different now because we remove each
        element from that set as we go.

        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData): Removed initialization of
        pointers since we can do that where they are defined instead.
        (WebCore::SVGElementRareData::instances): Renamed from elementInstances and
        changed the type.
        (WebCore::SVGElementRareData::destroyAnimatedSMILStyleProperties): Deleted.
        Unneeded since it was already called just before deleting the rare data.

        * svg/SVGTests.cpp:
        (WebCore::SVGTests::SVGTests): Took advantage of using namespace.
        (WebCore::createSVGTestPropertyInfo): Added. Helper for function below.
        (WebCore::createSVGTextAttributeToPropertyMap): Ditto.
        (WebCore::SVGTests::attributeToPropertyMap): Changed to use the create function
        above. No longer allocates objects on the heap.
        (WebCore::SVGTests::hasExtension): Reworked #if code to make the MathML part
        independent rather than repeating the return statement.
        (WebCore::SVGTests::synchronizeAttribute): Added. Helper for functions below.
        (WebCore::SVGTests::synchronizeRequiredFeatures): Call synchronizeAttribute.
        (WebCore::SVGTests::synchronizeRequiredExtensions): Ditto.
        (WebCore::SVGTests::synchronizeSystemLanguage): Ditto.

        * svg/SVGTests.h: Removed unneeded forward declarations. Mark the many functions
        that do not depend on object state as static so the call sites don't wastefully
        pass a this pointer. Removed the unneeded requiredFeaturesPropertyInfo,
        requiredExtensionsPropertyInfo, and systemLanguagePropertyInfo functions.
        Added synchronizeAttribute helper function.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::invalidateDependentShadowTrees): Updated to use the
        new instances set and a modern for loop.

        * svg/properties/SVGAnimatedPropertyMacros.h: Pass reference to addProperty and
        made a few other small refinements.

        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::addProperties): Fixed problems mentioned
        in FIXME where we did too much hashing and vector resizing.
        (WebCore::SVGAttributeToPropertyMap::addProperty): Streamlined to use a single
        hash table lookup.
        (WebCore::SVGAttributeToPropertyMap::properties): Renamed from
        animatedPropertiesForAttribute and changed to return a vector rather than using
        an out argument. Also had to change some since the vectors are in the hash table
        now rather than allocated on the heap.
        (WebCore::SVGAttributeToPropertyMap::types): Renamed from
        animatedPropertyTypeForAttribute and made changes just like the ones above.
        (WebCore::SVGAttributeToPropertyMap::synchronizeProperties): Use modern for
        loops, take a reference rather than a pointer, and use the function pointer
        directly instead of calling through a helper with various assertions.
        (WebCore::SVGAttributeToPropertyMap::synchronizeProperty): Ditto.

        * svg/properties/SVGAttributeToPropertyMap.h: Updated to match the changes
        above. Also changed the map to contain vectors instead of pointers to vectors.

2015-01-28  Darin Adler  <darin@apple.com>

        REGRESSION (r173698): Leaks of selector lists in CSS parsing
        https://bugs.webkit.org/show_bug.cgi?id=140993

        Reviewed by Anders Carlsson.

        * css/CSSGrammar.y.in: Fixed logic in rules that were not moving a parser-
        owned pointer into a unique_ptr in all code paths. The magic value
        invalidSelectorVector makes this really messy. We might want to find a
        different seolution in the future.

2015-01-28  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r179247.

        * history/PageCache.h: Need to declare NeverDestroyed specialization as
        a friend.

2015-01-28  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Implement support for new AtkRole types for MathML
        https://bugs.webkit.org/show_bug.cgi?id=140916

        Reviewed by Chris Fleizach.

        Expose mfrac as ATK_ROLE_MATH_FRACTION, and both mroot and msqrt as
        ATK_ROLE_MATH_ROOT. In the case of script elements, expose the container
        (msub, msup, msubsup, and mmultiscripts) using the generic text block role
        ATK_ROLE_SECTION. Then expose the actual script child elements using role
        ATK_ROLE_SUBSCRIPT/ATK_ROLE_SUPERSCRIPT. In the case of mmultiscripts,
        expose whether it is a prescript or postscript via AtkObject attribute.

        Test: accessibility/math-multiscript-attributes.html
        Also added additional test cases to accessibility/roles-exposed.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMathScriptObject): Added.
        (WebCore::AccessibilityObject::isMathMultiscriptObject): Added.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMathScriptObject): Added.
        (WebCore::AccessibilityRenderObject::isMathMultiscriptObject): Added.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes): Expose whether a multiscript object is a prescript or postscript.
        (atkRole): Map WebCore Accessibility objects to the new ATK roles.

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Rename pageCache() to PageCache::shared() and return a reference
        https://bugs.webkit.org/show_bug.cgi?id=140983

        Reviewed by Andreas Kling.

        Rename pageCache() to PageCache::shared() as this is a singleton class
        and have it return a reference instead of a pointer.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem):
        (WebCore::BackForwardList::setCapacity):
        (WebCore::BackForwardList::clearAllPageCaches):
        (WebCore::BackForwardList::close):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setURL):
        * history/PageCache.cpp:
        (WebCore::PageCache::shared):
        (WebCore::PageCache::get):
        (WebCore::pageCache): Deleted.
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):
        (WebCore::HistoryController::updateForReload):
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):
        (WebCore::Page::setPagination):
        (WebCore::Page::setVisitedLinkStore):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged):
        * page/Settings.cpp:
        (WebCore::Settings::setUsesPageCache):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2015-01-28  Darin Adler  <darin@apple.com>

        Fix MediaPlayerEngine leaks
        https://bugs.webkit.org/show_bug.cgi?id=140992

        Reviewed by Jer Noble.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::mutableInstalledMediaEnginesVector): Added.
        (WebCore::buildMediaEnginesVector): Added.
        (WebCore::installedMediaEngines): Changed this to be a vector of factories
        instead of a vector of heap-allocated factories. The old code would leak
        all the factories when this was called with the ResetEngines option.
        (WebCore::addMediaEngine): Updated for above change.
        (WebCore::bestMediaEngineForSupportParameters): Ditto.
        (WebCore::nextMediaEngine): Ditto.
        (WebCore::MediaPlayer::nextBestMediaEngine): Ditto.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Ditto.
        (WebCore::MediaPlayer::supportsType): Ditto.
        (WebCore::MediaPlayer::getSupportedTypes): Ditto.
        (WebCore::MediaPlayer::getSitesInMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        (WebCore::MediaPlayer::supportsKeySystem): Ditto.
        (WebCore::MediaPlayer::resetMediaEngines): Ditto.
        * platform/graphics/MediaPlayer.h: Ditto.

2015-01-28  Jeongmin Kim  <jm86.kim@lge.com>

        Rename descendentxxx to descendantxxxx in RenderLayerBacking
        https://bugs.webkit.org/show_bug.cgi?id=140979

        Reviewed by Martin Robinson.

        Rename descendentxxx to descendantxxxx in RenderLayerBacking
        for matching other variables and function names.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::paintsChildren):
        (WebCore::descendantLayerPaintsIntoAncestor):
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendantLayers):
        (WebCore::descendentLayerPaintsIntoAncestor): Deleted.
        (WebCore::RenderLayerBacking::isPaintDestinationForDescendentLayers): Deleted.

2015-01-27  Chris Dumez  <cdumez@apple.com>

        Use a Ref<CachedResourceLoader> in Document instead of a RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=140971

        Reviewed by Andreas Kling.

        Use a Ref<CachedResourceLoader> in Document instead of a RefPtr as it
        can never be null. Also have Document::cachedResourceLoader() return a
        reference instead of a pointer. This gets rid of a lot of unnecessary
        null-checks.

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        More build fixes for newer clang.

        Rubber-stamped by Anders Carlsson.

        * loader/icon/IconDatabase.h: Added missing override keywords.

2015-01-27  Roger Fong  <roger_fong@apple.com>

        WebGL2: Disable various extensions on WebGL2 context that have been promoted to core.
        https://bugs.webkit.org/show_bug.cgi?id=140907.
        <rdar://problem/19545857>

        Reviewed by Brent Fulgham.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getSupportedExtensions): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl: 
        Remove some extra extension enums that shouldn't have been declared on the context idl.

2015-01-27  Chris Dumez  <cdumez@apple.com>

        Remove unnecessary m_cachedPage null-checks in PageCache
        https://bugs.webkit.org/show_bug.cgi?id=140965

        Reviewed by Andreas Kling.

        Remove unnecessary m_cachedPage null-checks in PageCache. We initialize
        m_cachedPage when inserting the HistoryItem in the page cache and clear
        it when removing it from the page cache. Therefore, it is guaranteed
        that HistoryItems currently in the page cache have m_cachedPage
        initialized and there is no need to null-check it.

        * history/PageCache.cpp:
        (WebCore::PageCache::frameCount):
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        (WebCore::PageCache::markPagesForFullStyleRecalc):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged):

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        Some NSAccessibility methods we use are deprecated on 10.10
        https://bugs.webkit.org/show_bug.cgi?id=140966

        Reviewed by Anders Carlsson.

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::overrideAttachmentParent):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper role]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        Silence the warnings for now.

2015-01-27  Chris Dumez  <cdumez@apple.com>

        Rename isExpandedShorthand() to isShorthandCSSProperty() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=140954

        Reviewed by Andreas Kling.

        Rename isExpandedShorthand() to isShorthandCSSProperty() for clarity as
        all CSS shorthand properties are now expanded during parsing (even
        'font').

        * css/StylePropertyShorthand.cpp:
        (WebCore::isShorthandCSSProperty):
        (WebCore::isExpandedShorthand): Deleted.
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/makeprop.pl:

2015-01-27  Eric Carlson  <eric.carlson@apple.com>

        Simplify http/tests/media/video-play-stall.html
        https://bugs.webkit.org/show_bug.cgi?id=140630

        Reviewed by Brent Fulgham.

        Test: http/tests/media/video-play-waiting.html

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::play): Add more logging.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): MediaPlayerAVPlayerItemStatusPlaybackBufferEmpty
            always maps to HaveCurrentData.
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification): Don't log FunctionType,
            doing so it needlessly verbose.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Log KVO property 
            values and notification state.

2015-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179192.
        https://bugs.webkit.org/show_bug.cgi?id=140953

        Caused numerous layout test failures (Requested by mattbaker_
        on #webkit).

        Reverted changeset:

        "Use FastMalloc (bmalloc) instead of BlockAllocator for GC
        pages"
        https://bugs.webkit.org/show_bug.cgi?id=140900
        http://trac.webkit.org/changeset/179192

2015-01-27  Benjamin Poulain  <bpoulain@apple.com>

        Modernize some constructors of the CSS JIT
        https://bugs.webkit.org/show_bug.cgi?id=140903

        Reviewed by Darin Adler.

        Two constructors were still using the old style.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment): Deleted.
        (WebCore::SelectorCompiler::TagNamePattern::TagNamePattern): Deleted.

2015-01-27  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        Lack of include guards in WebVTTElement.h caused a build failure once we started including
        this header file from more than one implementation file.

        * html/track/WebVTTElement.h:

2015-01-26  Sylvain Galineau  <galineau@adobe.com>

        CSSKeyframesRule::findRule() and deleteRule() should delete the last matching rule, not the first
        https://bugs.webkit.org/show_bug.cgi?id=139732

        Reviewed by Dean Jackson and Darin Adler.

        No new tests because existing tests have been updated to verify this behavior.

        * css/CSSKeyframeRule.h:
        (WebCore::StyleKeyframe::getKeys): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::keyframeStylesForAnimation): use StyleKeyframe::keys().
        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::parseKeyString): Deleted. Moved to CSSParser.
        (WebCore::StyleKeyframe::keyText): Build keyframe selector from Vector<double> representation.
        * css/CSSKeyframeRule.h:
        (WebCore::StyleKeyframe::setKeyText): parse keyframe selector into Vector<double>.
        (WebCore::StyleKeyframe::keys): Added. Returns vector representation of selector keys.
        (WebCore::StyleKeyframe::getKeys): Deleted. Now keys().
        * css/CSSKeyframesRule.cpp:
        (WebCore::StyleRuleKeyframes::findKeyframeIndex): Return last matching rule.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseKeyframeSelector): Added. Moved from StyleKeyframe.
        * css/CSSParser.h:
        (WebCore::CSSParser::parseKeyframeSelector): Added. Moved from StyleKeyframe.

2015-01-26  Geoffrey Garen  <ggaren@apple.com>

        Use FastMalloc (bmalloc) instead of BlockAllocator for GC pages
        https://bugs.webkit.org/show_bug.cgi?id=140900

        Reviewed by Mark Hahnenberg.

        * platform/cocoa/MemoryPressureHandlerCocoa.mm:
        (WebCore::MemoryPressureHandler::install): Be sure to release other
        memory after GC and not before, since GC might contribute to free
        malloc pages now.

2015-01-27  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Make FlowContents an iterator class.
        https://bugs.webkit.org/show_bug.cgi?id=140909

        Reviewed by Antti Koivisto.

        This patch transfers content position handling from createLineRuns()/LineState to
        FlowContents. FlowContents becomes a real iterator class.
        It tightens content and position information so that we can start supporting
        no textual content such as <br>.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::commitAndCreateRun): Remove redundant committedLogicalRight.
        (WebCore::SimpleLineLayout::LineState::addUncommitted): Now that we don't have current
        positon in LineState, we need to be able to figure out where we start the uncommitted content.
        This is mainly relevant after collapsed whitespace, when we start a new uncommitted segment.
        It was previously achieved through LineState::jumpTo().
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::firstFragment): Return the first fragment for this line.
        (WebCore::SimpleLineLayout::createLineRuns): Renaming and removing position handling.
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns): Renaming.
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::LineState::jumpTo): Deleted.
        (WebCore::SimpleLineLayout::initializeNewLine): Deleted. : Move overflow fragment functionality
        to firstFragment().
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::nextTextFragment):
        * rendering/SimpleLineLayoutFlowContents.h:

2015-01-27  Chris Dumez  <cdumez@apple.com>

        HTMLElement.dir should only return known values
        https://bugs.webkit.org/show_bug.cgi?id=140925

        Reviewed by Darin Adler.

        HTMLElement.dir should only return known values according to the HTML
        specification:
        https://html.spec.whatwg.org/multipage/dom.html#dom-document-dir

        Chrome and Firefox 28 match the specification. IE11's behavior is
        slightly different:
        - When setting an unknown 'dir' value, an exception will be thrown.
        - Setting a known 'dir' value in a non-canonical case (e.g. "RTL"),
          the value will be directly converted to its canonical form (e.g.
          "rtl") before updating the DOM tree. (close to the spec but changing
          the case upon setting).

        This patch is based on the following Blink revision by me:
        https://src.chromium.org/viewvc/blink?view=rev&revision=171861

        Test: fast/dom/document-dir-property.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir):
        (WebCore::HTMLDocument::setDir):
        * html/HTMLDocument.h:
        * html/HTMLElement.cpp:
        (WebCore::toValidDirValue):
        (WebCore::HTMLElement::dir):
        (WebCore::HTMLElement::setDir):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Introduce Document::body() for call sites interested in the <body> element
        https://bugs.webkit.org/show_bug.cgi?id=140920

        Reviewed by Darin Adler.

        Introduce Document::body() method for call sites interested only in the
        document's <body> element (not the <frameset>). Also clean up the call
        sites of Document::bodyOrFrameset() to cache the return value when
        suitable as this method does a tree traversal.

        This patch does not change behavior, it merely ports calls sites that
        were calling Document::bodyOrFrameset() then checking if the tag was
        <body>, to call Document::body() instead. Doing so is more efficient
        and clearer.

2015-01-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] ASSERTION FAILED !m_ptr under AccessibilityController::winAddNotificationListener
        https://bugs.webkit.org/show_bug.cgi?id=87426
        <rdar://problem/11527899>

        Reviewed by Darin Adler.

        Revise COMPtr to work better with our HashMap implementation:
        (1) Add a specialization for IsSmartPtr.
        (2) Remove PtrHash specialization.
        (3) Refresh HashTrails specialization for COMPtr to match what we
        do for RefPtr.

        * platform/win/COMPtr.h:

2015-01-26  Sylvain Galineau  <galineau@adobe.com>

        The computed value of line-height:normal is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=133744

        Reviewed by Dean Jackson.

        Use font's line spacing as computed line-height value when specified value is 'normal'.
        This behavior is compatible with all other engines.

        No new tests; all existing tests are updated to reflect the new computed value.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle): If line-height wasn't set, use the font's line spacing (same as Blink).

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Document.dir should reflect the 'dir' attribute of the root html element
        https://bugs.webkit.org/show_bug.cgi?id=140922

        Reviewed by Darin Adler.

        Document.dir should reflect the 'dir' content attribute of the root
        <html> element as per the specification:
        https://html.spec.whatwg.org/multipage/dom.html#dom-document-dir

        Previously, WebKit was reflecting the 'dir' content attribute of the
        body element. This patch aligns WebKit with the specification and the
        behavior of other browsers (tested Firefox 28, IE11 and Chrome).

        This patch is based on the following Blink revision by me:
        https://src.chromium.org/viewvc/blink?revision=171734&view=revision

        Test: fast/dom/document-dir-property.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir):
        (WebCore::HTMLDocument::setDir):
        * html/HTMLDocument.h:

2015-01-26  Darin Adler  <darin@apple.com>

        REGRESSION (r179101): SVGUseElement::expandUseElementsInShadowTree has an object lifetime mistake
        https://bugs.webkit.org/show_bug.cgi?id=140921

        Reviewed by Alexey Proskuryakov.

        Bug found by running regression tests with Address Sanitizer.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Use a Ref to protect
        the original use element after it's been replaced in the tree; we use it for
        one more thing after that.

2015-01-26  Roger Fong  <roger_fong@apple.com>

        WebGL 2.0: Actually allow for experimental-webgl2 context creation.
        https://bugs.webkit.org/show_bug.cgi?id=140906
        <rdar://problem/19606875>.

        Reviewed by Brent Fulgham.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::is3dType): Include "experimental-webgl2" in the list of acceptable 3d context types.

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Rename Document::body() to Document::bodyOrFrameset() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=140902

        Reviewed by Andreas Kling.

        Rename Document::body() to Document::bodyOrFrameset() for clarity. This
        method does not necessarily return an HTMLBodyElement, it can also
        return a frameset as per the specification:
        http://www.w3.org/TR/html5/dom.html#dom-tree-accessors

        This method is often misused internally (the caller is only interested
        in the <body> element). I will fix these instances in a follow-up patch,
        this patch is only renaming mechanically.

2015-01-26  Byungseon Shin  <sun.shin@lge.com>

        Fix Border-radius clipping issue on a composited descendants
        https://bugs.webkit.org/show_bug.cgi?id=138551 

        Reviewed by Simon Fraser.

        Fix assertion in RenderLayerBacking::paintIntoLayer
        by not checking out of sync with the GraphicsLayer heirarchy
        in GraphicsLayerPaintChildClippingMask phase.

        Test: compositing/clipping/border-radius-overflow-hidden-stacking-context.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Simplify RenderElement's shouldRepaintForImageAnimation()
        https://bugs.webkit.org/show_bug.cgi?id=140890

        Reviewed by Darin Adler.

        Simplify RenderElement's shouldRepaintForImageAnimation() by
        not calling rendererForRootBackground(). The previous code was
        doing a null-check on Document::documentElement() but failing
        to do a null-check on the renderer just after, which lead me
        to refactor this code.

        Instead of calling document().documentElement.renderer(), we
        now call renderer.parent(). This is equivalent because we already
        know that renderer.isBody() returns true. The parent of the <body>
        has to be the <html> element, which has to be the documentElement.
        There is also no need to do a null-check on renderer.parent(). We
        already know that the <body> has a renderer (because |renderer| is
        its renderer), thus its parent <html> element has to have a renderer
        as well.

        Finally, simply call !rootElement.hasBackground() instead of
        rootElement.rendererForRootBackground() == &bodyRenderer to determine
        if the background painted by the root. This is equivalent but more
        efficient because:
        - We already know that the root renderer's is an <html> element. We
          can thus avoid the check in rendererForRootBackground().
        - We already have the <body>'s renderer so we don't need to do the
          DOM tree traversal in rendererForRootBackground() to get it.

        No new tests, already covered by:
        fast/images/animated-gif-body-delegated-background-image.html
        fast/images/animated-gif-html-background-image.html

        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):

2015-01-26  Chris Dumez  <cdumez@apple.com>

        First argument to DOM traversal functions should be a reference
        https://bugs.webkit.org/show_bug.cgi?id=140895

        Reviewed by Antti Koivisto.

        First argument to DOM traversal functions should be a reference instead
        of a pointer as it is dereferenced without null-check.

2015-01-26  Roger Fong  <roger_fong@apple.com>

        [WebGL2] Update IDL for WebGL2.
        https://bugs.webkit.org/show_bug.cgi?id=126406
        <rdar://problem/15002268>.

        Reviewed by Brent Fulgham.

        Update WebGL2RenderingContext idl to match spec. Create method stubs as necessary.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::JSWebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::JSWebGL2RenderingContext::getInternalformatParameter):
        (WebCore::JSWebGL2RenderingContext::getQueryParameter):
        (WebCore::JSWebGL2RenderingContext::getSamplerParameter):
        (WebCore::JSWebGL2RenderingContext::getSyncParameter):
        (WebCore::JSWebGL2RenderingContext::getIndexedParameter):
        (WebCore::JSWebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::JSWebGL2RenderingContext::getActiveUniformBlockName):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        (WebCore::WebGL2RenderingContext::getBufferSubData):
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGL2RenderingContext::blitFramebuffer):
        (WebCore::WebGL2RenderingContext::framebufferTextureLayer):
        (WebCore::WebGL2RenderingContext::getInternalformatParameter):
        (WebCore::WebGL2RenderingContext::invalidateFramebuffer):
        (WebCore::WebGL2RenderingContext::invalidateSubFramebuffer):
        (WebCore::WebGL2RenderingContext::readBuffer):
        (WebCore::WebGL2RenderingContext::renderbufferStorageMultisample):
        (WebCore::WebGL2RenderingContext::texStorage2D):
        (WebCore::WebGL2RenderingContext::texStorage3D):
        (WebCore::WebGL2RenderingContext::texImage3D):
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        (WebCore::WebGL2RenderingContext::copyTexSubImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexSubImage3D):
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        (WebCore::WebGL2RenderingContext::uniform1ui):
        (WebCore::WebGL2RenderingContext::uniform2ui):
        (WebCore::WebGL2RenderingContext::uniform3ui):
        (WebCore::WebGL2RenderingContext::uniform4ui):
        (WebCore::WebGL2RenderingContext::uniform1uiv):
        (WebCore::WebGL2RenderingContext::uniform2uiv):
        (WebCore::WebGL2RenderingContext::uniform3uiv):
        (WebCore::WebGL2RenderingContext::uniform4uiv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x3fv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4i):
        (WebCore::WebGL2RenderingContext::vertexAttribI4iv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4ui):
        (WebCore::WebGL2RenderingContext::vertexAttribI4uiv):
        (WebCore::WebGL2RenderingContext::vertexAttribIPointer):
        (WebCore::WebGL2RenderingContext::vertexAttribDivisor):
        (WebCore::WebGL2RenderingContext::drawArraysInstanced):
        (WebCore::WebGL2RenderingContext::drawElementsInstanced):
        (WebCore::WebGL2RenderingContext::drawRangeElements):
        (WebCore::WebGL2RenderingContext::drawBuffers):
        (WebCore::WebGL2RenderingContext::clearBufferiv):
        (WebCore::WebGL2RenderingContext::clearBufferuiv):
        (WebCore::WebGL2RenderingContext::clearBufferfv):
        (WebCore::WebGL2RenderingContext::clearBufferfi):
        (WebCore::WebGL2RenderingContext::createQuery):
        (WebCore::WebGL2RenderingContext::deleteQuery):
        (WebCore::WebGL2RenderingContext::isQuery):
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::endQuery):
        (WebCore::WebGL2RenderingContext::getQuery):
        (WebCore::WebGL2RenderingContext::getQueryParameter):
        (WebCore::WebGL2RenderingContext::createSampler):
        (WebCore::WebGL2RenderingContext::deleteSampler):
        (WebCore::WebGL2RenderingContext::isSampler):
        (WebCore::WebGL2RenderingContext::bindSampler):
        (WebCore::WebGL2RenderingContext::samplerParameteri):
        (WebCore::WebGL2RenderingContext::samplerParameterf):
        (WebCore::WebGL2RenderingContext::getSamplerParameter):
        (WebCore::WebGL2RenderingContext::fenceSync):
        (WebCore::WebGL2RenderingContext::isSync):
        (WebCore::WebGL2RenderingContext::deleteSync):
        (WebCore::WebGL2RenderingContext::clientWaitSync):
        (WebCore::WebGL2RenderingContext::waitSync):
        (WebCore::WebGL2RenderingContext::getSyncParameter):
        (WebCore::WebGL2RenderingContext::createTransformFeedback):
        (WebCore::WebGL2RenderingContext::deleteTransformFeedback):
        (WebCore::WebGL2RenderingContext::isTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindTransformFeedback):
        (WebCore::WebGL2RenderingContext::beginTransformFeedback):
        (WebCore::WebGL2RenderingContext::endTransformFeedback):
        (WebCore::WebGL2RenderingContext::transformFeedbackVaryings):
        (WebCore::WebGL2RenderingContext::getTransformFeedbackVarying):
        (WebCore::WebGL2RenderingContext::pauseTransformFeedback):
        (WebCore::WebGL2RenderingContext::resumeTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindBufferBase):
        (WebCore::WebGL2RenderingContext::bindBufferRange):
        (WebCore::WebGL2RenderingContext::getIndexedParameter):
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        (WebCore::WebGL2RenderingContext::getActiveUniforms):
        (WebCore::WebGL2RenderingContext::getUniformBlockIndex):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        (WebCore::WebGL2RenderingContext::uniformBlockBinding):
        (WebCore::WebGL2RenderingContext::createVertexArray):
        (WebCore::WebGL2RenderingContext::deleteVertexArray):
        (WebCore::WebGL2RenderingContext::isVertexArray):
        (WebCore::WebGL2RenderingContext::bindVertexArray):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.idl:
        * platform/graphics/GraphicsTypes3D.h:

2015-01-26  Andreas Kling  <akling@apple.com>

        Don't let the CSSValuePool's font family cache grow unbounded.
        <https://webkit.org/b/140894>

        Reviewed by Chris Dumez.

        Darin pointed out to Chris who pointed out to me that the font family cache
        in CSSValuePool can grow unbounded until we get a system memory pressure
        notification. Put a limit on it like we did with the font face cache.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):

2015-01-26  Andreas Kling  <akling@apple.com>

        Plug leak in jsValueWithDictionaryInContext().
        <https://webkit.org/b/140889>

        Reviewed by Alexey Proskuryakov.

        Add a missing JSStringRelease to plug leak that was showing up on leaks bot.

        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithDictionaryInContext):

2015-01-26  Benjamin Poulain  <benjamin@webkit.org>

        Fix CSS Selector's tag name matching when mixing HTML and XML
        https://bugs.webkit.org/show_bug.cgi?id=140878

        Reviewed by Darin Adler.

        Previsouly, WebKit was unable to match any XML element that had
        any uppercase character if the stylesheet was in a HTML document.
        This problem was most often reported due to the inability to style
        SVG-in-HTML.

        The reason was that the tag local name was incorrectly transformed
        to lowercase at parsing time. Instead, we are supposed to only
        do case-insensitive match for HTML elements in a HTML document.

        This fix is very similar with how we handle attributes:
        -Keep both the original and the lowercase versions of the name.
        -When matching, chose which version to use depending on the element being matched.

        There is one major difference in the way the names are stored.
        Unlike attribute selectors, tag name selectors are common, and the uppercase
        version is not that uncommon. I wanted to preserve the dense representation
        so I specialized CSSSelector specifically for tag names.

        To store the data, if the name is already lowercase, just use the m_data pointer
        as usual.
        If the name is not lowercase, allocate a new small structure in the union to store
        both names.

        Tests: fast/css/tagname-and-namespace-case-sensitivity-xml-in-html.html
               fast/css/tagname-and-namespace-case-sensitivity-xml-in-xhtml-expected.xhtml
               fast/css/tagname-and-namespace-case-sensitivity-xml-in-xhtml.xhtml
               fast/css/tagname-case-sensitivity-svg-in-html.html
               fast/css/tagname-case-sensitivity-svg-in-xhtml-expected.xhtml
               fast/css/tagname-case-sensitivity-svg-in-xhtml.xhtml
               fast/css/tagname-case-sensitivity-xml-in-html.html
               fast/css/tagname-case-sensitivity-xml-in-xhtml-expected.xhtml
               fast/css/tagname-case-sensitivity-xml-in-xhtml.xhtml
               fast/selectors/element-closest-tagname-case-sensitivity-svg-in-html.html
               fast/selectors/element-closest-tagname-case-sensitivity-svg-in-xhtml.xhtml
               fast/selectors/element-matches-tagname-case-sensitivity-svg-in-html.html
               fast/selectors/element-matches-tagname-case-sensitivity-svg-in-xhtml.xhtml
               fast/selectors/querySelector-tagname-case-sensitivity-svg-in-html.html
               fast/selectors/querySelector-tagname-case-sensitivity-svg-in-xhtml.xhtml
               fast/selectors/querySelector-tagname-case-sensitivity-xml-in-html.html
               fast/selectors/querySelector-tagname-case-sensitivity-xml-in-xhtml.xhtml
               fast/selectors/tagname-adjacent-backtracking-case-sensitivity-html.html
               fast/selectors/tagname-descendant-backtracking-case-sensitivity-html.html

        * css/CSSGrammar.y.in:
        The parser is unaware of anything case related. CSSSelector takes care of that.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::createRareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::NameWithCase::NameWithCase):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagQName):
        (WebCore::CSSSelector::tagLowercaseLocalName):
        The new representation stores both the original form and the lower case
        form.

        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::shrinkToFit):
        * css/RuleSet.h:
        (WebCore::RuleSet::tagRules):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        The tag name partition is now split in two: lowercase and original case.
        If the matched element is HTML, the lowercase partition is used. 

        * css/SelectorFilter.cpp:
        (WebCore::collectElementIdentifierHashes):
        (WebCore::collectDescendantSelectorIdentifierHashes):
        This is the most annoying part of the patch performance wise:
        the bloom filter knows the case of the real elements but it cannot know
        how selectors will match them.

        To make it work, all names are now converted to lowercase.
        That implies that we can filter less on XML and we may have to pay for
        converting the tag name to lowercase.

        I expect the performance hit to be small because:
        -Having two XML elements with the same name but different case is uncommon.
        -Most elements use lowercase names.

        Still sad...that's the price to pay for correctness.

        * css/SelectorChecker.cpp:
        (WebCore::tagMatches):
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::tagMatches): Deleted.
        Update the legacy matcher, nothing special.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::TagNamePattern::TagNamePattern):
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        (WebCore::SelectorCompiler::equalTagNames):
        (WebCore::SelectorCompiler::equalTagNamePatterns):
        (WebCore::SelectorCompiler::computeBacktrackingStartOffsetInChain):
        (WebCore::SelectorCompiler::computeBacktrackingHeightFromDescendant):
        (WebCore::SelectorCompiler::computeBacktrackingWidthFromIndirectAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        Tag names are used to optimize backtracking; this is quite common for descendant
        (e.g. div > ul > li).
        We have to differenciate one new case there: if two tag names are equal
        when compared case-insensitively but strictly different, they may still
        be equal if they don't match the same kind of elements or both matches
        and HTML element.

        * dom/SelectorQuery.cpp:
        (WebCore::localNameMatches):
        (WebCore::elementsForLocalName):
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        Update the inline versions of SelectorQuery.

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
        https://bugs.webkit.org/show_bug.cgi?id=140891

        Reviewed by Anders Carlsson.

        Use std::forward() instead of WTF::move() in CSSPrimitiveValue::create(T&& value)
        to make sure the argument is not unexpectedly moved when it shouldn't (like I
        experienced yesterday in Bug 140577):
        <http://trac.webkit.org/changeset/179105>

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue):

2015-01-26  Beth Dakin  <bdakin@apple.com>

        Blacklist iBooks for WebKit's default immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=140854
        -and corresponding-
        rdar://problem/19489518

        Reviewed by Tim Horton.

        Add a runtime check for iBooks.
        * WebCore.exp.in:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::applicationIsIBooks):
        * platform/RuntimeApplicationChecks.h:

2015-01-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [SVG -> OTF Converter] Flip the switch off on iOS
        https://bugs.webkit.org/show_bug.cgi?id=140860

        Reviewed by Darin Adler.

        No new tests because this simply reverts broken code.

        The fonts it makes are grotesque. (See what I did there? Typographic
        humor is the best humor.)

        * Configurations/FeatureDefines.xcconfig:

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Demote 'line-height' to a low priority property.
        https://bugs.webkit.org/show_bug.cgi?id=140817

        Reviewed by Andreas Kling.

        Our special handling of the 'line-height' property is no longer
        required, since the 'font' shorthand is now expanded in the parser
        in all cases (also for system fonts).

        This patch is based on the following Blink revision:
        https://src.chromium.org/viewvc/blink?revision=184629&view=revision

        No new tests, already covered by:
        fast/css/font-shorthand-line-height.html
        fast/css/line-height-font-order.html

        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::initializeFontStyle):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::State::setLineHeightValue): Deleted.
        (WebCore::StyleResolver::State::lineHeightValue): Deleted.

2015-01-26  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] gtkdoc does not appear in DevHelp
        https://bugs.webkit.org/show_bug.cgi?id=139369

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Include the API version in the gtkdoc filenames.

2015-01-25  Chris Dumez  <cdumez@apple.com>

        Remove 'font' shorthand property special casing
        https://bugs.webkit.org/show_bug.cgi?id=140577

        Reviewed by Darin Adler.

        Mark CSSPrimitiveValue::m_value.fontFamily as const as it is not
        supposed to change. This also makes sure that m_value.fontFamily
        gets copied instead of moved when constructing a clone in
        CSSPrimitiveValue::cloneForCSSOM(). This was causing several tests
        to fail on the bots.

        * css/CSSPrimitiveValue.h:

2015-01-25  Alexey Proskuryakov  <ap@apple.com>

        Setting HTMLMarqueeElement.trueSpeed doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=140863

        Reviewed by Darin Adler.

        Test: fast/html/marquee-set-truespeed.html

        * html/HTMLMarqueeElement.cpp: (WebCore::HTMLMarqueeElement::minimumDelay):
        Check the boolean attribute properly - an empty value is true.

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

        Streamline SVGUseElement shadow tree handling and make it use SVGElementInstance less
        https://bugs.webkit.org/show_bug.cgi?id=140875

        Reviewed by Anders Carlsson.

        Refactoring of code that is pretty well covered by existing tests, so
        not adding new tests.

        Inspired by work Rob Buis did in Blink:

            http://src.chromium.org/viewvc/blink?view=revision&revision=173273

        Althgouh that is less than half of what ended up in this patch.

        * dom/ContainerNode.h: Fixed NoEventDispatchAssertion so it can be
        copied without causing an underflow of NoEventDispatchAssertion::s_count.
        Made the copy constructor call the default constructor. Also changed it
        to be based on ASSERT_DISABLED rather than NDEBUG and tweaked it a bit.

        * dom/ElementIteratorAssertions.h: Removed an unnecessary include and
        an unnecessary default constructor. Changed to use WTF::Optional instead
        of WTF::OwnPtr to handle NoEventDispatchAssertion, which makes this class
        copyable and assignable, which in turn makes the iterators based on this
        copyable and assignable, which is what I needed in SVGUseElement code.
        Also simplified code in a couple places.

        * dom/TypedElementDescendantIterator.h:
        (WebCore::TypedElementDescendantIteratorAdapter<ElementType>::from):
        Fixed an error where the arguments to Traversal::next were passed backwards.
        This led to incomplete iteration in SVGUseElement code, and an immediate
        assertion failure. Probably could use some unit test coverage, too.
        (WebCore::TypedElementDescendantConstIteratorAdapter<ElementType>::from):
        Ditto.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::animatedInstanceRoot): Deleted.
        (WebCore::SVGUseElement::transferSizeAttributesToShadowTreeTargetClone):
        Removed the originalElement argument, since we can use the correspondingElement
        to get back to it. Removed the useElement argument and changed this into a
        member function.
        (WebCore::SVGUseElement::svgAttributeChanged): Updated for above changes.
        (WebCore::subtreeContainsDisallowedElement): Deleted this function, because
        it was only used to optimize by not calling removeDisallowedElementsFromSubtree,
        but that function is already similarly efficient when called to do nothing, so
        the preflight was not useful.
        (WebCore::SVGUseElement::clearResourceReferences): Call userAgentShadowRoot
        instead of shadowRoot for clarity.
        (WebCore::SVGUseElement::buildPendingResource): Pass a reference instead of
        a pointer to buildShadowAndInstanceTree, since it's guaranteed to not be null.
        (WebCore::SVGUseElement::shadowTreeTargetClone): Added. Returns the SVG element
        inside the shadow tree that corresponds to the use element's target.
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Changed argument type
        to a reference instead of a pointer. Removed comments explaining why we have
        an instance tree, since soon we will not have one. Removed many comments that
        simply state the names of the functions they are commenting on and perhaps a tiny
        bit more. Changed to not use m_targetElementInstance as much, dealing with the
        shadow tree directly instead of through the instance tree.
        (WebCore::SVGUseElement::toClipPath): Use shadowTreeTargetClone instead of
        getting at the element through m_targetElementInstance.
        (WebCore::SVGUseElement::rendererClipChild): Ditto.
        (WebCore::removeDisallowedElementsFromSubtree): Removed the inline keyword,
        since there's no good reason to inline thif function's body. Improved local
        variable names and used a modern for loop. Also moved the comment about why
        this function is used here inside the function instead of repeating it at
        each call site.
        (WebCore::SVGUseElement::buildShadowTree): Changed to take a reference
        instead of a pointer. Moved the check to see if the target is disallowed
        out of this function and into buildShadowAndInstanceTree, which needs to
        handle that failure explicitly. Tightened up the code a bit, using Ref instead
        of RefPtr, putting the comment about removeDisallowedElementsFromSubtree into
        that function itself, and removing the unneeded subtreeContainsDisallowedElement
        check entirely.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Removed the argument,
        getting the shadow tree from the shadowTree function instead. Walk the tree
        iteratively instead of recursively, using the descendantsOfType function.
        Rearranged and streamlined the logic.
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree): Ditto.
        (WebCore::SVGUseElement::transferEventListenersToShadowTree): Ditto.
        (WebCore::SVGUseElement::transferAttributesToShadowTreeReplacement): Renamed
        this to avoid the term "replaced element", which is not a reasonable way to
        refer to the <g> element in the shadow tree that replaces the <use> element.
        Changed the argument type to SVGGElement to make it harder to misuse this
        function by accident, and made the use element be "this" instead of passing
        it as an argument.
        (WebCore::SVGUseElement::selfHasRelativeLengths): Call hasRelativeLengths
        on the target inside the shadow tree rather than the original target, which
        makes more sense anyway, and is straightforward now that we have the
        shadowTreeTargetClone function. Removes use of m_targetElementInstance here.

        * svg/SVGUseElement.h: Updated for above changes.

        * svg/SVGUseElement.idl: Removed animatedInstanceRoot and tweaked formatting.

2015-01-25  Chris Dumez  <cdumez@apple.com>

        Remove 'font' shorthand property special casing
        https://bugs.webkit.org/show_bug.cgi?id=140577

        Reviewed by Darin Adler.

        Expand system font values during 'font' property parsing. The 'font'
        CSS property was the only shorthand that wasn't always expanded in
        the CSS parser, so it needed a lot of special handling that we can
        now get rid of.

        This patch is inspired from the following Blink revision:
        https://src.chromium.org/viewvc/blink?view=rev&revision=184449

        Tests:
        - fast/css/css2-system-fonts.html (existing)
        - fast/css/CSSPrimitiveValue-font-family-primitiveType.html (new)
        - fast/css/font-systemFontID-parsing.html (new)
        - fast/css/font-shorthand-line-height.html (rebased)

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):
        Handle CSS_FONT_FAMILY similarly to CSS_STRING in the switch.

        * css/CSSFontFamily.h: Added.
        Introduce new CSSFontFamily class to store font families inside
        CSSPrimitive, instead of using a simple String as previously. We need
        an additional 'fromSystemFontID' flag in addition to the font family
        name now that system font ID are expanded during parsing. This
        information is needed later on by the StyleBuilder (see comment below).

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        Update code dealing with font family CSSPrimitiveValues now that they
        hold a CSSFontFamily internally instead of a String.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseSystemFont):
        Expand system font values for the 'font' property by asking the
        RenderTheme for the system font and using it to set the 'font'
        longhand properties.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        Handle CSS_FONT_FAMILY value in the switch.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::primitiveType):
        Make sure we still expose font family CSSPrimitiveValues to the Web as
        CSS_STRING, even though we are using a slightly different representation
        internally. This is so that we don't change web-exposed behavior and I
        added a new layout test to cover this.

        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        Handle CSS_FONT_FAMILY type in switches.

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::isFontFamily):
        Add method to test if a CSSPrimitiveValue holds a CSSFontFamily
        internally.

        (WebCore::CSSPrimitiveValue::fontFamily):
        Add a getter to retrieve the internal CSSFontFamily object if the
        primitive type is CSS_FONT_FAMILY.

        * css/CSSPropertyNames.in:
        Treat 'font' as a regular shorthand property. Specify its longhand
        properties so that makeprop.pl can generate the shorthand code for
        us. Also demote 'font' to being a low-priority property as it is
        now always expanded during parsing.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createFontFamilyValue):
        * css/CSSValuePool.h:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFontFamily):
        - Update the 'font-family' value setter in the StyleBuilder to reflect
        the changes in the CSS parser. The CSSPrimitiveValues in the list now
        have CSS_FONT_FAMILY type instead of CSS_STRING.
        - We also set the 'isGenericFamily' flag if the font-family was expanded
          from a system font ID (e.g. caption). The 'isGenericFamily' flag is
          used later on to property set the 'isSpecifiedFont' flag on the
          FontDescription object. If we don't do this, system font values will
          be treated as specified fonts, which means that we will no longer use
          the 'use backslash as Yen sign' hack for those. This is covered by the
          following layout tests:
          - fast/text/backslash-to-yen-sign-euc.html
          - editing/selection/find-yensign-and-backslash.html

        (WebCore::StyleBuilderCustom::applyInitialFont): Deleted.
        (WebCore::StyleBuilderCustom::applyInheritFont): Deleted.
        (WebCore::StyleBuilderCustom::applyValueFont): Deleted.
        Remove StyleBuilder code dealing with the 'font' property. Now that
        the 'font' property is always expanded during parsing, this code can
        never be reached.

        * css/StylePropertyShorthand.cpp:
        (WebCore::isExpandedShorthand):
        Stop returning false for 'font' as it is now expanded during parsing
        as well. We should probably consider renaming this method to something
        else now that all shorthands are expanded, maybe isCSSShorthand() or
        isShorthandProperty().

        (WebCore::fontShorthand): Deleted.
        * css/StylePropertyShorthand.h:
        (WebCore::matchingCustomShorthandsForLonghand): Deleted.
        Remove custom shorthand code for the 'font' property as it is now
        generated by makeprop.pl, like other shorthands.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyFont): Deleted.
        This is unused now that the StyleBuilder code for 'font' has been
        removed.

        * css/makeprop.pl:
        Remove custom shorthand code for 'font' as it no longer requires any
        special handling.

2015-01-25  Timothy Horton  <timothy_horton@apple.com>

        Long spins under Frame::rangeForPoint when doing Lookup on feedly.com
        https://bugs.webkit.org/show_bug.cgi?id=140862
        <rdar://problem/19566089>

        Reviewed by Dan Bernstein.

        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint):
        If there isn't a selectable text node at the given point, rangeForPoint
        will eventually return null. However, we can make it fail much faster
        by checking the initial position's text-ness and selectability.

2015-01-24  Darin Adler  <darin@apple.com>

        Move height/width implementation for use element from RenderSVGViewportContainer to SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=140826

        Reviewed by Anders Carlsson.

        Tests: svg/animations/use-animate-width-and-height.html
               svg/custom/use-attribute-invalidations.html
               svg/custom/use-dynamic-attribute-setting.html

        This is an adaptation of work Rob Buis did in Blink:

            http://src.chromium.org/viewvc/blink?view=revision&revision=173258

        The goal here is to reduce use of SVGElementInstance since we are going to
        remove it. The tests Rob added to Blink (which I believe I improved a bit here)
        meant we had to fix quite a few bugs in the implementation of the width/height
        logic rather than just moving it. Even so, this could use even more test coverage
        since there is separate logic for <symbol> and <svg>, three different code paths
        (animation/attribute setting, initial creation, and one other), and also
        distinct issues for attributes not set at all, attributes set to values that
        can't be parsed, and attributes set with different units.

        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport): Removed the old logic.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement): Use ASCIILiteral to more efficiently
        create strings from ASCII literals here.
        (WebCore::SVGSVGElement::parseAttribute): Default to 100%, not 0, when the
        width or height property are either not set or not successfully parsed. Without
        this change, one of the SVG tests starts failing.

        * svg/SVGUseElement.cpp:
        (WebCore::updateWidthAndHeight): Added. The tricky part here is that we have
        to copy width and height attributes only if they were successfully parsed, and
        also we need to copy the current animating values, not the original attribute
        strings. Kind of messy, but I wanted to adapt Rob's solution for the time being,
        rather than inventing something new.
        (WebCore::SVGUseElement::svgAttributeChanged): Call updateWidthAndHeight.
        This is used both when actual attribute changes occur and also when animation
        changes the current value.
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Call updateWidthAndHeight.
        This is used when the shadow elements are first created.
        (WebCore::SVGUseElement::expandUseElementsInShadowTree): Call updateWidthAndHeight.
        This was in Rob's patch, but I am not sure we have sufficient test coverage.

2015-01-24  Chris Dumez  <cdumez@apple.com>

        Provide implementation for WTF::DefaultHash<bool>
        https://bugs.webkit.org/show_bug.cgi?id=140848

        Reviewed by Anders Carlsson.

        Use HashMap<std::pair<UChar32, bool>> type in Font.cpp for
        CharacterFallbackMap instead of HashMap<std::pair<UChar32, unsigned>>.
        It builds now that WTF::DefaultHash<bool> is defined in WTF.

        * platform/graphics/Font.cpp:
        (WebCore::Font::removeFromSystemFallbackCache):

2015-01-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Cursor assignment operator is skipping scale factor
        https://bugs.webkit.org/show_bug.cgi?id=140852

        Reviewed by Chris Dumez.

        Found by fast/events/mouse-cursor-image-set.html

        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::operator=): Make sure to also assign the
        scale factor.

2015-01-23  David Kilzer  <ddkilzer@apple.com>

        [iOS] Attempt to fix the build after AVValueTiming.h moved

        * platform/spi/ios/AVKitSPI.h: The AVValueTiming.h header moved
        to an unexpected location, so work around it by using local SPI
        declarations.

2015-01-23  Alexey Proskuryakov  <ap@apple.com>

        Try to fix the build after r179056.

        * platform/Cursor.h: (WebCore::Cursor::Cursor): Initialize dadat members in correct order.

2015-01-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Cursor copy constructor does not initialize scale factor
        https://bugs.webkit.org/show_bug.cgi?id=140849

        Reviewed by Antti Koivisto.

        Found by fast/events/mouse-cursor-image-set.html

        Make sure the scale factor is captured during copy construction. Also make sure
        it is properly initialized in the default constructor, since it it used in the
        Windows port for some default cursors.

        * platform/CursorWin.h:
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor): Make sure copy constructor captures
        the scale factor.

2015-01-23  Benjamin Poulain  <bpoulain@apple.com>

        Add pointer/hover media queries
        https://bugs.webkit.org/show_bug.cgi?id=134822

        Reviewed by Antti Koivisto.

        Media Queries Level 4 introduces two types of Interaction Media Features:
        "pointer" and "hover". Those media features are useful for adapting the design
        to the type of input:
            http://dev.w3.org/csswg/mediaqueries-4/#mf-interaction

        This implementation is trivial: just #ifdef the return value depending on
        the support for touch events.
        In the future we should move that to a client interface but let's start easy
        for now.

        Tests: fast/media/mq-any-hover-cssom.html
               fast/media/mq-any-hover-invalid.html
               fast/media/mq-any-hover-matchMedia.html
               fast/media/mq-any-hover-styling.html
               fast/media/mq-any-pointer-cssom.html
               fast/media/mq-any-pointer-invalid.html
               fast/media/mq-any-pointer-matchMedia.html
               fast/media/mq-any-pointer-styling.html
               fast/media/mq-hover-cssom.html
               fast/media/mq-hover-invalid.html
               fast/media/mq-hover-matchMedia.html
               fast/media/mq-hover-styling.html
               fast/media/mq-pointer-cssom.html
               fast/media/mq-pointer-invalid.html
               fast/media/mq-pointer-matchMedia.html
               fast/media/mq-pointer-styling.html

        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::hoverMediaFeatureEval):
        (WebCore::any_hoverMediaFeatureEval):
        (WebCore::pointerMediaFeatureEval):
        (WebCore::any_pointerMediaFeatureEval):
        (WebCore::leastCapablePrimaryPointerDeviceType): Deleted.
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithCSSValueID):
        (WebCore::featureWithZeroOrOne):
        (WebCore::featureWithoutValue):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/Settings.in:

2015-01-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r179051.
        https://bugs.webkit.org/show_bug.cgi?id=140850

        broke the 32-bit build (Requested by thorton on #webkit).

        Reverted changeset:

        "[Mac][EME] Support ClearKey encryption with AES128-encrypted
        HLS"
        https://bugs.webkit.org/show_bug.cgi?id=140825
        http://trac.webkit.org/changeset/179051

2015-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename InjectedScriptHost::type to subtype
        https://bugs.webkit.org/show_bug.cgi?id=140841

        Reviewed by Timothy Hatcher.

        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):
        (WebCore::WebInjectedScriptHost::type): Deleted.
        * inspector/WebInjectedScriptHost.h:

2015-01-23  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Support ClearKey encryption with AES128-encrypted HLS
        https://bugs.webkit.org/show_bug.cgi?id=140825

        Reviewed by Eric Carlson.

        Test: http/tests/media/clearkey/clear-key-hls-aes128.html

        Add support for ClearKey encryption when used with an AES-128 encrypted HLS stream.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::installedCDMFactories): Add the CDMPrivateClearKey factory.
        * Modules/encryptedmedia/CDMPrivateClearKey.cpp:
        (WebCore::CDMPrivateClearKey::supportsKeySystem): Support the "org.w3c.clearkey" key system.
        (WebCore::CDMPrivateClearKey::supportsKeySystemAndMimeType): Ditto.
        (WebCore::CDMPrivateClearKey::supportsMIMEType): Ditto.
        (WebCore::CDMPrivateClearKey::createSession): Create a CDMSessionClearKey.
        * Modules/encryptedmedia/CDMPrivateClearKey.h:
        (WebCore::CDMPrivateClearKey::create): Simple factory.
        (WebCore::CDMPrivateClearKey::~CDMPrivateClearKey): Virtual destructor.
        (WebCore::CDMPrivateClearKey::CDMPrivateClearKey): Simple destructor.
        * Modules/encryptedmedia/CDMSessionClearKey.cpp: Added.
        (WebCore::clearKeyVM): Static method returning the VM to be used by JSON parsing.
        (WebCore::CDMSessionClearKey::CDMSessionClearKey): Simple constructor.
        (WebCore::CDMSessionClearKey::~CDMSessionClearKey): Simple destructor.
        (WebCore::CDMSessionClearKey::generateKeyRequest): Store the initData, ensure that it consists of a UTF8-encoded key
            URI, and return same.
        (WebCore::CDMSessionClearKey::releaseKeys): Purged all cached keys.
        (WebCore::CDMSessionClearKey::update): Parse raw JSON-encoded JWK keys, rejecting non-AES, non-oct keys.
        (WebCore::CDMSessionClearKey::cachedKeyForKeyID): Return cached keys.
        * Modules/encryptedmedia/CDMSessionClearKey.h:

        Add support for the "org.w3c.clearkey" CDM to MediaPlayerPrivateAVFoundationObjC, and do so in a platform-agnostic
        way by simply asking for raw key data from MediaPlayerClient when notified that a key has been added.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::keySystemIsSupported):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem):
        (WebCore::fulfillRequestWithKeyData): Added utility method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::keyAdded):

        Pipe a keyAdded() notification down to MediaPlayer and a cachedKeyForKeyId() request up to CDMSessionClearKey:

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::cachedKeyForKeyId):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::keyAdded):
        (WebCore::MediaKeys::cachedKeyForKeyId):
        * Modules/encryptedmedia/MediaKeys.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::keyAdded):
        * html/HTMLMediaElement.h:
        * platform/graphics/CDMSession.h:
        (WebCore::CDMSession::cachedKeyForKeyID):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyAdded):
        (WebCore::MediaPlayer::cachedKeyForKeyId):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCachedKeyForKeyId):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::keyAdded):

        Add new files to project:

        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2015-01-23  Chris Dumez  <cdumez@apple.com>

        Implement system fonts FontDescription caching at RenderTheme level
        https://bugs.webkit.org/show_bug.cgi?id=140840

        Reviewed by Andreas Kling.

        Implement system fonts FontDescription caching at RenderTheme level
        instead of duplicating the logic in its subclasses for each platform.
        This reduces code / logic duplication and reduces the amount of
        platform-specific code. This will also make the refactoring at
        Bug 140577 a lot easier.

        The caching logic remains in RenderThemeIOS class for iOS because:
        - It supports different system font values than all other platforms
        - It requires cache invalidation in some cases while other platforms
          do not.

        This patch is inspired by the following Blink revision:
        https://src.chromium.org/viewvc/blink?view=rev&revision=184449

        Test: fast/css/css2-system-fonts.html

2015-01-23  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Refactor line wrapping logic.
        https://bugs.webkit.org/show_bug.cgi?id=140834

        Reviewed by Antti Koivisto.

        Use a more readable structure to deal with wrapping logic. 

        No change in functionality.

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

2015-01-23  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use only FlowContents::nextTextFragment() to read fragments from the text flow.
        https://bugs.webkit.org/show_bug.cgi?id=140842

        Reviewed by Antti Koivisto.

        This is in preparation to make FlowContents a content iterator class.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::initializeNewLine):
        * rendering/SimpleLineLayoutFlowContents.h:

2015-01-23  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Implement Range Removal algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=140622.

        Reviewed by Jer Noble.

        This extract Range Removal algorithm (Editor's Draft version, bug:26316) from remove(),
        to separate function to deal with old FIXME since bug in spec was resolved.
        This should both guarantee good order of events, and prevent from switching to 'open' state
        during end of stream.

        Test: media/media-source/media-source-end-of-stream-readyState.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setDurationInternal): update to use rangeRemoval(), not remove()
        (WebCore::MediaSource::streamEndedWithError): remove FIXME, brigning back correct order of events.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::remove): comments up to spec, extract rangeRemoval algorithm.
        (WebCore::SourceBuffer::rangeRemoval):
        (WebCore::SourceBuffer::removeTimerFired): comments up to spec.
        * Modules/mediasource/SourceBuffer.h:

2015-01-23  Enrica Casucci  <enrica@apple.com>

        Hit test returns incorrect results when performed in paginated content over the page gaps.
        https://bugs.webkit.org/show_bug.cgi?id=140837
        rdar://problem/17494390

        Reviewed by Dave Hyatt.

        Tests: fast/multicol/pagination/LeftToRight-tb-hittest.html
               fast/multicol/pagination/RightToLeft-rl-hittest.html

        When hittesting reaches the RenderView we need to check if we are
        in paginated content and use the correct class to compute hittest results.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateHitTestResult):

2015-01-23  Andreas Kling  <akling@apple.com>

        Document should be a FontSelectorClient.
        <https://webkit.org/b/140833>

        Reviewed by Antti Koivisto.

        Make Document a FontSelectorClient so it can listen to the invalidation
        callbacks from FontSelector instead of having code in FontSelector that
        calls out to Document on invalidation.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks):
        * dom/Document.cpp:
        (WebCore::Document::fontsNeedUpdate):
        (WebCore::Document::fontSelector):
        (WebCore::Document::clearStyleResolver):
        * dom/Document.h:

2015-01-23  Chris Dumez  <cdumez@apple.com>

        Leverage CSSValuePool's font family cache in CSSComputedStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=140829

        Reviewed by Andreas Kling.

        Leverage CSSValuePool's font family cache in CSSComputedStyleDeclaration
        by calling CSSValuePool::createFontFamilyValue() to create the font
        family CSSPrimitiveValue instead of cssValuePool().createValue().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForFamily):

2015-01-23  Timothy Horton  <timothy_horton@apple.com>

        QLPreviewMenuItem popovers don't close when the page scrolls
        https://bugs.webkit.org/show_bug.cgi?id=140806
        <rdar://problem/19555618>

        Reviewed by Beth Dakin.

        * platform/spi/mac/QuickLookMacSPI.h:
        Add some SPI.

2015-01-23  Andreas Kling  <akling@apple.com>

        Hang CSSFontSelector off Document instead of StyleResolver.
        <https://webkit.org/b/140820>

        Reviewed by Antti Koivisto.

        Move the CSSFontSelector from StyleResolver to Document. This is the first
        step towards making the CSSFontSelector be able to survive full style recalc.

        Clearing a Document's StyleResolver will still nuke the CSSFontSelector,
        though that is done in Document::clearStyleResolver() now.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        * css/CSSFontSelector.h:

            Modernize CSSFontSelector construction a bit by having create() return
            a Ref and the constructor take a Document& instead of a Document*.
            Also made the constructor explicit.

        (WebCore::StyleResolver::~StyleResolver):
        * dom/Document.cpp:
        (WebCore::Document::clearStyleResolver):

            Nuke the current CSSFontSelector in clearStyleResolver() instead of
            in ~StyleResolver. It's a minor change, but shows the way forward.
            Added a FIXME about how CSSFontSelector should eventually survive
            this operation.

        (WebCore::Document::fontSelector):
        * css/FontLoader.cpp:
        (WebCore::FontLoader::loadFont):
        (WebCore::FontLoader::checkFont):
        (WebCore::FontLoader::resolveFontStyle):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::fontSelector): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::defaultStyleForElement):
        (WebCore::StyleResolver::updateFont):
        * dom/Document.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::fontSelector):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::fontSelector):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustNodeSizes):
        (WebCore::TextAutoSizingValue::reset):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):

            Move CSSFontSelector ownership from StyleResolver to Document.

2015-01-23  Jer Noble  <jer.noble@apple.com>

        Layout Test http/tests/media/track-in-band-hls-metadata.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=140827

        Reviewed by Eric Carlson.

        Create the m_metadataTrack by calling prepareMetadataTrack() before deref-ing it.

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

2015-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add initial database process support
        https://bugs.webkit.org/show_bug.cgi?id=139491

        Reviewed by Sergio Villar Senin.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::openDatabase): Use
        WebCore::fileSystemRepresentation() for the database filename,
        otherwise sqlite3_open() fails when the filename contains "%2E".

2015-01-23  Byeongha Cho  <byeongha.cho@samsung.com>

        Initialization for some member variable of FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=136327

        Reviewed by Myles C. Maxfield.

        No new tests. There's no functional change.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):

2015-01-23  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Rename ChildNodeRemovalNotifier::m_insertionPoint to m_removalPoint
        https://bugs.webkit.org/show_bug.cgi?id=140766

        Reviewed by Andreas Kling.

        ChildNodeRemovalNotifier::ChildNodeRemovalNotifier(...) should take
        a node as removal point.
        It's probably Copy/Paste from ChildNodeInsertionNotifier::m_insertionPoint.

        No new tests. No behavior change.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeRemovalNotifier::ChildNodeRemovalNotifier):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyNodeRemovedFromTree):

2015-01-23  Hunseop Jeong  <hs85.jeong@samsung.com>

        [GTK] Fix debug build after r178940
        https://bugs.webkit.org/show_bug.cgi?id=140814

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        (WebCore::OpenTypeVerticalData::substituteWithVerticalGlyphs):

2015-01-22  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move leading whitespace handling from removeTrailingWhitespace() to initializeNewLine().
        https://bugs.webkit.org/show_bug.cgi?id=140757

        Reviewed by Antti Koivisto.

        Checking if overflowed pre-wrap whitespace needs to be ignored should not be part of the trailing whitespace handling.
        Move it to initializeNewLine(). 

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::preWrap):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::initializeNewLine):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::isLineBreak):

2015-01-22  Jer Noble  <jer.noble@apple.com>

        [iOS] Media controls disappear when loading a HLS live stream
        https://bugs.webkit.org/show_bug.cgi?id=140792
        rdar://problem/19491658

        Reviewed by Dean Jackson.

        Overload reconnectControls to reconnect the "start playback" button
        if the control type has been set to "StartPlaybackButton".

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.reconnectControls):

2015-01-22  peavo@outlook.com  <peavo@outlook.com>

        [Win] No plugin content on some sites.
        https://bugs.webkit.org/show_bug.cgi?id=140780

        Reviewed by Anders Carlsson.

        Return script instance from ScriptController::createScriptInstanceForWidget(),
        instead of always returning null.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::bindingInstance):

2015-01-22  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Adopt changes to AVStreamSession class methods
        https://bugs.webkit.org/show_bug.cgi?id=140778
        rdar://problem/19458200

        Reviewed by Eric Carlson.

        AVStreamSession class methods have added a "storageDirectoryAtURL:" parameter so as to be able to
        read and modify records stored at non-default storage locations.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::mediaKeysStorageDirectory): Implement client method by querying document and settings.
        * Modules/encryptedmedia/MediaKeySession.h:
        * platform/graphics/CDMSession.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys): Check whether the AVStreamSession class responds to new selector before calling.
        (WebCore::CDMSessionMediaSourceAVFObjC::update): Ditto.
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyReleaseMessage): Ditto.
        (WebCore::CDMSessionMediaSourceAVFObjC::storagePath): Fetch the storage path from the client.

2015-01-22  Michael Saboff  <msaboff@apple.com>

        REGRESSION (174847): can't view NHK(Japan's national public broadcasting organization)’s news pages
        https://bugs.webkit.org/show_bug.cgi?id=140794

        Reviewed by Anders Carlsson.

        If a document.open has been set, return it instead of always returning a new,
        non-cached instance of jsHTMLDocumentPrototypeFunctionOpen.

        Test: js/dom/document-overwrite-open.html

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):

2015-01-22  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Reset LineState when starting a new line.
        https://bugs.webkit.org/show_bug.cgi?id=140789

        Reviewed by Antti Koivisto.

        Reset LineState when starting a new line to ensure we always
        start with a clean state.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::createTextRuns):

2015-01-22  Roger Fong  <roger_fong@apple.com>

        [WebGL2] Create empty interface files for new WebGL2 objects.
        https://bugs.webkit.org/show_bug.cgi?id=140779.
        <rdar://problem/15002288>

        Reviewed by Dean Jackson.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLQuery.cpp: Added.
        (WebCore::WebGLQuery::create):
        (WebCore::WebGLQuery::~WebGLQuery):
        (WebCore::WebGLQuery::WebGLQuery):
        (WebCore::WebGLQuery::deleteObjectImpl):
        * html/canvas/WebGLQuery.h: Added.
        * html/canvas/WebGLQuery.idl: Added.
        * html/canvas/WebGLSampler.cpp: Added.
        (WebCore::WebGLSampler::create):
        (WebCore::WebGLSampler::~WebGLSampler):
        (WebCore::WebGLSampler::WebGLSampler):
        (WebCore::WebGLSampler::deleteObjectImpl):
        * html/canvas/WebGLSampler.h: Added.
        * html/canvas/WebGLSampler.idl: Added.
        * html/canvas/WebGLSharedObject.h:
        (WebCore::WebGLSharedObject::isQuery):
        (WebCore::WebGLSharedObject::isSampler):
        (WebCore::WebGLSharedObject::isSync):
        (WebCore::WebGLSharedObject::isTransformFeedback):
        (WebCore::WebGLSharedObject::isVertexArrayObject):
        * html/canvas/WebGLSync.cpp: Added.
        (WebCore::WebGLSync::create):
        (WebCore::WebGLSync::~WebGLSync):
        (WebCore::WebGLSync::WebGLSync):
        (WebCore::WebGLSync::deleteObjectImpl):
        * html/canvas/WebGLSync.h: Added.
        * html/canvas/WebGLSync.idl: Added.
        * html/canvas/WebGLTransformFeedback.cpp: Added.
        (WebCore::WebGLTransformFeedback::create):
        (WebCore::WebGLTransformFeedback::~WebGLTransformFeedback):
        (WebCore::WebGLTransformFeedback::WebGLTransformFeedback):
        (WebCore::WebGLTransformFeedback::deleteObjectImpl):
        * html/canvas/WebGLTransformFeedback.h: Added.
        * html/canvas/WebGLTransformFeedback.idl: Added.
        * html/canvas/WebGLVertexArrayObject.cpp: Added.
        (WebCore::WebGLVertexArrayObject::create):
        (WebCore::WebGLVertexArrayObject::~WebGLVertexArrayObject):
        (WebCore::WebGLVertexArrayObject::WebGLVertexArrayObject):
        (WebCore::WebGLVertexArrayObject::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObject.h: Added.
        * html/canvas/WebGLVertexArrayObject.idl: Added.

2015-01-22  Chris Dumez  <cdumez@apple.com>

        Fix remaining multiple targets per rule issues in DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=140790

        Reviewed by David Kilzer.

        Fix remaining multiple target per rule issues in DerivedSources.make,
        similarly to Bug 140784 and Bug 140756.

        This was causing us to run scripts several times to generate the same
        files and may lead to malformed files in case of concurrency.

        * DerivedSources.make:

2015-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Add a build flag for ES6 class syntax
        https://bugs.webkit.org/show_bug.cgi?id=140760

        Reviewed by Michael Saboff.

        * Configurations/FeatureDefines.xcconfig:

2015-01-22  Chris Dumez  <cdumez@apple.com>

        SVGNames.cpp and HTMLNames.cpp are sometimes malformed
        https://bugs.webkit.org/show_bug.cgi?id=140784
        <rdar://problem/17701233>

        Reviewed by David Kilzer.

        Due to bad rules in DerivedSources.make, make_names.pl was called
        several times with the same arguments during build. This is because
        SVG/HTML/MathML each had several targets associated to the same
        command. This would cause the command (make_names.pl) to be called
        once per target. However, make_names.pl only needs to be executed
        once to generate all of the files currently marked as target.

        Calling make_names.pl several times for the same files is not only
        wasteful, but it can also lead to malformed generated files if the
        scripts instances are executed in parallel as they will read / write
        from / to the same files.

        This patch uses INTERMEDIATE targets instead so that we can still
        indicate which files are generated by make_names.pl but only run
        the script once.

        This is a similar fix as for Bug 140756. There may several other
        similar issues in DerivedSources.make but this patch focuses on
        make_names.pl. I will take care of other in follow-ups if needed.

        * DerivedSources.make:

2015-01-22  Chris Dumez  <cdumez@apple.com>

        Have Counter::create() return a Ref<Counter>
        https://bugs.webkit.org/show_bug.cgi?id=140777

        Reviewed by Andreas Kling.

        Have Counter::create() return a Ref<Counter> instead of a PassRefPtr.

        The CSSPrimitiveValue class needed some updates as well to support
        constructing a CSSPrimitiveValue object from a Ref<>.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::init):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/Counter.h:
        (WebCore::Counter::create):
        (WebCore::Counter::cloneForCSSOM):

2015-01-22  Chris Dumez  <cdumez@apple.com>

        Drop the legacy FeatureCounter class
        https://bugs.webkit.org/show_bug.cgi?id=140749

        Reviewed by Andreas Kling.

        Drop the legacy FeatureCounter class and use DiagnosticLoggingClient
        instead.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::mustRevalidateDueToCacheHeaders):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::logMemoryCacheResourceRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mustRevalidateIsExpiredKey):
        (WebCore::DiagnosticLoggingKeys::playedKey):
        (WebCore::DiagnosticLoggingKeys::noCacheKey):
        (WebCore::DiagnosticLoggingKeys::noStoreKey):
        (WebCore::DiagnosticLoggingKeys::notInMemoryCacheKey):
        (WebCore::DiagnosticLoggingKeys::mediaKey):
        (WebCore::DiagnosticLoggingKeys::isExpiredKey):
        (WebCore::DiagnosticLoggingKeys::loadingKey):
        (WebCore::DiagnosticLoggingKeys::inMemoryCacheKey):
        (WebCore::DiagnosticLoggingKeys::reasonKey):
        (WebCore::DiagnosticLoggingKeys::audioKey):
        (WebCore::DiagnosticLoggingKeys::cachedResourceRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::resourceRequestKey):
        (WebCore::DiagnosticLoggingKeys::revalidatingKey):
        (WebCore::DiagnosticLoggingKeys::unusedKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonCredentialSettingsKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonErrorKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonMustRevalidateNoValidatorKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonRedirectChainKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonReloadKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonTypeMismatchKey):
        (WebCore::DiagnosticLoggingKeys::usedKey):
        (WebCore::DiagnosticLoggingKeys::userKey):
        (WebCore::DiagnosticLoggingKeys::videoKey):
        (WebCore::DiagnosticLoggingKeys::webViewKey):
        (WebCore::DiagnosticLoggingKeys::zoomedKey):
        * page/DiagnosticLoggingKeys.h:
        * page/Settings.in:
        * platform/FeatureCounter.cpp: Removed.
        * platform/FeatureCounter.h: Removed.
        * platform/FeatureCounterKeys.h: Removed.
        * platform/ios/FeatureCounter.mm: Removed.

2015-01-22  Benjamin Poulain  <benjamin@webkit.org>

        When extending the fallback transitions with their closure, we are modifying the Set while iterating it
        https://bugs.webkit.org/show_bug.cgi?id=140785

        Reviewed by Andreas Kling.

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::populateTransitions):
        Make that in two steps: accumulate the fallback transitions then add the closure
        of every element.

2015-01-21  Antti Koivisto  <antti@apple.com>

        Rename SimpleFontData to Font
        https://bugs.webkit.org/show_bug.cgi?id=140496

        Reviewed by Zalan Bujtas.

        The fallback supporting Font type was renamed FontCascade.
        We can now rename SimpleFontData to Font matching the usual definition.

2015-01-22  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Make trailing whitespace handling more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=140776

        Reviewed by Antti Koivisto.

        Differentiate between committed and uncommitted trailing whitespace.
        This enables further cleanup in removeTrailingWhitespace().

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::commitAndCreateRun):
        (WebCore::SimpleLineLayout::LineState::addUncommitted):
        (WebCore::SimpleLineLayout::LineState::hasWhitespaceOnly):
        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::LineState::LineState): Deleted.
        (WebCore::SimpleLineLayout::LineState::removeCommittedTrailingWhitespace): Deleted.
        (WebCore::SimpleLineLayout::LineState::resetTrailingWhitespace): Deleted.

2015-01-22  Alexey Proskuryakov  <ap@apple.com>

        Crash in URL::protocol() after appcache load fails
        https://bugs.webkit.org/show_bug.cgi?id=140755
        rdar://problem/7881290

        Reviewed by Dan Bates.

        Test: http/tests/appcache/404-resource-with-slow-main-resource.php

        Not every cache that isn't being updated is complete. It could also be in a zombie
        state after failing to load. We get rid of the cache once the main resource finishes
        loading, but while it's being loaded, the zombie still looks like a regular
        candidate application cache.

        * loader/appcache/ApplicationCache.cpp: (WebCore::ApplicationCache::isComplete):
        * loader/appcache/ApplicationCache.h:
        Removed const from isComplete(), because otherwise we couldn't use ApplicationCacheGroup::m_caches.contains().
        Constness doesn't make a lot of sense for these objects anyway.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource): Toned down an assertion.
        We can fail a main resource load when the document has a zombie appcache, too.

        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::cacheIsComplete):
        (WebCore::ApplicationCacheGroup::cacheIsBeingUpdated): Deleted.
        These functions are only used in ApplicationCache::isComplete().

2015-01-22  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Avoid defining always empty Vector<TextCheckingResult>
        https://bugs.webkit.org/show_bug.cgi?id=140765

        Reviewed by Alexey Proskuryakov.

        Pass an empty vector direclty instead.

        No new tests. No behavior change.

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

2015-01-22  Chris Dumez  <cdumez@apple.com>

        makeprop.pl script is called too many times during build
        https://bugs.webkit.org/show_bug.cgi?id=140756
        <rdar://problem/19467942>

        Reviewed by David Kilzer.

        The makeprop.pl script was called 4 times (instead of once) during
        build due to a bad Makefile rule in DerivedSources.make. makeprop.pl
        had 4 associated targets and thus was called 4 times (with the same
        parameter). Calling it once is sufficient to generate all 4 files
        that were marked as target. This patch uses an INTERMEDIATE target
        instead so that we can indicate that several files are generated
        by the same command.

        I believe this may be the reason for the sporatic build failures
        that look like:
        """
        CSSPropertyNames.gperf: No keywords in input file!
        calling gperf failed: 256 at WebCore/css/makeprop.pl line 1036.
        """
        The makeprop.pl script is generating gperf's input file and calling the
        gperf executable on this file. If the script is executed several times
        in parallel, it would explain the build failures as several instances
        of makeprop.pl may be writing / reading from the same
        CSSPropertyNames.gperf file.

        * DerivedSources.make:

2015-01-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178894.
        https://bugs.webkit.org/show_bug.cgi?id=140775

        Broke JSC and bindings tests (Requested by ap_ on #webkit).

        Reverted changeset:

        "put_by_val_direct need to check the property is index or not
        for using putDirect / putDirectIndex"
        https://bugs.webkit.org/show_bug.cgi?id=140426
        http://trac.webkit.org/changeset/178894

2015-01-22  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix iphoneos SDK builds for ios-ews queue
        <http://webkit.org/b/140748>

        Reviewed by Daniel Bates.

        * WebCore.xcodeproj/project.pbxproj: Add new SPI headers.
        * platform/graphics/cg/ImageBufferCG.cpp: Switch to using
        "IOSurfaceSPI.h" from <IOSurface/IOSurface.h>.
        * platform/graphics/cg/ImageBufferDataCG.cpp: Ditto.
        * platform/graphics/cocoa/IOSurface.mm: Ditto.  Move definitions
        in <IOSurface/IOSurfacePrivate.h> into "IOSurfaceSPI.h".
        * platform/spi/cg/CoreGraphicsSPI.h: Switch to
        WTF_EXTERN_C_{BEGIN,END}.  Add
        CGContextGetFontAntialiasingStyle() and
        CGContextSetFontAntialiasingStyle().
        * platform/spi/cocoa/IOPMLibSPI.h: Switch to use IOReturnSPI.h.
        * platform/spi/cocoa/IOReturnSPI.h: Add.
        * platform/spi/cocoa/IOSurfaceSPI.h: Add.
        * platform/spi/cocoa/IOTypesSPI.h: Add.

2015-01-21  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Skip items spanning flex tracks when sizing content based tracks
        https://bugs.webkit.org/show_bug.cgi?id=140720

        Reviewed by David Hyatt.

        Section "11.5. Resolve Intrinsic Track Sizes" of the specs forces
        us to ignore items spanning tracks with flex sizing functions when
        resolving the content-based track sizing functions. Items with
        span < 2 are not affected by this rule (as they will belong to a
        single track). This way the algorithm ensures that min-content and
        max-content restrictions are fulfilled before distributing the
        extra space.

        Test: fast/css-grid-layout/flex-and-content-sized-resolution-columns.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks):
        (WebCore::integerSpanForDirection):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        * rendering/RenderGrid.h:

2015-01-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        put_by_val_direct need to check the property is index or not for using putDirect / putDirectIndex
        https://bugs.webkit.org/show_bug.cgi?id=140426

        Reviewed by Geoffrey Garen.

        Test: js/dfg-put-by-val-direct-with-edge-numbers.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::put):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::put):

2015-01-19  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Size tracks using a list of all items sorted by span
        https://bugs.webkit.org/show_bug.cgi?id=140615

        Reviewed by Andreas Kling.

        In r173620 we fixed
        RenderGrid::resolveContentBasedTrackSizingFunctions() so that it
        now collects all items spanning content-sized tracks and process
        them one by one after sorting them by ascending span.

        The problem is that it was incorrectly implemented, it has two
        important bugs. First one is that the hash table that collects
        items is regenerated after processing each track, so it's actually
        doing nothing. Secondly we're only sorting the items on each
        track, instead of all the items in the grid.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):

2015-01-21  Daniel Bates  <dabates@apple.com>

        Fix the iOS release build after <http://trac.webkit.org/changeset/178868>
        (https://bugs.webkit.org/show_bug.cgi?id=140742)

        Substitute ASSERT_UNUSED() for ASSERT() since the parameter layer is used only in the assertion expression.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack):

2015-01-21  Daniel Bates  <dabates@apple.com>

        [iOS] Many compositing tests fail in DumpRenderTree due to contentsOpaque difference
        https://bugs.webkit.org/show_bug.cgi?id=140742

        Reviewed by Simon Fraser.

        Make RenderLayerBacking::layerTreeAsText() (including internals.layerTreeAsText()) always
        report that the main frame's RenderView layer is opaque when running iOS DumpRenderTree to
        avoid test failures and the need to maintain for iOS WebKit1 an almost identical copy of the
        platform-independent compositing test results.

        The main frame's RenderView layer is always transparent in iOS WebKit1 since it does
        not make use of a tiled cache layer and defers to UIKit to handle the final compositing
        of the web view, including applying the page scale factor.

        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsDumpRenderTree): The app bundle identifier of DumpRenderTree has
        the form org.webkit.DumpRenderTreeX where X is some non-negative integer.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties): Modified to report that a layer is opaque when
        GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack() returns true.
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added
        default implementation (returns false).
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack): Added;
        returns true when running in DumpRenderTree and the passed GraphicsLayer corresponds to the main frame's
        RenderView layer.
        * rendering/RenderLayerBacking.h:

2015-01-21  Roger Fong  <roger_fong@apple.com>

        WebGL2 (spec section 3.1): Add new types to WebGL2 API.
        https://bugs.webkit.org/show_bug.cgi?id=140741.
        <rdar://problem/19552962>

        Reviewed by Dean Jackson.

        * html/canvas/WebGL2RenderingContext.idl:

2015-01-21  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move nextTextFragment() to FlowContents class.
        https://bugs.webkit.org/show_bug.cgi?id=140738

        Reviewed by Antti Koivisto.

        This is in preparation to make FlowContents an iterator class.
        
        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::addUncommitted):
        (WebCore::SimpleLineLayout::LineState::addUncommittedWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::TextFragment::TextFragment): Deleted.
        (WebCore::SimpleLineLayout::TextFragment::isEmpty): Deleted.
        (WebCore::SimpleLineLayout::nextFragment): Deleted.
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::nextTextFragment):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::FlowContents::TextFragment::isEmpty):

2015-01-21  Andreas Kling  <akling@apple.com>

        DocumentLoader::timing() should return a reference.
        <https://webkit.org/b/128272>

        Reviewed by Antti Koivisto.

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

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::continueAfterNavigationPolicy):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::timing):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/Performance.cpp:
        (WebCore::Performance::now):
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::monotonicTimeToDocumentMilliseconds):
        (WebCore::PerformanceResourceTiming::resourceTimeToDocumentMilliseconds):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::documentLoadTiming):

2015-01-21  Benjamin Poulain  <benjamin@webkit.org>

        Handle the transition on any character as a separate type of transition
        https://bugs.webkit.org/show_bug.cgi?id=140711

        Reviewed by Andreas Kling.

        Instead of considering the universal transition as 127 transitions, it is now
        handled as a separate type of transition.

        The goal is to reduce the number of exit edge to consider for each node. Instead
        of having 127 for any partition containing one universal transition, we have
        as few exit edges as necessary + one universal transition.

        In the NFA, the universal transition is stored directly on NFANode in a new
        HashSet (transitionsOnAnyCharacter).
        The target nodes are made exclusive between "transitionsOnAnyCharacter" and "transitions"
        by construction. That is not strictly needed but it simplify debugging at the moment.

        When converting a NFA to a DFA, we first find all the node that transition on any character.
        Then, when we iterate over "real" transition, we also augment that set with the set on
        any character.

        When creating the DFA node, we first consider each "real" transition, then we have a single
        "fallback" transition for any character that has not been handled yet.

        When matching, we first search for any real transition. If there is none but a fallback exists,
        we take the fallback.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::nextState):
        (WebCore::ContentExtensions::printTransitions):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        (WebCore::ContentExtensions::printTransition): Deleted.
        * contentextensions/DFANode.h:
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::addTransition):
        (WebCore::ContentExtensions::NFA::addTransitionsOnAnyCharacter):
        (WebCore::ContentExtensions::printTransitions):
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        (WebCore::ContentExtensions::printTransition): Deleted.
        * contentextensions/NFA.h:
        * contentextensions/NFANode.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::populateTransitions):
        (WebCore::ContentExtensions::getOrCreateDFANode):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::GraphBuilder::generateTransition):

2015-01-20  Antti Koivisto  <antti@apple.com>

        REGRESSION(r178180): Membuster regressed ~4%
        https://bugs.webkit.org/show_bug.cgi?id=140495

        Reviewed by Andreas Kling.

        After r178180 we keep system fallback fonts that are used on glyph pages alive.
        Previously we would traverse the glyph pages and remove entries referencing system fallbacks.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCascade.cpp:
        (WebCore::pruneUnreferencedEntriesFromFontGlyphsCache):
        (WebCore::pruneSystemFallbackFonts):
        * platform/graphics/FontCascade.h:
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::pruneSystemFallbacks):

            When clearing the font cache also remove the cached glyph pages that may contain system fallback fonts
            and release the fallbacks.

        * platform/graphics/FontGlyphs.h:

2015-01-21  Manuel Rego Casasnovas  <rego@igalia.com>

        first-letter pseudo-element from ancestors is not being ignored in grids and flexboxes
        https://bugs.webkit.org/show_bug.cgi?id=138424

        Reviewed by Benjamin Poulain.

        Source/WebCore:

        According to the grid and flexbox specs:
        "::first-letter pseudo-element do not apply to grid/flex containers".
        http://dev.w3.org/csswg/css-grid/#grid-containers
        http://dev.w3.org/csswg/css-flexbox/#flex-containers

        Check also the CSS WG mailing list discussion:
        http://lists.w3.org/Archives/Public/www-style/2014Dec/0305.html

        This was almost working right, except in the case that an ancestor was
        setting the ::first-letter pseudo-element.

        Added a few more cases to the current tests in order to check this
        behavior.
        Also created some new tests to increase coverage

        Tests: fast/css/first-letter-from-ancestors-not-apply-inline-elements.html
               fast/css/first-letter-ignores-display-property.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getFirstLetter): Go to the next sibling when
        looking for the first text child if you reach a grid or flexbox.

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Fix cast-align warning in Source/WebCore/platform/efl/EflScreenUtilities.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140670

        Reviewed by Darin Adler.

        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::createCustomCursor):

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(INSPECTOR) ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=140668

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptGlobalObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptGlobalObject.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        * bindings/js/WorkerScriptDebugServer.h:
        * dom/Node.cpp:
        (WebCore::Node::inspect):
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.idl:
        * inspector/CommandLineAPIModule.cpp:
        * inspector/CommandLineAPIModule.h:
        * inspector/DOMEditor.cpp:
        * inspector/DOMEditor.h:
        * inspector/DOMPatchSupport.cpp:
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorClient.cpp:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.idl:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorHistory.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::isDebuggerPaused):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didRemoveDOMAttr):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        (WebCore::InspectorInstrumentation::frameWindowDiscarded):
        (WebCore::InspectorInstrumentation::mediaQueryResultChanged):
        (WebCore::InspectorInstrumentation::didPushShadowRoot):
        (WebCore::InspectorInstrumentation::willPopShadowRoot):
        (WebCore::InspectorInstrumentation::didCreateNamedFlow):
        (WebCore::InspectorInstrumentation::willRemoveNamedFlow):
        (WebCore::InspectorInstrumentation::didChangeRegionOverset):
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::handleTouchEvent):
        (WebCore::InspectorInstrumentation::handleMousePress):
        (WebCore::InspectorInstrumentation::forcePseudoState):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::didDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::willHandleEvent):
        (WebCore::InspectorInstrumentation::didHandleEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        (WebCore::InspectorInstrumentation::scriptsEnabled):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::didFireTimer):
        (WebCore::InspectorInstrumentation::didInvalidateLayout):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::didLayout):
        (WebCore::InspectorInstrumentation::didScroll):
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::didDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        (WebCore::InspectorInstrumentation::willScrollLayer):
        (WebCore::InspectorInstrumentation::didScrollLayer):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::didRecalculateStyle):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculation):
        (WebCore::InspectorInstrumentation::applyEmulatedMedia):
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient):
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::didFailXHRLoading):
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponse):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSP):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponse):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::frameDocumentUpdated):
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrame):
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialog):
        (WebCore::InspectorInstrumentation::didRunJavaScriptDialog):
        (WebCore::InspectorInstrumentation::willDestroyCachedResource):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didWriteHTML):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEvent):
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorInstrumentation::didStartWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::workerGlobalScopeTerminated):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::segmentUnloaded):
        (WebCore::InspectorInstrumentation::captureStarted):
        (WebCore::InspectorInstrumentation::captureStopped):
        (WebCore::InspectorInstrumentation::playbackStarted):
        (WebCore::InspectorInstrumentation::playbackPaused):
        (WebCore::InspectorInstrumentation::playbackFinished):
        (WebCore::InspectorInstrumentation::playbackHitPosition):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrame):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrame):
        (WebCore::InspectorInstrumentation::willFireAnimationFrame):
        (WebCore::InspectorInstrumentation::didFireAnimationFrame):
        (WebCore::InspectorInstrumentation::layerTreeDidChange):
        (WebCore::InspectorInstrumentation::renderLayerDestroyed):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        (WebCore::InspectorInstrumentation::hasFrontends): Deleted.
        (WebCore::InspectorInstrumentation::consoleAgentEnabled): Deleted.
        (WebCore::InspectorInstrumentation::runtimeAgentEnabled): Deleted.
        (WebCore::InspectorInstrumentation::timelineAgentEnabled): Deleted.
        (WebCore::InspectorInstrumentation::replayAgentEnabled): Deleted.
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorStyleTextEditor.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerResource.h:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/NetworkResourcesData.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        * inspector/PageScriptDebugServer.cpp:
        * inspector/PageScriptDebugServer.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WebConsoleAgent.cpp:
        * inspector/WebConsoleAgent.h:
        * inspector/WebDebuggerAgent.cpp:
        * inspector/WebDebuggerAgent.h:
        * inspector/WebInjectedScriptHost.cpp:
        * inspector/WebInjectedScriptHost.h:
        * inspector/WebInjectedScriptManager.cpp:
        * inspector/WebInjectedScriptManager.h:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::applicationCacheInfo):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::shouldContinueAfterNotifyingLoadedFromMemoryCache):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::addInspectElementItem):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        * platform/ContextMenuItem.h:
        * platform/efl/EflInspectorUtilities.cpp:
        * platform/efl/EflInspectorUtilities.h:
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldProperties):
        * testing/Internals.cpp:
        (WebCore::InspectorFrontendChannelDummy::sendMessageToFrontend):
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::setInspectorIsUnderTest):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2015-01-20  Chris Dumez  <cdumez@apple.com>

        Simplify DiagnosticLoggingClient call sites
        https://bugs.webkit.org/show_bug.cgi?id=140701

        Reviewed by Andreas Kling.

        Simplify DiagnosticLoggingClient call sites by:
        - Moving the Settings::diagnosticLoggingEnabled() check inside the
          MainFrame::diagnosticLoggingClient() getter.
        - Having MainFrame::diagnosticLoggingClient() return a reference
          instead of a pointer (returning a dummy client if necessary).

        Otherwise, each call site needs to both check the setting and do a
        null-check on the client which is a bit annoying.

        * history/PageCache.cpp:
        (WebCore::logPageCacheFailureDiagnosticMessage):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::logNavigation):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/SubframeLoader.cpp:
        (WebCore::logPluginRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * page/DiagnosticLoggingClient.h:
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessage): Deleted.
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessageWithResult): Deleted.
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessageWithValue): Deleted.
        * page/MainFrame.cpp:
        (WebCore::MainFrame::diagnosticLoggingClient):
        * page/MainFrame.h:

2015-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should show dynamic specificity values
        https://bugs.webkit.org/show_bug.cgi?id=140647

        Reviewed by Benjamin Poulain.

        Test: inspector/css/selector-dynamic-specificity.html

        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        When building a response for a particular element, pass the element along.

        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::hasDynamicSpecificity):
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        When building a response for a Selector, include the specificity if we know
        the element in context.

2015-01-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r178760.

        Windows will not accept a variable as the size declaration for an array.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendGSUBTable): Make size argument a const.

2015-01-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed Windows project file gardening.

        * WebCore.vcxproj/WebCore.vcxproj: Add missing SVG files and put things in their proper
        folders.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2015-01-20  Benjamin Poulain  <benjamin@webkit.org>

        URLFilterParser dismisses the last atom when parsing a builtin character class
        https://bugs.webkit.org/show_bug.cgi?id=140695

        Reviewed by Andreas Kling.

        The pending atom was not sunk before creating the new atom.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):

2015-01-20  Andreas Kling  <akling@apple.com>

        Fast path for casting JSValue to JSDocument*.
        <https://webkit.org/b/134655>

        Add a custom JSType bit for JSDocument so we can quickly cast to it
        from JSValue in the DocumentPrototype functions. This removes a bunch
        of grunt work and branches from common functions like getElementById.

        Also removed GetCastingHelperForBaseObject and replace it with
        simple jsCasts since we don't need dynamic type checks for the base.

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/JSDocumentCustom.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GetCastingHelperForThisObject):
        (GenerateImplementation):
        (GetCastingHelperForBaseObject): Deleted.
        * dom/Document.idl:

2015-01-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178751.
        https://bugs.webkit.org/show_bug.cgi?id=140694

        Caused 32-bit JSC test failures (Requested by JoePeck on
        #webkit).

        Reverted changeset:

        "put_by_val_direct need to check the property is index or not
        for using putDirect / putDirectIndex"
        https://bugs.webkit.org/show_bug.cgi?id=140426
        http://trac.webkit.org/changeset/178751

2015-01-20  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Use FlowContents::Segment::text instead of renderer when possible.
        https://bugs.webkit.org/show_bug.cgi?id=140692

        Reviewed by Myles C. Maxfield.

        No change in functionality.

        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2015-01-20  David Kilzer  <ddkilzer@apple.com>

        Switch to comparing PLATFORM_NAME in terms of macosx
        <http://webkit.org/b/139516>

        Reviewed by Timothy Hatcher.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        * generate-export-file:
        (preprocessorMacros):

2015-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Attempt to fix 32bits builds after r178743

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL):

2015-01-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        put_by_val_direct need to check the property is index or not for using putDirect / putDirectIndex
        https://bugs.webkit.org/show_bug.cgi?id=140426

        Reviewed by Geoffrey Garen.

        Test: js/dfg-put-by-val-direct-with-edge-numbers.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore::JSFloat64Array::getOwnPropertySlot):
        (WebCore::JSFloat64Array::getOwnPropertyDescriptor):
        (WebCore::JSFloat64Array::put):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::getOwnPropertySlot):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::put):

2015-01-20  Chris Dumez  <cdumez@apple.com>

        Drop width / height shorthands code from StylePropertyShorthand.*
        https://bugs.webkit.org/show_bug.cgi?id=140686

        Reviewed by Andreas Kling.

        Drop width / height shorthands code from StylePropertyShorthand.*.
        width / height are not shorthands for min-width/max-width and
        min-height/max-height. Also, only matchingCustomShorthandsForLonghand()
        treats these as shorthands. For e.g, the reverse method
        (indexOfShorthandForLonghand()) does not.

        * css/StylePropertyShorthand.cpp:
        (WebCore::widthShorthand): Deleted.
        (WebCore::heightShorthand): Deleted.
        * css/StylePropertyShorthand.h:
        (WebCore::matchingCustomShorthandsForLonghand):

2015-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Add a mechanism to ignore previous content extension rules
        https://bugs.webkit.org/show_bug.cgi?id=140663

        Reviewed by Andreas Kling.

        * contentextensions/ContentExtensionRule.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL):
        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadAction):

2015-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Resolve the epsilon transitions for each state upfront instead of dynamically
        https://bugs.webkit.org/show_bug.cgi?id=140654

        Reviewed by Andreas Kling.

        Instead of recomputing the epsilon-closure for each set, we compute the closure
        of every element at the beginning of the transformation.

        We then remove the epsilon transitions from the NFA to simplify populateTransitions().
        The epsilon transitions are still there, but they are now in a separate graph we use
        in parallel.

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::epsilonClosureExcludingSelf):
        (WebCore::ContentExtensions::resolveEpsilonClosures):
        (WebCore::ContentExtensions::extendSetWithClosure):
        (WebCore::ContentExtensions::populateTransitions):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        (WebCore::ContentExtensions::epsilonClosure): Deleted.
        (WebCore::ContentExtensions::populateTransitionsExcludingEpsilon): Deleted.
        * contentextensions/NFAToDFA.h:

2015-01-20  Chris Dumez  <cdumez@apple.com>

        Log types of resources being loaded using DiagnosticLoggingClient
        https://bugs.webkit.org/show_bug.cgi?id=140682

        Reviewed by Andreas Kling.

        Log types of resources being loaded using DiagnosticLoggingClient
        instead of the legacy FeatureCounter.

        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::logResourceLoadedUsingFeatureCounter): Deleted.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::otherKey):
        (WebCore::DiagnosticLoggingKeys::mainResourceKey):
        (WebCore::DiagnosticLoggingKeys::loadedKey):
        (WebCore::DiagnosticLoggingKeys::imageKey):
        (WebCore::DiagnosticLoggingKeys::rawKey):
        (WebCore::DiagnosticLoggingKeys::resourceKey):
        (WebCore::DiagnosticLoggingKeys::scriptKey):
        (WebCore::DiagnosticLoggingKeys::styleSheetKey):
        (WebCore::DiagnosticLoggingKeys::svgDocumentKey):
        (WebCore::DiagnosticLoggingKeys::fontKey):
        * page/DiagnosticLoggingKeys.h:
        * platform/FeatureCounterKeys.h:

2015-01-20  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Remove redundant style.preserveNewline check when collapsing trailing whitespace.
        https://bugs.webkit.org/show_bug.cgi?id=140684

        Reviewed by Antti Koivisto.

        FlowContents::isLineBreak() checks whether we are at a hard newline.

        No change in functionality.

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

2015-01-19  Simon Fraser  <simon.fraser@apple.com>

        Add a way to collect scrolling performance data (viewport tile coverage) with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=140474

        Reviewed by Tim Horton.

        Add accessors for standard names for container CALayer for each of the tile grids,
        and when tile grids are swapped, update those names as appropriate.
        
        * WebCore.exp.in:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileGridContainerLayerName):
        (WebCore::TileController::zoomedOutTileGridContainerLayerName):
        (WebCore::TileController::setContentsScale):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::TileGrid):
        (WebCore::TileGrid::setIsZoomedOutTileGrid):
        * platform/graphics/ca/TileGrid.h:

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused-private-field warning in IconEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140676

        Reviewed by Darin Adler.

        * platform/graphics/Icon.h:
        * platform/graphics/efl/IconEfl.cpp:
        (WebCore::Icon::Icon): Deleted.

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused-private-field warning in FontCustomPlatformDataFreeType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140677

        Reviewed by Martin Robinson.

        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):

2015-01-20  peavo@outlook.com  <peavo@outlook.com>

        Plugin content not loaded.
        https://bugs.webkit.org/show_bug.cgi?id=140672

        Reviewed by Brent Fulgham.

        It seems this is caused by a std::unique_ptr in CClass::methodNamed being moved,
        resetting its raw pointer. The raw pointer, which now is null, is then returned
        from the method.

        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodNamed):
        (JSC::Bindings::CClass::fieldNamed):

2015-01-20  Darin Adler  <darin@apple.com>

        Remove SVGElementInstanceList, m_instanceUnderMouse, DUMP_INSTANCE_TREE, DUMP_SHADOW_TREE
        https://bugs.webkit.org/show_bug.cgi?id=140679

        Reviewed by Anders Carlsson.

        First step in removing the SVG instance tree.
        All based on redoing the same excellent work Rob Buis did to remove this in Blink in crbug.com/313438.

        * CMakeLists.txt: Removed the source files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear): Removed code to set unused m_instanceUnderMouse.
        (WebCore::EventHandler::updateMouseEventTargetNode): Ditto.
        * page/EventHandler.h: Removed m_instanceUnderMouse.

        * svg/SVGAllInOne.cpp: Removed the source files.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::childNodes): Deleted.
        * svg/SVGElementInstance.h: Removed childNodes.
        * svg/SVGElementInstance.idl: Ditto.
        * svg/SVGElementInstanceList.cpp: Removed.
        * svg/SVGElementInstanceList.h: Removed.
        * svg/SVGElementInstanceList.idl: Removed.
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree): Deleted.
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Removed DUMP_INSTANCE_TREE and
        DUMP_SHADOW_TREE code.

2015-01-19  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: code generator should take supplemental specifications and allow cross-framework references
        https://bugs.webkit.org/show_bug.cgi?id=136312

        Reviewed by Joseph Pecoraro.

        Changes covered by existing input generator tests.

        * DerivedSources.make: Add JSInputs.json as supplemental specification.
        * replay/WebInputs.json: Moved common types to JSInputs.json.

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix unused-const-variable warning in RenderLayerCompositor.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140678

        Reviewed by Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        [gstreamer] Fix expression result unused warning in GRefPtrGStreamer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140671

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::refGPtr<GstToc>):

2015-01-19  Dean Jackson  <dino@apple.com>

        Support "plus-darker" in mix-blend mode
        https://bugs.webkit.org/show_bug.cgi?id=140646
        <rdar://problem/19523370>

        Reviewed by Simon Fraser.

        Support the "plus-darker" blending mode to CSS.
        See: https://lists.w3.org/Archives/Public/public-fx/2015JanMar/0021.html

        Test: css3/blending/svg-blend-plus-darker.html

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue): mix-blend-mode can now accept
        the new keyword.
        * css/CSSPrimitiveValueMappings.h: Add the mappings.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator BlendMode):
        * platform/graphics/GraphicsTypes.cpp: Add the new GraphicsType.
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Map to the CA compositing filter.
        (PlatformCAFilters::setBlendingFiltersOnLayer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation): Map to the CG blending flag.

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Fix 'register' storage class specifier is deprecated warning
        https://bugs.webkit.org/show_bug.cgi?id=140669

        Reviewed by Carlos Garcia Campos.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):

2015-01-20  Chris Dumez  <cdumez@apple.com>

        Use DiagnosticLoggingClient to log page cache failures
        https://bugs.webkit.org/show_bug.cgi?id=140650

        Reviewed by Andreas Kling.

        Use DiagnosticLoggingClient to log page cache failures instead of the
        legacy FeatureCounter.

        * history/PageCache.cpp:
        (WebCore::logPageCacheFailureDiagnosticMessage):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        (WebCore::pruningReasonToDiagnosticLoggingKey):
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        (WebCore::pruningReasonToFeatureCounterKey): Deleted.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::successKey):
        (WebCore::DiagnosticLoggingKeys::failureKey):
        (WebCore::DiagnosticLoggingKeys::pageLoadedKey):
        (WebCore::DiagnosticLoggingKeys::engineFailedToLoadKey):
        (WebCore::DiagnosticLoggingKeys::navigationKey):
        (WebCore::DiagnosticLoggingKeys::pageCacheKey):
        (WebCore::DiagnosticLoggingKeys::noDocumentLoaderKey):
        (WebCore::DiagnosticLoggingKeys::mainDocumentErrorKey):
        (WebCore::DiagnosticLoggingKeys::isErrorPageKey):
        (WebCore::DiagnosticLoggingKeys::hasPluginsKey):
        (WebCore::DiagnosticLoggingKeys::httpsNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::hasOpenDatabasesKey):
        (WebCore::DiagnosticLoggingKeys::noCurrentHistoryItemKey):
        (WebCore::DiagnosticLoggingKeys::quirkRedirectComingKey):
        (WebCore::DiagnosticLoggingKeys::loadingAPISenseKey):
        (WebCore::DiagnosticLoggingKeys::documentLoaderStoppingKey):
        (WebCore::DiagnosticLoggingKeys::cannotSuspendActiveDOMObjectsKey):
        (WebCore::DiagnosticLoggingKeys::applicationCacheKey):
        (WebCore::DiagnosticLoggingKeys::deniedByClientKey):
        (WebCore::DiagnosticLoggingKeys::deviceMotionKey):
        (WebCore::DiagnosticLoggingKeys::deviceOrientationKey):
        (WebCore::DiagnosticLoggingKeys::deviceProximityKey):
        (WebCore::DiagnosticLoggingKeys::reloadKey):
        (WebCore::DiagnosticLoggingKeys::reloadFromOriginKey):
        (WebCore::DiagnosticLoggingKeys::sameLoadKey):
        (WebCore::DiagnosticLoggingKeys::expiredKey):
        (WebCore::DiagnosticLoggingKeys::prunedDueToMemoryPressureKey):
        (WebCore::DiagnosticLoggingKeys::prunedDueToCapacityReached):
        (WebCore::DiagnosticLoggingKeys::prunedDueToProcessSuspended):
        (WebCore::DiagnosticLoggingKeys::passKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::failKey): Deleted.
        (WebCore::DiagnosticLoggingKeys::noopKey): Deleted.
        * page/DiagnosticLoggingKeys.h:
        * platform/FeatureCounterKeys.h:

2015-01-19  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Wrong arguments passed to computeNormalizedFractionBreadth
        https://bugs.webkit.org/show_bug.cgi?id=139058

        Reviewed by Andreas Kling.

        The method RenderGrid::computeNormalizedFractionBreadth() is
        supposed to get as fourth argument either the grid element's
        content box size or the max-size of a particular grid item. For
        the former we were incorrectly passing the free space after
        distributing the available space to tracks.

        Apart from that, that method has a bug in its implementation. As
        we were using the free space instead of the grid element's content
        box size, we didn't have to subtract the usedBreadth of grid
        tracks from the passed in value. That did not work for the case of
        the caller passing the max-size of a particular item.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178683.
        https://bugs.webkit.org/show_bug.cgi?id=140657

        Lots of asserts in tests. (Requested by JoePeck on #webkit).

        Reverted changeset:

        "LayoutState and subtree layout code should use
        RenderElement."
        https://bugs.webkit.org/show_bug.cgi?id=126878
        http://trac.webkit.org/changeset/178683

2015-01-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        Avoid compiling files twice when they are included in an 'AllInOne.cpp' file.

        * WebCore.vcxproj/WebCore.vcxproj: Mark several files as 'not to be built', since
        they are also build as part of an 'AllInOne.cpp' file.

2015-01-19  Chris Dumez  <cdumez@apple.com>

        Stop using FeatureCounter to log navigation types
        https://bugs.webkit.org/show_bug.cgi?id=140642

        Reviewed by Andreas Kling.

        Stop using FeatureCounter to log navigation types now that
        DiagnosticLoggingClient is working on iOS.

        * loader/FrameLoader.cpp:
        (WebCore::logNavigation):
        * platform/FeatureCounterKeys.h:

2015-01-19  Andreas Kling  <akling@apple.com>

        LayoutState and subtree layout code should use RenderElement.
        <https://webkit.org/b/126878>

        Subtree layout will never begin at a RenderText, so tighten up
        the code to operate on RenderElements instead of RenderObjects.

        Reviewed by Antti Koivisto.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLayout):
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutRoot):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

            Make FrameView::layoutRoot() return RenderElement*.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderObject.h:

            Move subtree layout root clearing logic in willBeDestroyed()
            from RenderObject to RenderElement.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):

            Make all of these functions take RenderElement instead of
            RenderObject since layout never starts from a RenderText.

        (WebCore::RenderView::shouldDisableLayoutStateForSubtree):

            Tweak loop since it's never null on first iteration.

2015-01-19  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/spi/mac/NSViewSPI.h:

2015-01-19  Timothy Horton  <timothy_horton@apple.com>

        Adjust naming of action menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=140644
        <rdar://problem/19448129>

        Reviewed by Brian Weinstein.

        * platform/spi/mac/NSViewSPI.h:
        Add an underscore.

2015-01-19  Dhi Aurrahman  <diorahman@rockybars.com>

        Canonicalization of :lang() should preserve the :lang()'s arguments representations
        https://bugs.webkit.org/show_bug.cgi?id=139928

        Reviewed by Benjamin Poulain.

        Preserve the representation of IDENT and STRING when serializing the
        :lang(). For example, :lang(foo,"bar", baz) should be serialize as
        :lang(foo, "bar", baz) instead of :lang(foo, bar, baz).
    
        Rename CSSParserSelector::setArgumentList, CSSSelector::setArgumentList
        and CSSSelector::argumentList to CSSParserSelector::setLangArgumentList,
        CSSSelector::setLangArgumentList and CSSSelector::langArgumentList
        respectively, since those methods are being exclusively used in respect
        with :lang().

        Update the test of serializing :lang() with IDENT and STRING arguments.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        (WebCore::CSSParserSelector::setArgumentList): Deleted.
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::tokenType):
        (WebCore::CSSParserString::setTokenType):
        * css/CSSSelector.cpp:
        (WebCore::appendLangArgumentList):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setLangArgumentList):
        (WebCore::appendArgumentList): Deleted.
        (WebCore::CSSSelector::setArgumentList): Deleted.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::langArgumentList):
        (WebCore::CSSSelector::argumentList): Deleted.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):

2015-01-16  Roger Fong  <roger_fong@apple.com>

        WebGL2: Support webgl2 context creation.
        https://bugs.webkit.org/show_bug.cgi?id=126408
        <rdar://problem/15002170>

        Reviewed by Dean Jackson.

        Tests covered by existing Khronos tests for WebGL 1.0 conformance.

        Create a WebGLRenderingContextBase class that extends to a WebGLRenderingContext and WebGL2RenderingContext.
        Replace all previous instances of WebGLRenderingContext usages with WebGLRenderingContextBase usages for now.
        As the first step, the WebGL1 and WebGL2 contexts will have the exact same functionality.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSWebGL2RenderingContextCustom.cpp: Added.
        (WebCore::JSWebGL2RenderingContext::visitAdditionalChildren):
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp: Added.
        * bindings/js/JSWebGLRenderingContextCustom.cpp: Move code to JSWebGLRenderingContextBaseCustom.cpp.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        (WebCore::ANGLEInstancedArrays::supported):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isWebGL1):
        (WebCore::CanvasRenderingContext::isWebGL2):
        (WebCore::CanvasRenderingContext::is3d):
        * html/canvas/EXTBlendMinMax.cpp:
        (WebCore::EXTBlendMinMax::EXTBlendMinMax):
        * html/canvas/EXTBlendMinMax.h:
        * html/canvas/EXTFragDepth.cpp:
        (WebCore::EXTFragDepth::EXTFragDepth):
        * html/canvas/EXTFragDepth.h:
        * html/canvas/EXTShaderTextureLOD.cpp:
        (WebCore::EXTShaderTextureLOD::EXTShaderTextureLOD):
        * html/canvas/EXTShaderTextureLOD.h:
        * html/canvas/EXTTextureFilterAnisotropic.cpp:
        (WebCore::EXTTextureFilterAnisotropic::EXTTextureFilterAnisotropic):
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/EXTsRGB.cpp:
        (WebCore::EXTsRGB::EXTsRGB):
        * html/canvas/EXTsRGB.h:
        * html/canvas/OESElementIndexUint.cpp:
        (WebCore::OESElementIndexUint::OESElementIndexUint):
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.cpp:
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.cpp:
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.cpp:
        (WebCore::OESTextureHalfFloat::OESTextureHalfFloat):
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.cpp:
        (WebCore::OESTextureHalfFloatLinear::OESTextureHalfFloatLinear):
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGL2RenderingContext.cpp: Added.
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext):
        * html/canvas/WebGL2RenderingContext.h: Added.
        * html/canvas/WebGL2RenderingContext.idl: Added.
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::create):
        (WebCore::WebGLBuffer::WebGLBuffer):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.cpp:
        (WebCore::WebGLCompressedTextureATC::WebGLCompressedTextureATC):
        (WebCore::WebGLCompressedTextureATC::supported):
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.cpp:
        (WebCore::WebGLCompressedTexturePVRTC::WebGLCompressedTexturePVRTC):
        (WebCore::WebGLCompressedTexturePVRTC::supported):
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::getAGraphicsContext3D):
        (WebCore::WebGLContextGroup::addContext):
        (WebCore::WebGLContextGroup::removeContext):
        (WebCore::WebGLContextGroup::loseContextGroup):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::WebGLContextObject):
        * html/canvas/WebGLContextObject.h:
        (WebCore::WebGLContextObject::context):
        * html/canvas/WebGLDebugRendererInfo.cpp:
        (WebCore::WebGLDebugRendererInfo::WebGLDebugRendererInfo):
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::WebGLDebugShaders):
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::WebGLDepthTexture):
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::supported):
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLDrawBuffers.h:
        * html/canvas/WebGLExtension.cpp:
        (WebCore::WebGLExtension::WebGLExtension):
        * html/canvas/WebGLExtension.h:
        (WebCore::WebGLExtension::context):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::create):
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.cpp:
        (WebCore::WebGLLoseContext::WebGLLoseContext):
        (WebCore::WebGLLoseContext::loseContext):
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::WebGLObject):
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::create):
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::create):
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp: Move implementation to WebGLRenderingContextBase.cpp.
        * html/canvas/WebGLRenderingContext.h:  Move implementation to WebGLRenderingContextBase.h.
        * html/canvas/WebGLRenderingContext.idl:  Move implementation to WebGLRenderingContextBase.idl.
        * html/canvas/WebGLRenderingContextBase.cpp: Added.
        * html/canvas/WebGLRenderingContextBase.h: Added.
        * html/canvas/WebGLRenderingContextBase.idl: Added.
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::WebGLSharedObject):
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::create):
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::create):
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        * html/canvas/WebGLVertexArrayObjectOES.h:

2015-01-19  Antti Koivisto  <antti@apple.com>

        REGRESSION(r178250): ~2% PLT regression
        https://bugs.webkit.org/show_bug.cgi?id=140640

        Reviewed by Andreas Kling.

        * platform/graphics/FontCache.cpp:

        The patch accidentally contained a change to reduce the size of the cache (to verify that purgin works).
        Restore it back to the original value.

2015-01-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo][Video] Windows Media Foundation implementation is not completed.
        https://bugs.webkit.org/show_bug.cgi?id=140337

        Reviewed by Alex Christensen.

        This patch aims to complete some of the methods which are not implemented.
        Currently, only MP4 is supported.
        Video is rendered in a child window of the main window.
        We should eventually render the video directly in the main window,
        by reading and painting individual video frames from the stream.

        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
        (WebCore::MediaPlayerPrivateMediaFoundation::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaFoundation::supportsType):
        (WebCore::MediaPlayerPrivateMediaFoundation::load):
        (WebCore::MediaPlayerPrivateMediaFoundation::play):
        (WebCore::MediaPlayerPrivateMediaFoundation::pause):
        (WebCore::MediaPlayerPrivateMediaFoundation::naturalSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::hasVideo):
        (WebCore::MediaPlayerPrivateMediaFoundation::hasAudio):
        (WebCore::MediaPlayerPrivateMediaFoundation::setVisible):
        (WebCore::MediaPlayerPrivateMediaFoundation::paused):
        (WebCore::MediaPlayerPrivateMediaFoundation::readyState):
        (WebCore::MediaPlayerPrivateMediaFoundation::didLoadingProgress):
        (WebCore::MediaPlayerPrivateMediaFoundation::setSize):
        (WebCore::MediaPlayerPrivateMediaFoundation::paint):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::endSession):
        (WebCore::MediaPlayerPrivateMediaFoundation::startCreateMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::createTopologyFromSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::addBranchToPartialTopology):
        (WebCore::MediaPlayerPrivateMediaFoundation::VideoViewWndProc):
        (WebCore::MediaPlayerPrivateMediaFoundation::registerVideoWindowClass):
        (WebCore::MediaPlayerPrivateMediaFoundation::createVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::destroyVideoWindow):
        (WebCore::MediaPlayerPrivateMediaFoundation::createOutputNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::createSourceStreamNode):
        (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySet):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::AsyncCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::~AsyncCallback):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::QueryInterface):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::AddRef):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Release):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::GetParameters):
        (WebCore::MediaPlayerPrivateMediaFoundation::AsyncCallback::Invoke):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

2015-01-19  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: convert to is<T> and downcast<T> for decoding replay inputs
        https://bugs.webkit.org/show_bug.cgi?id=140512

        Reviewed by Chris Dumez.

        No new tests, no behavior changed.

        * replay/EventLoopInput.h: Make overridden methods public.
        * replay/MemoizedDOMResult.h: Add type trait specialization here. It is
        special-cased because the input type parameter doesn't work with macros.
        * replay/SerializationMethods.cpp:
        (JSC::EncodingTraits<NondeterministicInputBase>::encodeValue):
        Use is() and downcast() when dispatching to encoders based on type.

2015-01-19  Zan Dobersek  <zdobersek@igalia.com>

        Replace use of WTF::bind() in MemoryPressureHandlerLinux.cpp with a C++ lambda
        https://bugs.webkit.org/show_bug.cgi?id=140614

        Reviewed by Carlos Garcia Campos.

        Use a C++ lambda instead of WTF::bind() in the MemoryPressureHandler
        implementation for Linux.

        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::waitForMemoryPressureEvent):

2015-01-19  Zan Dobersek  <zdobersek@igalia.com>

        Replace uses of WTF::bind() in MockMediaPlayerMediaSource with C++ lambdas
        https://bugs.webkit.org/show_bug.cgi?id=140612

        Reviewed by Philippe Normand.

        Use C++ lambdas in place of WTF::bind() in the MockMediaPlayerMediaSource class.

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::play):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::seekCompleted):

2015-01-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178653.
        https://bugs.webkit.org/show_bug.cgi?id=140634

        Broke multiple SVG tests on Mountain Lion (Requested by ap on
        #webkit).

        Reverted changeset:

        "[SVG -> OTF Converter] Flip the switch on"
        https://bugs.webkit.org/show_bug.cgi?id=140592
        http://trac.webkit.org/changeset/178653

2015-01-19  Brent Fulgham  <bfulgham@apple.com>

        Layers need to be already updated before we call adjustViewSize
        https://bugs.webkit.org/show_bug.cgi?id=135514

        Reviewed by Simon Fraser.

        Tested by 'fast/dynamic/layer-no-longer-paginated.html'

        Defer painting operations until we have finished layout. This
        has a couple of benefits:
        (1) We do not attempt to modify render layers during layout.
        (2) In WK1 we do not attempt to paint during layout.

        Add a new virtual predicate to ScrollView indicating when we are in
        layout so that calls to setContentsSize do not attempt
        to adjust scrollbars.

        Modify FrameView to set its ScrollView state to block paint
        operations during layout. Also add a post-layout handler to
        complete the scrollbar updates after layout is finished.

        * WebCore.exp.in: Move linker symbol to ScrollView (from FrameView).
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::shouldDeferScrollUpdateAfterContentSizeChange): Added.
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget): Removed (Renamed).
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidgetImpl): Added (Renamed)
        (WebCore::FrameView::paintContents): Do not paint if we are inside view size adjustment.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollPositionChangedViaPlatformWidget): Added. Checks whether we need to defer
        painting, and calls virtual scrollPositionChangedViaPlatformWidgetImpl if we do not.
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidgetImpl): Added.
        (WebCore::ScrollView::handleDeferredScrollUpdateAfterContentSizeChange): Added.
        (WebCore::ScrollView::scrollTo): If we should defer painting, cache the
        the scroll delta and apply it after the layout is complete.
        (WebCore::ScrollView::completeUpdatesAfterScrollTo): Split off part of 'scrollTo' into its own method
        so we can reuse it in handleDeferredScrollUpdateAfterContentSizeChange.
        * platform/ScrollView.h:
        (WebCore::ScrollView::shouldDeferScrollUpdateAfterContentSizeChange): Added.

2015-01-16  Ada Chan  <adachan@apple.com>

        HTMLMediaElement::isPlayingAudio() should return false if the element is explicitly muted by script.
        https://bugs.webkit.org/show_bug.cgi?id=140524

        Reviewed by Andreas Kling.

        Test: media/muted-video-is-playing-audio.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        Call Document::updateIsPlayingAudio() to recalculate the overall audio playing state.
        (WebCore::HTMLMediaElement::isPlayingAudio):
        HTMLMediaElement::isPlayingAudio() should return false if the media element is explicitly muted.

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-16  Alexey Proskuryakov  <ap@apple.com>

        Console log sometimes prefixed with line number
        https://bugs.webkit.org/show_bug.cgi?id=105280

        Reviewed by Darin Adler.

        Improve the logic for determining whether a console message should be associated
        with a source code location.

        * dom/ScriptableDocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::shouldAssociateConsoleMessagesWithTextPosition):
        * html/parser/HTMLDocumentParser.h:
        * page/PageConsoleClient.cpp:
        (WebCore::getParserLocationForConsoleMessage):
        (WebCore::PageConsoleClient::addMessage):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::pauseParsing):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::shouldAssociateConsoleMessagesWithTextPosition):

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Glyphs get clipped weirdly
        https://bugs.webkit.org/show_bug.cgi?id=137095

        Reviewed by Antti Koivisto.

        The Adobe CFF spec doesn't actually tell you how to serialize a
        "FontBBox." After trial and error, it seems to be (x, y, width,
        height).

        Test: svg/text/kerning.svg
              svg/W3C-SVG-1.1/fonts-kern-01-t.svg

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendHEADTable):
        (WebCore::SVGToOTFFontConverter::appendCFFTable):
        (WebCore::SVGToOTFFontConverter::appendVHEATable):
        (WebCore::CFFBuilder::CFFBuilder):
        (WebCore::SVGToOTFFontConverter::transcodeGlyphPaths):
        (WebCore::SVGToOTFFontConverter::processGlyphElement):

2015-01-19  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r178486): It broke the !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=140611

        Reviewed by Eric Carlson.

        * testing/Internals.cpp:
        (WebCore::Internals::elementIsBlockingDisplaySleep):
        * testing/Internals.h:

2015-01-19  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Tracks shrink sometimes with indefinite remaining space
        https://bugs.webkit.org/show_bug.cgi?id=139059

        Reviewed by David Hyatt.

        Test: fast/css-grid-layout/grid-grow-tracks-to-their-max.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):

2015-01-18  Alexey Proskuryakov  <ap@apple.com>

        Update bindings generation test results after <https://trac.webkit.org/changeset/178633>.

        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::constructJSTestEventConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionAddEventListener):
        (WebCore::jsTestEventTargetPrototypeFunctionRemoveEventListener):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):

2015-01-18  Chris Dumez  <cdumez@apple.com>

        Generate matchingShorthandsForLonghand() implementation from CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140599

        Reviewed by Antti Koivisto.

        Generate matchingShorthandsForLonghand() implementation from
        CSSPropertyNames.in. We already have all the information we need in
        CSSPropertyNames.in to generate the big switch() in
        matchingShorthandsForLonghand().

        A few shorthands still aren't generated. I will look into getting rid
        of the custom code in a follow-up patch.

        * css/StylePropertyShorthand.cpp:
        (WebCore::makeVector): Deleted.
        (WebCore::matchingShorthandsForLonghand): Deleted.
        * css/StylePropertyShorthand.h:
        (WebCore::matchingCustomShorthandsForLonghand):
        * css/makeprop.pl:
        (constructShorthandsVector):

2015-01-18  Dean Jackson  <dino@apple.com>

        Out of bounds write in canvas.toDataURL
        https://bugs.webkit.org/show_bug.cgi?id=140594
        <rdar://problem/19449135>

        Reviewed by Alexey Proskuryakov.

        In the case where we have a canvas object that does
        not have premultiplied alpha (an option you can select
        when using WebGL) we have to multiply out the alpha when
        converting to JPEG via toDataURL.

        For this we created a buffer, but were not accurately
        resizing it before flattening the alpha.

        Test: fast/canvas/webgl/toDataURL-unpremultipliedAlpha.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageDataToDataURL): Call resize once we've
        determined we have enough space.

2015-01-17  Sam Weinig  <sam@webkit.org>

        Add initial experimental user content filtering API
        https://bugs.webkit.org/show_bug.cgi?id=140584

        Reviewed by Benjamin Poulain.

        Change content extensions to be managed through the UserContentController.

        * WebCore.exp.in:
        Update exports.

        * WebCore.xcodeproj/project.pbxproj:
        Update for removed files.

        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeAllRuleLists):
        (WebCore::ContentExtensions::ContentExtensionsBackend::sharedInstance): Deleted.
        * contentextensions/ContentExtensionsBackend.h:
        Remove concept of a shared instance and add a removeAllRuleLists() function.
        
        * contentextensions/ContentExtensionsInterface.cpp: Removed.
        * contentextensions/ContentExtensionsInterface.h: Removed.
        Since there is no shared instance anymore, checking if a URL should be blocked
        now has to go directly to the backend.
        
        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::createRuleList):
        (WebCore::ContentExtensions::ExtensionsManager::loadExtension): Deleted.
        * contentextensions/ContentExtensionsManager.h:
        Update interface to accommodate the lack of a shared instance. Now, all this
        file does is take a serialized rule list and outputs the Vector of ContentExtensionRules

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        Check with the UserContentController to see if the URL should be blocked.

        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserContentFilter):
        (WebCore::UserContentController::removeAllUserContentFilters):
        (WebCore::UserContentController::contentFilterBlocksURL):
        * page/UserContentController.h:
        Add single point of interaction for both the WebKit level to add and remove
        content filters and WebCore to check to see if URLs should be blocked.

2015-01-18  Darin Adler  <darin@apple.com>

        REGRESSION (r125251): wrapper lifetimes of SVGElementInstance are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=132148

        Reviewed by Anders Carlsson.

        Test: svg/custom/use-instanceRoot-event-listeners.xhtml

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener): Updated for the new return type
        of JSListener::create. For the event type, use JSString::toAtomicString instead of
        calling JSString::value and then converting to an AtomicString.
        (WebCore::JSDOMWindow::removeEventListener): Same changes as for addEventListener.

        * bindings/js/JSEventListener.cpp:
        (WebCore::forwardsEventListeners): Added. Helper to detect the special case needed
        for SVGElementInstance. In the future, for better encapsulation, we could use virtual
        functions, but for now hard coding this single class seems fine.
        (WebCore::correspondingElementWrapper): Added. For use if forwardsEventListeners
        returns true, to find out where event listeners will be forwarded.
        (WebCore::createJSEventListenerForAttribute): Added. Replaces the old function
        createJSAttributeEventListener, for SVGElementInstance attributes only.
        (WebCore::createJSEventListenerForAdd): Added. Helper function to avoid repeated
        generated code in the addElementListener bindings other than the DOMWindow one.

        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create): Changed to return a Ref instead of a PassRefPtr.
        (WebCore::createJSEventListenerForAttribute): Renamed from createJSAttributeEventListener,
        changed to return a RefPtr instead of a PassRefPtr and to take references rather than
        pointers for non-null things.
        (WebCore::createJSEventListenerForRemove): Added. Small wrapper that calls
        createJSEventListenerForAdd since they are currently identical.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall): Removed the special case for JSSVGElementInstance
        and updated to call the new createJSEventListenerForAttribute. The special case for
        SVGElementInstance is now in JSEventListener.h/cpp, which is nicer since we prefer to
        keep the generated code simpler if possible.
        (GenerateEventListenerCall): Removed the special case for JSSVGElementInstance. This
        has been dead code since the explicit definition of add/removeEventListener was removed
        from SVGElementInstance.idl, and was also a problem if someone were to use the
        addEventListener function from EventTarget on an SVGElementInstance object. The function
        needs to be generic at runtime. Use toAtomicString as in JSDOMWindow::addEventListener above.
        Call the two new functions, createJSEventListenerForAdd and createJSEventListenerForRemove.
        Those new functions properly handle SVGElementInstance.
        (GenerateImplementation): Don't pass the class name to GenerateAttributeEventListenerCall
        or GenerateEventListenerCall any more.
        (GenerateConstructorDefinition): Use JSString::toAtomicString instead of calling
        JSString::value and then converting to AtomicString.

2015-01-17  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: highlight data for overlay should use protocol type builders
        https://bugs.webkit.org/show_bug.cgi?id=129441

        Reviewed by Timothy Hatcher.

        As a first step towards cleaning up the inspector overlay, convert highlight
        data construction to use protocol type builders. It's now really obvious what
        data is being sent to the inspector overlay page.

        This change paves the way towards using inspector protocol commands and events
        if we want to support more interactive functionality in the inspector overlay.

        This patch makes a few style cleanups, such as standardizing variable names,
        using default member initializers, passing by reference, and fixing casts.

        No new tests, no behavior changed.

        * WebCore.exp.in:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getHighlight):
        (WebCore::InspectorController::buildObjectForHighlightedNode):
        (WebCore::InspectorController::inspect): Deleted.
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        (WebCore::buildNodeHighlight):
        (WebCore::buildQuadHighlight):
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::buildObjectForPoint):
        (WebCore::buildObjectForRect):
        (WebCore::buildArrayForQuad):
        (WebCore::buildObjectForHighlight):
        (WebCore::buildObjectForRegion):
        (WebCore::buildObjectForFlowRegions):
        (WebCore::buildObjectForSize):
        (WebCore::buildQuadObjectForCSSRegionContentClip):
        Simplify how the clipping area is encoded. It's now 'regionClippingArea'
        stored on a FragmentHighlightData instance.

        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::buildArrayForRendererFragments):
        (WebCore::appendPathCommandAndPoints):
        (WebCore::appendPathSegment):
        (WebCore::buildObjectForShapeOutside):
        (WebCore::buildObjectForElementData):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::drawNodeHighlight):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::reset):
        (WebCore::buildObjectForRegionHighlight): Deleted.
        (WebCore::buildObjectForCSSRegionsHighlight): Deleted.
        (WebCore::buildObjectForCSSRegionContentClip): Deleted.
        (WebCore::buildObjectForRendererFragments): Deleted.
        (WebCore::buildObjectForElementInfo): Deleted.
        * inspector/InspectorOverlay.h:
        (WebCore::Highlight::Highlight):
        * inspector/InspectorOverlayPage.js:
        (_createElementTitle):
        (_drawElementTitle):
        (_drawFragmentHighlight):
        (drawNodeHighlight):
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):

2015-01-17  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Crashes when SVG font is invalid
        https://bugs.webkit.org/show_bug.cgi?id=140378

        Reviewed by Antti Koivisto.

        Because CachedSVGFonts are cached, they have to be able to be used
        in subsequent documents regardless how the first document left it.

        Tests: fast/css/font-face-svg-decoding-error.html
               svg/custom/svg-fonts-in-html.html
               svg/text/text-overflow-ellipsis-svgfont-kerning-ligatures.html

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::getFontData):
        (WebCore::CachedSVGFont::ensureCustomFontData):
        (WebCore::CachedSVGFont::maybeInitializeExternalSVGFontElement):
        * loader/cache/CachedSVGFont.h:

2015-01-17  Chris Dumez  <cdumez@apple.com>

        Converting time, angle and frequency units in CSS calc() function
        https://bugs.webkit.org/show_bug.cgi?id=138356

        Reviewed by Darin Adler.

        Update CSSPrimitiveValue::primitiveType() to actually query the
        primitiveType of the CSSCalcValue instead of assuming a given
        type based on its category (e.g. If category is CalcTime, then
        assume type is CSS_MS, even though it would be CSS_S as well).

        This would like to calculation errors such as:
        calc(4s + 1s) -> 5ms

        Because we would assume the unit is CSS_MS without actually
        checking.

        This patch is inspired by the following Blink revision
        by <rhodovan.u-szeged@partner.samsung.com> and initial WebKit
        patch from <tmeszaros.u-szeged@partner.samsung.com>:
        https://src.chromium.org/viewvc/blink?view=rev&revision=179101

        Test: fast/css/calc-with-angle-time-frequency.html

        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::primitiveType):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::primitiveType):

2015-01-17  Chris Dumez  <cdumez@apple.com>

        Generate shorthandForProperty() implementation from CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140556

        Reviewed by Darin Adler.

        Generate shorthandForProperty() implementation from CSSPropertyNames.in.
        This is just a big switch() statement calling the right
        StylePropertyShorthand factory function for a given CSSPropertyID.

        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty): Deleted.
        * css/StylePropertyShorthand.h:
        * css/makeprop.pl:

2015-01-16  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Correct infinite loop in Wheel Handler code in EventHandlerMac
        https://bugs.webkit.org/show_bug.cgi?id=140564
        <rdar://problem/19386426.

        Reviewed by Dean Jackson.

        * page/mac/EventHandlerMac.mm:
        (WebCore::latchingIsLockedToAncestorOfThisFrame): Put missing assignment
        back into the loop!

2015-01-16  Zalan Bujtas  <zalan@apple.com>

        When border-radius is present, inset/outset/groove/ridge border color changes.
        https://bugs.webkit.org/show_bug.cgi?id=140551

        Reviewed by Simon Fraser.

        This patch applies the same color lighten/darken adjustment on the radius borders
        that we use for non-radius border.

        Test: fast/borders/wrong-border-color-when-radius-is-present.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::calculateBorderStyleColor):
        * rendering/RenderObject.h:

2015-01-16  Pratik Solanki  <psolanki@apple.com>

        Web pages fail to load using public iOS WebKit; ASSERT(!isMainThread()) in
        -[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]
        https://bugs.webkit.org/show_bug.cgi?id=140470

        Reviewed by Alexey Proskuryakov.

        Fixes an issue where a web page would fail to load in iOS WebKit2 built with the public iOS SDK
        because NSURLConnection callbacks were always being scheduled on the main thread.

        Currently we always schedule NSURLConnection callbacks to occur on the WebThread or the main
        thread depending on whether the WebThread was started. In iOS WebKit2, the callbacks were
        always being scheduled on the main thread regardless of whether we were using the NetworkProcess
        (since the WebThread is only started when using WebKit1). This led to an assertion failure.
        Instead we want to schedule callbacks to an NSOperationsQueue queue when using WebKit2 with the
        NetworkProcess (i.e. ResourceHandleClient::usesAsyncCallbacks() is true), on the main thread when
        using WebKit2 without the NetworkProcess and on the WebThread when using WebKit1.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::operationQueueForAsyncClients): Remove PLATFORM(IOS)-guards as we want to make use
        of this code for iOS WebKit2 with the NetworkProcess.
        (WebCore::ResourceHandle::start): Modified to use the existing Mac code path to conditionally
        schedule NSURLConnection callbacks to an operation queue when ResourceHandleClient::usesAsyncCallbacks()
        is true. Otherwise, schedule the callbacks on the run loop returned by WebThreadNSRunLoop(),
        which is either the WebThread or the main thread run loop when using WebKit1 and WebKit2 without
        the NetworkProcess, respectively.

2015-01-16  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: purge remaining PassRefPtr uses and minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=140456

        Reviewed by Andreas Kling.

        Get rid of PassRefPtr. Introduce default initializers where it makes sense. Change
        uses of ASSERT to ASSERT_ARG when the assert is a precondition on an argument.

        Remove mistaken uses of AtomicString that were not removed as part of r174113.

        No new tests, no behavior changed.

        * inspector/InspectorReplayAgent.cpp:
        (WebCore::SerializeInputToJSONFunctor::operator()):
        (WebCore::SerializeInputToJSONFunctor::returnValue):
        (WebCore::InspectorReplayAgent::sessionCreated):
        (WebCore::InspectorReplayAgent::sessionModified):
        (WebCore::InspectorReplayAgent::sessionLoaded):
        (WebCore::InspectorReplayAgent::segmentCreated):
        (WebCore::InspectorReplayAgent::segmentCompleted):
        (WebCore::InspectorReplayAgent::segmentLoaded):
        (WebCore::InspectorReplayAgent::switchSession):
        (WebCore::InspectorReplayAgent::insertSessionSegment):
        (WebCore::InspectorReplayAgent::removeSessionSegment):
        (WebCore::InspectorReplayAgent::findSession):
        (WebCore::InspectorReplayAgent::findSegment):
        * inspector/InspectorReplayAgent.h:
        * replay/CapturingInputCursor.cpp:
        (WebCore::CapturingInputCursor::CapturingInputCursor):
        (WebCore::CapturingInputCursor::create):
        (WebCore::CapturingInputCursor::loadInput):
        * replay/CapturingInputCursor.h:
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::EventLoopInputDispatcher):
        * replay/EventLoopInputDispatcher.h:
        * replay/FunctorInputCursor.h:
        (WebCore::FunctorInputCursor::FunctorInputCursor):
        (WebCore::FunctorInputCursor::loadInput):
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::ReplayController):
        (WebCore::ReplayController::setForceDeterministicSettings):
        (WebCore::ReplayController::setSessionState):
        (WebCore::ReplayController::setSegmentState):
        (WebCore::ReplayController::switchSession):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment):
        (WebCore::ReplayController::loadSegmentAtIndex):
        (WebCore::ReplayController::unloadSegment):
        (WebCore::ReplayController::frameNavigated):
        (WebCore::ReplayController::loadedSession):
        (WebCore::ReplayController::loadedSegment):
        (WebCore::ReplayController::activeInputCursor):
        (WebCore::ReplayController::dispatcher):
        * replay/ReplayController.h:
        * replay/ReplaySession.cpp:
        (WebCore::ReplaySession::create):
        (WebCore::ReplaySession::at):
        (WebCore::ReplaySession::appendSegment):
        (WebCore::ReplaySession::insertSegment):
        (WebCore::ReplaySession::removeSegment):
        * replay/ReplaySession.h:
        * replay/ReplaySessionSegment.cpp:
        (WebCore::ReplaySessionSegment::create):
        (WebCore::ReplaySessionSegment::ReplaySessionSegment):
        * replay/ReplaySessionSegment.h:
        * replay/ReplayingInputCursor.cpp:
        (WebCore::ReplayingInputCursor::ReplayingInputCursor):
        (WebCore::ReplayingInputCursor::create):
        (WebCore::ReplayingInputCursor::loadInput):
        * replay/ReplayingInputCursor.h:
        * replay/SegmentedInputStorage.cpp:
        (WebCore::SegmentedInputStorage::store):
        (WebCore::SegmentedInputStorage::queue):
        (WebCore::SegmentedInputStorage::SegmentedInputStorage): Deleted.
        * replay/SegmentedInputStorage.h:

2015-01-16  Andreas Kling  <akling@apple.com>

        Remove assertion that Page::m_editorClient is non-null.

        Unreviewed debug build fix. (It's a reference, it won't be null.)

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

2015-01-16  Andreas Kling  <akling@apple.com>

        Page::editorClient() should return a reference.
        <https://webkit.org/b/140552>

        Reviewed by Chris Dumez.

        Page always has an EditorClient, so make editorClient() return a reference.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::editorClient):
        (WebCore::AlternativeTextController::textChecker):
        * editing/Editor.cpp:
        (WebCore::Editor::client):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::client):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedElement):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::clearUndoRedoOperations):
        * page/Page.h:
        (WebCore::Page::editorClient):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):

2015-01-16  Benjamin Poulain  <benjamin@webkit.org>

        Make URL filters case-insensitive by default
        https://bugs.webkit.org/show_bug.cgi?id=140531

        Reviewed by Andreas Kling.

        Safari's filters were case-insensitive. Adopt that convention in the engine,
        and add a flag in case someone ever need a case-sensitive filter.

        * contentextensions/ContentExtensionRule.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadTrigger):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::trivialAtomFromASCIICharacter):
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::generateTransition):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        * contentextensions/URLFilterParser.h:

2015-01-16  Benjamin Poulain  <bpoulain@apple.com>

        Add the alternative syntax for CSS Selector's descendant combinator (">>")
        https://bugs.webkit.org/show_bug.cgi?id=140525

        Reviewed by Antti Koivisto.

        The latest Selector spec introduces the combinator ">>" as an alias for the descendant
        relation: http://dev.w3.org/csswg/selectors-4/#descendant-combinators

        This patch implements that combinator as an alias of the existing one. For CSSOM's selector
        serialization, I use one bit of CSSSelector to store if that alternative syntax was used.

        Tests: fast/css/descendant-combinator-doubled-child-syntax-styling.html
               fast/css/parsing-css-descendant-combinator-doubled-child-syntax.html
               fast/selectors/element-closest-descendant-combinator-doubled-child-syntax.html
               fast/selectors/element-matches-descendant-combinator-doubled-child-syntax.html
               fast/selectors/querySelector-descendant-combinator-doubled-child-syntax.html

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::appendTagHistory):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::setDescendantUseDoubleChildSyntax):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::setDescendantUseDoubleChildSyntax):
        (WebCore::CSSSelector::CSSSelector):

2015-01-16  Chris Dumez  <cdumez@apple.com>

        Generate StylePropertyShorthand.* from CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140501

        Reviewed by Darin Adler.

        Add initial support for having makeprop.pl generate most of
        StylePropertyShorthand.* from CSSPropertyNames.in.

        This patch replaces [Shorthand] parameter in CSSPropertyNames.in by a
        more descriptive [Longhands=property1|property2|...] parameter. With
        this information, makeprop.pl is now able to generate the
        StylePropertyShorthand factories for all CSS shorthand properties
        in a new StylePropertyShorthandFunctions.h header.

        The switches in StylePropertyShorthand.cpp could also be generated
        but this will be taken care of in follow-up patches to reduce patch
        size.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        (WebCore::backgroundShorthand): Deleted.
        (WebCore::backgroundPositionShorthand): Deleted.
        (WebCore::backgroundRepeatShorthand): Deleted.
        (WebCore::borderShorthand): Deleted.
        (WebCore::borderBottomShorthand): Deleted.
        (WebCore::borderColorShorthand): Deleted.
        (WebCore::borderImageShorthand): Deleted.
        (WebCore::borderLeftShorthand): Deleted.
        (WebCore::borderRadiusShorthand): Deleted.
        (WebCore::webkitBorderRadiusShorthand): Deleted.
        (WebCore::borderRightShorthand): Deleted.
        (WebCore::borderSpacingShorthand): Deleted.
        (WebCore::borderStyleShorthand): Deleted.
        (WebCore::borderTopShorthand): Deleted.
        (WebCore::borderWidthShorthand): Deleted.
        (WebCore::listStyleShorthand): Deleted.
        (WebCore::marginShorthand): Deleted.
        (WebCore::markerShorthand): Deleted.
        (WebCore::outlineShorthand): Deleted.
        (WebCore::overflowShorthand): Deleted.
        (WebCore::paddingShorthand): Deleted.
        (WebCore::transitionShorthand): Deleted.
        (WebCore::animationShorthand): Deleted.
        (WebCore::webkitAnimationShorthand): Deleted.
        (WebCore::webkitBorderAfterShorthand): Deleted.
        (WebCore::webkitBorderBeforeShorthand): Deleted.
        (WebCore::webkitBorderEndShorthand): Deleted.
        (WebCore::webkitBorderStartShorthand): Deleted.
        (WebCore::webkitColumnsShorthand): Deleted.
        (WebCore::webkitColumnRuleShorthand): Deleted.
        (WebCore::flexFlowShorthand): Deleted.
        (WebCore::flexShorthand): Deleted.
        (WebCore::webkitMarginCollapseShorthand): Deleted.
        (WebCore::webkitGridShorthand): Deleted.
        (WebCore::webkitGridTemplateShorthand): Deleted.
        (WebCore::webkitGridAreaShorthand): Deleted.
        (WebCore::webkitGridColumnShorthand): Deleted.
        (WebCore::webkitGridRowShorthand): Deleted.
        (WebCore::webkitMarqueeShorthand): Deleted.
        (WebCore::webkitMaskShorthand): Deleted.
        (WebCore::webkitMaskPositionShorthand): Deleted.
        (WebCore::webkitMaskRepeatShorthand): Deleted.
        (WebCore::webkitTextDecorationShorthand): Deleted.
        (WebCore::webkitTextEmphasisShorthand): Deleted.
        (WebCore::webkitTextStrokeShorthand): Deleted.
        (WebCore::webkitTransitionShorthand): Deleted.
        (WebCore::webkitPerspectiveOriginShorthand): Deleted.
        (WebCore::webkitTransformOriginShorthand): Deleted.
        * css/StylePropertyShorthand.h:
        * css/makeprop.pl:

2015-01-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178532.
        https://bugs.webkit.org/show_bug.cgi?id=140548

        Broke fast/css/parsing-css-lang.html on some bots (Requested
        by ap on #webkit).

        Reverted changeset:

        "Canonicalization of :lang() should preserve the :lang()'s
        arguments representations"
        https://bugs.webkit.org/show_bug.cgi?id=139928
        http://trac.webkit.org/changeset/178532

2015-01-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178577.
        https://bugs.webkit.org/show_bug.cgi?id=140546

        Broke fast/css-grid-layout/grid-content-sized-columns-
        resolution.html (Requested by ap on #webkit).

        Reverted changeset:

        "[CSS Grid Layout] Tracks shrink sometimes with indefinite
        remaining space"
        https://bugs.webkit.org/show_bug.cgi?id=139059
        http://trac.webkit.org/changeset/178577

2015-01-16  Andreas Kling  <akling@apple.com>

        Some improvements to RuleSet shrinking.
        <https://webkit.org/b/140534>

        Reviewed by Antti Koivisto.

        Give an inline capacity (1) to the RuleData Vectors in RuleSet.
        The vast majority of Vectors have only a single entry, and this
        avoids having to allocate a separate Vector backing store for them.

        Also make sure to shrink some Vectors that we weren't already,
        like those in RuleFeatureSet.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::shrinkToFit):
        * css/RuleFeature.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::rulesCountForName):
        (WebCore::shrinkMapVectorsToFit):
        (WebCore::RuleSet::shrinkToFit):
        * css/RuleSet.h:
        (WebCore::RuleSet::idRules):
        (WebCore::RuleSet::classRules):
        (WebCore::RuleSet::tagRules):
        (WebCore::RuleSet::shadowPseudoElementRules):
        (WebCore::RuleSet::linkPseudoClassRules):
        (WebCore::RuleSet::cuePseudoRules):
        (WebCore::RuleSet::focusPseudoClassRules):
        (WebCore::RuleSet::universalRules):

2015-01-16  Antti Koivisto  <antti@apple.com>

        Correct naming for FontCascade implementation files
        https://bugs.webkit.org/show_bug.cgi?id=140544

        Reviewed by Zalan Bujtas.

        Also reduce their number.

        Merge FontFastPath.cpp into FontCascade.cpp
        Merge FontMac.mm and FontComplexTextMac.cpp into FontCascadeCocoa.mm

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::getEmphasisMarkGlyphData):
        (WebCore::FontCascade::emphasisMarkAscent):
        (WebCore::FontCascade::emphasisMarkDescent):
        (WebCore::FontCascade::emphasisMarkHeight):
        (WebCore::FontCascade::getGlyphsAndAdvancesForSimpleText):
        (WebCore::FontCascade::drawSimpleText):
        (WebCore::FontCascade::drawEmphasisMarksForSimpleText):
        (WebCore::FontCascade::drawGlyphBuffer):
        (WebCore::offsetToMiddleOfGlyph):
        (WebCore::offsetToMiddleOfGlyphAtIndex):
        (WebCore::FontCascade::drawEmphasisMarks):
        (WebCore::FontCascade::floatWidthForSimpleText):
        (WebCore::FontCascade::adjustSelectionRectForSimpleText):
        (WebCore::FontCascade::offsetForPositionForSimpleText):
        * platform/graphics/FontFastPath.cpp: Removed.
        * platform/graphics/cocoa/FontCascadeCocoa.mm: Copied from Source/WebCore/platform/graphics/mac/FontMac.mm.
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::FontCascade::adjustSelectionRectForComplexText):
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText):
        (WebCore::FontCascade::drawComplexText):
        (WebCore::FontCascade::drawEmphasisMarksForComplexText):
        (WebCore::FontCascade::floatWidthForComplexText):
        (WebCore::FontCascade::offsetForPositionForComplexText):
        (WebCore::FontCascade::fontDataForCombiningCharacterSequence):
        * platform/graphics/mac/FontComplexTextMac.cpp: Removed.
        * platform/graphics/mac/FontMac.mm: Removed.

2014-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Tracks shrink sometimes with indefinite remaining space
        https://bugs.webkit.org/show_bug.cgi?id=139059

        Reviewed by David Hyatt.

        Test: fast/css-grid-layout/grid-grow-tracks-to-their-max.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):

2015-01-15  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/ChangeVersionData.h:
        * Modules/webdatabase/ChangeVersionWrapper.cpp:
        * Modules/webdatabase/ChangeVersionWrapper.h:
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        * Modules/webdatabase/DOMWindowWebDatabase.h:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseBackend.cpp:
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        * Modules/webdatabase/DatabaseBackendBase.h:
        * Modules/webdatabase/DatabaseBasicTypes.h:
        * Modules/webdatabase/DatabaseCallback.h:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseContext.cpp:
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseDetails.h:
        * Modules/webdatabase/DatabaseError.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/OriginLock.h:
        * Modules/webdatabase/SQLCallbackWrapper.h:
        * Modules/webdatabase/SQLError.h:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.cpp:
        * Modules/webdatabase/SQLException.h:
        * Modules/webdatabase/SQLException.idl:
        * Modules/webdatabase/SQLResultSet.cpp:
        * Modules/webdatabase/SQLResultSet.h:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.cpp:
        * Modules/webdatabase/SQLResultSetRowList.h:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatement.cpp:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLStatementCallback.h:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.h:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransaction.cpp:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionCallback.h:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionClient.cpp:
        * Modules/webdatabase/SQLTransactionClient.h:
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.h:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionState.h:
        * Modules/webdatabase/SQLTransactionStateMachine.cpp:
        * Modules/webdatabase/SQLTransactionStateMachine.h:
        * bindings/js/JSCommandLineAPIHostCustom.cpp:
        (WebCore::JSCommandLineAPIHost::databaseId):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        * bindings/js/JSSQLTransactionCustom.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_constructor):
        (webkit_dom_test_callback_callback_with_no_param):
        (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_with_string_list):
        (webkit_dom_test_callback_callback_with_boolean):
        (webkit_dom_test_callback_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        * bindings/scripts/test/TestCallback.idl:
        * dom/DOMExceptions.in:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::setDatabaseContext):
        * dom/ScriptExecutionContext.h:
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::databaseIdImpl):
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/ChromeClient.h:
        * platform/FeatureCounterKeys.h:

2015-01-15  Zalan Bujtas  <zalan@apple.com>

        Element appears correctly but does not receive event with a large translation.
        https://bugs.webkit.org/show_bug.cgi?id=139815

        Reviewed by Simon Fraser.

        When the hit point gets translated beyond the min/max value of LayoutRect (infiniteRect()),
        we fail to find the corresponding layer.
        When there's no clipping on a layer, we use min/max values to represent infiniteness.
        However it does not work well across types. With IntPoint(hittest) we can address a point that's outside
        of LayoutRect's boundary(clipping).
        This patch addresses the immediate issue of not being able to hittest transformed layers properly. 
        Fixing the representation of infiniteness is tracked here: webkit.org/b/140533

        Test: transforms/hittest-translated-content-off-to-infinity-and-back.html

        * rendering/ClipRect.cpp:
        (WebCore::ClipRect::intersects):

2015-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        tables/mozilla/bugs/bug10633.html is flakey on Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=140487

        Reviewed by Simon Fraser.

        The workaround in https://bugs.webkit.org/show_bug.cgi?id=140253 works
        on both OSes.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):

2015-01-15  Ryosuke Niwa  <rniwa@webkit.org>

        Removing an HTML element spends a lot of time in adjustDirectionalityIfNeededAfterChildrenChanged
        https://bugs.webkit.org/show_bug.cgi?id=140523
        <rdar://problem/19464329>

        Reviewed by Chris Dumez.

        The bug was caused by adjustDirectionalityIfNeededAfterChildrenChanged always traversing children to
        unset selfOrAncestorHasDirAutoAttribute flag while removing a child element.

        Fixed the bug by removing this code. This code was no-op prior to being refactored in r154957 since
        we only entered a for loop with the invariant "counter < childCountDelta" when "childCountDelta < 0".

        See http://trac.webkit.org/changeset/154957/trunk/Source/WebCore/html/HTMLElement.cpp.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        RenderLayerCompositor: Strange comparison of opacity (float) to boolean.
        https://bugs.webkit.org/show_bug.cgi?id=140477.

        Reviewed by Simon Fraser.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::styleChangeRequiresLayerRebuild): Add a cast to make the meaning of this
        code clearer.

2015-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed, rolling out r178531.

        Caused LayoutTest ASSERTs/CRASHs on Debug Yosemite build-bot.

        Reverted changeset:

        "Layers need to be already updated before we call adjustViewSize."
        https://bugs.webkit.org/show_bug.cgi?id=135514
        http://trac.webkit.org/changeset/178531

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::shouldDeferScrollUpdateAfterContentSizeChange): Deleted.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
        (WebCore::ScrollView::handleDeferredScrollUpdateAfterContentSizeChange): Deleted.
        * platform/ScrollView.h:
        (WebCore::ScrollView::shouldDeferScrollUpdateAfterContentSizeChange): Deleted.

2015-01-15  Chris Dumez  <cdumez@apple.com>

        [WK2] Wire diagnostic logging messages through the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=140486

        Reviewed by Sam Weinig.

        Wire diagnostic logging messages through the UIProcess.
        Eventually, the corresponding bundle API should go away.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Add page/DiagnosticLoggingResultType.h to Windows project.

        * WebCore.xcodeproj/project.pbxproj:
        Add page/DiagnosticLoggingResultType.h to XCode project.

        * html/HTMLMediaElement.cpp:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * page/DiagnosticLoggingClient.h:
        * page/DiagnosticLoggingResultType.h: Copied from Source/WebCore/page/DiagnosticLoggingClient.h.
        Use new DiagnosticLoggingResultType enum instead of old
        DiagnosticLoggingClient::LogType one.

2015-01-15  Zalan Bujtas  <zalan@apple.com>

        Reduce LayoutRect::infiniteRect() usage.
        https://bugs.webkit.org/show_bug.cgi?id=140511

        Reviewed by Simon Fraser.

        This is in preparation to get rid of LayoutRect/FloatRect::infiniteRect().

        No change in functionality.

        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::isInfinite):
        * rendering/ClipRect.h:
        (WebCore::ClipRect::reset):
        (WebCore::ClipRect::isEmpty):
        (WebCore::ClipRect::isInfinite):
        (WebCore::ClipRect::setRect): Deleted.
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::reset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2015-01-15  Chris Dumez  <cdumez@apple.com>

        Intermittent WebCore build failures - CSSPropertyNames.gperf: No keywords in input file! calling gperf failed: 256 at WebCore/css/makeprop.pl line 901
        https://bugs.webkit.org/show_bug.cgi?id=140521

        Reviewed by Alexey Proskuryakov.

        Close the CSSPropertyNames.gperf file before calling gperf on it
        to make sure the content we wrote was flushed. This was causing
        intermittent build failures.

        * css/makeprop.pl:

2015-01-15  Zalan Bujtas  <zalan@apple.com>

        LayerFragment should be able to intersect with ClipRect.
        https://bugs.webkit.org/show_bug.cgi?id=140498

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/LayerFragment.h:
        (WebCore::LayerFragment::intersect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):

2015-01-15  Zalan Bujtas  <zalan@apple.com>

        Move ClipRects and ClipRectsCache classes to RenderLayer.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=140461

        Reviewed by Simon Fraser.

        Move classes only used by RenderLayer to RenderLayer.cpp.

        No change in functionality.

        * rendering/RenderLayer.cpp:
        (WebCore::ClipRects::create):
        (WebCore::ClipRects::reset):
        (WebCore::ClipRects::overflowClipRect):
        (WebCore::ClipRects::setOverflowClipRect):
        (WebCore::ClipRects::fixedClipRect):
        (WebCore::ClipRects::setFixedClipRect):
        (WebCore::ClipRects::posClipRect):
        (WebCore::ClipRects::setPosClipRect):
        (WebCore::ClipRects::fixed):
        (WebCore::ClipRects::setFixed):
        (WebCore::ClipRects::ref):
        (WebCore::ClipRects::deref):
        (WebCore::ClipRects::operator==):
        (WebCore::ClipRects::operator=):
        (WebCore::ClipRects::ClipRects):
        (WebCore::ClipRectsCache::ClipRectsCache):
        (WebCore::ClipRectsCache::getClipRects):
        (WebCore::ClipRectsCache::setClipRects):
        (WebCore::ClipRectsCache::getIndex):
        (WebCore::RenderLayer::clipRects):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRects::create): Deleted.
        (WebCore::ClipRects::ClipRects): Deleted.
        (WebCore::ClipRects::reset): Deleted.
        (WebCore::ClipRects::overflowClipRect): Deleted.
        (WebCore::ClipRects::setOverflowClipRect): Deleted.
        (WebCore::ClipRects::fixedClipRect): Deleted.
        (WebCore::ClipRects::setFixedClipRect): Deleted.
        (WebCore::ClipRects::posClipRect): Deleted.
        (WebCore::ClipRects::setPosClipRect): Deleted.
        (WebCore::ClipRects::fixed): Deleted.
        (WebCore::ClipRects::setFixed): Deleted.
        (WebCore::ClipRects::ref): Deleted.
        (WebCore::ClipRects::deref): Deleted.
        (WebCore::ClipRects::operator==): Deleted.
        (WebCore::ClipRects::operator=): Deleted.
        (WebCore::ClipRectsCache::ClipRectsCache): Deleted.
        (WebCore::ClipRectsCache::getClipRects): Deleted.
        (WebCore::ClipRectsCache::setClipRects): Deleted.
        (WebCore::ClipRectsCache::getIndex): Deleted.

2015-01-15  Dhi Aurrahman  <diorahman@rockybars.com>

        Canonicalization of :lang() should preserve the :lang()'s arguments representations
        https://bugs.webkit.org/show_bug.cgi?id=139928

        Reviewed by Benjamin Poulain.

        Preserve the representation of IDENT and STRING when serializing the 
        :lang(). For example, :lang(foo,"bar"   ,baz) should be serialized as 
        :lang(foo, "bar", baz) instead of :lang(foo, bar, baz).

        Rename CSSParserSelector::setArgumentList, CSSSelector::setArgumentList
        and CSSSelector::argumentList to CSSParserSelector::setLangArgumentList,
        CSSSelector::setLangArgumentList and CSSSelector::langArgumentList 
        respectively, since those methods are being exclusively used in respect
        with :lang().

        Update the test of serializing :lang() with IDENT and STRING arguments.

        * css/CSSGrammar.y.in:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setLangArgumentList):
        (WebCore::CSSParserSelector::setArgumentList): Deleted.
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::init):
        (WebCore::CSSParserString::clear):
        (WebCore::CSSParserString::isParsedFromString):
        (WebCore::CSSParserString::setParsedFromString):
        * css/CSSSelector.cpp:
        (WebCore::appendLangArgumentList):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setLangArgumentList):
        (WebCore::appendArgumentList): Deleted.
        (WebCore::CSSSelector::setArgumentList): Deleted.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::langArgumentList):
        (WebCore::CSSSelector::langArgumentParsedFromStringFlagList):
        (WebCore::CSSSelector::argumentList): Deleted.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        Layers need to be already updated before we call adjustViewSize
        https://bugs.webkit.org/show_bug.cgi?id=135514

        Reviewed by Simon Fraser.

        Tested by 'fast/dynamic/layer-no-longer-paginated.html'

        Defer updating scrollbars until we have finished layout. This
        has a couple of benefits:
        (1) We do not attempt to modify render layers during layout.
        (2) In WK1 we do not attempt to paint during layout.

        Add a new virtual predicate to ScrollView indicating when we are in
        layout so that calls to setContentsSize do not attempt
        to adjust scrollbars.

        Modify FrameView to set its ScrollView state to block drawing
        scrollbar updates during layout. Also add a post-layout
        handler to complete the scrollbar updates after layout is
        finished.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::shouldDeferScrollUpdateAfterContentSizeChange): Added.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::handleDeferredScrollUpdateAfterContentSizeChange): Added.
        (WebCore::ScrollView::scrollTo): If we should defer painting, cache the
        the scroll delta and apply it after the layout is complete.
        * platform/ScrollView.h:
        (WebCore::ScrollView::shouldDeferScrollUpdateAfterContentSizeChange): Added.

2015-01-15  Benjamin Poulain  <benjamin@webkit.org>

        When building the NFA of the global disjunction, share the prefix subgraph of existing subpatterns
        https://bugs.webkit.org/show_bug.cgi?id=140465

        Reviewed by Andreas Kling.

        This patch updates the parser to produce smaller graphs when multiple patterns
        of the rule list share a common prefix.

        Previously, GraphBuilder would generate subgraph in place of each parsed
        atom. We now only create subgraph if an atom does not appear in the prefix tree.

        We accumulate the parsing information into small uint16_t named TrivialAtom.
        When generating the subgraph for an new atom, we first check if the prefix tree already
        has a corresponding subgraph for that atom. If it does, we do not generate anything and we extend the existing
        graph. If there is no existing prefix, we create the subgraph and extend the prefix tree.

        Sharing prefix subtrees slows down the subtree generation a bit but the resulting graph is much
        simpler for many kind of inputs.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        The URLFilterParser now maintains states (the prefix tree) between patterns.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/DFANode.h:
        Fix a typo :)

        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::createNode):
        (WebCore::ContentExtensions::NFA::setFinal):
        (WebCore::ContentExtensions::NFA::restoreToGraphSize):
        (WebCore::ContentExtensions::NFA::addRuleId):
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        * contentextensions/NFA.h:
        (WebCore::ContentExtensions::NFA::addRuleId):
        * contentextensions/NFANode.cpp: Removed.
        * contentextensions/NFANode.h:
        NFA nodes from two patterns are now "merged" by construction, thus we need
        to keep track of multiple rules per node.

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::trivialAtomFromAsciiCharacter):
        (WebCore::ContentExtensions::quantifyTrivialAtom):
        (WebCore::ContentExtensions::trivialAtomForNewlineClassIDBuiltin):
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder):
        (WebCore::ContentExtensions::GraphBuilder::m_LastPrefixTreeEntry):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::GraphBuilder::fail):
        (WebCore::ContentExtensions::GraphBuilder::generateTransition):
        (WebCore::ContentExtensions::GraphBuilder::sinkTrivialAtom):
        (WebCore::ContentExtensions::GraphBuilder::sinkPendingAtomIfNecessary):
        (WebCore::ContentExtensions::URLFilterParser::URLFilterParser):
        (WebCore::ContentExtensions::URLFilterParser::addPattern):
        (WebCore::ContentExtensions::GraphBuilder::m_lastAtom): Deleted.
        (WebCore::ContentExtensions::URLFilterParser::parse): Deleted.
        * contentextensions/URLFilterParser.h:
        (WebCore::ContentExtensions::URLFilterParser::hasError): Deleted.
        (WebCore::ContentExtensions::URLFilterParser::errorMessage): Deleted.

2015-01-14  Alexey Proskuryakov  <ap@apple.com>

        Web Inspector and regular console use different source code locations for messages
        https://bugs.webkit.org/show_bug.cgi?id=140478

        Reviewed by Brian Burg.

        We now create a ConsoleMessage object in a place where we can look at it and use
        the source location it computed in a client call.

        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didFinishXHRLoading):
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole):

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed Windows build fix.

        More missing Font->FontCascade changes.

        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreSetAlwaysUsesComplexTextCodePath):
        (WebCore::WebCoreAlwaysUsesComplexTextCodePath):

2015-01-15  Antti Koivisto  <antti@apple.com>

        REGRESSION(r178133): Membuster regressed ~4%
        https://bugs.webkit.org/show_bug.cgi?id=140495

        Reviewed by Andreas Kling.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontData):

            Fonts may ref other fonts. Keep clearing until there are no changes.

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        * platform/graphics/win/FontCacheWin.cpp:
        * platform/win/DragImageWin.cpp:
        * platform/win/WebCoreTextRenderer.h:

2015-01-15  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):
        (WebCore::createDragImageForLink):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        (WebCore::WebCoreDrawDoubledTextAtPoint):
        (WebCore::WebCoreTextFloatWidth):
        (WebCore::WebCoreSetAlwaysUsesComplexTextCodePath):
        (WebCore::WebCoreAlwaysUsesComplexTextCodePath):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::setFontFromControlSize):

2015-01-15  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r178518.

        Didn't mean to commit some of this

        Reverted changeset:

        "Try to fix windows build."
        http://trac.webkit.org/changeset/178518

2015-01-15  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * platform/graphics/Font.cpp: Copied from Source/WebCore/platform/graphics/SimpleFontData.cpp.
        * platform/graphics/Font.h: Copied from Source/WebCore/platform/graphics/SimpleFontData.h.
        * platform/graphics/FontCascadeFastPath.cpp: Copied from Source/WebCore/platform/graphics/FontFastPath.cpp.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/ios/FontIOS.mm: Copied from Source/WebCore/platform/graphics/ios/SimpleFontDataIOS.mm.
        * platform/graphics/mac/FontCascadeComplexTextMac.cpp: Copied from Source/WebCore/platform/graphics/mac/FontComplexTextMac.cpp.
        * platform/graphics/mac/FontCascadeMac.mm: Copied from Source/WebCore/platform/graphics/mac/FontMac.mm.
        * platform/graphics/mac/FontCoreText.cpp: Copied from Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp.
        * platform/graphics/mac/FontMac.mm: Replaced with Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm.
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):
        (WebCore::createDragImageForLink):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        (WebCore::WebCoreDrawDoubledTextAtPoint):
        (WebCore::WebCoreTextFloatWidth):
        (WebCore::WebCoreSetAlwaysUsesComplexTextCodePath):
        (WebCore::WebCoreAlwaysUsesComplexTextCodePath):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::setFontFromControlSize):

2015-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        http/tests/misc/acid3.html is flakey on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=140253

        Reviewed by Alexey Proskuryakov.

        CoreText has a bug <rdar://problem/19433490> in which kerning is not applied for a font
        if a CTTypesetter is created using that font before a call to CTFontTransformGlyphs. We
        often create typesetters in the complex code path, so it's not obvious when this bug
        might present itself. This patch simply makes a dummy invocation of
        CTFontTransformGlyphs() when creating a SimpleFontData.

        No new tests because this is covered by http/tests/misc/acid3.html.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):

2015-01-15  Chris Dumez  <cdumez@apple.com>

        Get rid of custom StyleBuilder code for 'line-height' CSS property
        https://bugs.webkit.org/show_bug.cgi?id=140462

        Reviewed by Antti Koivisto.

        Get rid of custom StyleBuilder code for 'line-height' CSS property by
        using a conditional converter.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLineHeight):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueLineHeight):
        (WebCore::StyleBuilderCustom::convertLineHeight): Deleted.

2015-01-15  Antti Koivisto  <antti@apple.com>

        Rename Font to FontCascade
        https://bugs.webkit.org/show_bug.cgi?id=140442

        Reviewed by Darin Adler.

        We can then rename SimpleFontData to Font. This will match the usual definition of a "font".

2015-01-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Assert failure in RenderBlock::locateFlowThreadContainingBlock when showing the render tree debug info
        https://bugs.webkit.org/show_bug.cgi?id=140441

        Reviewed by Andrei Bucur.

        When showing the render tree debug information for an element inside a flow thread,
        we will display the region range information for all the render boxes. To avoid
        computation of flow thread containing block in these situations, we will use
        only the cached flow thread containing block information.

        No new tests as this code path is only touched when using showRenderTree* methods.

        * rendering/RenderObject.cpp:
        (WebCore::flowThreadContainingBlockFromRenderer):
        (WebCore::RenderObject::showRegionsInformation):

2015-01-14  Simon Fraser  <simon.fraser@apple.com>

        Graphics corruption after Find on some pages
        https://bugs.webkit.org/show_bug.cgi?id=140489

        Reviewed by Zalan Bujtas.
        
        After doing a Find on http://shop.outlier.cc/shop/retail/chino.html,
        garbage could appear on some parts of the page. This is caused by creating
        a compositing layer which is marked as opaque, yet failing to paint the entire
        layer contents.
        
        This was caused by a bug in RenderBox::computeBackgroundIsKnownToBeObscured()
        logic. On the page in question, doing a Find could cause overflow:hidden sections
        to get scrolled (since Find can reveal the selection by scrolling overflow).
        However, the render tree walking under RenderBox::foregroundIsKnownToBeOpaqueInRect()
        fails to take overflow scrolling into account, so gives the wrong answer
        in some content configurations. As a result, we'd think that the background
        is obscured, and never paint it.
        
        Conservative fix is to have isCandidateForOpaquenessTest() return false
        when the content has any non-zero scroll offset.

        Tests: compositing/contents-opaque/opaque-with-scrolled.html
               fast/backgrounds/opaque-scrolled-paint-background.html

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

2015-01-14  Jer Noble  <jer.noble@apple.com>

        [Mac][MSE] Stalled YouTube playback does not allow display to sleep.
        https://bugs.webkit.org/show_bug.cgi?id=140468
        rdar://problem/19171162

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-stalled-holds-sleep-assertion.html

        The unstated convention of MediaPlayerPrivate::paused() is that implementations should 
        return 'true' if the playback rate is 0. However, MediaPlayerPrivateMediaSourceAVFObjC
        was returning 'false' if it was supposed to be playing, regardless of the actual rate.
        This caused a check in HTMLMediaElement of whether to release the sleep assertion token
        to fail, thinking the media engine was still playing.

        Add some testing infrastructure to allow us to test whether the media element is disabling
        display sleep from within layout tests.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::isDisablingSleep):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused):
        * testing/Internals.cpp:
        (WebCore::Internals::elementIsBlockingDisplaySleep):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-01-14  Zalan Bujtas  <zalan@apple.com>

        Move LayoutFragment and ClipRect to their own files.
        https://bugs.webkit.org/show_bug.cgi?id=140457

        Reviewed by Simon Fraser.

        Move these classes to their own files to to make RenderLayer.h less heavy.

        No change in functionality.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/ClipRect.cpp: Added.
        (WebCore::ClipRect::intersects):
        * rendering/ClipRect.h: Added.
        (WebCore::ClipRect::ClipRect):
        (WebCore::ClipRect::rect):
        (WebCore::ClipRect::setRect):
        (WebCore::ClipRect::affectedByRadius):
        (WebCore::ClipRect::setAffectedByRadius):
        (WebCore::ClipRect::operator==):
        (WebCore::ClipRect::operator!=):
        (WebCore::ClipRect::intersect):
        (WebCore::ClipRect::move):
        (WebCore::ClipRect::moveBy):
        (WebCore::ClipRect::isEmpty):
        (WebCore::ClipRect::intersects):
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        (WebCore::intersection):
        * rendering/LayerFragment.h: Added.
        (WebCore::LayerFragment::setRects):
        (WebCore::LayerFragment::moveBy):
        (WebCore::LayerFragment::intersect):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::ClipRect::intersects): Deleted.
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::ClipRect): Deleted.
        (WebCore::ClipRect::rect): Deleted.
        (WebCore::ClipRect::setRect): Deleted.
        (WebCore::ClipRect::affectedByRadius): Deleted.
        (WebCore::ClipRect::setAffectedByRadius): Deleted.
        (WebCore::ClipRect::operator==): Deleted.
        (WebCore::ClipRect::operator!=): Deleted.
        (WebCore::ClipRect::intersect): Deleted.
        (WebCore::ClipRect::move): Deleted.
        (WebCore::ClipRect::moveBy): Deleted.
        (WebCore::ClipRect::isEmpty): Deleted.
        (WebCore::ClipRect::intersects): Deleted.
        (WebCore::ClipRect::inflateX): Deleted.
        (WebCore::ClipRect::inflateY): Deleted.
        (WebCore::ClipRect::inflate): Deleted.
        (WebCore::intersection): Deleted.
        (WebCore::LayerFragment::LayerFragment): Deleted.
        (WebCore::LayerFragment::setRects): Deleted.
        (WebCore::LayerFragment::moveBy): Deleted.
        (WebCore::LayerFragment::intersect): Deleted.
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:

2015-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178438.
        https://bugs.webkit.org/show_bug.cgi?id=140484

        Broke a few MediaSource tests (Requested by JoePeck on
        #webkit).

        Reverted changeset:

        "[MSE] Implement per TrackBuffer buffered."
        https://bugs.webkit.org/show_bug.cgi?id=139813
        http://trac.webkit.org/changeset/178438

2015-01-14  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r165385): Crash when applying autocorrection exceeds maximum text area length.
        https://bugs.webkit.org/show_bug.cgi?id=137902
        rdar://problem/18568864

        Reviewed by Darin Adler.

        Test: editing/text-iterator/invalid-subrange.html

        characterSubrange should check the iterator position after each advance.
        This changed adds a new method to the Internals object to be able to test this.

        * editing/TextIterator.cpp:
        (WebCore::characterSubrange):
        (WebCore::TextIterator::subrange):
        (WebCore::findPlainText):
        * testing/Internals.cpp:
        (WebCore::Internals::subrange):
        * testing/Internals.h:
        * testing/Internals.idl:

2015-01-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r154769): Wrong <title> taken as a tooltip for SVG element.
        https://bugs.webkit.org/show_bug.cgi?id=139690.

        Reviewed by Daniel Bates.

        Before r154769, we were calling Traversal<SVGTitleElement>::firstWithin(), which returns
        the first immediate SVGTitleElement child. In r154769, Traversal<SVGTitleElement>::firstWithin()
        was replaced by descendantsOfType<SVGTitleElement> which returns all descendants SVGTitleElements.
        Then we were returning the first element of these descendants, which may not be an immediate
        child of the element, as the title of the SVGElement. This was the reason of this bug. The
        fix is to use childrenOfType<SVGTitleElement>() instead, which returns the immediate SVGTitleElement
        children of an SVGElement.

        Also we were not following exactly the specs for the rootmost SVG element's title value.
        According to the W3C specs, for stand-alone SVG documents only, the rootmost SVG element
        should not return a title. But we were not returning a title for the rootmost SVG element
        always. The fix is to return a empty title for the rootmost SVG element only if topDocument()
        of the element isSVGDocument().
        
        NOTE: The main SVG specs http://www.w3.org/TR/SVG/interact.html#hit-testing (W3C Recommendation
        16 August 2011) and http://www.w3.org/TR/SVG/struct.html#DescriptionAndTitleElements (W3C
        Recommendation 16 August 2011) do not say how the tooltip of an SVG element is calculated. But
        the SVG tiny specs http://www.w3.org/TR/SVGTiny12/struct.html#uiTitleDescBehavior (W3C
        Recommendation 22 December 2008) however explains well the tooltip calculation for the embedded
        and the stand-alone SVG cases. And it seems this what we should rely on.

        Test: svg/hittest/svg-standalone-tooltip.svg
              svg/hittest/svg-embedded-tooltip.html

        * WebCore.exp.in:
        * rendering/HitTestResult.h:
        Make HitTestResult::setInnerNode be WEBCORE_EXPORT
        
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::title):
        Replace descendantsOfType<SVGTitleElement>() by childrenOfType<SVGTitleElement>().
        Fix the title value of the rootmost SVG element.
        
        * testing/Internals.cpp:
        (WebCore::Internals::toolTipFromElement):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a new internal function toolTipFromElement() which returns the tooltip text for a
        given element.

2015-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix after r178434
        https://bugs.webkit.org/show_bug.cgi?id=140467

        Reviewed by Chris Dumez.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertPerspective):

2015-01-14  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for NFAToDFA on ARM

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::UniqueNodeIdSet::UniqueNodeIdSet):
        (WebCore::ContentExtensions::UniqueNodeIdSet::isDeletedValue):

2015-01-14  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Implement per TrackBuffer buffered.
        https://bugs.webkit.org/show_bug.cgi?id=139813.

        Reviewed by Jer Noble.

        Added implementation of SourceBuffer buffered() algorithm as per specification,
        and caching mechanism called when samples are added, removed, or MediaSource
        readyState is changed.

        Tests: media/media-source/media-source-multiple-trackBuffers-buffered-in-ended-state.html
               media/media-source/media-source-multiple-trackBuffers-buffered.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setReadyState):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::buffered):
        (WebCore::SourceBuffer::invalidateBuffered):
        (WebCore::SourceBuffer::recalculateBuffered):
        (WebCore::SourceBuffer::sourceBufferPrivateAppendComplete):
        (WebCore::SourceBuffer::removeCodedFrames):
        (WebCore::SourceBuffer::evictCodedFrames):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::bufferedAccountingForEndOfStream):
        (WebCore::SourceBuffer::hasCurrentTime):
        * Modules/mediasource/SourceBuffer.h:

2015-01-14  Benjamin Poulain  <benjamin@webkit.org>

        Do not create new set for every sub-operation when converting a NFA to DFA
        https://bugs.webkit.org/show_bug.cgi?id=140380

        Reviewed by Andreas Kling.

        This is the first step toward making the NFA-to-DFA conversion more scalable: instead
        of creating new sets for each step of the algorithm, we use two kinds of sets
        and never do any copy.

        The first new tool to do that is UniqueNodeIdSetImpl. It represents a set of NFA state corresponding to a DFA
        state. It is unique per DFA state.

        HashableNodeIdSet is a helper tool storing a UniqueNodeIdSetImpl.

        The creation of new sets now goes like this:
        1) Get a NodeIdSet for each possible transition.
        2) For each transition:
           2a) Extend the NodeIdSet in place with its epsilon closure.
           2b) Get the UniqueNodeIdSetImpl corresponding to the new set we discovered.
           2c) If the UniqueNodeIdSetImpl is new, queue it for processing.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsDebugging.h: Copied from Source/WebCore/contentextensions/DFANode.h.
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadExtension):
        Added some logging to inspect more easily what the clients are sending.

        * contentextensions/DFA.cpp:
        * contentextensions/DFA.h:
        * contentextensions/DFANode.h:
        * contentextensions/NFA.cpp:
        * contentextensions/NFA.h:
        * contentextensions/NFAToDFA.cpp:

        (WebCore::ContentExtensions::epsilonClosure):
        Instead of returning a new HashSet, extend the input HashSet.

        (WebCore::ContentExtensions::UniqueNodeIdSetImpl::buffer):
        (WebCore::ContentExtensions::UniqueNodeIdSet::UniqueNodeIdSet):
        (WebCore::ContentExtensions::UniqueNodeIdSet::operator=):
        (WebCore::ContentExtensions::UniqueNodeIdSet::~UniqueNodeIdSet):
        (WebCore::ContentExtensions::UniqueNodeIdSet::operator==):
        (WebCore::ContentExtensions::UniqueNodeIdSet::impl):
        (WebCore::ContentExtensions::UniqueNodeIdSet::hash):
        (WebCore::ContentExtensions::UniqueNodeIdSet::isEmptyValue):
        (WebCore::ContentExtensions::UniqueNodeIdSet::isDeletedValue):
        (WebCore::ContentExtensions::UniqueNodeIdSetHash::hash):
        (WebCore::ContentExtensions::UniqueNodeIdSetHash::equal):
        UniqueNodeIdSetImpl is a compact representation of a NodeIdSet corresponding to a DFA node.

        It is never built directly, it is only built on demand through NodeIdSetToUniqueNodeIdSetTranslator
        from a NodeIdSet.

        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::hash):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::equal):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        (WebCore::ContentExtensions::SetTransitionsExcludingEpsilon::operator[]):
        (WebCore::ContentExtensions::SetTransitionsExcludingEpsilon::size):
        (WebCore::ContentExtensions::SetTransitionsExcludingEpsilon::begin):
        (WebCore::ContentExtensions::SetTransitionsExcludingEpsilon::end):
        (WebCore::ContentExtensions::populateTransitionsExcludingEpsilon):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        (WebCore::ContentExtensions::setTransitionsExcludingEpsilon): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSet::HashableNodeIdSet): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSet::operator=): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSet::isEmptyValue): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSet::isDeletedValue): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSet::nodeIdSet): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSetHash::hash): Deleted.
        (WebCore::ContentExtensions::HashableNodeIdSetHash::equal): Deleted.
        (WebCore::ContentExtensions::addDFAState): Deleted.

2015-01-14  Chris Dumez  <cdumez@apple.com>

        Make 'TypeName' parameter unnecessary in CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140347

        Reviewed by Darin Adler.

        Make 'TypeName' parameter unnecessary in CSSPropertyNames.in by:
        - Removing the static_cast to the destination type in the generated
          StyleBuilder code and let compiler implicitly convert the
          CSSPrimitiveValue to the setter's argument type.
        - Updating conditional converters to return a WTF::Optional<>
          instead of returning a boolean and having an output argument
          passed by reference. This way, we can use "auto" in the generated
          StyleBuilder code to deduce the return type.

        * css/CSSPropertyNames.in:
        Drop TypeName parameter from all properties as it is no longer needed.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGridTrackSize):
        (WebCore::StyleBuilderConverter::convertGridPosition):
        (WebCore::StyleBuilderConverter::convertWordSpacing):
        (WebCore::StyleBuilderConverter::convertPerspective):
        (WebCore::StyleBuilderConverter::convertMarqueeIncrement):
        (WebCore::StyleBuilderConverter::convertFilterOperations):
        (WebCore::StyleBuilderConverter::convertMaskImageOperations):
        Update conditional converters to return an Optional<>.

        * css/makeprop.pl:
        (generateValueSetter):
        Drop support for TypeName, stop using static_cast to destination
        type and update the generated code now that the conditional
        converters return an Optional.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::systemFont):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::setIsItalic):
        (WebCore::FontDescription::setIsSmallCaps):
        (WebCore::FontDescription::setItalic): Deleted.
        (WebCore::FontDescription::setSmallCaps): Deleted.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::systemFont):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFont):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemFont):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::systemFont):
        * rendering/RenderThemeWin.cpp:
        (WebCore::fillFontDescription):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::updateStyle):
        Now that we call the RenderStyle setters with a CSSPrimitiveValue
        and let it be implicitly converted to the right type, instead of
        doing an explicit static_cast, two setters on FontDescription
        were ambiguous: setItalic() / setSmallCaps(). Rename the overloads
        taking a boolean in argument to setIsItalic() / setIsSmallCaps()
        to resolve the ambiguity.

2015-01-14  Jer Noble  <jer.noble@apple.com>

        Null-deref crash when seeking immediately before looping.
        https://bugs.webkit.org/show_bug.cgi?id=140394

        Reviewed by Eric Carlson.

        It is possible for finishSeek() to be called when a seek() has caused a pending seek task
        to be scheduled, but before that pending seek task is run. In this case, if a seek request
        is issued, the existing pending seek task will not be cancelled, which will cause a crash
        when the pending seek task is run.

        When checking whether an existing seek task needs to be cancelled, check the actual timer,
        rather than the m_seeking boolean, so that this case is covered.

        Test: media/video-ended-seek-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekWithTolerance):

2015-01-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Layout Test fast/css/crash-on-custom-cursor-when-loading.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=140425

        Reviewed by Anders Carlsson.

        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor): Return nullptr when operating system
        cannot support the requested icon specification.
        (WebCore::Cursor::ensurePlatformCursor): Check for 'createSharedCursor'
        returning nullptr, and fall back to the default icon construction.

2015-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r178367): [GStreamer] Several media tests time out after r178367
        https://bugs.webkit.org/show_bug.cgi?id=140437

        Reviewed by Philippe Normand.

        Add implementation for MediaPlayerPrivate::rate() to GStreamer
        media backend.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::rate):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2015-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178390, r178392, r178398, r178400,
        r178402, and r178410.
        https://bugs.webkit.org/show_bug.cgi?id=140431

        Way too many failures to skip (Requested by ap_ on #webkit).

        Reverted changesets:

        "WebGL2: Support webgl2 context creation."
        https://bugs.webkit.org/show_bug.cgi?id=126408
        http://trac.webkit.org/changeset/178390

        "Unreviewed iOS build fix after r178390."
        http://trac.webkit.org/changeset/178392

        "[Unreviewed] Windows build fix after r178390."
        http://trac.webkit.org/changeset/178398

        "[Unreviewed] Speculative test fix after r178390."
        http://trac.webkit.org/changeset/178400

        "[Unreviewed] Skip webgl tests for temporarily."
        https://bugs.webkit.org/show_bug.cgi?id=140423
        http://trac.webkit.org/changeset/178402

        "[EFL] Fix build after r178390"
        https://bugs.webkit.org/show_bug.cgi?id=140424
        http://trac.webkit.org/changeset/178410

2015-01-13  Hunseop Jeong  <hs85.jeong@samsung.com>

        [EFL] Fix build after r178390 
        https://bugs.webkit.org/show_bug.cgi?id=140424

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt: 

2015-01-13  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Refactor TextFragment class.
        https://bugs.webkit.org/show_bug.cgi?id=140417

        Reviewed by Andreas Kling.

        Introduce text fragment type and use class member initializers.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::LineState::addUncommitted):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::nextFragment):
        (WebCore::SimpleLineLayout::createLineRuns):

2015-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178400.
        https://bugs.webkit.org/show_bug.cgi?id=140422

        Test fix breaks build (Requested by rfong on #webkit).

        Reverted changeset:

        "[Unreviewed] Speculative test fix after r178390."
        http://trac.webkit.org/changeset/178400

2015-01-13  Roger Fong  <roger_fong@apple.com>

        [Unreviewed] Speculative test fix after r178390.

        * html/canvas/WebGL1RenderingContext.idl:

2015-01-13  Roger Fong  <roger_fong@apple.com>

        [Unreviewed] Windows build fix after r178390.

        * DerivedSources.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSBindingsAllInOne.cpp:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):

2015-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        NSButtonCell leak allocated under WebCore::paintToggleButton
        https://bugs.webkit.org/show_bug.cgi?id=137014

        Reviewed by Alexey Proskuryakov.

        * platform/mac/ThemeMac.mm:
        (WebCore::createToggleButtonCell):
        Immediately adopt the NSButtonCell allocation.

        (WebCore::sharedRadioCell):
        (WebCore::sharedCheckboxCell):
        Move from the RetainPtr into the static variable.

        (WebCore::paintToggleButton):
        Use RetainPtr logic to better manage lifetimes.

2015-01-13  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Refactor SimpleLineLayout::nextFragment().
        https://bugs.webkit.org/show_bug.cgi?id=140407

        Reviewed by Andreas Kling.

        Simplify the code by using content specific branches with early returns.

        No change in functionality.

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

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r178390.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        m_type is undeclared.

        * html/canvas/WebGLContextGroup.h:
        Fix bad include.

2015-01-13  Roger Fong  <roger_fong@apple.com>

        WebGL2: Support webgl2 context creation.
        https://bugs.webkit.org/show_bug.cgi?id=126408
        <rdar://problem/15002170>

        Reviewed by Dean Jackson.

        Tests covered by existing Khronos tests for WebGL 1.0 conformance.

        Create a WebGLRenderingContextBase class that extends to a WebGL1RenderingContext and WebGL2RenderingContext.
        Replace all previous instances of WebGLRenderingContext usages with WebGLRenderingContextBase usages for now.
        As the first step, the WebGL1 and WebGL2 contexts will have the exact same functionality.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSWebGL1RenderingContextCustom.cpp: Copied from Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp.
        * bindings/js/JSWebGL2RenderingContextCustom.cpp: Added.
        (WebCore::JSWebGL2RenderingContext::visitAdditionalChildren):
        * bindings/js/JSWebGLRenderingContextBaseCustom.cpp: Added.
        * bindings/js/JSWebGLRenderingContextCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::is3dType):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        (WebCore::ANGLEInstancedArrays::supported):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::type):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/canvas/EXTBlendMinMax.cpp:
        (WebCore::EXTBlendMinMax::EXTBlendMinMax):
        * html/canvas/EXTBlendMinMax.h:
        * html/canvas/EXTFragDepth.cpp:
        (WebCore::EXTFragDepth::EXTFragDepth):
        * html/canvas/EXTFragDepth.h:
        * html/canvas/EXTShaderTextureLOD.cpp:
        (WebCore::EXTShaderTextureLOD::EXTShaderTextureLOD):
        * html/canvas/EXTShaderTextureLOD.h:
        * html/canvas/EXTTextureFilterAnisotropic.cpp:
        (WebCore::EXTTextureFilterAnisotropic::EXTTextureFilterAnisotropic):
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/EXTsRGB.cpp:
        (WebCore::EXTsRGB::EXTsRGB):
        * html/canvas/EXTsRGB.h:
        * html/canvas/OESElementIndexUint.cpp:
        (WebCore::OESElementIndexUint::OESElementIndexUint):
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.cpp:
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.cpp:
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.cpp:
        (WebCore::OESTextureHalfFloat::OESTextureHalfFloat):
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.cpp:
        (WebCore::OESTextureHalfFloatLinear::OESTextureHalfFloatLinear):
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGL1RenderingContext.cpp: Copied from Source/WebCore/html/canvas/WebGLRenderingContext.cpp.
        * html/canvas/WebGL1RenderingContext.h: Copied from Source/WebCore/html/canvas/WebGLRenderingContext.h.
        * html/canvas/WebGL1RenderingContext.idl: Copied from Source/WebCore/html/canvas/WebGLRenderingContext.idl.
        * html/canvas/WebGL2RenderingContext.cpp: Added.
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext):
        * html/canvas/WebGL2RenderingContext.h: Added.
        * html/canvas/WebGL2RenderingContext.idl: Added.
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::create):
        (WebCore::WebGLBuffer::WebGLBuffer):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.cpp:
        (WebCore::WebGLCompressedTextureATC::WebGLCompressedTextureATC):
        (WebCore::WebGLCompressedTextureATC::supported):
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.cpp:
        (WebCore::WebGLCompressedTexturePVRTC::WebGLCompressedTexturePVRTC):
        (WebCore::WebGLCompressedTexturePVRTC::supported):
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextGroup.cpp:
        (WebCore::WebGLContextGroup::getAGraphicsContext3D):
        (WebCore::WebGLContextGroup::addContext):
        (WebCore::WebGLContextGroup::removeContext):
        (WebCore::WebGLContextGroup::loseContextGroup):
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLContextObject.cpp:
        (WebCore::WebGLContextObject::WebGLContextObject):
        * html/canvas/WebGLContextObject.h:
        (WebCore::WebGLContextObject::context):
        * html/canvas/WebGLDebugRendererInfo.cpp:
        (WebCore::WebGLDebugRendererInfo::WebGLDebugRendererInfo):
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::WebGLDebugShaders):
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::WebGLDepthTexture):
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::supported):
        (WebCore::WebGLDrawBuffers::satisfiesWebGLRequirements):
        * html/canvas/WebGLDrawBuffers.h:
        * html/canvas/WebGLExtension.cpp:
        (WebCore::WebGLExtension::WebGLExtension):
        * html/canvas/WebGLExtension.h:
        (WebCore::WebGLExtension::context):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::create):
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.cpp:
        (WebCore::WebGLLoseContext::WebGLLoseContext):
        (WebCore::WebGLLoseContext::loseContext):
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::WebGLObject):
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::create):
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::create):
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp: Removed.
        * html/canvas/WebGLRenderingContext.h: Removed.
        * html/canvas/WebGLRenderingContext.idl: Removed.
        * html/canvas/WebGLRenderingContextBase.cpp: Added.
        * html/canvas/WebGLRenderingContextBase.h: Added.
        * html/canvas/WebGLRenderingContextBase.idl: Added.
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.cpp:
        (WebCore::WebGLSharedObject::WebGLSharedObject):
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::create):
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::create):
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        * html/canvas/WebGLVertexArrayObjectOES.h:

2015-01-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix Mac build after r178388

        FontRanges::isEmpty() -> FontRanges::isNull().

        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::fontDataForCombiningCharacterSequence):

2015-01-13  Antti Koivisto  <antti@apple.com>

        Devirtualize FontData
        https://bugs.webkit.org/show_bug.cgi?id=140390

        Reviewed by Andreas Kling.

        This patch removes the FontData base class and turns SegmentedFontData into a non-virtual FontRanges type.

        SimpleFontData remains as is (without the base) and it can be renamed later to something more sensible.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fontRangesForFamily):
        (WebCore::CSSFontSelector::fallbackFontDataAt):
        (WebCore::CSSFontSelector::getFontData): Deleted.
        (WebCore::CSSFontSelector::getFallbackFontData): Deleted.
        * css/CSSFontSelector.h:
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::pruneTable):
        (WebCore::appendFontDataWithInvalidUnicodeRangeIfLoading):
        (WebCore::CSSSegmentedFontFace::fontRanges):
        (WebCore::CSSSegmentedFontFace::loadFont):
        (WebCore::CSSSegmentedFontFace::getFontData): Deleted.
        * css/CSSSegmentedFontFace.h:
        * platform/graphics/Font.h:
        (WebCore::Font::fallbackRangesAt):
        (WebCore::Font::fontDataAt): Deleted.
        * platform/graphics/FontData.cpp: Removed.
        * platform/graphics/FontData.h: Removed.
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::FontGlyphs):
        (WebCore::FontGlyphs::determinePitch):
        (WebCore::FontGlyphs::isLoadingCustomFonts):
        (WebCore::realizeNextFallback):
        (WebCore::FontGlyphs::realizeFallbackRangesAt):
        (WebCore::FontGlyphs::glyphDataForSystemFallback):
        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForNormalVariant):
        (WebCore::glyphPageFromFontRanges):
        (WebCore::FontGlyphs::glyphDataForCharacter):
        (WebCore::realizeNextFamily): Deleted.
        (WebCore::FontGlyphs::realizeFontDataAt): Deleted.
        (WebCore::glyphPageFromFontData): Deleted.
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::primarySimpleFontData):
        * platform/graphics/FontRanges.cpp: Copied from Source/WebCore/platform/graphics/SegmentedFontData.cpp.
        (WebCore::FontRanges::FontRanges):
        (WebCore::FontRanges::~FontRanges):
        (WebCore::FontRanges::fontDataForCharacter):
        (WebCore::FontRanges::fontDataForFirstRange):
        (WebCore::FontRanges::isLoading):
        (WebCore::SegmentedFontData::SegmentedFontData): Deleted.
        (WebCore::SegmentedFontData::~SegmentedFontData): Deleted.
        (WebCore::SegmentedFontData::simpleFontDataForCharacter): Deleted.
        (WebCore::SegmentedFontData::simpleFontDataForFirstRange): Deleted.
        (WebCore::SegmentedFontData::isCustomFont): Deleted.
        (WebCore::SegmentedFontData::isLoading): Deleted.
        (WebCore::SegmentedFontData::isSegmented): Deleted.
        (WebCore::SegmentedFontData::description): Deleted.
        * platform/graphics/FontRanges.h: Copied from Source/WebCore/platform/graphics/SegmentedFontData.h.
        (WebCore::FontRanges::Range::Range):
        (WebCore::FontRanges::Range::from):
        (WebCore::FontRanges::Range::to):
        (WebCore::FontRanges::Range::fontData):
        (WebCore::FontRanges::isEmpty):
        (WebCore::FontRanges::appendRange):
        (WebCore::FontRanges::size):
        (WebCore::FontRanges::rangeAt):
        (WebCore::FontDataRange::FontDataRange): Deleted.
        (WebCore::FontDataRange::from): Deleted.
        (WebCore::FontDataRange::to): Deleted.
        (WebCore::FontDataRange::fontData): Deleted.
        (WebCore::SegmentedFontData::create): Deleted.
        (WebCore::SegmentedFontData::appendRange): Deleted.
        (WebCore::SegmentedFontData::numRanges): Deleted.
        (WebCore::SegmentedFontData::rangeAt): Deleted.
        (isType): Deleted.
        * platform/graphics/FontSelector.h:
        * platform/graphics/SegmentedFontData.cpp: Removed.
        * platform/graphics/SegmentedFontData.h: Removed.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::simpleFontDataForCharacter): Deleted.
        (WebCore::SimpleFontData::simpleFontDataForFirstRange): Deleted.
        (WebCore::SimpleFontData::isSegmented): Deleted.
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::isCustomFont):
        (WebCore::SimpleFontData::isLoading):
        (isType): Deleted.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (-[WebCascadeList initWithFont:character:]):
        (-[WebCascadeList objectAtIndex:]):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::fontDataForCombiningCharacterSequence):

2015-01-13  Dean Jackson  <dino@apple.com>

        Filters aren't applied to elements in columns after the first
        https://bugs.webkit.org/show_bug.cgi?id=140331

        Reviewed by Simon Fraser.

        The important bits of this change came from Simon.

        Filters and clipping were not taking columns into
        account when using their offset rectangles. The fix
        is to recalculate the rects if you're in such a
        situation.

        Tests: fast/multicol/clip-in-columns.html
               fast/multicol/filter-in-columns.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasFilterThatIsPainting): New method used
        to check if we're about to paint a filter.
        (WebCore::RenderLayer::setupFilters): Use the new helper if possible.
        (WebCore::RenderLayer::paintLayerContents): If we're in columns,
        and we either have a clip or a filter, recalculate the offset rectangles.
        * rendering/RenderLayer.h:

2015-01-13  Beth Dakin  <bdakin@apple.com>

        Should disable immediate actions for iTunes
        https://bugs.webkit.org/show_bug.cgi?id=140405
        -and corresponding-
        rdar://problem/19461358

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2015-01-13  Anders Carlsson  <andersca@apple.com>

        Remove pure virtual functions from DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=140402

        Reviewed by Sam Weinig.

        Also change DatabaseBackendBase to Database in a couple of places.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::closeDatabase):
        (WebCore::DoneCreatingDatabaseOnExitCaller::~DoneCreatingDatabaseOnExitCaller):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::maximumSize):
        * Modules/webdatabase/DatabaseBackendBase.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:

2015-01-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused ResizeImage and DecodeImageData timeline events
        https://bugs.webkit.org/show_bug.cgi?id=140404

        Reviewed by Timothy Hatcher.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::toProtocol):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createDecodeImageData): Deleted.
        (WebCore::TimelineRecordFactory::createResizeImageData): Deleted.
        * inspector/TimelineRecordFactory.h:

2015-01-13  Jer Noble  <jer.noble@apple.com>

        defaultPlaybackRate not respected when set before source is loaded
        https://bugs.webkit.org/show_bug.cgi?id=140282

        Reviewed by Eric Carlson.

        Test: media/video-defaultplaybackrate-before-load.html

        When the HTMLMediaElement is notified that the media player's rate has changed, it asks
        for the rate from MediaPlayer. However, MediaPlayer never requests the playback rate
        from the underlying MediaPlayerPrivate; it just returns the last rate which was set, or
        1 if no rate was set. HTMLMediaElement then sets its playbackRate to the returned
        value. So the end result is that the value from defaultPlaybackRate is overwritten by
        the default value of 1 in MediaPlayer.

        Rather than caching the requested rate in MediaPlayer, cache the value reported by
        MediaPlayer inside HTMLMediaElement. And instead of returning the reported playback
        rate from HTMLMediaElement.playbackRate, just return the last value set. The reported
        value is still used for estimating the current time during playback.

        Add MediaPlayerPrivate interface method to return the current playback rate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::effectivePlaybackRate): Return m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::requestedPlaybackRate): Return m_playbackRate.
        (WebCore::HTMLMediaElement::updatePlaybackRate): Use requestedPlaybackRate() instead
            of effectivePlaybackRate();
        (WebCore::HTMLMediaElement::ended): Ditto.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Ditto.
        (WebCore::HTMLMediaElement::endedPlayback): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged): Set m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::mediaPlayerRequestedPlaybackRate): Return
            requestedPlaybackRate() if playing and 0 if not.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Removed m_rate.
        (WebCore::MediaPlayer::rate): Pass to MediaPlayerPrivate.
        (WebCore::MediaPlayer::setRate): Do not cache the rate.
        (WebCore::MediaPlayer::requestedRate): Added; ask HTMLMediaElement.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRequestedPlaybackRate): Added.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::rate): Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
            Do not cache the requested rate.
        (WebCore::MediaPlayerPrivateAVFoundation::requestedRate): Pass to MediaPlayer.
        (WebCore::MediaPlayerPrivateAVFoundation::setRate): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::requestedRate): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::setRate): Renamed from updateRate.
        (WebCore::MediaPlayerPrivateAVFoundationCF::rate): Fetch the rate from the player.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setRateDouble): Renamed from updateRate.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate): Fetch the rate from the player.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::rate): Fetch the rate from the QTMovie.

2015-01-13  Andreas Kling  <akling@apple.com>

        Element::normalizeAttributes() needs to handle arbitrary JS executing between loop iterations.
        <https://webkit.org/b/140379>
        <rdar://problem/19446901>

        Reviewed by Benjamin Poulain.

        Since DOM mutation events may arise below the call to Node::normalize(),
        have the loop in Element::normalizeAttributes() make a copy of the Attr nodes
        beforehand, to guard against mutations.

        Based on a patch by Chris "Chris Dumez" Dumez.

        Test: fast/dom/Element/normalize-crash2.html

        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes):

2015-01-13  Shivakumar JM  <shiva.jm@samsung.com>

        Fix Debug Build Error in Webcore module.
        https://bugs.webkit.org/show_bug.cgi?id=140383

        Reviewed by Csaba Osztrogonác.

        No new tests because there is no visible behavior change.

        * platform/linux/MemoryPressureHandlerLinux.cpp:
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):

2015-01-12  Benjamin Poulain  <benjamin@webkit.org>

        Fix a typo in r178313

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):

2015-01-12  Benjamin Poulain  <benjamin@webkit.org>

        Add basic pattern matching support to the url filters
        https://bugs.webkit.org/show_bug.cgi?id=140283

        Reviewed by Andreas Kling.

        This patch adds some basic generic pattern support for the url filters
        of ContentExtensions.

        Instead of writting a new parser, I re-used Gavin's parser for JavaScript
        RegExp.

        This patch only implements the very basic stuffs: transition on any character
        and repetition.

        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        Use the new parser.

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::DFA):
        (WebCore::ContentExtensions::printRange):
        (WebCore::ContentExtensions::printTransition):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::printRange):
        (WebCore::ContentExtensions::printTransition):
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        The graphs generated with the extended patterns are vastly more complicated
        than the old prefix matcher.
        I changed the debug output to have a single link between any two nodes
        instead of one per transition. This makes the graph a little more manageable.

        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::addTransition):
        (WebCore::ContentExtensions::NFA::addEpsilonTransition):
        (WebCore::ContentExtensions::NFA::graphSize):
        (WebCore::ContentExtensions::NFA::restoreToGraphSize):
        * contentextensions/NFA.h:
        * contentextensions/NFANode.h:
        (WebCore::ContentExtensions::epsilonClosure):
        The new parser can generate transitions back to the root node of index zero.
        All the hash structures had to be updated to support this kind of key.

        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::HashableNodeIdSetHash::hash):
        Two tiny improvements:
        -Don't hash zero to zero, it causes more conflicts that needed.
        -The hash operation must use a commutative operation, otherwise the order
         of elements can affect the hash, which is undesired for a set.
        I'll improve this further later.

        (WebCore::ContentExtensions::NFAToDFA::convert):

        * contentextensions/URLFilterParser.cpp: Added.
        (WebCore::ContentExtensions::GraphBuilder::GraphBuilder):
        (WebCore::ContentExtensions::GraphBuilder::m_lastAtom):
        (WebCore::ContentExtensions::GraphBuilder::finalize):
        (WebCore::ContentExtensions::GraphBuilder::errorMessage):
        (WebCore::ContentExtensions::GraphBuilder::atomPatternCharacter):
        (WebCore::ContentExtensions::GraphBuilder::atomBuiltInCharacterClass):
        (WebCore::ContentExtensions::GraphBuilder::quantifyAtom):
        (WebCore::ContentExtensions::GraphBuilder::atomBackReference):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassAtom):
        (WebCore::ContentExtensions::GraphBuilder::assertionBOL):
        (WebCore::ContentExtensions::GraphBuilder::assertionEOL):
        (WebCore::ContentExtensions::GraphBuilder::assertionWordBoundary):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassRange):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassBuiltIn):
        (WebCore::ContentExtensions::GraphBuilder::atomCharacterClassEnd):
        (WebCore::ContentExtensions::GraphBuilder::atomParenthesesSubpatternBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomParentheticalAssertionBegin):
        (WebCore::ContentExtensions::GraphBuilder::atomParenthesesEnd):
        (WebCore::ContentExtensions::GraphBuilder::disjunction):
        (WebCore::ContentExtensions::GraphBuilder::hasError):
        (WebCore::ContentExtensions::GraphBuilder::fail):
        (WebCore::ContentExtensions::URLFilterParser::parse):
        * contentextensions/URLFilterParser.h:
        (WebCore::ContentExtensions::URLFilterParser::hasError):
        (WebCore::ContentExtensions::URLFilterParser::errorMessage):

2015-01-11  Sam Weinig  <sam@webkit.org>

        Remove support for SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=140344

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::sharedWorkerEnabled): Deleted.
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSSharedWorkerCustom.cpp: Removed.
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::toJSWorkerGlobalScope):
        (WebCore::toJSSharedWorkerGlobalScope): Deleted.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/preprocess-idls.pl:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/EventTarget.h:
        * dom/EventTargetFactory.in:
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * loader/FrameLoader.cpp:
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessLocalStorage):
        (WebCore::SecurityOrigin::canAccessSharedWorkers): Deleted.
        * platform/FeatureCounterKeys.h:
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies):
        (WebCore::PlatformStrategies::sharedWorkerStrategy): Deleted.
        * workers/DefaultSharedWorkerRepository.cpp: Removed.
        * workers/DefaultSharedWorkerRepository.h: Removed.
        * workers/SharedWorker.cpp: Removed.
        * workers/SharedWorker.h: Removed.
        * workers/SharedWorker.idl: Removed.
        * workers/SharedWorkerGlobalScope.cpp: Removed.
        * workers/SharedWorkerGlobalScope.h: Removed.
        * workers/SharedWorkerGlobalScope.idl: Removed.
        * workers/SharedWorkerRepository.cpp: Removed.
        * workers/SharedWorkerRepository.h: Removed.
        * workers/SharedWorkerStrategy.h: Removed.
        * workers/SharedWorkerThread.cpp: Removed.
        * workers/SharedWorkerThread.h: Removed.
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::isSharedWorkerGlobalScope): Deleted.

2015-01-12  Byungseon Shin  <sun.shin@lge.com>

        REGRESSION(r178029): [GTK][EFL] Caused no-backing-for-clip-overlap test failures
        https://bugs.webkit.org/show_bug.cgi?id=140336

        Reviewed by Simon Fraser.

        Avoid creating childClippingMaskLayer when renderer has not border radius nor clip path.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):

2015-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Apple] Squelch stderr log regarding negative stroke thickness
        https://bugs.webkit.org/show_bug.cgi?id=140372
        <rdar://problem/19426485>

        Reviewed by Eric Carlson.

        No new tests because there is no visible behavior change.

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

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        Get rid of unnecessary reimplementations of CGFloor/Ceiling
        https://bugs.webkit.org/show_bug.cgi?id=140375

        Reviewed by Simon Fraser.

        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        (WebCore::webkit_CGCeiling): Deleted.
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):
        (webkit_CGFloor): Deleted.
        Delete unnecessary code, use the real CGFloor/Ceiling instead.

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r177656): Text in find-in-page yellow bouncy rectangle is not crisp
        https://bugs.webkit.org/show_bug.cgi?id=140373
        <rdar://problem/19447156>

        Reviewed by Simon Fraser.

        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Expand the window margin to the nearest integer.
        The window was already being pixel-snapped, but then we'd translate by
        the non-integral margin when building up the layer tree.
        It's OK to do this on 2x because it's fine to have the margin be bigger
        than needed.

        * platform/spi/cg/CoreGraphicsSPI.h:
        Add a CGCeiling to match CGFloor.

2015-01-12  Andreas Kling  <akling@apple.com>

        Guard web thread stuff with USE(WEB_THREAD) instead of PLATFORM(IOS).

        Dan pointed out that we should guard WebThreadIsLockedOrDisabled() with
        USE(WEB_THREAD) to communicate our ambitions to someday have an iOS
        build of WebKit that doesn't need any of that.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::resume):

2015-01-12  Andreas Kling  <akling@apple.com>

        Fix build for non-iOS platforms. :|

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::resume):

2015-01-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [Freetype] Don't use non-scalable fonts.
        https://bugs.webkit.org/show_bug.cgi?id=31931

        Reviewed by Martin Robinson.

        No new tests needed.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData): Prefer scalable fonts.

2015-01-12  Andreas Kling  <akling@apple.com>

        Geolocation objects shouldn't prevent page caching.
        <https://webkit.org/b/140369>

        Reviewed by Joseph Pecoraro.

        Enable the code for suspend/resume of Geolocation objects on all platforms
        instead of just iOS. This allows pages using geolocation to use page cache
        instead of reloading on back/forward navigation.

        Test: fast/history/page-cache-geolocation.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::setError):
        * Modules/geolocation/Geolocation.h:

2015-01-12  Chris Dumez  <cdumez@apple.com>

        Log navigation types using DiagnosticLoggingClient
        https://bugs.webkit.org/show_bug.cgi?id=140323

        Reviewed by Darin Adler.

        Log navigation types using DiagnosticLoggingClient to help us understand
        what types of navigations are common and give us an estimate on the
        total number of navigations.

        * loader/FrameLoader.cpp:
        (WebCore::logNavigation):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::logNavigationWithFeatureCounter): Deleted.
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::navigationKey):
        * page/DiagnosticLoggingKeys.h:

2015-01-12  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ASSERT under WebCore::InspectorResourceAgent::loadResource
        https://bugs.webkit.org/show_bug.cgi?id=140367

        Reviewed by Andreas Kling.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::loadResource): use copyRef() instead of move(),
        since we check the callback after giving it to the loader client.

2015-01-12  Anders Carlsson  <andersca@apple.com>

        Move DatabaseBackend functions back to Database
        https://bugs.webkit.org/show_bug.cgi?id=140368

        Reviewed by Sam Weinig.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::close):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::transactionClient):
        (WebCore::Database::transactionCoordinator):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::openAndVerifyVersion): Deleted.
        (WebCore::DatabaseBackend::performOpenAndVerify): Deleted.
        (WebCore::DatabaseBackend::close): Deleted.
        (WebCore::DatabaseBackend::runTransaction): Deleted.
        (WebCore::DatabaseBackend::inProgressTransactionCompleted): Deleted.
        (WebCore::DatabaseBackend::scheduleTransaction): Deleted.
        (WebCore::DatabaseBackend::scheduleTransactionStep): Deleted.
        (WebCore::DatabaseBackend::transactionClient): Deleted.
        (WebCore::DatabaseBackend::transactionCoordinator): Deleted.
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::recordDatabaseOpen):
        (WebCore::DatabaseThread::recordDatabaseClosed):
        (WebCore::SameDatabasePredicate::SameDatabasePredicate):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackend.h:
        (WebCore::SQLTransactionBackend::database):

2015-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comment after r178292
        https://bugs.webkit.org/show_bug.cgi?id=136769

        Unreviewed.

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

2015-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow targetting the SVG->OTF font converter with ENABLE(SVG_OTF_CONVERTER)
        https://bugs.webkit.org/show_bug.cgi?id=136769

        Reviewed by Antti Koivisto.

        If ENABLE(SVG_OTF_CONVERTER) is defined, use the converter. It can be defined at the same
        time as ENABLE(SVG_FONTS) but, if so, the SVG font code will be dead code.

        No new tests because the define is off by default. Tests will come soon, I promise.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): When creating a font, if the ENABLE is on,
        do the transcode and take the non-SVG path.
        (WebCore::CSSFontFaceSource::ensureFontData): Pass extra arguments to
        CachedFont::ensureCustomFontData()
        * css/CSSFontFaceSource.h: For the case of in-document SVG fonts, keep the transcoded
        bytes around.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData): For out-of-document SVG fonts, do the
        transcode if the ENABLE is on, then treat as if the font is any old webfont.
        (WebCore::CachedFont::getSVGFontById): This function looks up the relevant <font>
        element. Modify it to take a pointer to a (possibly external) document within which
        to search.
        * loader/cache/CachedFont.h: Extra arguments to CachedFont::ensureCustomFontData()
        and CachedFont::getSVGFontById()

2015-01-12  Zan Dobersek  <zdobersek@igalia.com>

        Clean up FrameTree::traverseNext() traversals of main frames
        https://bugs.webkit.org/show_bug.cgi?id=140338

        Reviewed by Andreas Kling.

        There's no reason to pass the main frame as the stayWithin parameter
        to FrameTree::traverseNext() when traversing over that same main frame.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::searchInResources):
        * replay/SerializationMethods.cpp:
        (WebCore::frameIndexFromFrame):
        (WebCore::frameFromFrameIndex):

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        Multi-rect TextIndicators are vertically flipped in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=140350
        <rdar://problem/19441243>

        Reviewed by Beth Dakin.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::TextIndicator::TextIndicator):
        * page/TextIndicator.h:
        (WebCore::TextIndicator::selectionRectInRootViewCoordinates):
        (WebCore::TextIndicator::textBoundingRectInRootViewCoordinates):
        (WebCore::TextIndicator::selectionRectInWindowCoordinates): Deleted.
        (WebCore::TextIndicator::textBoundingRectInWindowCoordinates): Deleted.
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Compute, store, and use TextIndicator's selectionRect and textBoundingRect
        in root view coordinates instead of window coordinates; this way, each
        WebKit can do the conversion itself, and the rootView vs. window flipping
        isn't wrongly factored into textRectsInBoundingRectCoordinates.

2015-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178281.
        https://bugs.webkit.org/show_bug.cgi?id=140366

        Broke many media tests (Requested by ap on #webkit).

        Reverted changeset:

        "defaultPlaybackRate not respected when set before source is
        loaded"
        https://bugs.webkit.org/show_bug.cgi?id=140282
        http://trac.webkit.org/changeset/178281

2015-01-12  Anders Carlsson  <andersca@apple.com>

        Merge DatabaseBackendContext into DatabaseContext
        https://bugs.webkit.org/show_bug.cgi?id=140365

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::DatabaseBackend):
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        * Modules/webdatabase/DatabaseBackendBase.h:
        (WebCore::DatabaseBackendBase::databaseContext):
        * Modules/webdatabase/DatabaseBackendContext.cpp: Removed.
        * Modules/webdatabase/DatabaseBackendContext.h: Removed.
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::securityOrigin):
        (WebCore::DatabaseContext::isContextThread):
        (WebCore::DatabaseContext::backend): Deleted.
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::interruptAllDatabasesForContext):
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::interruptAllDatabasesForContext):
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionClient.cpp:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-12  Jer Noble  <jer.noble@apple.com>

        defaultPlaybackRate not respected when set before source is loaded
        https://bugs.webkit.org/show_bug.cgi?id=140282

        Reviewed by Eric Carlson.

        Test: media/video-defaultplaybackrate-before-load.html

        When the HTMLMediaElement is notified that the media player's rate has changed, it asks
        for the rate from MediaPlayer. However, MediaPlayer never requests the playback rate
        from the underlying MediaPlayerPrivate; it just returns the last rate which was set, or
        1 if no rate was set. HTMLMediaElement then sets its playbackRate to the returned
        value. So the end result is that the value from defaultPlaybackRate is overwritten by
        the default value of 1 in MediaPlayer.

        Rather than caching the requested rate in MediaPlayer, cache the value reported by
        MediaPlayer inside HTMLMediaElement. And instead of returning the reported playback
        rate from HTMLMediaElement.playbackRate, just return the last value set. The reported
        value is still used for estimating the current time during playback.

        Add MediaPlayerPrivate interface method to return the current playback rate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::effectivePlaybackRate): Return m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::requestedPlaybackRate): Return m_playbackRate.
        (WebCore::HTMLMediaElement::updatePlaybackRate): Use requestedPlaybackRate() instead
            of effectivePlaybackRate();
        (WebCore::HTMLMediaElement::ended): Ditto.
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Ditto.
        (WebCore::HTMLMediaElement::endedPlayback): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged): Set m_reportedPlaybackRate.
        (WebCore::HTMLMediaElement::mediaPlayerRequestedPlaybackRate): Return
            requestedPlaybackRate() if playing and 0 if not.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Removed m_rate.
        (WebCore::MediaPlayer::rate): Pass to MediaPlayerPrivate.
        (WebCore::MediaPlayer::setRate): Do not cache the rate.
        (WebCore::MediaPlayer::requestedRate): Added; ask HTMLMediaElement.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRequestedPlaybackRate): Added.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::rate): Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
            Do not cache the requested rate.
        (WebCore::MediaPlayerPrivateAVFoundation::requestedRate): Pass to MediaPlayer.
        (WebCore::MediaPlayerPrivateAVFoundation::setRate): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::requestedRate): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::setRate): Renamed from updateRate.
        (WebCore::MediaPlayerPrivateAVFoundationCF::rate): Fetch the rate from the player.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setRateDouble): Renamed from updateRate.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate): Fetch the rate from the player.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::rate): Fetch the rate from the QTMovie.

2015-01-11  Anders Carlsson  <andersca@apple.com>

        Merge DatabaseBase into Database
        https://bugs.webkit.org/show_bug.cgi?id=140345

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::logErrorMessage):
        * Modules/webdatabase/Database.h:
        (WebCore::Database::scriptExecutionContext):
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        * Modules/webdatabase/DatabaseBackendBase.h:
        (WebCore::DatabaseBackendBase::setFrontend):
        * Modules/webdatabase/DatabaseBase.cpp: Removed.
        * Modules/webdatabase/DatabaseBase.h: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-12  Darin Adler  <darin@apple.com>

        Modernize and streamline HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=140166

        Reviewed by Sam Weinig.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::initializeAttributes): Removed unneeded assertions
        based on fields I removed.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Change to use updateStateFor
        to set the initial state when parsing a fragment, since it implements the same
        rule taht the tokenizerStateForContextElement function did.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Updated to use the revised
        interfaces for HTMLSourceTracker and HTMLTokenizer.
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken): Changed to take a
        TokenPtr instead of an HTMLToken, so we can clear out the TokenPtr earlier
        for non-character tokens, and let them get cleared later for character tokens.
        (WebCore::HTMLDocumentParser::insert): Pass references.
        (WebCore::HTMLDocumentParser::append): Ditto.
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan): Ditto.

        * html/parser/HTMLDocumentParser.h: Updated argument type for constructTreeFromHTMLToken
        and removed now-unneeded m_token data members.

        * html/parser/HTMLEntityParser.cpp: Removed unneeded uses of the inline keyword.
        (WebCore::HTMLEntityParser::consumeNamedEntity): Replaced two uses of
        advanceAndASSERT with just plain advance; there's really no need to assert the
        character is the one we just got out of the string.

        * html/parser/HTMLInputStream.h: Moved the include of TextPosition.h here from
        its old location since this class has two data members that are OrdinalNumber.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser): Removed most of the
        initialization, since it's now done by defaults.
        (WebCore::extractCharset): Rewrote this to be a non-member function, and to
        use a for loop, and to handle quote marks in a simpler way. Also changed it
        to return a StringView so we don't have to allocate a new string.
        (WebCore::HTMLMetaCharsetParser::processMeta): Use a modern for loop, and
        also take a token argument since it's no longer a data member.
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes): Use a modern for
        loop, StringView instead of string, and don't bother naming the local enum.
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): Updated for the new
        way of getting tokens from the tokenizer.

        * html/parser/HTMLMetaCharsetParser.h: Got rid of some data members and
        tightened up the formatting a little. Don't bother allocating the tokenizer
        on the heap.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::TokenPreloadScanner): Removed unneeded
        initialization.
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner): Ditto.
        (WebCore::HTMLPreloadScanner::scan): Changed to take a reference.

        * html/parser/HTMLPreloadScanner.h: Removed unneeded includes, typedefs,
        and forward declarations. Removed explicit declaration of the destructor,
        since the default one works. Removed unused createCheckpoint and rewindTo
        functions. Gave initial values for various data members. Marked the device
        scale factor const beacuse it's set in the constructor and never changed.
        Also removed the unneeded isSafeToSendToAnotherThread.

        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::isSafeToSendToAnotherThread): Deleted.

        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest): Removed unneeded calls to
        isolatedCopy. Also removed isSafeToSendToAnotherThread.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::startToken): Renamed. Changed to keep state
         in the source tracker itself, not the token.
        (WebCore::HTMLSourceTracker::endToken): Ditto.
        (WebCore::HTMLSourceTracker::source): Renamed. Changed to use the state
        from the source tracker.

        * html/parser/HTMLSourceTracker.h: Removed unneeded include of HTMLToken.h.
        Renamed functions, removed now-unneeded comment.

        * html/parser/HTMLToken.h: Cut down on the fields used by the source tracker.
        It only needs to know the start and end of each attribute, not each part of
        each attribute. Removed setBaseOffset, setEndOffset, length, addNewAttribute,
        beginAttributeName, endAttributeName, beginAttributeValue, endAttributeValue,
        m_baseOffset and m_length. Added beginAttribute and endAttribute.
        (WebCore::HTMLToken::clear): No need to zero m_length or m_baseOffset any more.
        (WebCore::HTMLToken::length): Deleted.
        (WebCore::HTMLToken::setBaseOffset): Deleted.
        (WebCore::HTMLToken::setEndOffset): Deleted.
        (WebCore::HTMLToken::beginStartTag): Only null out m_currentAttribute if we
        are compiling in assertions.
        (WebCore::HTMLToken::beginEndTag): Ditto.
        (WebCore::HTMLToken::addNewAttribute): Deleted.
        (WebCore::HTMLToken::beginAttribute): Moved the code from addNewAttribute in
        here and set the start offset.
        (WebCore::HTMLToken::beginAttributeName): Deleted.
        (WebCore::HTMLToken::endAttributeName): Deleted.
        (WebCore::HTMLToken::beginAttributeValue): Deleted.
        (WebCore::HTMLToken::endAttributeValue): Deleted.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLToken::endAttribute): Added. Sets the end offset.
        (WebCore::HTMLToken::appendToAttributeName): Updated assertion.
        (WebCore::HTMLToken::appendToAttributeValue): Ditto.
        (WebCore::convertASCIIAlphaToLower): Renamed from toLowerCase and changed
        so it's legal to call on lower case letters too.
        (WebCore::vectorEqualsString): Changed to take a string literal rather than
        a WTF::String.
        (WebCore::HTMLTokenizer::inEndTagBufferingState): Made this a member function.
        (WebCore::HTMLTokenizer::HTMLTokenizer): Updated for data member changes.
        (WebCore::HTMLTokenizer::bufferASCIICharacter): Added. Optimized version of
        bufferCharacter for the common case where we know the character is ASCII.
        (WebCore::HTMLTokenizer::bufferCharacter): Moved this function here from the
        header since it's only used inside the class.
        (WebCore::HTMLTokenizer::emitAndResumeInDataState): Moved this here, renamed
        it and removed the state argument.
        (WebCore::HTMLTokenizer::emitAndReconsumeInDataState): Ditto.
        (WebCore::HTMLTokenizer::emitEndOfFile): More of the same.
        (WebCore::HTMLTokenizer::saveEndTagNameIfNeeded): Ditto.
        (WebCore::HTMLTokenizer::haveBufferedCharacterToken): Ditto.
        (WebCore::HTMLTokenizer::flushBufferedEndTag): Updated since m_token is now
        the actual token, not just a pointer.
        (WebCore::HTMLTokenizer::flushEmitAndResumeInDataState): Renamed this and
        removed the state argument.
        (WebCore::HTMLTokenizer::processToken): This function, formerly nextToken,
        is now the internal function used by nextToken. Updated its contents to use
        simpler macros, changed code to set m_state when returning, rather than
        constantly setting it when cycling through states, switched style to use
        early return/goto rather than lots of else statements, took out unneeded
        braces now that BEGIN/END_STATE handles the braces, collapsed upper and
        lower case letter handling in many states, changed lookAhead call sites to
        use the new advancePast function instead.
        (WebCore::HTMLTokenizer::updateStateFor): Set m_state directly instead of
        calling a setstate function.
        (WebCore::HTMLTokenizer::appendToTemporaryBuffer): Moved here from header.
        (WebCore::HTMLTokenizer::temporaryBufferIs): Changed argument type to
        a literal instead of a WTF::String.
        (WebCore::HTMLTokenizer::appendToPossibleEndTag): Renamed and changed type
        to be a UChar instead of LChar, although all characters will be ASCII.
        (WebCore::HTMLTokenizer::isAppropriateEndTag): Marked const, and changed
        type from size_t to unsigned.

        * html/parser/HTMLTokenizer.h: Changed interface of nextToken so it returns
        a TokenPtr so code doesn't have to understand special rules about when to
        work with an HTMLToken and when to clear it. Made most functions private,
        and made the State enum private as well. Replaced the state and setState
        functions with more specific functions for the few states we need to deal
        with outside the class. Moved function bodies outside the class definition
        so it's easier to read the class definition.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Updated to use the
        new set state functions instead of setState.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processScriptStartTag): Ditto.

        * html/parser/InputStreamPreprocessor.h: Marked the constructor explicit,
        and mde it take a reference rather than a pointer.

        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement): Updated to use the
        new set state functions instead of setState.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForName): Updated for name change.
        (WebCore::XSSAuditor::decodedSnippetForAttribute): Updated for changes to
        attribute range tracking.
        (WebCore::XSSAuditor::decodedSnippetForJavaScript): Updated for name change.
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread): Deleted.

        * html/parser/XSSAuditor.h: Deleted isSafeToSendToAnotherThread.

        * html/track/WebVTTTokenizer.cpp: Removed the local state variable from
        WEBVTT_ADVANCE_TO; there is no need for it.
        (WebCore::WebVTTTokenizer::WebVTTTokenizer): Use a reference instead of a
        pointer for the preprocessor.
        (WebCore::WebVTTTokenizer::nextToken): Ditto. Also removed the state local
        variable and the switch statement, replacing with labels instead since we
        go between states with goto.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::operator=): Changed the return type to be non-const
        to match normal C++ design rules.
        (WebCore::SegmentedString::pushBack): Renamed from prepend since this is not a
        general purpose prepend function. Also fixed assertions to not use the strangely
        named "escaped" function, since we are deleting it.
        (WebCore::SegmentedString::append): Ditto.
        (WebCore::SegmentedString::advancePastNonNewlines): Renamed from advance, since
        the function only works for non-newlines.
        (WebCore::SegmentedString::currentColumn): Got rid of unneeded local variable.
        (WebCore::SegmentedString::advancePastSlowCase): Moved here from header and
        renamed. This function now consumes the characters if they match.

        * platform/text/SegmentedString.h: Made the changes mentioned above.
        (WebCore::SegmentedString::excludeLineNumbers): Deleted.
        (WebCore::SegmentedString::advancePast): Renamed from lookAhead. Also changed
        behavior so the characters are consumed.
        (WebCore::SegmentedString::advancePastIgnoringCase): Ditto.
        (WebCore::SegmentedString::advanceAndASSERT): Deleted.
        (WebCore::SegmentedString::advanceAndASSERTIgnoringCase): Deleted.
        (WebCore::SegmentedString::escaped): Deleted.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::isHexDigit): Deleted.
        (WebCore::unconsumeCharacters): Updated for name change.
        (WebCore::consumeCharacterReference): Removed unneeded name for local enum,
        renamed local variable "cc" to character. Changed code to use helpers like
        isASCIIAlpha and toASCIIHexValue. Removed unneeded use of advanceAndASSERT,
        since we don't really need to assert the character we just extracted.

        * xml/parser/MarkupTokenizerInlines.h:
        (WebCore::isTokenizerWhitespace): Renamed argument to character.
        (WebCore::advanceStringAndASSERTIgnoringCase): Deleted.
        (WebCore::advanceStringAndASSERT): Deleted.
        Changed all the macro implementations so they set m_state only when
        returning from the function and just use goto inside the state machine.

2015-01-11  Andreas Kling  <akling@apple.com>

        Enable Vector bounds checking for ElementDescendantIterator.
        <https://webkit.org/b/140346>

        Reviewed by Sam Weinig.

        I had originally disabled Vector bounds checking for
        ElementDescendantIterator's internal ancestor stack, but upon
        re-running performance benchmarks, it appears to have little-to-no
        measurable benefit.

        This change adds back the bounds checking.

        * dom/ElementDescendantIterator.h:

2015-01-11  Chris Dumez  <cdumez@apple.com>

        Drop legacy SVGCSSStyleSelector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140342

        Reviewed by Antti Koivisto.

        Drop legacy SVGCSSStyleSelector.cpp by porting the remaining SVG CSS
        properties to the generated StyleBuilder. This patch also removes
        support for the "LegacyStyleBuilder" option in CSSPropertyNames.in
        as all properties have now been ported over.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Drop SVGCSSStyleSelector.cpp file as it was removed.

        * css/CSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp: Removed.
        * css/StyleBuilder.h:
        StyleBuilder::applyProperty() no longer need to return a boolean as
        it now handles ALL CSS properties.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueBaselineShift):
        (WebCore::StyleBuilderCustom::applyInitialFill):
        (WebCore::StyleBuilderCustom::applyInheritFill):
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyInitialStroke):
        (WebCore::StyleBuilderCustom::applyInheritStroke):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        (WebCore::StyleBuilderCustom::applyInitialWebkitSvgShadow):
        (WebCore::StyleBuilderCustom::applyInheritWebkitSvgShadow):
        (WebCore::StyleBuilderCustom::applyValueWebkitSvgShadow):
        Move 'fill', 'stroke' and '-webkit-svg-shadow' to the new
        StyleBuilder.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/makeprop.pl:

2015-01-11  Antti Koivisto  <antti@apple.com>

        Remove FontCachePurgePreventer
        https://bugs.webkit.org/show_bug.cgi?id=139628

        Reviewed by Anders Carlsson.

        This stack type is bug prone and invasive. A missing FontCachePurgePreventer in a code that touches fonts is always
        a hard-to-detect bug and there are many places that need it. Instead purge the font cache on top of the runloop.

        The purge timer could in principle fire in a nested runloop. However we should never have unreferenced
        SimpleFontData objects in the stack in such case (GlyphData objects don't currently ref the font) because those
        only occur during layout and painting. Layout and painting can't trigger a nested runloops as there would be
        bigger problems.

        Purging may also be triggered synchronously by a memory notification. That case won't have any GlyphDatas in the stack either.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::FontCache):
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::purgeTimerFired):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        (WebCore::FontCache::disablePurging): Deleted.
        (WebCore::FontCache::enablePurging): Deleted.
        (WebCore::FontCachePurgePreventer::FontCachePurgePreventer): Deleted.
        (WebCore::FontCachePurgePreventer::~FontCachePurgePreventer): Deleted.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::emphasisMarkAscent):
        (WebCore::Font::emphasisMarkDescent):
        (WebCore::Font::emphasisMarkHeight):
        (WebCore::Font::drawEmphasisMarks):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        (WebCore::createDragImageForLink):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        (WebCore::WebCoreTextFloatWidth):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::updateOptionsWidth):
        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateStyle):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeChildWasAdded):
        (WebCore::RenderSVGText::subtreeStyleDidChange):
        (WebCore::RenderSVGText::subtreeTextDidChange):
        (WebCore::RenderSVGText::removeChild):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):

2015-01-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Implement ligatures
        https://bugs.webkit.org/show_bug.cgi?id=137094

        Reviewed by Dan Bernstein.

        Use the "liga" OpenType feature to implement ligatures inside the GSUB table.

        Tests: svg/W3C-SVG-1.1/fonts-glyph-04-t.svg
               svg/W3C-SVG-1.1/text-text-06-t.svg
               svg/text/kerning.svg
               svg/text/multichar-glyph.svg

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::grow):
        (WebCore::SVGToOTFFontConverter::appendCMAPTable): Use StringView::codePoints().
        (WebCore::SVGToOTFFontConverter::firstGlyph): Returns the first element of the input
        vector, along with some ASSERTs.
        (WebCore::SVGToOTFFontConverter::appendLigatureSubtable):
        (WebCore::SVGToOTFFontConverter::appendScriptSubtable): Used inside appendGSUBTable.
        (WebCore::SVGToOTFFontConverter::appendGSUBTable): Updating for ligatures.
        (WebCore::codepointToString): Wrapper around U16_APPEND().
        (WebCore::SVGToOTFFontConverter::glyphsForCodepoint): Call codepointToString and look
        in internal map.
        (WebCore::SVGToOTFFontConverter::addCodepointRanges): Use glyphsForCodepoint().
        (WebCore::SVGToOTFFontConverter::appendLigatureGlyphs): Ligatures are implemented as
        mapping a sequence of glyphs to another glyph inside OpenType. However, SVG models
        ligatures as mapping a sequence of codepoints to a glyph. This function makes dummy
        glyphs for all the codepoints that we don't have glyphs for and appends them to
        m_glyphs.
        (WebCore::SVGToOTFFontConverter::compareCodepointsLexicographically):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter): Use appendEmptyGlyph() and
        call appendLigatureGlyphs().

2015-01-11  Chris Dumez  <cdumez@apple.com>

        Move more SVG CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140340

        Reviewed by Antti Koivisto.

        Move more SVG CSS properties to the new StyleBuilder by introducing
        the necessary converters in StyleBuilderConverter.

        * css/CSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        (WebCore::roundToNearestGlyphOrientationAngle): Deleted.
        (WebCore::angleToGlyphOrientation): Deleted.
        (WebCore::colorFromSVGColorCSSValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertNumber):
        (WebCore::StyleBuilderConverter::convertNumberOrAuto):
        (WebCore::StyleBuilderConverter::convertOpacity):
        (WebCore::StyleBuilderConverter::convertSVGURIReference):
        (WebCore::StyleBuilderConverter::convertSVGColor):
        (WebCore::StyleBuilderConverter::convertGlyphOrientation):
        (WebCore::StyleBuilderConverter::convertGlyphOrientationOrAuto):
        * rendering/style/RenderStyle.h:

2015-01-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix for !ENABLE(INSPECTOR) builds after r178201.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):

2015-01-10  Chris Dumez  <cdumez@apple.com>

        Move 'kerning' / 'paint-order' / 'stroke-dasharray' SVG CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140327

        Reviewed by Sam Weinig.

        Move 'kerning' / 'paint-order' / 'stroke-dasharray' SVG CSS properties
        to the new StyleBuilder by introducing the necessary converters in
        StyleBuilderConverter.

        * css/CSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSVGLength):
        (WebCore::StyleBuilderConverter::convertSVGLengthVector):
        (WebCore::StyleBuilderConverter::convertStrokeDashArray):
        (WebCore::StyleBuilderConverter::convertPaintOrder):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::fromCSSPrimitiveValue):
        * svg/SVGLength.h:

2015-01-09  Andreas Kling  <akling@apple.com>

        CTTE: GeolocationController always has a client.
        <https://webkit.org/b/140330>

        Reviewed by Anders Carlsson.

        Change GeolocationController::m_client to be a reference and remove
        a whole bunch of unnecessary null checks.

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::~GeolocationController):
        (WebCore::GeolocationController::addObserver):
        (WebCore::GeolocationController::removeObserver):
        (WebCore::GeolocationController::requestPermission):
        (WebCore::GeolocationController::cancelPermissionRequest):
        (WebCore::GeolocationController::lastPosition):
        (WebCore::GeolocationController::viewStateDidChange):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        (WebCore::GeolocationController::client):

2015-01-09  Zalan Bujtas  <zalan@apple.com>

        Calling clearSelection on a detached RenderObject leads to segfault.
        https://bugs.webkit.org/show_bug.cgi?id=140275

        Reviewed by Simon Fraser.

        We collect selection rects and compute selection gaps in order to
        paint/clear selection. With certain content, we need to be able
        to walk the tree up to a particular container to compute the selection rect.
        However this container might not be available when the selection is part of a detached tree.
        This is a null-check fix to ensure we don't crash in such cases, but in the long run
        selection gaps and rect should be cached between two layouts so that we don't need to
        keep collecting/recomputing them. Tracked here: webkit.org/b/140321

        Test: editing/selection/clearselection-on-detached-subtree-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clearSelection):

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Remove more sync database code
        https://bugs.webkit.org/show_bug.cgi?id=140328

        Reviewed by Sam Weinig.

        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseBackend.cpp:
        (WebCore::DatabaseBackend::DatabaseBackend):
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        * Modules/webdatabase/DatabaseBackendBase.h:
        (WebCore::DatabaseBackendBase::isSyncDatabase): Deleted.
        * Modules/webdatabase/DatabaseBasicTypes.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::openDatabase):
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseServer.h:

2015-01-09  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/178213>
        (https://bugs.webkit.org/show_bug.cgi?id=140310)

        * platform/spi/cocoa/CoreTextSPI.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFont):

2015-01-09  Chris Dumez  <cdumez@apple.com>

        Get rid of legacy StyleBuilder switch in StyleResolver.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140315

        Reviewed by Sam Weinig.

        Get rid of legacy StyleBuilder switch in StyleResolver.cpp now that most
        properties have been ported to the new generated StyleBuilder in previous
        patches. The properties that remained in this switch were shorthand
        properties or other properties that do not require any handling in the
        StyleBuilder.

        To achieve this, this patch introduces 2 parameters in
        CSSPropertyNames.in:
        - SkipBuilder: Indicates that no StyleBuilder code should be generated
          for this property.
        - Shorthand: Indicates that this is a shorthand property, which therefore
          does not use the StyleBuilder. makeprop.pl will merely generate
          assertions for such properties, to validate that this is a shorthand
          property and that the StyleBuilder code is never reached.

        * css/CSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/makeprop.pl:

2015-01-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r178219.

        * WebCore.vcxproj/WebCore.vcxproj: Remove PaintHooks.asm references in project file.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2015-01-09  Andreas Kling  <akling@apple.com>

        Log which ActiveDOMObject(s) can't be suspended for PageCache.
        <https://webkit.org/b/139697>

        Reviewed by Chris Dumez.

        Give ActiveDOMObject a pure virtual activeDOMObjectName() so we can
        find their names.

        Dump the names of all the ActiveDOMObjects that fail to suspend when
        we're trying to put a page into PageCache.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/websockets/WebSocket.h:
        * WebCore.exp.in:
        * css/FontLoader.h:
        * dom/ActiveDOMObject.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        * dom/ScriptExecutionContext.h:
        * fileapi/FileReader.h:
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/PublicURLManager.h:
        * html/canvas/WebGLRenderingContext.h:
        * page/EventSource.h:
        * page/SuspendableTimer.h:
        * workers/AbstractWorker.h:
        * xml/XMLHttpRequest.h:

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Get rid of the database strategy
        https://bugs.webkit.org/show_bug.cgi?id=140322

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::DatabaseManager):
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DatabaseStrategy.cpp: Removed.
        * platform/DatabaseStrategy.h: Removed.
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies):
        (WebCore::PlatformStrategies::databaseStrategy): Deleted.

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Move the Windows only plug-in code to WebKit/win
        https://bugs.webkit.org/show_bug.cgi?id=140133

        Reviewed by Darin Adler.

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

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Another Windows build fix.

        * DerivedSources.cpp:

2015-01-09  Enrica Casucci  <enrica@apple.com>

        [iOS] Support additional text styles.
        https://bugs.webkit.org/show_bug.cgi?id=140310
        rdar://problem/18568864

        Reviewed by Joseph Pecoraro.

        Add support for three new text styles.

        * css/CSSValueKeywords.in:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFont):

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * bindings/js/JSBindingsAllInOne.cpp:

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Remove more worker database code
        https://bugs.webkit.org/show_bug.cgi?id=140320

        Reviewed by Tim Horton.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Remove more sync database code
        https://bugs.webkit.org/show_bug.cgi?id=140318

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webdatabase/DatabaseBackendSync.cpp: Removed.
        * Modules/webdatabase/DatabaseBackendSync.h: Removed.
        * Modules/webdatabase/DatabaseCallback.h:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabaseSync): Deleted.
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::createDatabase):
        * Modules/webdatabase/DatabaseSync.cpp: Removed.
        * Modules/webdatabase/DatabaseSync.h: Removed.
        * Modules/webdatabase/DatabaseSync.idl: Removed.
        * Modules/webdatabase/SQLStatementSync.cpp: Removed.
        * Modules/webdatabase/SQLStatementSync.h: Removed.
        * Modules/webdatabase/SQLTransactionBackendSync.cpp: Removed.
        * Modules/webdatabase/SQLTransactionBackendSync.h: Removed.
        * Modules/webdatabase/SQLTransactionSync.cpp: Removed.
        * Modules/webdatabase/SQLTransactionSync.h: Removed.
        * Modules/webdatabase/SQLTransactionSync.idl: Removed.
        * Modules/webdatabase/SQLTransactionSyncCallback.h: Removed.
        * Modules/webdatabase/SQLTransactionSyncCallback.idl: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSQLTransactionSyncCustom.cpp: Removed.

2015-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove or use TimelineAgent Resource related event types
        https://bugs.webkit.org/show_bug.cgi?id=140155

        Reviewed by Timothy Hatcher.

        Remove unused timeline events. The frontend was ignoring these events
        and was often already getting nearly identical data from the Network domain.

        * WebCore.exp.in:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequestImpl): Deleted.
        (WebCore::InspectorInstrumentation::willReceiveResourceDataImpl): Deleted.
        (WebCore::InspectorInstrumentation::didReceiveResourceDataImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequest): Deleted.
        (WebCore::InspectorInstrumentation::willReceiveResourceData): Deleted.
        (WebCore::InspectorInstrumentation::didReceiveResourceData): Deleted.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest): Deleted.
        (WebCore::InspectorTimelineAgent::willSendResourceRequest): Deleted.
        (WebCore::InspectorTimelineAgent::willReceiveResourceData): Deleted.
        (WebCore::InspectorTimelineAgent::didReceiveResourceData): Deleted.
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse): Deleted.
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse): Deleted.
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource): Deleted.
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData): Deleted.
        (WebCore::TimelineRecordFactory::createResourceSendRequestData): Deleted.
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData): Deleted.
        (WebCore::TimelineRecordFactory::createResourceFinishData): Deleted.
        (WebCore::TimelineRecordFactory::createReceiveResourceData): Deleted.
        * inspector/TimelineRecordFactory.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        (WebCore::ResourceLoadScheduler::notifyDidScheduleResourceRequest): Deleted.
        * loader/ResourceLoadScheduler.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didReceiveBuffer):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):

2015-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Update r177745, one of the review comments was not integrated

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        I cq+ before Dhi could make an update and this was left out.

2015-01-09  Benjamin Poulain  <benjamin@webkit.org>

        Fix error handling of ContentExtensionsManager when the top level input is unusable
        https://bugs.webkit.org/show_bug.cgi?id=140284

        Reviewed by Andreas Kling.

        There are a couple of ways the WebProcess would crash if the input
        is really really bad:
        -If the JSON is unreadable, we can have an exception or decodedRules can be null.
        -On any of the error, we cannot return immediately or we will skip vm.clear().

        This patch adds a branch to fix the first issue.

        For the second issue, a new function, loadEncodedRules(), encapsulate all the early
        returns to make sure we execute the end of loadExtension().

        * contentextensions/ContentExtensionsManager.cpp:
        (WebCore::ContentExtensions::ExtensionsManager::loadEncodedRules):
        (WebCore::ContentExtensions::ExtensionsManager::loadExtension):

2015-01-09  Bem Jones-Bey  <bjonesbe@adobe.com>

        Simplify LineWidth::wrapNextToShapeOutside()
        https://bugs.webkit.org/show_bug.cgi?id=140304

        Reviewed by Zoltan Horvath.

        This function used to manually check to see if the entire height of
        the line would have enough space next to the float. However, the code
        to compute the offsets will do this automatically (and probably a lot
        faster), if the line height is passed in. This patch does just that.

        No new tests, no behavior change.

        * rendering/line/LineWidth.cpp:
        (WebCore::availableWidthAtOffset): Remove now unused override, allow
            passing in lineHeight.
        (WebCore::LineWidth::wrapNextToShapeOutside): Pass the lineHeight
            when computing the available width, so we don't need to check
            isWholeLineFit anymore.
        (WebCore::isWholeLineFit): Deleted.

2015-01-09  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] content inside second shape area when two floats interact
        https://bugs.webkit.org/show_bug.cgi?id=137702

        Reviewed by Zalan Bujtas.

        If a float has a shape-outside, we cannot assume that it has a uniform
        width for the height of the float, so we cannot use simple line
        layout.

        Test: fast/shapes/shape-outside-floats/shape-outside-text-overlap-float.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Don't use simple line layout
            if we have shape-outside. Also, rename floatRenderer to
            floatingObject, since the variable doesn't contain a renderer.

2015-01-09  Chris Dumez  <cdumez@apple.com>

        Allow HTTPS + 'Cache-control: no-store' sub-frames into the page cache
        https://bugs.webkit.org/show_bug.cgi?id=140302

        Reviewed by Andreas Kling.

        Allow HTTPS + 'Cache-control: no-store' sub-frames into the page cache.
        We already restore 'no-store' sub-resources on history navigation from
        the memory cache so there is no reason for our page cache policy to be
        more restrictive.

        We should align our memory cache / history navigation policy with our
        page cache policy.

        For now, 'no-store' main resources are not restored from either cache
        (memory cache / page cache) on history navigation though. This behavior
        does not change.

        Test: http/tests/navigation/https-no-store-subframe-in-page-cache.html

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):

2015-01-09  Anders Carlsson  <andersca@apple.com>

        Try to trigger a rebuild of generated JS bindings.

        * bindings/scripts/CodeGeneratorJS.pm:

2015-01-09  Chris Dumez  <cdumez@apple.com>

        Add support for SVG CSS Properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140277

        Reviewed by Andreas Kling.

        Update the new StyleBuilder generator to add support for SVG CSS
        Properties whose methods are on SVGRenderStyle instead of RenderStyle.

        A new "SVG" parameter is now supported by makeprop.pl to correctly
        generate such properties.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPropertyNames.in:
        * css/SVGCSSPropertyNames.in: Removed.
        Merged SVG CSS properties into CSSPropertyNames.in. I personally don't
        think having a separate file for SVG CSS properties is really helpful.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        Drop legacy StyleBuilder code for several SVG properties and generate
        them instead. Those are trivial and do not require any custom code or
        converter.

        * css/StyleResolver.cpp:
        Update the id of the first low-priority property.

        * css/makeprop.pl:
        Add support for SVG CSS Properties whose methods are on SVGRenderStyle
        instead of RenderStyle.

2015-01-08  Anders Carlsson  <andersca@apple.com>

        Start removing Web Database support from workers
        https://bugs.webkit.org/show_bug.cgi?id=140271

        Reviewed by Sam Weinig.

        Remove WorkerGlobalScopeWebDatabase which is the entry point for web database in workers.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.cpp: Removed.
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.h: Removed.
        * Modules/webdatabase/WorkerGlobalScopeWebDatabase.idl: Removed.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Layout Test fast/canvas/canvas-path-addPath.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=140303
        <rdar://problem/19428865>

        Reviewed by Simon Fraser.

        Although the code clearly states that CG doesn't allow adding a path to itself,
        and branches to handle this case, it simply uses the branch to try adding the
        path to itself (ignoring the copy it just made)!

        Fix this copy/paste bug so that we use the copy and avoid violating the CG 
        API contract.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::addPath): Fix path used.

2015-01-09  Andreas Kling  <akling@apple.com>

        [Cocoa] Make decoded image data purgeable ASAP.
        <https://webkit.org/b/140298>

        Reviewed by Antti Koivisto.

        Mark decoded images as "transient" which makes CoreGraphics mark
        the backing stores as purgeable shortly after they're used.

        The decoded representation will remain in CoreGraphics's caches
        indefinitely unless the kernel gets starved and needs the pages.

        Most resources will now reach a state where the encoded data is
        mmap'ed from disk cache (once the entire resource is downloaded)
        and the decoded data is purgeable.

        This also has the side effect of making the MemoryCache more
        palatial since the decoded data cost can be deducted for images,
        allowing us to cache more resources.

        Note that the worst case for this new behavior would be something
        like hovering below 100% memory utilization and constantly having
        to drop and re-decode images. While churny, it still beats
        crashing the process, plus there's tiling to remove many of the
        reasons we'd need the decoded data.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):

2015-01-09  Gwang Yoon Hwang  <yoon@igalia.com>

        Rename GraphicsLayerAnimation to TextureMapperAnimation
        https://bugs.webkit.org/show_bug.cgi?id=140296

        Reviewed by Martin Robinson.

        GraphicsLayerAnimation is only used by TextureMapper and CoordinatedGraphics.
        This should be placed in the platform/graphics/texmap.
        And this patch also changes its name to TextureMapperAnimation to remove ambiguity.

        No new tests because this is a simply refactoring.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::setAnimations):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperAnimation.cpp: Renamed from Source/WebCore/platform/graphics/GraphicsLayerAnimation.cpp.
        * platform/graphics/texmap/TextureMapperAnimation.h: Renamed from Source/WebCore/platform/graphics/GraphicsLayerAnimation.h.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2015-01-09  Antti Koivisto  <antti@apple.com>

        FontCache should only deal with SimpleFontData
        https://bugs.webkit.org/show_bug.cgi?id=140293

        Reviewed by Andreas Kling.

        FontCache::fontForFamilyAtIndex hands out FontData objects and calls to FontSelector. That sort
        of code does not belong to the cache layer. Move the functionality up to FontGlyphs.

        * platform/graphics/Font.cpp:
        (WebCore::Font::operator==):
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::isLoadingCustomFonts):
        * platform/graphics/Font.h:
        (WebCore::Font::loadingCustomFonts): Deleted.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::similarFontPlatformData):

            Generic null implementation to reduce #ifs.

        (WebCore::FontCache::fontForFamilyAtIndex): Deleted.
        * platform/graphics/FontCache.h:

            Unfriend FontGlyphs.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::FontGlyphs):
        (WebCore::FontGlyphs::isLoadingCustomFonts):

            We can figure thus out cheaply without caching a bit.

        (WebCore::realizeNextFamily):
        (WebCore::FontGlyphs::realizeFontDataAt):

            Reorganize a bit to make the logic clearer.
            Get rid of the strange cAllFamiliesScanned constant.

        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForNormalVariant):

            Loop until null, that always works.

        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::loadingCustomFonts): Deleted.
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::similarFontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::similarFontPlatformData):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):

2015-01-09  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r177925): It broke the !ENABLE(INSPECTOR) build
        https://bugs.webkit.org/show_bug.cgi?id=140098

        Reviewed by Brian Burg.

        * inspector/InspectorInstrumentationCookie.cpp: Removed ENABLE(INSPECTOR) guard,
        becaue InspectorInstrumentationCookie is used everywhere unconditionally.
        * inspector/InspectorInstrumentationCookie.h: Removed ENABLE(INSPECTOR) guard.
        * loader/appcache/ApplicationCacheGroup.h: Removed ENABLE(INSPECTOR) guard around
        m_currentResourceIdentifier, because it is used unconditionally in the cpp.

2015-01-09  Byungseon Shin  <sun.shin@lge.com>

        [EFL] Fix crash introduced in r178029
        https://bugs.webkit.org/show_bug.cgi?id=140289

        Reviewed by Martin Robinson.

        Clearing childClippingMaskLayer of CoordinatedGraphics should be called
        before clearing childClippingLayer.

        No new tests, covered by existing tests.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):

2015-01-08  Enrica Casucci  <enrica@apple.com>

        [iOS] Cannot paste an image URL in a plain text field in a page.
        https://bugs.webkit.org/show_bug.cgi?id=140274
        rdar://problem/18590809

        Reviewed by Alexey Proskuryakov.

        When we want to get plain text from the pasteboard, we
        should also try kUTTypeURL if there is no kUTTypeText available.

        * WebCore.exp.in:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readString):

2015-01-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178154, r178163, and r178164.
        https://bugs.webkit.org/show_bug.cgi?id=140292

        Still multiple assertion failures on tests (Requested by ap on
        #webkit).

        Reverted changesets:

        "Modernize and streamline HTMLTokenizer"
        https://bugs.webkit.org/show_bug.cgi?id=140166
        http://trac.webkit.org/changeset/178154

        "Unreviewed speculative buildfix after r178154."
        http://trac.webkit.org/changeset/178163

        "One more unreviewed speculative buildfix after r178154."
        http://trac.webkit.org/changeset/178164

2015-01-09  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Implement Append Window support.
        https://bugs.webkit.org/show_bug.cgi?id=139861

        Reviewed by Jer Noble.

        Implement Append Windows support for SourceBuffer as per spec.
        Also change order in idl to match spec order.

        Test: media/media-source/media-source-append-buffer-with-append-window.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::appendWindowStart):
        (WebCore::SourceBuffer::setAppendWindowStart):
        (WebCore::SourceBuffer::appendWindowEnd):
        (WebCore::SourceBuffer::setAppendWindowEnd):
        (WebCore::SourceBuffer::abort):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

2015-01-09  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at -[WebAccessibilityObjectWrapperBase accessibilityTitle] + 31
        https://bugs.webkit.org/show_bug.cgi?id=140286

        Reviewed by Mario Sanchez Prada.

        This is crashing because AppKit is checking if certain method names like "accessibilityTitle" exist,
        and then it bypasses accessibilityAttributeValue: to call directly into those methods.

        That bypasses are safety checks. I think a safe way to avoid this is rename our methods.

        No new tests, problem only occurs when triggered through AppKit.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityHint]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityHelpText]):
        (-[WebAccessibilityObjectWrapperBase accessibilityTitle]): Deleted.
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]): Deleted.
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2015-01-06  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MSE] ASSERT in MediaSourceClientGStreamer::addSourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=140119

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (WebCore::MediaSourceClientGStreamer::addSourceBuffer): Use a raw
        pointer for the ghost pad, its reference is then taken once attached
        to the parent element.

2015-01-09  Zan Dobersek  <zdobersek@igalia.com>

        After r178166, ANGLE's EGL/GLES/GLES2 headers are included before the
        system-default headers because the Source/ThirdParty/ANGLE/include
        directory is searched through. This shouldn't be the case for ports
        which want to use system-default headers and are searching for them
        explicitly. To avoid that, OPENGL_INCLUDE_DIR or OPENGLES2_INCLUDE_DIR
        should be added to WebCore_INCLUDE_DIRECTORIES before ANGLE directories.

        Rubber-stamped by Carlos Garcia Campos.

        * CMakeLists.txt:

2015-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Use angle-bracket form to include external headers in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=140288

        Reviewed by Žan Doberšek.

        * CMakeLists.txt:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp:
        * platform/graphics/harfbuzz/HarfBuzzFaceCoreText.cpp:
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/win/GraphicsContext3DWin.cpp:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        * platform/image-encoders/JPEGImageEncoder.cpp:
        * platform/image-encoders/PNGImageEncoder.cpp:
        * platform/text/TextEncodingDetectorICU.cpp:

2015-01-09  Csaba Osztrogonác  <ossy@webkit.org>

        One more unreviewed speculative buildfix after r178154.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference): Remove highestValidCharacter too, it became unused after r178163.

2015-01-08  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed speculative buildfix after r178154.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference): Remove unused overflow variable.

2015-01-08  Darin Adler  <darin@apple.com>

        Remove strange CharacterData::dataImpl function
        https://bugs.webkit.org/show_bug.cgi?id=140115

        Reviewed by Anders Carlsson.

        Every call site could just use the data function instead.

        * dom/CharacterData.h:
        (WebCore::CharacterData::dataImpl): Deleted.

        * dom/Text.cpp:
        (WebCore::Text::splitText): Use data instead of dataImpl.
        (WebCore::Text::createTextRenderer): Ditto.

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::RenderCombineText): Updated to take
        const String&. We missed this class when RenderText changed.
        * rendering/RenderCombineText.h: Ditto.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::updateTextRendererAfterContentChange): Use data.

2015-01-08  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: !valueWithCalculation.calculation() in WebCore::CSSParser::validateCalculationUnit
        https://bugs.webkit.org/show_bug.cgi?id=140251

        Reviewed by Darin Adler.

        Using a calculated value for text-shadow's blur-radius was hitting an
        assertion in CSSParser::validateCalculationUnit() because validUnit()
        is called twice, first with 'FLength' unit, then more stricly with
        'FLength|FNonNeg' if parsing the blur-radius as it cannot be negative
        as per the specification:
        - http://dev.w3.org/csswg/css-text-decor-3/#text-shadow-property
        - http://dev.w3.org/csswg/css-backgrounds-3/#shadow

        On the second call, the ValueWithCalculation's m_calculation member
        was already initialized and the code did not handle this. This patch
        updates validateCalculationUnit() to teach it to reuse the previously
        parsed calculation in this case. All it needs to do is to update the
        existing CSSCalcValue's range to allow negative values or not.

        When writing the layout test for this, I also noticed that the CSS
        parser was not rejecting negative calculated values for blur-radius
        (only negative non-calculated ones). This is because
        validateCalculationUnit() was ignoring FNonNeg if the calculated
        value is a Length. This patch also addresses the issue.

        Test: fast/css/text-shadow-calc-value.html

        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::setPermittedValueRange):
        Add a setter to update the CSSCalculationValue's permitted value range
        so that the CSS parser does not need to fully reparse the calculation
        only to update the permitted value range.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validateCalculationUnit):
        - Teach the code to reuse the previously parsed calculation value.
        - Do the FNonNeg check for Length calculations as well.

2015-01-08  Darin Adler  <darin@apple.com>

        Modernize and streamline HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=140166

        Reviewed by Sam Weinig.

        * html/parser/AtomicHTMLToken.h:
        (WebCore::AtomicHTMLToken::initializeAttributes): Removed unneeded assertions
        based on fields I removed.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Change to use updateStateFor
        to set the initial state when parsing a fragment, since it implements the same
        rule taht the tokenizerStateForContextElement function did.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Updated to use the revised
        interfaces for HTMLSourceTracker and HTMLTokenizer.
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken): Changed to take a
        TokenPtr instead of an HTMLToken, so we can clear out the TokenPtr earlier
        for non-character tokens, and let them get cleared later for character tokens.
        (WebCore::HTMLDocumentParser::insert): Pass references.
        (WebCore::HTMLDocumentParser::append): Ditto.
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan): Ditto.

        * html/parser/HTMLDocumentParser.h: Updated argument type for constructTreeFromHTMLToken
        and removed now-unneeded m_token data members.

        * html/parser/HTMLEntityParser.cpp: Removed unneeded uses of the inline keyword.
        (WebCore::HTMLEntityParser::consumeNamedEntity): Replaced two uses of
        advanceAndASSERT with just plain advance; there's really no need to assert the
        character is the one we just got out of the string.

        * html/parser/HTMLInputStream.h: Moved the include of TextPosition.h here from
        its old location since this class has two data members that are OrdinalNumber.

        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser): Removed most of the
        initialization, since it's now done by defaults.
        (WebCore::extractCharset): Rewrote this to be a non-member function, and to
        use a for loop, and to handle quote marks in a simpler way. Also changed it
        to return a StringView so we don't have to allocate a new string.
        (WebCore::HTMLMetaCharsetParser::processMeta): Use a modern for loop, and
        also take a token argument since it's no longer a data member.
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes): Use a modern for
        loop, StringView instead of string, and don't bother naming the local enum.
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset): Updated for the new
        way of getting tokens from the tokenizer.

        * html/parser/HTMLMetaCharsetParser.h: Got rid of some data members and
        tightened up the formatting a little. Don't bother allocating the tokenizer
        on the heap.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::TokenPreloadScanner): Removed unneeded
        initialization.
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner): Ditto.
        (WebCore::HTMLPreloadScanner::scan): Changed to take a reference.

        * html/parser/HTMLPreloadScanner.h: Removed unneeded includes, typedefs,
        and forward declarations. Removed explicit declaration of the destructor,
        since the default one works. Removed unused createCheckpoint and rewindTo
        functions. Gave initial values for various data members. Marked the device
        scale factor const beacuse it's set in the constructor and never changed.
        Also removed the unneeded isSafeToSendToAnotherThread.

        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::isSafeToSendToAnotherThread): Deleted.

        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest): Removed unneeded calls to
        isolatedCopy. Also removed isSafeToSendToAnotherThread.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::startToken): Renamed. Changed to keep state
         in the source tracker itself, not the token.
        (WebCore::HTMLSourceTracker::endToken): Ditto.
        (WebCore::HTMLSourceTracker::source): Renamed. Changed to use the state
        from the source tracker.

        * html/parser/HTMLSourceTracker.h: Removed unneeded include of HTMLToken.h.
        Renamed functions, removed now-unneeded comment.

        * html/parser/HTMLToken.h: Cut down on the fields used by the source tracker.
        It only needs to know the start and end of each attribute, not each part of
        each attribute. Removed setBaseOffset, setEndOffset, length, addNewAttribute,
        beginAttributeName, endAttributeName, beginAttributeValue, endAttributeValue,
        m_baseOffset and m_length. Added beginAttribute and endAttribute.
        (WebCore::HTMLToken::clear): No need to zero m_length or m_baseOffset any more.
        (WebCore::HTMLToken::length): Deleted.
        (WebCore::HTMLToken::setBaseOffset): Deleted.
        (WebCore::HTMLToken::setEndOffset): Deleted.
        (WebCore::HTMLToken::beginStartTag): Only null out m_currentAttribute if we
        are compiling in assertions.
        (WebCore::HTMLToken::beginEndTag): Ditto.
        (WebCore::HTMLToken::addNewAttribute): Deleted.
        (WebCore::HTMLToken::beginAttribute): Moved the code from addNewAttribute in
        here and set the start offset.
        (WebCore::HTMLToken::beginAttributeName): Deleted.
        (WebCore::HTMLToken::endAttributeName): Deleted.
        (WebCore::HTMLToken::beginAttributeValue): Deleted.
        (WebCore::HTMLToken::endAttributeValue): Deleted.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLToken::endAttribute): Added. Sets the end offset.
        (WebCore::HTMLToken::appendToAttributeName): Updated assertion.
        (WebCore::HTMLToken::appendToAttributeValue): Ditto.
        (WebCore::convertASCIIAlphaToLower): Renamed from toLowerCase and changed
        so it's legal to call on lower case letters too.
        (WebCore::vectorEqualsString): Changed to take a string literal rather than
        a WTF::String.
        (WebCore::HTMLTokenizer::inEndTagBufferingState): Made this a member function.
        (WebCore::HTMLTokenizer::HTMLTokenizer): Updated for data member changes.
        (WebCore::HTMLTokenizer::bufferASCIICharacter): Added. Optimized version of
        bufferCharacter for the common case where we know the character is ASCII.
        (WebCore::HTMLTokenizer::bufferCharacter): Moved this function here from the
        header since it's only used inside the class.
        (WebCore::HTMLTokenizer::emitAndResumeInDataState): Moved this here, renamed
        it and removed the state argument.
        (WebCore::HTMLTokenizer::emitAndReconsumeInDataState): Ditto.
        (WebCore::HTMLTokenizer::emitEndOfFile): More of the same.
        (WebCore::HTMLTokenizer::saveEndTagNameIfNeeded): Ditto.
        (WebCore::HTMLTokenizer::haveBufferedCharacterToken): Ditto.
        (WebCore::HTMLTokenizer::flushBufferedEndTag): Updated since m_token is now
        the actual token, not just a pointer.
        (WebCore::HTMLTokenizer::flushEmitAndResumeInDataState): Renamed this and
        removed the state argument.
        (WebCore::HTMLTokenizer::processToken): This function, formerly nextToken,
        is now the internal function used by nextToken. Updated its contents to use
        simpler macros, changed code to set m_state when returning, rather than
        constantly setting it when cycling through states, switched style to use
        early return/goto rather than lots of else statements, took out unneeded
        braces now that BEGIN/END_STATE handles the braces, collapsed upper and
        lower case letter handling in many states, changed lookAhead call sites to
        use the new advancePast function instead.
        (WebCore::HTMLTokenizer::updateStateFor): Set m_state directly instead of
        calling a setstate function.
        (WebCore::HTMLTokenizer::appendToTemporaryBuffer): Moved here from header.
        (WebCore::HTMLTokenizer::temporaryBufferIs): Changed argument type to
        a literal instead of a WTF::String.
        (WebCore::HTMLTokenizer::appendToPossibleEndTag): Renamed and changed type
        to be a UChar instead of LChar, although all characters will be ASCII.
        (WebCore::HTMLTokenizer::isAppropriateEndTag): Marked const, and changed
        type from size_t to unsigned.

        * html/parser/HTMLTokenizer.h: Changed interface of nextToken so it returns
        a TokenPtr so code doesn't have to understand special rules about when to
        work with an HTMLToken and when to clear it. Made most functions private,
        and made the State enum private as well. Replaced the state and setState
        functions with more specific functions for the few states we need to deal
        with outside the class. Moved function bodies outside the class definition
        so it's easier to read the class definition.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Updated to use the
        new set state functions instead of setState.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processScriptStartTag): Ditto.

        * html/parser/InputStreamPreprocessor.h: Marked the constructor explicit,
        and mde it take a reference rather than a pointer.

        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement): Updated to use the
        new set state functions instead of setState.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodedSnippetForName): Updated for name change.
        (WebCore::XSSAuditor::decodedSnippetForAttribute): Updated for changes to
        attribute range tracking.
        (WebCore::XSSAuditor::decodedSnippetForJavaScript): Updated for name change.
        (WebCore::XSSAuditor::isSafeToSendToAnotherThread): Deleted.

        * html/parser/XSSAuditor.h: Deleted isSafeToSendToAnotherThread.

        * html/track/WebVTTTokenizer.cpp: Removed the local state variable from
        WEBVTT_ADVANCE_TO; there is no need for it.
        (WebCore::WebVTTTokenizer::WebVTTTokenizer): Use a reference instead of a
        pointer for the preprocessor.
        (WebCore::WebVTTTokenizer::nextToken): Ditto. Also removed the state local
        variable and the switch statement, replacing with labels instead since we
        go between states with goto.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::operator=): Changed the return type to be non-const
        to match normal C++ design rules.
        (WebCore::SegmentedString::pushBack): Renamed from prepend since this is not a
        general purpose prepend function. Also fixed assertions to not use the strangely
        named "escaped" function, since we are deleting it.
        (WebCore::SegmentedString::append): Ditto.
        (WebCore::SegmentedString::advancePastNonNewlines): Renamed from advance, since
        the function only works for non-newlines.
        (WebCore::SegmentedString::currentColumn): Got rid of unneeded local variable.
        (WebCore::SegmentedString::advancePastSlowCase): Moved here from header and
        renamed. This function now consumes the characters if they match.

        * platform/text/SegmentedString.h: Made the changes mentioned above.
        (WebCore::SegmentedString::excludeLineNumbers): Deleted.
        (WebCore::SegmentedString::advancePast): Renamed from lookAhead. Also changed
        behavior so the characters are consumed.
        (WebCore::SegmentedString::advancePastIgnoringCase): Ditto.
        (WebCore::SegmentedString::advanceAndASSERT): Deleted.
        (WebCore::SegmentedString::advanceAndASSERTIgnoringCase): Deleted.
        (WebCore::SegmentedString::escaped): Deleted.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::isHexDigit): Deleted.
        (WebCore::unconsumeCharacters): Updated for name change.
        (WebCore::consumeCharacterReference): Removed unneeded name for local enum,
        renamed local variable "cc" to character. Changed code to use helpers like
        isASCIIAlpha and toASCIIHexValue. Removed unneeded use of advanceAndASSERT,
        since we don't really need to assert the character we just extracted.

        * xml/parser/MarkupTokenizerInlines.h:
        (WebCore::isTokenizerWhitespace): Renamed argument to character.
        (WebCore::advanceStringAndASSERTIgnoringCase): Deleted.
        (WebCore::advanceStringAndASSERT): Deleted.
        Changed all the macro implementations so they set m_state only when
        returning from the function and just use goto inside the state machine.

2015-01-08  Benjamin Poulain  <benjamin@webkit.org>

        Build fix after r178151

        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::DFA::actions):

2015-01-08  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Start a prototype for declarative site specific extensions
        https://bugs.webkit.org/show_bug.cgi?id=140160

        Reviewed by Andreas Kling.

        Currently, clients have various ways to execute custom code for certain URLs.
        Each of those mechanism implies messaging the UIProcess, executing some code
        calling back to the WebProcess, then actually load the resource.
        All this back and forth introduces delays before we actually load resources.

        Since the set of actions is done per site is actually simple and limited,
        it may be possible to do everything in WebCore and shortcut the defered loading.

        This patch provides the starting point for this idea. The "rules" (currently just blocking)
        are be passed to WebCore in a JSON format. In WebCore, we create a state
        machine to match the rules and we execute the action when the state machine tells
        us to.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionRule.cpp: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::ContentExtensionRule::ContentExtensionRule):
        * contentextensions/ContentExtensionRule.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::ContentExtensionRule::trigger):
        (WebCore::ContentExtensions::ContentExtensionRule::action):
        * contentextensions/ContentExtensionsBackend.cpp: Added.
        (WebCore::ContentExtensions::ContentExtensionsBackend::sharedInstance):
        (WebCore::ContentExtensions::ContentExtensionsBackend::setRuleList):
        (WebCore::ContentExtensions::ContentExtensionsBackend::removeRuleList):
        (WebCore::ContentExtensions::ContentExtensionsBackend::shouldBlockURL):
        * contentextensions/ContentExtensionsBackend.h: Added.
        * contentextensions/ContentExtensionsInterface.cpp: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::shouldBlockURL):
        * contentextensions/ContentExtensionsInterface.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        * contentextensions/ContentExtensionsManager.cpp: Added.
        (WebCore::ContentExtensions::ExtensionsManager::loadTrigger):
        (WebCore::ContentExtensions::ExtensionsManager::loadAction):
        (WebCore::ContentExtensions::ExtensionsManager::loadRule):
        (WebCore::ContentExtensions::ExtensionsManager::loadExtension):
        * contentextensions/ContentExtensionsManager.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        * contentextensions/DFA.cpp: Added.
        (WebCore::ContentExtensions::DFA::DFA):
        (WebCore::ContentExtensions::DFA::operator=):
        (WebCore::ContentExtensions::DFA::nextState):
        (WebCore::ContentExtensions::DFA::actions):
        (WebCore::ContentExtensions::DFA::debugPrintDot):
        * contentextensions/DFA.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::DFA::root):
        * contentextensions/DFANode.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        * contentextensions/NFA.cpp: Added.
        (WebCore::ContentExtensions::NFA::NFA):
        (WebCore::ContentExtensions::NFA::createNode):
        (WebCore::ContentExtensions::NFA::addTransition):
        (WebCore::ContentExtensions::NFA::addEpsilonTransition):
        (WebCore::ContentExtensions::NFA::setFinal):
        (WebCore::ContentExtensions::NFA::debugPrintDot):
        * contentextensions/NFA.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::NFA::root):
        * contentextensions/NFANode.cpp: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (WebCore::ContentExtensions::NFANode::NFANode):
        * contentextensions/NFANode.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        * contentextensions/NFAToDFA.cpp: Added.
        (WebCore::ContentExtensions::epsilonClosure):
        (WebCore::ContentExtensions::setTransitionsExcludingEpsilon):
        (WebCore::ContentExtensions::HashableNodeIdSet::HashableNodeIdSet):
        (WebCore::ContentExtensions::HashableNodeIdSet::operator=):
        (WebCore::ContentExtensions::HashableNodeIdSet::isEmptyValue):
        (WebCore::ContentExtensions::HashableNodeIdSet::isDeletedValue):
        (WebCore::ContentExtensions::HashableNodeIdSet::nodeIdSet):
        (WebCore::ContentExtensions::HashableNodeIdSetHash::hash):
        (WebCore::ContentExtensions::HashableNodeIdSetHash::equal):
        (WebCore::ContentExtensions::addDFAState):
        (WebCore::ContentExtensions::NFAToDFA::convert):
        * contentextensions/NFAToDFA.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2015-01-08  Benjamin Poulain  <bpoulain@apple.com>

        Make better use of the stack when compiling selectors
        https://bugs.webkit.org/show_bug.cgi?id=139615
        rdar://problem/19226482

        Reviewed by Andreas Kling.

        Selectors used to be only on one level. To avoid memory allocations, we were allocating
        a lot of stack upfront and we were using that to create all the intermediary objects
        used by the code generator.

        Then, selectors became multilevel. We now support arbitrary nesting of selector lists.

        We did not adapt any of the structures and the creation of the intermediary object is recursive.
        This resulted in over 1k of stack allocation at every level, quickly accumulating to unreasonable
        numbers.

        This patch fixes this problem by making each stack frame of the recursion much lighter.
        We no longer allocate the big objects (SelectorFragment and SelectorFragmentList) on the stack.

        In each case where we would have used a Stack allocated SelectorFragment or SelectorFragmentList,
        we now allocate the memory directly into the target vector.

        In the cases where the object should not be on the vector, we simply remove it. Those are uncommon
        cases so that should not be too bad.

        Tests: fast/selectors/matches-selector-list-ending-with-never-matching-selectors.html
               fast/selectors/not-selector-list-ending-with-never-matching-selectors.html
               fast/selectors/nth-child-of-selector-list-ending-with-never-matching-selectors.html
               fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors.html

        * cssjit/SelectorCompiler.cpp:
        SelectorFragmentList is also used for nested lists. Keeping 32 SelectorFragment preallocated
        for each nested list is way too big.

        (WebCore::SelectorCompiler::addPseudoClassType):
        There are three cases of nested selector lists supported by the compiler: :matches(), :not()
        and :nth-child(). For those 3 cases, use the target vector memory instead of the stack.

        (WebCore::SelectorCompiler::constructFragmentsInternal):
        (WebCore::SelectorCompiler::constructFragments):
        Make sure we do not modify the input list on failure since it may be reused.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesSelectorList):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesMatchesPseudoClass):
        I changed the handling of :nth-child(An+B of selectorList) to not generate empty filters.
        With that we can generalize the assertion to generateElementMatchesSelectorList() and simplify
        the flow of selector lists a bit.

2015-01-08  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-font-feature-settings' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140267

        Reviewed by Andreas Kling.

        Move '-webkit-font-feature-settings' CSS property to the new
        StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontFeatureSettings):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitFontFeatureSettings):
        (WebCore::StyleBuilderCustom::applyInheritWebkitFontFeatureSettings):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::makeNormalFeatureSettings): Deleted.
        * platform/graphics/FontDescription.h:

2015-01-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r178133.

        * platform/graphics/FontCache.h: Correct declaration of fontDataFromDescriptionAndLogFont
        * platform/graphics/SimpleFontData.h: We still need 'platformDestroy'
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformDestroy): Add stub back to prevent build break.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::fontDataFromDescriptionAndLogFont): Correct signature.
        (WebCore::FontCache::lastResortFallbackFont): Correct '::' syntax.
        (WebCore::FontCache:lastResortFallbackFont): Deleted.

2015-01-08  Antti Koivisto  <antti@apple.com>

        Remove the concept of "retained" font
        https://bugs.webkit.org/show_bug.cgi?id=140246

        Reviewed by Darin Adler.

        FontCache currently maintains a secondary refcount for SimpleFontDatas. This is used to decide whether
        a font is considered inactive and is eligible for purging. This is confusing and complex.

        The new scheme in this patch considers fonts in font cache inactive if their refcount is 1 (they are
        owned by the cache only). This simplifies the code and gives similar behavior. Types that "retained" the
        font this way always also ref it.

        We also avoid unnecessarily removing fonts that wouldn't get deleted from the cache.

        Also modernized some names and code.

        * WebCore.exp.in:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontData):
        (WebCore::CSSFontSelector::getFallbackFontData):
        * platform/graphics/FontCache.cpp:
        (WebCore::fontPlatformDataCache):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::cachedFonts):
        (WebCore::FontCache::fontForFamily):
        (WebCore::FontCache::fontDataForPlatformData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::fontDataCount):
        (WebCore::FontCache::inactiveFontDataCount):
        (WebCore::FontCache::fontForFamilyAtIndex):
        (WebCore::FontCache::invalidate):
        (WebCore::FontCache::getCachedFontData): Deleted.
        (WebCore::FontCache::getNonRetainedLastResortFallbackFont): Deleted.
        (WebCore::FontCache::releaseFontData): Deleted.
        (WebCore::FontCache::getFontData): Deleted.
        * platform/graphics/FontCache.h:
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::FontGlyphs):
        (WebCore::FontGlyphs::~FontGlyphs):
        (WebCore::FontGlyphs::realizeFontDataAt):
        (WebCore::FontGlyphs::releaseFontData): Deleted.
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::~FontGlyphs): Deleted.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformDestroy): Deleted.
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::similarFontPlatformData):
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::FontCache::getLastResortFallbackFont): Deleted.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::platformDestroy): Deleted.

2015-01-08  Anders Carlsson  <andersca@apple.com>

        Remove AbstractSQLTransaction
        https://bugs.webkit.org/show_bug.cgi?id=140265

        Reviewed by Tim Horton.

        * Modules/webdatabase/AbstractSQLTransaction.h: Removed.
        * Modules/webdatabase/DatabaseBackend.cpp:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::~SQLTransaction):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::create):
        (WebCore::SQLTransactionBackend::SQLTransactionBackend):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r178124.

        Remove uses of the removed applicationChromeMode method.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintMenuList):

2015-01-08  Anders Carlsson  <andersca@apple.com>

        Remove AbstractSQLTransactionBackend
        https://bugs.webkit.org/show_bug.cgi?id=140227

        Reviewed by Darin Adler.

        * Modules/webdatabase/AbstractSQLTransaction.h:
        * Modules/webdatabase/AbstractSQLTransactionBackend.h: Removed.
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::setBackend):
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-08  Darin Adler  <darin@apple.com>

        ASSERTION FAILED: character != kEndOfFileMarker in WebCore::HTMLTokenizer::bufferCharacter
        https://bugs.webkit.org/show_bug.cgi?id=140179

        Reviewed by Anders Carlsson.

        Test: fast/parser/numeric-entities.html

        * html/parser/HTMLEntityParser.cpp:
        (WebCore::HTMLEntityParser::legalEntityFor): Merged adjustEntity logic in here.
        Since the type UChar32 is a signed integer, need to check for <= 0, not just 0.
        This <= change alone would have fixed the bug.

        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference): Added overflow checking when parsing hex
        and decimal character references. This change alone would also have fixed the
        bug, but in addition it makes overflow cases reliably generate replacement
        characters rather than ignoring the overflow and producing seemingly random
        characters. Test cases cover the original reported bug and other overflow cases.

2015-01-08  Dean Jackson  <dino@apple.com>

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232
        <rdar://problem/19371010>

        Reviewed by Anders Carlsson.

        We need to support default button styling even when application chrome
        mode is not enabled (it was a bit weird that this was exposed as a Setting
        anyway). We should render as a default button whenever content sets
        the proprietary -webkit-appearance. This means we don't need the
        applicationChromeMode setting.

        For normal Web content there should be no change in behavior.

        * page/Settings.in: Remove applicationChromeMode
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isDefault): Don't test for the setting.

2015-01-08  Chris Dumez  <cdumez@apple.com>

        Unfriend StyleResolver and StyleBuilderCustom
        https://bugs.webkit.org/show_bug.cgi?id=140247

        Reviewed by Darin Adler.

        Stop marking StyleBuilderCustom as a friend of StyleResolver by
        refactoring the code a bit.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueFont):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyFont):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::documentSettings):

2015-01-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [CoordinatedGraphics] Update fixedVisibleContentRect only it is actually changed
        https://bugs.webkit.org/show_bug.cgi?id=140244

        Reviewed by Martin Robinson.

        CompositingCoordinator::setVisibleContentsRect already knows whether the
        rect has been changed. Therefore, there is no need to call
        FrameView::setFixedVisibleContentRect every time.

        No new tests, covered by existing tests.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::setVisibleContentsRect):

2015-01-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r177637) [HarfBuzz][GTK][EFL] It made 3 performance tests crash and +24 layout tests crashes/failures
        https://bugs.webkit.org/show_bug.cgi?id=139905

        Reviewed by Antti Koivisto.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns): Fallback to
        primary font data for missing glyphs.

2015-01-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Borders inside box-decoration-break: clone after a br do not contribute to line breaking
        https://bugs.webkit.org/show_bug.cgi?id=140238

        Reviewed by Darin Adler.

        When we iterate through renderers for line breaking, we determine which of the renderers
        is responsible for inserting its parent's border width. However, this determination didn't
        take a <br> and box-decoration-break: clone into account.

        Test: fast/box-decoration-break/box-decoration-break-clone-line-break.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::previousInFlowSibling): Clean up to use a do / while block.

2015-01-08  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK] Seperate updateBackingStore from flushCompositingState.
        https://bugs.webkit.org/show_bug.cgi?id=136887

        Reviewed by Žan Doberšek.

        When LayerTreeHostGtk flushes pending layer changes, it updates backing
        stores using same loop. This makes requesting layer flush during
        flushing in certain condition which causes a assertion failure.

        Animated GIF's animations are drived by the painting cycle,
        GraphicsLayerTextureMapper::updateBackingStoreIfNeeded would request
        scheduleLayerFlush during flushing layers, if animated GIF needs to
        advance its frame immediately. It doesn't mean the advanced frame should
        be painted in this painting phase. This frame advancing happens after
        painting a current frame to the backing store. It means the advanced
        frame should be painted ASAP without using its frame timer.

        This patch seperates updateBackingStore from flushCompositingState
        to avoid above behavior.

        No new tests. The bug is timing-dependent.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::toGraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2015-01-07  Chris Dumez  <cdumez@apple.com>

        Move -webkit-tap-highlight-color / -webkit-overflow-scrolling / -webkit-touch-callout to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140219

        Reviewed by Darin Adler.

        Move -webkit-tap-highlight-color / -webkit-overflow-scrolling /
        -webkit-touch-callout to the new StyleBuilder.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::gradientWithStylesResolved):
        * css/CSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::StyleResolver::applySVGProperty):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTouchCallout):
        (WebCore::StyleBuilderConverter::convertTapHighlightColor):
        (WebCore::StyleBuilderConverter::convertOverflowScrolling):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::colorFromPrimitiveValueIsDerivedFromElement):
        (WebCore::StyleResolver::colorFromPrimitiveValue):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:

2015-01-07  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Editing Inline Styles Not Working
        https://bugs.webkit.org/show_bug.cgi?id=140239

        Reviewed by Joseph Pecoraro.

        Fix a regression introduced in r178060, where we no longer set
        m_ordinal in InspectorCSSId. The original refactoring should have
        passed m_ordinal. Fix this and introduce a sensible default value.

        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):

2015-01-07  Chris Dumez  <cdumez@apple.com>

        Assert should never be reached hit in WebCore::CSSCalcPrimitiveValue::doubleValue
        https://bugs.webkit.org/show_bug.cgi?id=140180

        Reviewed by Darin Adler.

        Add support for using floating-point angles with 'turn' unit, as per the
        specification:
        http://dev.w3.org/csswg/css-values-3/#angles

        Previously, we only supported integer values for the 'turn' unit even
        though other angle units (e.g. 'deg') handle floating-point values just
        fine. Trying to use a floating-point value with 'turn' unit would cause
        us to hit an assertion in CSSCalcPrimitiveValue::doubleValue().

        Also fix the support for angles in calc().
        CSSPrimitiveValue::computeDegrees() was accessing m_primitiveUnitType
        member directly, which would be incorrect in the case of calculated
        values. This patch switches to calling CSSPrimitiveValue::primitiveType()
        which handles calculated values.

        Test: fast/css/turn-angle-double.html

        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeDegrees):

2015-01-07  Chris Dumez  <cdumez@apple.com>

        Move 'font' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140181

        Reviewed by Darin Adler.

        Move 'font' CSS property to the new StyleBuilder.

2015-01-07  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-dashboard-region' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140204

        Reviewed by Darin Adler.

        Move '-webkit-dashboard-region' CSS property to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::convertToIntLength):
        (WebCore::StyleBuilderCustom::applyValueWebkitDashboardRegion):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::convertToIntLength): Deleted.

2015-01-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The ASCII decoding for non ASCII character is incorrect if this character comes after going through the fast decoding code path and before the end of the text by less than a machine word size of characters.
        https://bugs.webkit.org/show_bug.cgi?id=140173.

        Reviewed by Darin Adler.

        Tests: fast/encoding/char-after-fast-path-ascii-decoding.html.

        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):
        This function has a bug when it goes through the fast decoding code path. After copying
        one or more all ASCII MachineWords from source to the destination, the following byte
        is copied as is from the source to the destination even if it is non ASCII byte. This
        causes the decoded bytes to be incorrect. The fix is to ensure that the current byte
        is still ASCII after exiting the fast decoding code path.
 
2015-01-07  Shivakumar JM  <shiva.jm@samsung.com>

        HTMLSelectElement and HTMLOptionsCollection add() method should support index as second argument.
        https://bugs.webkit.org/show_bug.cgi?id=139179

        Reviewed by Darin Adler.

        HTMLSelectElement and HTMLOptionsCollection add() method should support index as second argument as per specification
        http://www.w3.org/html/wg/drafts/html/master/forms.html#the-select-element.
        Also this matches the behavior of Chrome and FireFox.

        Tests: fast/dom/HTMLSelectElement/add.html
               fast/dom/HTMLSelectElement/options-collection-add.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add): Deleted.
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::add):
        * html/HTMLOptionsCollection.h:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):
        * html/HTMLSelectElement.h:
        * html/HTMLSelectElement.idl:

2015-01-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [GTK][ThreadedCompositor] Add support for threaded compositor.
        https://bugs.webkit.org/show_bug.cgi?id=118265

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake:
        Adds CoodinatedGraphics and threaded compositor related classes to
        support threaded compositor

        * platform/graphics/texmap/coordinated/CoordinatedTile.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        This class should be guarded by COORDINATED_GRAPHICS instead of
        TILED_BACKING_STORE

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/GraphicsServicesSPI.h: Added.
        * platform/spi/cocoa/QuartzCoreSPI.h: Add CALayer SPI property hitTestsAsOpaque.
        * platform/spi/cocoa/ServersSPI.h: Added.
2015-01-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178068.
        https://bugs.webkit.org/show_bug.cgi?id=140235

        Breaks the iOS build (Requested by enrica on #webkit).

        Reverted changeset:

        "[iOS] Make WebKit2 build with public iOS SDK and more build
        fixes for DRT"
        https://bugs.webkit.org/show_bug.cgi?id=137371
        http://trac.webkit.org/changeset/178068

2015-01-07  Enrica Casucci  <enrica@apple.com>

        Can't copy URL for images and paste it into plain text fields.
        https://bugs.webkit.org/show_bug.cgi?id=140230
        rdar://problem/18736680

        Reviewed by Dan Bernstein.

        The incorrect objective C type was being written to the pasteboard.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

2015-01-07  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Modules/webdatabase/SQLStatementBackend.cpp:

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/GraphicsServicesSPI.h: Added.
        * platform/spi/cocoa/QuartzCoreSPI.h: Add CALayer SPI property hitTestsAsOpaque.
        * platform/spi/cocoa/ServersSPI.h: Added.
2015-01-07  Jaehun Lim  <ljaehun.lim@samsung.com>

        ASSERTION FAILED: !lengthOrPercentageValue.isUndefined() in WebCore::ApplyPropertyTextIndent::applyValue
        https://bugs.webkit.org/show_bug.cgi?id=130341

        Reviewed by Chris Dumez.

        Replace ASSERT() with 'if' statement because 'ex' unit length in <title> is not defined.

        Test: fast/css3-text/css3-text-indent/text-indent-crash-in-title.html

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueTextIndent): Change ASSERT() to 'if' statement.

2015-01-07  Anders Carlsson  <andersca@apple.com>

        Remove AbstractSQLStatement
        https://bugs.webkit.org/show_bug.cgi?id=140223

        Reviewed by Sam Weinig.

        * Modules/webdatabase/AbstractSQLStatement.h: Removed.
        * Modules/webdatabase/AbstractSQLTransactionBackend.h:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create):
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        (WebCore::SQLStatementBackend::frontend):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverStatementCallback):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::currentStatement):
        (WebCore::SQLTransactionBackend::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-07  Timothy Horton  <timothy_horton@apple.com>

        Manually-animated TextIndicator fades out blue selection if you click inside it
        https://bugs.webkit.org/show_bug.cgi?id=140224
        <rdar://problem/19317526>

        Reviewed by Beth Dakin.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView hasCompletedAnimation]):
        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
        Avoid fading out the TextIndicator if the animation hadn't completed.
        Also, use wantsManualAnimation instead of duplicating the switch here.

2015-01-07  Anders Carlsson  <andersca@apple.com>

        Remove AbstractSQLStatementBackend
        https://bugs.webkit.org/show_bug.cgi?id=140222

        Reviewed by Sam Weinig.

        We're unlikely to fully take advantage of the SQL implementation being abstract anyway, so let's just simplify the code instead.

        * Modules/webdatabase/AbstractSQLStatement.h:
        * Modules/webdatabase/AbstractSQLStatementBackend.h: Removed.
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::setBackend):
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::~SQLStatementBackend):
        * Modules/webdatabase/SQLStatementBackend.h:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2015-01-07  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: purge PassRefPtr from Inspector code and use Ref for typed and untyped protocol objects
        https://bugs.webkit.org/show_bug.cgi?id=140053

        Reviewed by Andreas Kling.

        This patch replaces uses of PassRefPtr with uses of RefPtr&& and WTF::move() in code
        related to Web Inspector. It also converts many uses of RefPtr to Ref where
        references are always non-null. These two refactorings have been combined since
        they tend to require similar changes to the code.

        No new tests, no behavior changed.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        * dom/ScriptExecutionContext.h:
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspectImpl):
        * inspector/CommandLineAPIHost.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildObjectForHighlightedNode):
        (WebCore::InspectorController::executionStopwatch):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp: Use Ref for all callbacks since they are
        not nullable.
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::create):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::setDatabase):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::create):
        * inspector/InspectorIndexedDBAgent.cpp: Use Ref for all callbacks since they are
        not nullable.
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::ClearObjectStoreListener::create):
        (WebCore::ClearObjectStoreListener::ClearObjectStoreListener):
        (WebCore::ClearObjectStore::create):
        (WebCore::ClearObjectStore::ClearObjectStore):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willLoadXHRImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::sessionCreatedImpl):
        (WebCore::InspectorInstrumentation::sessionLoadedImpl):
        (WebCore::InspectorInstrumentation::sessionModifiedImpl):
        (WebCore::InspectorInstrumentation::segmentCreatedImpl):
        (WebCore::InspectorInstrumentation::segmentCompletedImpl):
        (WebCore::InspectorInstrumentation::segmentLoadedImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronouslyImpl): Deleted.
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronouslyImpl): Deleted.
        (WebCore::InspectorInstrumentation::startProfilingImpl): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript): Deleted.
        (WebCore::InspectorInstrumentation::captureStoppedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackStartedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackPausedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackHitPositionImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackFinishedImpl): Deleted.
        (WebCore::InspectorInstrumentation::networkStateChangedImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame): Deleted.
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForPoint):
        (WebCore::buildObjectForRect):
        (WebCore::buildArrayForQuad):
        (WebCore::buildObjectForHighlight):
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForCSSRegionsHighlight):
        (WebCore::buildObjectForSize):
        (WebCore::buildObjectForCSSRegionContentClip):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::buildObjectForRendererFragments):
        (WebCore::buildObjectForShapeOutside):
        (WebCore::buildObjectForElementInfo):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::reset):
        (WebCore::InspectorOverlay::evaluateInOverlay):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::createXHRTextDecoder):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForPosition):
        (WebCore::buildInspectorObjectForInput):
        (WebCore::buildInspectorObjectForSession):
        (WebCore::buildInspectorObjectForSegment):
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willLoadXHR):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        (WebCore::InspectorResourceAgent::loadResource):
        (WebCore::InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorResourceAgent::didScheduleStyleRecalculation): Deleted.
        (WebCore::InspectorResourceAgent::disable): Deleted.
        (WebCore::InspectorResourceAgent::setCacheDisabled): Deleted.
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::create):
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::toggleProperty):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheet::rememberInspectorStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheet::collectFlatRules):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::inspectorStyleForId):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorCSSId::asProtocolValue):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteRecordEntry):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::createRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        * inspector/InspectorWorkerAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::XHRReplayData::create):
        (WebCore::XHRReplayData::XHRReplayData):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::decoder):
        (WebCore::NetworkResourcesData::ResourceData::setDecoder):
        (WebCore::NetworkResourcesData::ResourceData::buffer):
        (WebCore::NetworkResourcesData::ResourceData::setBuffer):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createBackgroundRecord):
        (WebCore::TimelineRecordFactory::createGCEventData):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createXHRLoadData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createReceiveResourceData):
        (WebCore::TimelineRecordFactory::createLayoutData):
        (WebCore::TimelineRecordFactory::createDecodeImageData):
        (WebCore::TimelineRecordFactory::createResizeImageData):
        (WebCore::TimelineRecordFactory::createMarkData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::createQuad):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::buildInspectorObject):
        (WebCore::buildProfileInspectorObject):
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::executionStopwatch):
        * inspector/WorkerInspectorController.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        (WebCore::PageConsoleClient::count):
        (WebCore::PageConsoleClient::profileEnd):
        (WebCore::PageConsoleClient::timeEnd):
        (WebCore::PageConsoleClient::timeStamp):
        * page/PageConsoleClient.h:
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::switchSession):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment):
        (WebCore::ReplayController::loadSegmentAtIndex):
        * replay/ReplayInputCreationMethods.cpp:
        (WebCore::InitialNavigation::createFromPage):
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::logExceptionToConsole):
        * workers/SharedWorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::logExceptionToConsole):
        (WebCore::WorkerGlobalScope::addMessage):
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole):
        * workers/WorkerGlobalScope.h:

2015-01-07  Anders Carlsson  <andersca@apple.com>

        Annotate properties that start with "new" so they'll work under ARC
        https://bugs.webkit.org/show_bug.cgi?id=140215
        rdar://problem/19399153

        Reviewed by Geoffrey Garen.

        When encountering attributes that start with "new", also generate an additional getter method declaration that
        has an NS_RETURNS_NOT_RETAINED annotation so ARC will know not to overrelease the property value.

        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):

2015-01-07  Beth Dakin  <bdakin@apple.com>

        Adopt delegate callbacks so that standardQuickLookMenuItem does not obscure the 
        link
        https://bugs.webkit.org/show_bug.cgi?id=140206
        -and corresponding-
        rdar://problem/19300492

        Reviewed by Tim Horton.

        More delegate methods.
        * platform/spi/mac/QuickLookMacSPI.h:

2015-01-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Negative raster shape height leads to crash
        https://bugs.webkit.org/show_bug.cgi?id=136087

        Reviewed by Zoltan Horvath.

        This patch clamps the size of the margin box rect used to compute the
        raster shape on a float so the width and height cannot be negative.
        This makes it safe to use that rect to determine the size of the shape
        intervals data structure.

        Test: fast/shapes/shape-outside-floats/shape-outside-negative-height-crash.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape): Add an assert to be explict about
            the precondition.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::getShapeImageMarginRect): Clamp the marginRect's size.

2015-01-06  Sam Weinig  <sam@webkit.org>

        Modernize the SVGElement and MathMLElement factories
        https://bugs.webkit.org/show_bug.cgi?id=140163

        Reviewed by Dan Bernstein.

        * dom/Element.cpp:
        (WebCore::Element::create):
        * dom/Element.h:
        Change to return a Ref rather than a RefPtr.

        * dom/make_names.pl:
        (printConstructorSignature):
        (printFactoryCppFile):
        (printFactoryHeaderFile):
        Change to unconditionally use Ref as the return type for element factories
        now that HTML is not special cased.

        * SVG and MathML element files elided *
        Changed all SVG and MathML element's create functions to return a Ref.

2015-01-07  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r178028): iOS build broken due to unused parameters in GlyphPage::mayUseMixedFontDataWhenFilling()

        Fixes the following build errors:

            WebCore/platform/graphics/mac/GlyphPageMac.cpp:58:61: error: unused parameter 'buffer' [-Werror,-Wunused-parameter]
            bool GlyphPage::mayUseMixedFontDataWhenFilling(const UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
                                                                        ^
            WebCore/platform/graphics/mac/GlyphPageMac.cpp:58:78: error: unused parameter 'bufferLength' [-Werror,-Wunused-parameter]
            bool GlyphPage::mayUseMixedFontDataWhenFilling(const UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
                                                                                         ^
            WebCore/platform/graphics/mac/GlyphPageMac.cpp:58:114: error: unused parameter 'fontData' [-Werror,-Wunused-parameter]
            bool GlyphPage::mayUseMixedFontDataWhenFilling(const UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
                                                                                                                             ^
            3 errors generated.

        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::mayUseMixedFontDataWhenFilling): Add
        UNUSED_PARAM() as needed.

2015-01-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Content does not wrap with overflow: hidden and reference box different from margin-box
        https://bugs.webkit.org/show_bug.cgi?id=138139

        Reviewed by David Hyatt.

        To determine how much an box needs to shink to avoid a float, the code
        was only taking into account the first line of the box. This doesn't
        work when the float has a shape, as it can make it seem like there is
        more space on the line than there actually is. This patch changes the
        calculations to take into account the entire height of the box that
        needs to be shrunk, and thus computes the correct amount of space
        available.

        Test: fast/shapes/shape-outside-floats/shape-overflow-hidden-left-margin.html
              fast/shapes/shape-outside-floats/shape-overflow-hidden-right-margin.html
              fast/shapes/shape-outside-floats/shape-overflow-hidden.html

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

2015-01-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r178039.
        https://bugs.webkit.org/show_bug.cgi?id=140187

        Breaks ObjC Inspector Protocol (Requested by JoePeck on
        #webkit).

        Reverted changeset:

        "Web Inspector: purge PassRefPtr from Inspector code and use
        Ref for typed and untyped protocol objects"
        https://bugs.webkit.org/show_bug.cgi?id=140053
        http://trac.webkit.org/changeset/178039

2015-01-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: purge PassRefPtr from Inspector code and use Ref for typed and untyped protocol objects
        https://bugs.webkit.org/show_bug.cgi?id=140053

        Reviewed by Andreas Kling.

        This patch replaces uses of PassRefPtr with uses of RefPtr&& and WTF::move() in code
        related to Web Inspector. It also converts many uses of RefPtr to Ref where
        references are always non-null. These two refactorings have been combined since
        they tend to require similar changes to the code.

        No new tests, no behavior changed.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        * dom/ScriptExecutionContext.h:
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::generateViolationReport):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::inspectImpl):
        * inspector/CommandLineAPIHost.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildObjectForHighlightedNode):
        (WebCore::InspectorController::executionStopwatch):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        (WebCore::parseConfigColor):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::processAccessibilityChildren):
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp: Use Ref for all callbacks since they are
        not nullable.
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::create):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::setDatabase):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::create):
        * inspector/InspectorIndexedDBAgent.cpp: Use Ref for all callbacks since they are
        not nullable.
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::ClearObjectStoreListener::create):
        (WebCore::ClearObjectStoreListener::ClearObjectStoreListener):
        (WebCore::ClearObjectStore::create):
        (WebCore::ClearObjectStore::ClearObjectStore):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willLoadXHRImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::sessionCreatedImpl):
        (WebCore::InspectorInstrumentation::sessionLoadedImpl):
        (WebCore::InspectorInstrumentation::sessionModifiedImpl):
        (WebCore::InspectorInstrumentation::segmentCreatedImpl):
        (WebCore::InspectorInstrumentation::segmentCompletedImpl):
        (WebCore::InspectorInstrumentation::segmentLoadedImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronouslyImpl): Deleted.
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronouslyImpl): Deleted.
        (WebCore::InspectorInstrumentation::startProfilingImpl): Deleted.
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEventImpl): Deleted.
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript): Deleted.
        (WebCore::InspectorInstrumentation::captureStoppedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackStartedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackPausedImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackHitPositionImpl): Deleted.
        (WebCore::InspectorInstrumentation::playbackFinishedImpl): Deleted.
        (WebCore::InspectorInstrumentation::networkStateChangedImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame): Deleted.
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForPoint):
        (WebCore::buildObjectForRect):
        (WebCore::buildArrayForQuad):
        (WebCore::buildObjectForHighlight):
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForCSSRegionsHighlight):
        (WebCore::buildObjectForSize):
        (WebCore::buildObjectForCSSRegionContentClip):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::buildObjectForRendererFragments):
        (WebCore::buildObjectForShapeOutside):
        (WebCore::buildObjectForElementInfo):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::reset):
        (WebCore::InspectorOverlay::evaluateInOverlay):
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::createXHRTextDecoder):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::buildInspectorObjectForPosition):
        (WebCore::buildInspectorObjectForInput):
        (WebCore::buildInspectorObjectForSession):
        (WebCore::buildInspectorObjectForSegment):
        (WebCore::InspectorReplayAgent::replayToPosition):
        (WebCore::InspectorReplayAgent::getSessionData):
        (WebCore::InspectorReplayAgent::getSegmentData):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willLoadXHR):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        (WebCore::InspectorResourceAgent::loadResource):
        (WebCore::InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient): Deleted.
        (WebCore::InspectorResourceAgent::didScheduleStyleRecalculation): Deleted.
        (WebCore::InspectorResourceAgent::disable): Deleted.
        (WebCore::InspectorResourceAgent::setCacheDisabled): Deleted.
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::create):
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::toggleProperty):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheet::rememberInspectorStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheet::collectFlatRules):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::inspectorStyleForId):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorCSSId::asProtocolValue):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteRecordEntry):
        (WebCore::InspectorTimelineAgent::appendRecord):
        (WebCore::InspectorTimelineAgent::sendEvent):
        (WebCore::InspectorTimelineAgent::createRecordEntry):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        * inspector/InspectorWorkerAgent.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::XHRReplayData::create):
        (WebCore::XHRReplayData::XHRReplayData):
        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::decoder):
        (WebCore::NetworkResourcesData::ResourceData::setDecoder):
        (WebCore::NetworkResourcesData::ResourceData::buffer):
        (WebCore::NetworkResourcesData::ResourceData::setBuffer):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createBackgroundRecord):
        (WebCore::TimelineRecordFactory::createGCEventData):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createXHRLoadData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createReceiveResourceData):
        (WebCore::TimelineRecordFactory::createLayoutData):
        (WebCore::TimelineRecordFactory::createDecodeImageData):
        (WebCore::TimelineRecordFactory::createResizeImageData):
        (WebCore::TimelineRecordFactory::createMarkData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::createQuad):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::buildInspectorObject):
        (WebCore::buildProfileInspectorObject):
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::executionStopwatch):
        * inspector/WorkerInspectorController.h:
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        (WebCore::PageConsoleClient::count):
        (WebCore::PageConsoleClient::profileEnd):
        (WebCore::PageConsoleClient::timeEnd):
        (WebCore::PageConsoleClient::timeStamp):
        * page/PageConsoleClient.h:
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::switchSession):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment):
        (WebCore::ReplayController::loadSegmentAtIndex):
        * replay/ReplayInputCreationMethods.cpp:
        (WebCore::InitialNavigation::createFromPage):
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::logExceptionToConsole):
        * workers/SharedWorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::logExceptionToConsole):
        (WebCore::WorkerGlobalScope::addMessage):
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole):
        * workers/WorkerGlobalScope.h:

2015-01-07  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::AXObjectCache::clearTextMarkerNodesInUse + 149
        https://bugs.webkit.org/show_bug.cgi?id=139929

        Reviewed by Darin Adler.

        When a frame is replaced, there were instances when it was not clearing its associated nodes in the accessibility text marker -> Node cache.
        This caused dead Nodes to be left in the cache which would eventually be accessed when the cache was cleaned out at a later time.

        To fix this we should be clearing out the cache in Document::prepareForDestruction, instead of Frame::disconnectOwnerElement.

        While working on this, it also exposed a problem where when a frame goes away, it doesn't inform its parent to update its children,
        which causes an ASSERT to be hit with this test as well.

        Tests: accessibility/frame-disconnect-textmarker-cache-crash.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * page/Frame.cpp:
        (WebCore::Frame::disconnectOwnerElement):
            Remove cache management from here since it is superceded by code in Document::prepareForDestruction
        * page/FrameView.cpp:
        (WebCore::FrameView::removeFromAXObjectCache):

2015-01-07  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed fix for the CoordinatedGraphics builds after r178034.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setChildren): Add back the setChildren()
        variant that receives a reference to the Vector of TextureMapperLayer
        objects. This is still used by the CoordinatedGraphics code that still
        constructs a separate Vector object each time the layer's children change.
        * platform/graphics/texmap/TextureMapperLayer.h:

2015-01-07  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Use std::sort instead of qsort in TextureMapperLayer::sortByZOrder()
        https://bugs.webkit.org/show_bug.cgi?id=136212

        Reviewed by Darin Adler.

        Use std::sort() instead of qsort() to sort the TextureMapperLayer objects
        by their z-order. A lambda expression can be used to compare the m_centerZ 
        member variables of any two TextureMapperLayers.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::sortByZOrder):
        (WebCore::TextureMapperLayer::compareGraphicsLayersZValue): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:

2015-01-06  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Avoid constructing Vector when setting new children of TextureMapperLayer
        https://bugs.webkit.org/show_bug.cgi?id=137265

        Reviewed by Brent Fulgham.

        Instead of constructing a vector object and populating it with TextureMapperLayers
        every time the children of a GraphicsLayer change, the children vector is now passed
        directly to TextureMapperLayer::setChildren(), which properly downcasts GraphicsLayers
        and adds the new TextureMapperLayer children.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::toTextureMapperLayerVector): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setChildren):
        * platform/graphics/texmap/TextureMapperLayer.h:

2015-01-07  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] m_layer member in GraphicsLayerTextureMapper is always non-null
        https://bugs.webkit.org/show_bug.cgi?id=140135

        Reviewed by Darin Adler.

        Since the TextureMapperLayer member in the GraphicsLayerTextureMapper class
        is always non-null, we don't need to keep it in a std::unique_ptr<>.

        GraphicsLayerTextureMapper::layer() now returns a reference to the m_layer member.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::toTextureMapperLayerVector):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        (WebCore::GraphicsLayerTextureMapper::setFilters):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2015-01-07  Byungseon Shin  <sun.shin@lge.com>

        Fix Border-radius clipping issue on a composited descendants
        https://bugs.webkit.org/show_bug.cgi?id=138551

        Reviewed by Simon Fraser.

        Fix clipping compositing descendants of an accelerated layer having
        border radius and clip overflow issue by using layer corner-radius
        or a CAShapeLayer mask on Mac, and setting up a separate mask layer
        on the childContainmentLayer on other platforms.

        This patch is extracted from following Blink revisions:
        <http://src.chromium.org/viewvc/blink?view=revision&revision=162463>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=158258>
        by <rosca@adobe.com>

        Clip accelerated descendants of an accelerated layer having border radius and clip overflow.
        Large canvas does not honor containing div's border radius.

        and <http://src.chromium.org/viewvc/blink?view=revision&revision=160578>
        by <junov@chromium.org>

        Fix for CSS clip-path with accelerated 2D canvas.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::applyClippingBorder):
        (WebCore::GraphicsLayer::clearClippingBorder):
        (WebCore::GraphicsLayer::needsClippingMaskLayer):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::applyClippingBorder):
        (WebCore::GraphicsLayerCA::clearClippingBorder):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/PaintPhase.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintClippingMask):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::destroyGraphicsLayers):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::backingStoreMemoryEstimate):
        * rendering/RenderLayerBacking.h:

2015-01-06  Antti Koivisto  <antti@apple.com>

        Use HashMap instead of CFDictionary for composite font reference map
        https://bugs.webkit.org/show_bug.cgi?id=140150

        Reviewed by Geoff Garen.

        Use WebKit types. Also use USE(APPKIT) consistently for this feature.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):

            The whole desctructor gets handled implicitly.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::mayUseMixedFontDataWhenFilling):
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::compositeFontReferenceFontData):
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData): Deleted.

2015-01-07  Mihnea Ovidenie  <mihnea@adobe.com>

        ASSERTION FAILED: rareData->m_flowThreadContainingBlock.value() == RenderBox::locateFlowThreadContainingBlock() in WebCore::RenderBlock::locateFlowThreadContainingBlock
        https://bugs.webkit.org/show_bug.cgi?id=139390

        Reviewed by Andrei Bucur.

        When a block level element is inserted into an inline element, the inline element is split
        in order to make sure that all the inline element children are properly wrapped inside
        anonymous block elements. If the inline element is inside a pagination context, we have
        to invalidate the cached flow thread containing block for the split inline element and its descendants.

        Test: fast/multicol/newmulticol/block-split-inline-in-multicol.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move 'content' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140169

        Reviewed by Sam Weinig.

        Move 'content' CSS property to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialContent):
        (WebCore::StyleBuilderCustom::applyInheritContent):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move 'webkit-mask-image' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140168

        Reviewed by Sam Weinig.

        Move 'webkit-mask-image' CSS property to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertMaskImageOperations):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitMaskImage):
        (WebCore::StyleBuilderCustom::applyInheritWebkitMaskImage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::createMaskImageOperations): Deleted.
        * css/StyleResolver.h:

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Drop ResourceResponseBase::connectionID and connectionReused members
        https://bugs.webkit.org/show_bug.cgi?id=140158

        Reviewed by Sam Weinig.

        Drop ResourceResponseBase::connectionID and connectionReused members.
        Those were needed by the Chromium port but are no longer used.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        (WebCore::PerformanceResourceTiming::connectStart):
        (WebCore::PerformanceResourceTiming::connectEnd):
        * page/PerformanceResourceTiming.h:
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::connectionReused): Deleted.
        (WebCore::ResourceResponseBase::setConnectionReused): Deleted.
        (WebCore::ResourceResponseBase::connectionID): Deleted.
        (WebCore::ResourceResponseBase::setConnectionID): Deleted.
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move the 'alt' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140129

        Reviewed by Darin Adler.

        Move the 'alt' CSS property to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueAlt):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-text-size-adjust' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140157

        Reviewed by Darin Adler.

        Move '-webkit-text-size-adjust' CSS property to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::applyValueWebkitTextSizeAdjust):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2015-01-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Masking][CSS Shapes] Large corner radii use with inset() clip-path are not properly constrained
        https://bugs.webkit.org/show_bug.cgi?id=140127

        Reviewed by Darin Adler.

        Constrain large corner radii for inset() clip-path in the same way
        that border-radii are constrained.

        Test: fast/masking/clip-path-inset-large-radii.html

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Add radii constraint. Also reformat
            code a little to shut the style bot up.

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Only throttle DOM timers if they change CSS properties that cannot cause non-descendant elements to become visible
        https://bugs.webkit.org/show_bug.cgi?id=140142

        Reviewed by Darin Adler.

        Only throttle DOM timers if they change CSS properties that cannot cause
        non-descendant elements to become visible. For example, a DOM timer may
        change the height of an element that is outside the viewport. However,
        changing its height may causes elements inside the viewport to move. As
        such, we should NOT throttle such DOM timer.

        With this patch, we only mark a repeating timer as candidate for
        throttling if it is updating one of the following CSS properties:
        left, right, top, bottom, webkit-transform, opacity.

        Test: fast/dom/timer-height-change-no-throttling.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::propertyChangeMayRepaintNonDescendants):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::scriptDidCauseElementRepaint):
        * page/DOMTimer.h:

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Add utility method on FrameView that resumes animated images and unthrottles DOM timers
        https://bugs.webkit.org/show_bug.cgi?id=140151

        Reviewed by Darin Adler.

        Add utility method on FrameView that resumes animated images and
        unthrottles DOM timers.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::viewportContentsChanged):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Do not attempt to revalidate cached main resource on back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=139263

        Reviewed by Darin Adler.

        Do not attempt to revalidate cached main resource on back/forward
        navigation, as allowed by RFC2616 & newer RFC7234 which distinguish
        history mechanisms and caches, stating:

           The freshness model (Section 4.2) does not necessarily apply to
           history mechanisms.  That is, a history mechanism can display a
           previous representation even if it has expired.

        Previously, we would bypass revalidation on back/forward navigation
        only for sub-resources. This patch extends this policy to the main
        resource as well.

        This behavior is also consistent with IE10+ and Chrome. It makes it more
        likely we return cached content to the user on back/forward navigation
        and avoids making network requests in this case.

        Test: http/tests/cache/history-navigation-no-resource-revalidation.html

        * loader/cache/CacheValidation.cpp:
        (WebCore::redirectChainAllowsReuse):
        * loader/cache/CacheValidation.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::redirectChainAllowsReuse):
        Add a "ReuseExpiredRedirectionOrNot" flag argument because in the case
        of an HistoryBuffer navigation, we don't mind reuse an expired
        redirection. However, we still need to make sure that the redirection
        is actually cached before reusing it.

        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        - Do the redirectChainAllowsReuse() check *before* checking if the cache
          policy is CachePolicyHistoryBuffer. This is needed because
          redirectChainAllowsReuse() will return false if the redirection is not
          cached. Loading from the cache in this case will cause us to load the
          wrong resource (the one before the redirection). This case is covered
          by http/tests/navigation/redirect-on-reload-updates-history-item.html.
        - Do not use the cached main resource if it has "cache-control: no-store",
          even if it is a history navigation (cachePolicy is
          CachePolicyHistoryBuffer). This maintains the previous behavior, and
          some layout tests rely on this. We now have to be explicit about it
          because cachePolicy() can now return CachePolicyHistoryBuffer for the
          main resource (not just sub-resources). This difference in behavior
          on history navigation for the main resource and sub-resources is not
          great. However, I chose to maintain this pre-existing behavior in this
          patch to do one behavior change at a time. We can harmonize this later.

        Previously, the order was not an issue because the main resource was
        always revalidated on back/forward navigation.

        (WebCore::CachedResourceLoader::cachePolicy):
        Return CachePolicyHistoryBuffer for the main resource in case of
        history navigation, instead of CachePolicyVerify so that we don't
        attempt to revalidate.

2015-01-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177988.
        https://bugs.webkit.org/show_bug.cgi?id=140159

        mysteriously broke 2 tests (Requested by kling on #webkit).

        Reverted changeset:

        "Pack WebCore::RuleData better."
        https://bugs.webkit.org/show_bug.cgi?id=140109
        http://trac.webkit.org/changeset/177988

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Setting '-webkit-filter' to 'brightness(calc(10% * 2))' does not work
        https://bugs.webkit.org/show_bug.cgi?id=140149

        Reviewed by Darin Adler.

        Setting '-webkit-filter' to 'brightness(calc(10% * 2))' was not working
        because the CSS parser did not handle calculated values inside
        brightness(). This patch addresses the issue.

        Test: fast/css/webkit-filter-calc.html

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

2015-01-06  Zalan Bujtas  <zalan@apple.com>

        Assertion in RenderGeometryMap::mapToContainer with LayoutUnit overflow.
        https://bugs.webkit.org/show_bug.cgi?id=108619
        rdar://problem/19391214

        Use only FloatQuad in RenderGeometryMap::mapToContainer.

        Due to the difference in the internal representation of FloatRect and FloatQuad,
        with certain float values, converting FloatRect to FloatQuad and back
        to FloatRect could produce a slightly different rect.

        Reviewed by Simon Fraser.

        Test: fast/block/geometry-map-assertion-with-tall-content.html

        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::mapToContainer):

2015-01-06  Sam Weinig  <sam@webkit.org>

        Allow MathML in dashboard compatibility mode
        https://bugs.webkit.org/show_bug.cgi?id=140153

        Reviewed by Alexey Proskuryakov.

        In what seems like an accident due to the way we used to disable SVG in 
        dashboard, MathML has been disable in dashboard compatibility mode. There
        does not seem to be any reason to keep this accidental quirk.

        Test: mathml/mathml-in-dashboard.html

        * dom/make_names.pl:
        (printFactoryCppFile):

2015-01-06  Simon Fraser  <simon.fraser@apple.com>

        Some composting reflections tests are broken
        https://bugs.webkit.org/show_bug.cgi?id=139889

        Reviewed by Tim Horton.
        
        When creating layer clones for reflections, we'd clobber the layer background
        color via resetting the custom appearance on the clone. Fix by having
        PlatformCALayerMac::updateCustomAppearance() only do work when the appearance changes.
        
        Some other drive-by nullptr changes, and include layer IDs in debug layer names.

        Covered by existing pixel tests.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::updateCustomAppearance):
        (PlatformCALayerMac::tiledBacking):

2015-01-04  Sam Weinig  <sam@webkit.org>

        Modernize the HTMLElement factory
        https://bugs.webkit.org/show_bug.cgi?id=140063

        Reviewed by Darin Adler.

        Make the HTMLElement (and derived classes) create functions 
        and HTMLElementFactory return Refs rather than RefPtr/PassRefPtr.

        * Files elided *

2015-01-06  Alexey Proskuryakov  <ap@apple.com>

        ADDRESS_SANITIZER macro is overloaded
        https://bugs.webkit.org/show_bug.cgi?id=140130

        Reviewed by Anders Carlsson.

        * platform/RefCountedSupplement.h:
        * platform/Supplementable.h:
        Change the conditional to ENABLE(SECURITY_ASSERTIONS). These checks will be used
        in debug builds, and also when one explicitly passes -DENABLE_SECURITY_ASSERTIONS.

2015-01-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: pass parameters to inspector agents by reference where possible
        https://bugs.webkit.org/show_bug.cgi?id=140002

        Reviewed by Andreas Kling.

        Pass parameters by-reference from inspector instrumentation entry
        points to inspector agents. If the event doesn't make sense with null
        arguments, perform null checks before calling agent methods.

        No new tests, no behavior changed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateNamedFlow):
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow):
        (WebCore::InspectorCSSAgent::didChangeRegionOverset):
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        * inspector/InspectorCSSAgent.h: Reorder methods to match instrumentation.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleTouchEvent):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        * inspector/InspectorDOMAgent.h: Reorder methods to match instrumentation.
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::didPushShadowRootImpl):
        (WebCore::InspectorInstrumentation::willPopShadowRootImpl):
        (WebCore::InspectorInstrumentation::didCreateNamedFlowImpl): Add null check.
        (WebCore::InspectorInstrumentation::willRemoveNamedFlowImpl): Add null check.
        (WebCore::InspectorInstrumentation::didChangeRegionOversetImpl):
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::handleTouchEventImpl):
        (WebCore::InspectorInstrumentation::forcePseudoStateImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::didEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::didInvalidateLayoutImpl):
        (WebCore::InspectorInstrumentation::willLayoutImpl):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::willScrollLayerImpl):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculationImpl):
        (WebCore::InspectorInstrumentation::applyEmulatedMediaImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl): Add null check.
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl): Add null checks.
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl):  Add null check.
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl): Add null check.
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl): Add null check.
        (WebCore::InspectorInstrumentation::didFailLoadingImpl): Add null check.
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl): Add null check.
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl): Add null checks.
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrameImpl):
        (WebCore::InspectorInstrumentation::willDestroyCachedResourceImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl): Add null check.
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl): Add null check.
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl): Add null check.
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl): Add null check.
        (WebCore::InspectorInstrumentation::renderLayerDestroyedImpl):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        (WebCore::InspectorInstrumentation::scriptsEnabledImpl): Deleted.
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClientImpl): Deleted.
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl): Deleted.
        (WebCore::InspectorInstrumentation::willWriteHTMLImpl): Deleted.
        (WebCore::InspectorInstrumentation::startProfilingImpl): Deleted.
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::renderLayerDestroyed):
        (WebCore::InspectorLayerTreeAgent::pseudoElementDestroyed):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::loaderDetachedFromFrame):
        (WebCore::InspectorPageAgent::applyEmulatedMedia):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        (WebCore::InspectorReplayAgent::frameDetached):
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::willDestroyCachedResource):
        (WebCore::InspectorResourceAgent::didScheduleStyleRecalculation):
        (WebCore::InspectorResourceAgent::mainFrameNavigated):
        * inspector/InspectorResourceAgent.h: Reorder methods to match instrumentation.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didInvalidateLayout):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willScroll):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didTimeStamp):
        (WebCore::InspectorTimelineAgent::time):
        (WebCore::InspectorTimelineAgent::timeEnd):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        * inspector/InspectorTimelineAgent.h: Reorder methods to match instrumentation.
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext): Deleted. It has no callers.
        * inspector/PageRuntimeAgent.h:
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::frameDetached):
        * replay/ReplayController.h:

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Remove an old workaround for an old unsupported plug-in
        https://bugs.webkit.org/show_bug.cgi?id=140141

        Reviewed by Brent Fulgham.

        The old, pre-Vista(!) plug-in is no longer available so we don't need to have this workaround in place.
        (If for some bizarre reason we'd ever want to bring it back it should be a flag that the plug-in code sets on the timer,
        the shared timer code shouldn't know about plug-ins at all).

        * platform/win/SharedTimerWin.cpp:
        (WebCore::TimerWindowWndProc):

2015-01-06  Andreas Kling  <akling@apple.com>

        Pack WebCore::RuleData better.
        <https://webkit.org/b/140109>

        Reviewed by Benjamin Poulain.

        Shrink RuleData by 8 bytes per instance by reordering members so that
        the CSS JIT compilation status fits into the bitfield.

        * css/RuleSet.h:
        (WebCore::RuleData::compilationStatus):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus):

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Use a Ref instead of a RefPtr since the database provider can never be null now.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::databaseProvider):

2015-01-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (r177876): 35% regression in Parser/html5-full-render
        https://bugs.webkit.org/show_bug.cgi?id=140123

        Followup fix.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::systemFallbackFontDataForCharacter):

            The code failed to pass isForPlatformFont boolean.

2015-01-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177963.
        https://bugs.webkit.org/show_bug.cgi?id=140136

        Caused lots of crashes (Requested by smfr on #webkit).

        Reverted changeset:

        "Add a WebKit1 database provider"
        https://bugs.webkit.org/show_bug.cgi?id=140126
        http://trac.webkit.org/changeset/177963

2015-01-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (r177876): 35% regression in Parser/html5-full-render
        https://bugs.webkit.org/show_bug.cgi?id=140123

        Reviewed by Darin Adler.

        Resolving system fallbacks is extremely slow. GlyphPageTree used to cache them globally.

        This patch brings back a simple global cache for system fallbacks.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::systemFallbackCache):
        (WebCore::SimpleFontData::systemFallbackFontDataForCharacter):
        (WebCore::SimpleFontData::removeFromSystemFallbackCache):
        * platform/graphics/SimpleFontData.h:

2015-01-06  Antti Koivisto  <antti@apple.com>

        Rename SimpleFontData::AdditionalFontData to SimpleFontData::SVGData
        https://bugs.webkit.org/show_bug.cgi?id=140124

        Reviewed by Anders Carlsson.

        The current name is vague and confusing (as AdditionalFontData is not a FontData).

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataForCharacter):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::fillGlyphPage):
        (WebCore::SimpleFontData::createScaledFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::widthForGlyph):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::svgFontAndFontFaceElementForFontData):
        * svg/SVGFontData.h:

2015-01-06  Timothy Horton  <timothy_horton@apple.com>

        Make explicit which TextIndicator animations are driven manually, and which run automatically
        https://bugs.webkit.org/show_bug.cgi?id=140113
        <rdar://problem/19383425>

        Reviewed by Darin Adler.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::wantsManualAnimation):
        Add wantsManualAnimation(). The old transitions (Bounce and BounceAndCrossfade)
        run automatically, and the new ones (FadeIn and Crossfade) are driven manually.

        * page/TextIndicator.h:
        Add a comment explaining which animations are manual and which are not.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView present]):
        Make use of wantsManualAnimation(). The previous (wantsFadeIn || wantsCrossfade)
        was wrong, because it was true for BounceAndCrossfade, and would cause
        BounceAndCrossfade animations (which aren't driven manually) to stall at progress=0.

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Give empty pages a valid database provider.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):

2015-01-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix iOS build after r177955 and r177952.

        Unreviewed.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Remove now unused IndexedDB code
        https://bugs.webkit.org/show_bug.cgi?id=140128

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        Remove files.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        Don't include PageGroupIndexedDatabase.h.

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp: Removed.
        Remove this file, it just had one function calling through to the database strategy.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        Remove the create function.

        * Modules/indexeddb/PageGroupIndexedDatabase.cpp: Removed.
        * Modules/indexeddb/PageGroupIndexedDatabase.h: Removed.
        The backend is now per page, not per page group.

        * WebCore.exp.in:
        Remove an exported symbol.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files.

        * page/PageGroup.h:
        PageGroup is no longer supplementable.

        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend): Deleted.
        * platform/DatabaseStrategy.h:
        Remove a header.

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Regression(r176212): Carousel on mbusa.com is choppy
        https://bugs.webkit.org/show_bug.cgi?id=139543
        <rdar://problem/19209406>

        Reviewed by Antti Koivisto.

        A repeating DOM timer changing the style of an element that has
        overflowing content that is visible would get throttled in the
        case where the overflowing content has its own layer. This is
        because the repaint rect returned by
        RenderObject::absoluteClippedOverflowRect() does not take into
        consideration descendants with their own self-painting layer when
        accounting for the overflow.

        Until I can find a relatively cheap way of computing the overflow
        in this case, this patch takes the conservative approach and
        assumes we may repaint inside the viewport if the element does not
        have a layer or if any of its descendants has its own layer.

        This patch also renames isInsideViewport() function to
        mayCauseRepaintInsideViewport() for clarity.

        Tests: fast/dom/repeating-timer-element-overflow-hidden-throttling.html
               fast/dom/repeating-timer-element-overflowing-child-own-layer-throttling.html

        * dom/Element.cpp:
        (WebCore::Element::mayCauseRepaintInsideViewport):
        (WebCore::Element::isInsideViewport): Deleted.
        * dom/Element.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::scriptDidCauseElementRepaint):
        (WebCore::DOMTimer::updateThrottlingStateAfterViewportChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::mayCauseRepaintInsideViewport):
        (WebCore::RenderElement::isInsideViewport): Deleted.
        * rendering/RenderElement.h:

2015-01-06  Anders Carlsson  <andersca@apple.com>

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Use a Ref instead of a RefPtr since the database provider can never be null now.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::databaseProvider):

2015-01-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r177952.

        Remove double class namespace in appendToAttributeValue.

        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::appendToAttributeValue): Added,
        (WebCore::HTMLToken::HTMLToken::appendToAttributeValue): Deleted.

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Add a DatabaseProvider subclass in WebKit2 and use it for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=140108

        Reviewed by Darin Adler.

        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::indexedDB):
        Get the IDBFactoryBackendInterface from the database provider.

        * page/DatabaseProvider.cpp:
        (WebCore::DatabaseProvider::idbFactoryBackend):
        Change this to return a pointer.

        * page/Page.h:
        (WebCore::Page::databaseProvider):
        Add a getter.

2015-01-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Another build fix attempt.

        Reorder function declarations to avoid confusing compiler. Add explicit namespace for
        out copied functions to avoid attempting to link against bindings version of these files.

        * plugins/PluginPackage.cpp:
        (WebCore::makeSource):
        (WebCore::NPN_Evaluate):
        (WebCore::NPN_Invoke):
        (WebCore::PluginPackage::initializeBrowserFuncs):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-scroll-snap-*' CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140112

        Reviewed by Darin Adler.

        Move '-webkit-scroll-snap-*' CSS properties to the new StyleBuilder.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::parseSnapCoordinate):
        (WebCore::StyleBuilderConverter::convertScrollSnapPoints):
        (WebCore::StyleBuilderConverter::convertSnapCoordinatePair):
        (WebCore::StyleBuilderConverter::convertScrollSnapCoordinates):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::parseSnapCoordinate): Deleted.
        (WebCore::StyleResolver::parseSnapCoordinatePair): Deleted.
        (WebCore::StyleResolver::parseSnapPoints): Deleted.
        * css/StyleResolver.h:

2015-01-06  Antti Koivisto  <antti@apple.com>

        Resolve mirroring and variant in Font instead of FontGlyphs
        https://bugs.webkit.org/show_bug.cgi?id=140079

        Reviewed by Darin Adler.

        Make FontGlyphs more focused. It doesn't need to know about resolving variants and mirroring.

        * platform/graphics/Font.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/Font.h:
        (WebCore::Font::glyphDataForCharacter): Deleted.
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataForCharacter):
        * platform/graphics/FontGlyphs.h:

2015-01-06  Shivakumar JM  <shiva.jm@samsung.com>

        Fix Unused parameter warning in Webcore bindings.
        https://bugs.webkit.org/show_bug.cgi?id=140118

        Reviewed by Gyuyoung Kim.

        remove the Unused parameter from createScriptInstanceForWidget() function

        No new tests, no behavior changed.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):

2015-01-05  Antti Koivisto  <antti@apple.com>

        Font::primaryFontData() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=140081

        Reviewed by Darin Adler.

        It is not null.

        Also rename primaryFont() -> primaryFontData().

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetStyle):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        * bindings/objc/DOM.mm:
        (-[DOMElement _font]):
        * editing/cocoa/HTMLConverter.mm:
        (_font):
        (WebCore::editingAttributedStringFromRange):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::fontAttributesForSelectionStart):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::fontAttributesForSelectionStart):
        * platform/graphics/Font.cpp:
        (WebCore::Font::fastAverageCharWidthIfAvailable):
        * platform/graphics/Font.h:
        (WebCore::Font::fontMetrics):
        (WebCore::Font::spaceWidth):
        (WebCore::Font::tabWidth):
        (WebCore::Font::primaryFontData):
        (WebCore::Font::primaryFont): Deleted.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::primaryFontHasGlyphForCharacter):
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::determinePitch):
        (WebCore::FontGlyphs::glyphDataForSystemFallback):
        (WebCore::FontGlyphs::glyphDataForCharacter):
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::primaryFontData):
        (WebCore::FontGlyphs::primarySimpleFontData):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        (WebCore::ComplexTextController::ComplexTextRun::fontData):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::primaryFontDataIsSystemFont):
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        * platform/graphics/opentype/OpenTypeMathData.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustLogicalLeftOffsetForLine):
        (WebCore::RenderBlock::adjustLogicalRightOffsetForLine):
        (WebCore::constructTextRunInternal):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth):
        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::getGlyphAssemblyFallBack):
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator):
        (WebCore::RenderMathMLOperator::findStretchyData):
        (WebCore::RenderMathMLOperator::trailingSpaceError):
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::stretchTo):
        (WebCore::RenderMathMLRadicalOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLRadicalOperator::computeLogicalHeight):
        (WebCore::RenderMathMLRadicalOperator::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::updateStyle):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::missingGlyphForFont):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

2015-01-06  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-filter' / '-webkit-backdrop-filter' to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140111

        Reviewed by Darin Adler.

        Move '-webkit-filter' / '-webkit-backdrop-filter' to the new
        StyleBuilder.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::createFilterOperations):
        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFilterOperations):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:

2015-01-05  Darin Adler  <darin@apple.com>

        Modernize and streamline HTMLToken and AtomicHTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=140046

        Reviewed by Andreas Kling.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendDocumentType): Added code to properly
        handle empty strings for systemId and publicId, rather than treating them
        the same as missing systemId and publicId.

        * html/parser/AtomicHTMLToken.h: Removed unneeded includes.
        Moved function bodies out of the class so it's easier to see the contents of
        the class. Renamed the isAll8BitData function to charactersIsAll8BitData
        to make it clear that it is correct only for AtomicHTMLToken::characters.
        Made more things private. Moved the findAttributeInVector function here
        and renamed it to just findAttribute. Use unsigned instead of int and
        size_t as appropriate. Changed the constructor that makes a fake one of
        these to move the Vector of attributes in rather than copying it.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertDoctype): Moved the code to create
        a string from here into AtomicHTMLToken.
        (WebCore::HTMLConstructionSite::createElementFromSavedToken): Updated
        to construct the Vector explicitly because all other call sites pass
        ownership of the Vector in to the AtomicHTMLToken.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer): Check for an uninitialized
        token without using a special function just for this purpose.
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken): Ditto.

        * html/parser/HTMLParserIdioms.h: Removed the version of
        stripLeadingAndTrailingHTMLSpaces that takes a character vector. Instead
        the caller can make a string. Later we might want this to work with
        a StringView, or a StringView/String combination.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan): Updated to not use HTMLToken::data.
        (WebCore::TokenPreloadScanner::updatePredictedBaseURL): Updated to not use
        HTMLToken::getAttributeItem and to not require a special overload of the
        stripLeadingAndTrailingHTMLSpaces function.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::end): Updated to call the token-ending
        function by its new name, setEndOffset.
        (WebCore::HTMLSourceTracker::sourceForToken): Updated since we no
        longer have a startIndex function that already returns 0. Instead just
        call length. Also use unsigned instead of size_t.

        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::getAttributeItem): Updated for name change.

        * html/parser/HTMLToken.h: Removed the many unneeded includes,
        including the self-include! Turned DoctypeData into a normal struct
        without m_ prefixes on its member names. Turned HTMLToken::Attribute and
        HTMLToken::Attribute::Range into normal structs. Moved function
        bodies out of the class so it's easier to see the contents of
        the class. Removed a few now-unneeded functions.

        * html/parser/HTMLTokenizer.cpp: Removed the AtomicHTMLToken function
        members that used to be here. None are needed any more; they are now all
        just inlined at the call site. If we need any non-inline functions, then
        we sould probably create an AtomicHTMLToken.cpp file instead.
        (WebCore::HTMLTokenizer::processEntity): Use the new bufferASCIICharacter
        function in all the cases where we know a character is ASCII to cut down
        on the amount of 8-bit checking we have to do.
        (WebCore::HTMLTokenizer::nextToken): Ditto.

        * html/parser/HTMLTokenizer.h: Added a new bufferASCIICharacter function
        so we don't have to do 8-bit checks on so many characters as we buffer
        them. Also removed the call to ensureIsCharacterToken, since appendToCharacter
        now does that. Also deleted overloads of bufferCharacter so we remember to
        call bufferASCIICharacter instead.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        Updated for change in AtomicHTMLToken function names.
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::hasAttribute): Added.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Use hasAtttribute.

        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement): Move the attributes in
        rather than copying them in.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterCharacterToken): Use clear so we don't have to
        have an eraseCharacters function. Use a local variable to avoid overloading
        ambiguity.
        (WebCore::XSSAuditor::decodedSnippetForAttribute): Fixed a typo and the types
        of some local variables.

2015-01-05  Darin Adler  <darin@apple.com>

        Revert mistake in yesterday's HTMLDocumentParser refactor.
        https://bugs.webkit.org/show_bug.cgi?id=140041

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Pass the parser content policy
        from the parserContentPolicy function, not the raw policy that was passed in. This
        restores the behavior from before r177883.

2015-01-05  Chris Dumez  <cdumez@apple.com>

        Using calc() for -webkit-filter does not work
        https://bugs.webkit.org/show_bug.cgi?id=140106

        Reviewed by Darin Adler.

        Using calc() for -webkit-filter did not work because the CSS parser did
        not handle it properly. This patch addresses the issue.

        Test: fast/css/webkit-filter-calc.html

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

2015-01-05  Chris Dumez  <cdumez@apple.com>

        Allow HTTPS + 'Cache-control: no-cache' pages into the page cache
        https://bugs.webkit.org/show_bug.cgi?id=139251

        Reviewed by Darin Adler.

        Allow HTTPS + 'Cache-control: no-cache' pages into the page cache as
        IE10+ and Google Chrome do, and as allowed by RFC2616 & newer RFC7234
        (both RFCs distinguish history mechanisms and caches).

        Pages over HTTPs using 'Cache-control: no-store' still don't go into
        the page cache for now.

        Test: http/tests/navigation/https-in-page-cache.html

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * platform/FeatureCounterKeys.h:

2015-01-05  Chris Dumez  <cdumez@apple.com>

        Using calc() in repeat() for -webkit-grid-template-rows does not work
        https://bugs.webkit.org/show_bug.cgi?id=140094

        Reviewed by Darin Adler.

        Using calc() in repeat() for -webkit-grid-template-rows was not working
        because the CSS parser was not handling this case properly. This patch
        addresses the issue.

        Test: fast/css-grid-layout/grid-repeat-calc.html

        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::isPositive):
        Add isPositive() method as it is needed by
        CSSParser::validateCalculationUnit().

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validateCalculationUnit):
        Add support for FPositiveInteger, similarly to what was done in
        validateUnit(). This would cause us to consider calc(1 + 1) as invalid
        if a FPositiveInteger was requested.

        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        Do not access fValue directly and call parsedDouble() instead as it
        correctly handles calculation values.

2015-01-05  Chris Dumez  <cdumez@apple.com>

        calc() cannot be used in steps() for -webkit-animation-timing-function
        https://bugs.webkit.org/show_bug.cgi?id=140091

        Reviewed by Darin Adler.

        calc() could not be used in steps() for -webkit-animation-timing-function
        CSS property because the CSS parser did not handle this case properly.
        This patch addresses the issue.

        Test: fast/css/animation-steps-calculated-value.html

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

2015-01-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] One more build fix for r177937.

        * plugins/PluginPackage.cpp: Provide forward declaration for local NPN_Evaluate
        implementation to avoid linker error.

2015-01-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r177937.

        Add the missing #include and namespace declarations to get a clean build.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * plugins/PluginPackage.cpp:
        (WebCore::getListFromVariantArgs):
        (WebCore::NPN_Invoke):
        (WebCore::makeSource):
        (WebCore::NPN_Evaluate):

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Remove PluginViewNone.cpp
        https://bugs.webkit.org/show_bug.cgi?id=140107

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * plugins/PluginViewNone.cpp: Removed.

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Stop including PluginView.h from cross platform WebCore code
        https://bugs.webkit.org/show_bug.cgi?id=140105

        Reviewed by Andreas Kling.

        Instead, include PluginViewBase.h. This will allow us to move the old plug-in implementation to WebKit.

        * bindings/js/ScriptController.cpp:
        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * loader/FrameLoaderClient.h:
        * page/Page.cpp:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::setJavaScriptPaused):

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Introduce a per-page database provider class
        https://bugs.webkit.org/show_bug.cgi?id=140102

        Reviewed by Sam Weinig.

        This class will replace DatabaseStrategy and allow for different providers per page.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DatabaseProvider.cpp: Added.
        (WebCore::DatabaseProvider::~DatabaseProvider):
        (WebCore::DatabaseProvider::idbFactoryBackend):
        * page/DatabaseProvider.h: Added.
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:

2015-01-05  Anders Carlsson  <andersca@apple.com>

        Add copies of NPN_Evaluate and NPN_Invoke on Windows
        https://bugs.webkit.org/show_bug.cgi?id=140103

        Reviewed by Andreas Kling.

        While this is unfortunate, it will allow us to get rid of PluginView.h and PluginViewNone.cpp
        from the cross platform WebCore code and then move the plug-in code to WebKit/win (which is the only client of this plug-in implementation).

        * plugins/PluginPackage.cpp:
        (WebCore::NPN_Invoke):
        (WebCore::NPN_Evaluate):
        (WebCore::PluginPackage::initializeBrowserFuncs):

2015-01-05  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from Page.
        <https://webkit.org/b/140089>

        Reviewed by Anders Carlsson.

        Use Ref or RefPtr instead of PassRefPtr as appropriate in WebCore::Page.

        * page/Page.cpp:
        (WebCore::Page::rangeOfString):
        (WebCore::Page::setSessionStorage):
        * page/Page.h:
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair):
        (WebCore::Page::removeSchedulePair):

2015-01-05  Chris Dumez  <cdumez@apple.com>

        Regression(r163928): Animated images are not resumed on window resizing
        https://bugs.webkit.org/show_bug.cgi?id=139714
        <rdar://problem/18855285>

        Reviewed by Darin Adler.

        After r163928, animated images were not resumed if they became visible
        after resizing the window. This patch calls resumes animated images if
        necessary in FrameView::setFrameRect() to handle this case properly.

        Tests: fast/images/animated-gif-window-resizing.html
               fast/images/animated-gif-zooming.html

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

2015-01-01  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: pass parameters to inspector instrumentation by reference where possible
        https://bugs.webkit.org/show_bug.cgi?id=139981

        Reviewed by Andreas Kling.

        Clean up inspector instrumentation entry points throughout WebCore. In particular, make
        parameters pass-by-reference if they are not nullable. Also standardize quirky parameter
        orders and do other small cleanups in InspectorInstrumentation and at callsites.

        Inspector agents still take the pertinent parameters by pointer even when they could be
        passed by reference. This will be addressed in a follow-up change.

        No new tests, no behavior changed.

        * WebCore.exp.in:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matchesFocusPseudoClass):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::elementIsActive):
        (WebCore::SelectorCompiler::elementIsActiveForStyleResolution):
        (WebCore::SelectorCompiler::elementIsHovered):
        (WebCore::SelectorCompiler::elementIsHoveredForStyleResolution):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent): Remove unnecessary ENABLE guard.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::appendChild):
        (WebCore::dispatchChildRemovalEvents):
        * dom/ContainerNodeAlgorithms.h:
        (WebCore::ChildNodeInsertionNotifier::notify): Remove unnecessary ENABLE guard.
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::finishedParsing): This is safe because we checked the argument.
        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::removeShadowRoot): This is safe because we checked the argument.
        (WebCore::Element::willModifyAttribute): Remove unnecessary ENABLE guard.
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners): This is safe because the type test would fail if null.
        * dom/NamedFlowCollection.cpp: Pass by reference since code already assumes non-null.
        (WebCore::NamedFlowCollection::ensureFlowWithName):
        (WebCore::NamedFlowCollection::discardNamedFlow):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::startProfiling):
        (WebCore::InspectorInstrumentation::stopProfiling):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didClearWindowObjectInWorld):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h: Remove instrumentationForPage() in favor of using instrumentingAgentsForPage() directly.
        * inspector/InspectorDatabaseInstrumentation.h:
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorInstrumentation.cpp: Add missing s_ prefix for global s_instrumentingAgentSets. Pass the instrumenting
        agent by reference since it was already null-checked if we reached a slow path for instrumentation.
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::isDebuggerPausedImpl):
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl):
        (WebCore::InspectorInstrumentation::mediaQueryResultChangedImpl):
        (WebCore::InspectorInstrumentation::didPushShadowRootImpl):
        (WebCore::InspectorInstrumentation::willPopShadowRootImpl):
        (WebCore::InspectorInstrumentation::didCreateNamedFlowImpl):
        (WebCore::InspectorInstrumentation::willRemoveNamedFlowImpl):
        (WebCore::InspectorInstrumentation::didChangeRegionOversetImpl):
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl):
        (WebCore::InspectorInstrumentation::didScrollImpl):
        (WebCore::InspectorInstrumentation::handleTouchEventImpl):
        (WebCore::InspectorInstrumentation::handleMousePressImpl):
        (WebCore::InspectorInstrumentation::forcePseudoStateImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequestImpl):
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::didHandleEventImpl): Add proper cookie guard and pass by reference.
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::didEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::scriptsEnabledImpl):
        (WebCore::InspectorInstrumentation::didCreateIsolatedContextImpl): Removed, as there are no callers from WebCore. Possible V8 artifact.
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl): Add proper cookie guard and pass by reference.
        (WebCore::InspectorInstrumentation::didInvalidateLayoutImpl):
        (WebCore::InspectorInstrumentation::willLayoutImpl):
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEventImpl):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        (WebCore::InspectorInstrumentation::willScrollLayerImpl):
        (WebCore::InspectorInstrumentation::didScrollLayerImpl):
        (WebCore::InspectorInstrumentation::willRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didRecalculateStyleImpl): Add proper cookie guard and pass by reference.
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculationImpl):
        (WebCore::InspectorInstrumentation::applyEmulatedMediaImpl): Pass string by reference.
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::continueAfterPingLoaderImpl):
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceDataImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl): Add proper cookie guard and pass by reference.
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownloadImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnoreImpl):
        (WebCore::InspectorInstrumentation::didReceiveDataImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClientImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRImpl):
        (WebCore::InspectorInstrumentation::didFailXHRLoadingImpl):
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponseImpl):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronouslyImpl):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronouslyImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSPImpl):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponseImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl): Use Frame::isMainFrame().
        (WebCore::InspectorInstrumentation::loadEventFiredImpl): Use Frame::isMainFrame().
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrameImpl):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialogImpl):
        (WebCore::InspectorInstrumentation::willDestroyCachedResourceImpl): Use a range-based iterator.
        (WebCore::InspectorInstrumentation::willWriteHTMLImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        (WebCore::InspectorInstrumentation::startProfilingImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEventImpl):
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStartImpl):
        (WebCore::InspectorInstrumentation::didStartWorkerGlobalScopeImpl):
        (WebCore::InspectorInstrumentation::willEvaluateWorkerScript):
        (WebCore::InspectorInstrumentation::workerGlobalScopeTerminatedImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameErrorImpl):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrameImpl):
        (WebCore::InspectorInstrumentation::sessionCreatedImpl):
        (WebCore::InspectorInstrumentation::sessionLoadedImpl):
        (WebCore::InspectorInstrumentation::sessionModifiedImpl):
        (WebCore::InspectorInstrumentation::segmentCreatedImpl):
        (WebCore::InspectorInstrumentation::segmentCompletedImpl):
        (WebCore::InspectorInstrumentation::segmentLoadedImpl):
        (WebCore::InspectorInstrumentation::segmentUnloadedImpl):
        (WebCore::InspectorInstrumentation::captureStartedImpl):
        (WebCore::InspectorInstrumentation::captureStoppedImpl):
        (WebCore::InspectorInstrumentation::playbackStartedImpl):
        (WebCore::InspectorInstrumentation::playbackPausedImpl):
        (WebCore::InspectorInstrumentation::playbackHitPositionImpl):
        (WebCore::InspectorInstrumentation::playbackFinishedImpl):
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::registerInstrumentingAgents):
        (WebCore::InspectorInstrumentation::unregisterInstrumentingAgents):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage): Add by-reference version which contains the logic from instrumentationForPage().
        (WebCore::InspectorInstrumentation::instrumentingAgentsForRenderer):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        (WebCore::InspectorInstrumentation::layerTreeDidChangeImpl):
        (WebCore::InspectorInstrumentation::renderLayerDestroyedImpl):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        (WebCore::InspectorInstrumentation::didCreateIsolatedContextImpl): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::isDebuggerPaused):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didRemoveDOMAttr):
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        (WebCore::InspectorInstrumentation::frameWindowDiscarded):
        (WebCore::InspectorInstrumentation::mediaQueryResultChanged):
        (WebCore::InspectorInstrumentation::didPushShadowRoot):
        (WebCore::InspectorInstrumentation::willPopShadowRoot):
        (WebCore::InspectorInstrumentation::didCreateNamedFlow):
        (WebCore::InspectorInstrumentation::willRemoveNamedFlow):
        (WebCore::InspectorInstrumentation::didChangeRegionOverset):
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::handleTouchEvent):
        (WebCore::InspectorInstrumentation::handleMousePress): Take Frame by reference instead of Page by pointer.
        (WebCore::InspectorInstrumentation::forcePseudoState):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequest):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::willDispatchXHRReadyStateChangeEvent):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::willHandleEvent): Pass a const event reference.
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        (WebCore::InspectorInstrumentation::scriptsEnabled):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::didInvalidateLayout):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::didScroll):
        (WebCore::InspectorInstrumentation::willDispatchXHRLoadEvent):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::didPaint):
        (WebCore::InspectorInstrumentation::willScrollLayer):
        (WebCore::InspectorInstrumentation::didScrollLayer):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculation):
        (WebCore::InspectorInstrumentation::applyEmulatedMedia): Pass string by reference.
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceData):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        (WebCore::InspectorInstrumentation::didReceiveData):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::documentThreadableLoaderStartedLoadingForClient): No need to go through
        ScriptExecutionContext interface, as it's always a Document.
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::didFailXHRLoading):
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        (WebCore::InspectorInstrumentation::didReceiveXHRResponse):
        (WebCore::InspectorInstrumentation::willLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::didLoadXHRSynchronously):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSP):
        (WebCore::InspectorInstrumentation::didReceiveScriptResponse):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::frameDocumentUpdated):
        (WebCore::InspectorInstrumentation::loaderDetachedFromFrame):
        (WebCore::InspectorInstrumentation::willRunJavaScriptDialog):
        (WebCore::InspectorInstrumentation::willDestroyCachedResource):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didDispatchDOMStorageEvent):
        (WebCore::InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorInstrumentation::didStartWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::workerGlobalScopeTerminated):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrame):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketFrameError):
        (WebCore::InspectorInstrumentation::didSendWebSocketFrame):
        (WebCore::InspectorInstrumentation::sessionCreated):
        (WebCore::InspectorInstrumentation::sessionLoaded):
        (WebCore::InspectorInstrumentation::sessionModified):
        (WebCore::InspectorInstrumentation::segmentCreated):
        (WebCore::InspectorInstrumentation::segmentCompleted):
        (WebCore::InspectorInstrumentation::segmentLoaded):
        (WebCore::InspectorInstrumentation::segmentUnloaded):
        (WebCore::InspectorInstrumentation::captureStarted):
        (WebCore::InspectorInstrumentation::captureStopped):
        (WebCore::InspectorInstrumentation::playbackStarted):
        (WebCore::InspectorInstrumentation::playbackPaused):
        (WebCore::InspectorInstrumentation::playbackFinished):
        (WebCore::InspectorInstrumentation::playbackHitPosition):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrame):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrame):
        (WebCore::InspectorInstrumentation::willFireAnimationFrame):
        (WebCore::InspectorInstrumentation::layerTreeDidChange):
        (WebCore::InspectorInstrumentation::renderLayerDestroyed):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        (WebCore::InspectorInstrumentation::didCreateIsolatedContext): Deleted.
        * inspector/InspectorInstrumentationCookie.cpp: Take a reference, use default RefPtr constructor.
        (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
        * inspector/InspectorInstrumentationCookie.h: Fix misplaced ENABLE guard.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::instrumentationForPage): Deleted.
        (WebCore::instrumentationForWorkerGlobalScope): Deleted.
        * inspector/InstrumentingAgents.h:
        * inspector/WorkerInspectorController.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        (WebCore::DocumentLoader::detachFromFrame):
        * loader/DocumentThreadableLoader.cpp: Remove unnecessary ENABLE(INSPECTOR) guards, as these inlined calls
        are boiled away by the compiler if !ENABLE(INSPECTOR).
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::notifyDidScheduleResourceRequest):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest): Remove unnecessary ENABLE guard.
        * loader/appcache/ApplicationCacheGroup.cpp: Remove several unnecessary ENABLE guards.
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::deleteIfPossible):
        * page/Chrome.cpp:
        (WebCore::Chrome::scroll):
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleTouchEvent): Add a guard to make it safe to pass event target by-reference.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::mediaType):
        (WebCore::FrameView::scheduleRelayout):
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        (WebCore::PageConsoleClient::count):
        (WebCore::PageConsoleClient::profile):
        (WebCore::PageConsoleClient::profileEnd):
        (WebCore::PageConsoleClient::time):
        (WebCore::PageConsoleClient::timeEnd):
        (WebCore::PageConsoleClient::timeStamp):
        * page/Settings.cpp:
        (WebCore::Settings::setScriptEnabled):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerBecameNonComposited):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::dispatchRegionOversetChangeEventIfNeeded):
        * replay/ReplayController.cpp:
        (WebCore::ReplayController::switchSession):
        (WebCore::ReplayController::createSegment):
        (WebCore::ReplayController::completeSegment):
        (WebCore::ReplayController::loadSegmentAtIndex):
        (WebCore::ReplayController::unloadSegment):
        (WebCore::ReplayController::startCapturing):
        (WebCore::ReplayController::stopCapturing):
        (WebCore::ReplayController::startPlayback):
        (WebCore::ReplayController::pausePlayback):
        (WebCore::ReplayController::cancelPlayback):
        (WebCore::ReplayController::willDispatchInput):
        * testing/Internals.cpp:
        (WebCore::Internals::consoleMessageArgumentCounts):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2015-01-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody):

2015-01-05  Chris Dumez  <cdumez@apple.com>

        Get rid of some unnecessary custom StyleBuilder code
        https://bugs.webkit.org/show_bug.cgi?id=140058

        Reviewed by Darin Adler.

        Get rid of some unnecessary custom StyleBuilder code. The generator is
        now able to generate this code just fine.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::csstoLengthConversionDataWithTextZoomFactor):
        (WebCore::StyleBuilderConverter::convertWordSpacing):
        (WebCore::StyleBuilderConverter::convertPerspective):
        (WebCore::StyleBuilderConverter::convertMarqueeIncrement):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::convertLineHeight):
        (WebCore::StyleBuilderCustom::applyValueWebkitMarqueeIncrement): Deleted.
        (WebCore::StyleBuilderCustom::csstoLengthConversionDataWithTextZoomFactor): Deleted.
        (WebCore::StyleBuilderCustom::applyValueWordSpacing): Deleted.
        (WebCore::StyleBuilderCustom::applyValueWebkitPerspective): Deleted.

2014-12-23  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Cannot scroll when a non-scrollable iframe is contained inside a scrollable iframe
        https://bugs.webkit.org/show_bug.cgi?id=139914
        <rdar://problem/18750910>

        Reviewed by Darin Adler.

        Tests: platform/mac/fast/scrolling/scroll-nested-iframe.html

        The latching logic was breaking down when a non-scrollable iframe was the closest target of
        a wheel event. EventHandler would latch to the enclosing scrollable region (in this case, the
        non-scrollable iframe) and would eat scroll events, preventing anything from working.
        
        The fix is as follows:
        1. Modify the logic to understand a stack of latched states, so that we can discared 'invalid'
           latched states as we discover them.
        2. Revise the latching logic so that it understands the case where the 'latched' node for wheel
           events is in a parent frame of the current wheel event target. For example, when the mouse is over
           an element in an unscrollable iframe that is contained within a scrollable iframe. We should
           be latched to the scrollable iframe so events go to the right place.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Update to call new 'stack' versions of latch
        state methods.
        (WebCore::EventHandler::clearLatchedState): Ditto.
        (WebCore::EventHandler::defaultWheelEventHandler): Ditto.
        * page/MainFrame.cpp: Update to store a stack of latched states. Provide methods to control
        the lifetime of the stack and its elements.
        (WebCore::MainFrame::MainFrame):
        (WebCore::MainFrame::latchingState):
        (WebCore::MainFrame::pushNewLatchingState):
        (WebCore::MainFrame::resetLatchingState):
        (WebCore::MainFrame::popLatchingState):
        * page/MainFrame.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::latchingIsLockedToParentOfThisFrame): Added helper function.
        (WebCore::EventHandler::platformPrepareForWheelEvents): Update to use new 'stack' style latch
        methods. Also, if we are latched to a frame that contains the frame we are currently evaluating,
        don't replace the current event target with the latched targets because (1) they will be processed
        in the enclosing scope when we leave this routine, and (2) if we do change targets to the latched
        elements we create an infinite loop.
        (WebCore::EventHandler::platformCompleteWheelEvent): We want to mark the element as having started
        at the scroll limit regardless of what the wheel event handler returns as its success state.
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent): Revise to handle the new
        stack-based latching methods.

2015-01-05  Darin Adler  <darin@apple.com>

        Quick follow-up to last check-in, addressing review comments.

        * html/parser/HTMLStackItem.h:
        (WebCore::HTMLStackItem::HTMLStackItem): Use rvalue reference for incoming Ref.
        (WebCore::HTMLStackItem::create): Ditto.

2015-01-05  Darin Adler  <darin@apple.com>

        Modernize and streamline HTMLStackItem
        https://bugs.webkit.org/show_bug.cgi?id=140056

        Reviewed by Anders Carlsson.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::create): Changed to return Ref.
        * html/HTMLHtmlElement.h: Ditto.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::hasImpliedEndTag): Update to use reference instead of pointer.
        (WebCore::causesFosterParenting): Moved here from HTMLStackItem.h.
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML): Update
        for references instead of pointers.
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody): Ditto.
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody): Ditto.
        (WebCore::HTMLConstructionSite::insertComment): Ditto.
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement): Ditto.
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement): Ditto.
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement): Ditto.
        (WebCore::HTMLConstructionSite::insertHTMLFormElement): Ditto.
        (WebCore::HTMLConstructionSite::insertHTMLElement): Ditto.
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement): Ditto.
        (WebCore::HTMLConstructionSite::insertFormattingElement): Ditto.
        (WebCore::HTMLConstructionSite::insertScriptElement): Ditto.
        (WebCore::HTMLConstructionSite::insertForeignElement): Ditto.
        (WebCore::HTMLConstructionSite::insertTextNode): Ditto.
        (WebCore::HTMLConstructionSite::reparent): Ditto.
        (WebCore::HTMLConstructionSite::insertAlreadyParsedChild): Ditto.
        (WebCore::HTMLConstructionSite::takeAllChildren): Ditto.
        (WebCore::HTMLConstructionSite::ownerDocumentForCurrentNode): Ditto.
        (WebCore::HTMLConstructionSite::createElementFromSavedToken): Ditto.
        (WebCore::HTMLConstructionSite::indexOfFirstUnopenFormattingElement): Ditto.
        (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements): Ditto.
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion): Ditto.
        (WebCore::HTMLConstructionSite::findFosterSite): Ditto.
        (WebCore::HTMLConstructionSite::shouldFosterParent): Removed unneeded
        isElementNode check, since causesFosterParenting will return false for a
        document fragment node.

        * html/parser/HTMLConstructionSite.h: Updated to use references instead of
        pointers. Also removed the unneeded currentElementRecord function.

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode): Updated to use references instead of pointers.
        (WebCore::HTMLNames::isScopeMarker): Ditto.
        (WebCore::HTMLNames::isListItemScopeMarker): Ditto.
        (WebCore::HTMLNames::isTableScopeMarker): Ditto.
        (WebCore::HTMLNames::isTableBodyScopeMarker): Ditto.
        (WebCore::HTMLNames::isTableRowScopeMarker): Ditto.
        (WebCore::HTMLNames::isForeignContentScopeMarker): Ditto.
        (WebCore::HTMLNames::isButtonScopeMarker): Ditto.
        (WebCore::HTMLNames::isSelectScopeMarker): Ditto.
        (WebCore::HTMLElementStack::ElementRecord::replaceElement): Ditto.
        (WebCore::HTMLElementStack::hasOnlyOneElement): Ditto.
        (WebCore::HTMLElementStack::popHTMLHeadElement): Ditto.
        (WebCore::HTMLElementStack::popHTMLBodyElement): Ditto.
        (WebCore::HTMLElementStack::popAll): Ditto.
        (WebCore::HTMLElementStack::pop): Ditto.
        (WebCore::HTMLElementStack::popUntil): Ditto.
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped): Ditto.
        (WebCore::HTMLElementStack::isMathMLTextIntegrationPoint): Ditto. Also removed
        unneeded isElementNode check.
        (WebCore::HTMLElementStack::isHTMLIntegrationPoint): Ditto.
        (WebCore::HTMLElementStack::pushRootNode): Ditto.
        (WebCore::HTMLElementStack::pushRootNodeCommon): Ditto.
        (WebCore::HTMLElementStack::pushHTMLHeadElement): Ditto.
        (WebCore::HTMLElementStack::pushHTMLBodyElement): Ditto.
        (WebCore::HTMLElementStack::insertAbove): Ditto.
        (WebCore::HTMLElementStack::topRecord): Ditto.
        (WebCore::HTMLElementStack::oneBelowTop): Ditto.
        (WebCore::HTMLElementStack::removeHTMLHeadElement): Ditto.
        (WebCore::HTMLElementStack::remove): Ditto.
        (WebCore::HTMLElementStack::find): Ditto.
        (WebCore::HTMLElementStack::topmost): Ditto.
        (WebCore::inScopeCommon): Ditto.
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope): Ditto.
        (WebCore::HTMLElementStack::inScope): Ditto.
        (WebCore::HTMLElementStack::htmlElement): Ditto.
        (WebCore::HTMLElementStack::headElement): Ditto.
        (WebCore::HTMLElementStack::bodyElement): Ditto.
        (WebCore::HTMLElementStack::rootNode): Ditto.
        (WebCore::HTMLElementStack::popCommon): Ditto.
        (WebCore::HTMLElementStack::removeNonTopCommon): Ditto.
        (WebCore::HTMLElementStack::furthestBlockForFormattingElement): Ditto.
        (WebCore::HTMLElementStack::show): Ditto.

        * html/parser/HTMLElementStack.h: Use reference instead of pointer.

        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::closestElementInScopeWithName): Update
        to use references instead of pointer.
        (WebCore::HTMLFormattingElementList::swapTo): Ditto.
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly): Ditto.
        (WebCore::HTMLFormattingElementList::ensureNoahsArkCondition): Ditto.
        (WebCore::HTMLFormattingElementList::show): Ditto.

        * html/parser/HTMLFormattingElementList.h: Use reference instead of pointer
        and a raw pointer instead of a RefPtr.

        * html/parser/HTMLStackItem.h: Removed unneeded includes. Got rid of "type"
        concept and simply overload the create functions and constructors for both
        Element and DOcumentFragment. Renamed isElementNode and isDocumentFragmentNode
        to remove the "Node" suffix. Removed unused getAttributeItem, hasLocalName, and
        one of the overloads of matchesHTMLTag. Moved all the policy functions such as
        causesFosterParenting out of this class into free functions or into other
        source files. Got rid of m_isDocumentFragmentNode boolean. Moved function
        bodies out of the class definition. Marked all data members const since they
        are all initialized in the constructor and never touched again. Restructured
        the isSpecialNode function to avoid the repeated checks of the namespace.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents): Use reference instead of
        pointer and free functions instead of member functions.
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Ditto.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext): Ditto.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement): Ditto.
        (WebCore::HTMLTreeBuilder::constructTree): Ditto.
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope): Ditto.
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processTemplateStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processTemplateEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup): Ditto.
        (WebCore::HTMLTreeBuilder::closeTheCell): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): Ditto.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInRow): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInCell): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): Ditto.
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): Ditto.
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processCharacterBuffer): Ditto.
        (WebCore::HTMLTreeBuilder::processEndOfFile): Ditto.
        (WebCore::HTMLTreeBuilder::adjustedCurrentStackItem): Ditto.
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent): Ditto.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Ditto.

2015-01-05  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash when font data pointer is null.
        https://bugs.webkit.org/show_bug.cgi?id=139969

        Reviewed by Darin Adler.

        Added null pointer check.

        Test: fonts/unicode-character-font-crash.html

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance):
        (WebCore::UniscribeController::shape):

2015-01-05  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GStreamer] Disable gst-plugin-scanner if seccomp filters are enabled
        https://bugs.webkit.org/show_bug.cgi?id=140069

        Reviewed by Philippe Normand.

        If seccomp filters are enabled, any child processes we create are doomed
        if they try to use a trapped syscall: the child will receive SIGSYS and
        dump core. There appears to be no way around this.

        Fortunately, the gstreamer developers had mad prescience and provided
        us with a way to move plugin scanning in-process, so we don't need the
        helper binary at all.

        No new tests because this is covered by existing tests when seccomp
        filters are enabled.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):

2015-01-04  Darin Adler  <darin@apple.com>

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseXML):
        Removed an incorrect assertion my last check-in added.

2015-01-04  Darin Adler  <darin@apple.com>

        Modernize and tighten up HTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=140041

        Reviewed by Sam Weinig.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML): Pass a reference instead of
        a pointer for the context element.

        * html/FTPDirectoryDocument.cpp: Removed unneeded includes, made more
        things in FTPDirectoryDocumentParser private. Use Ref instead of RefPtr
        in a could places. Initialize in class instead of in constructor.
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        Less initialization here.
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename): More Ref here.
        (WebCore::createTemplateDocumentData): Removed unneeded initialization
        of RefPtr, which is initialized without explicitly asking for it.
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate): Reworded
        comment slightly.

        * html/parser/HTMLDocumentParser.cpp: Cut down on includes.
        (WebCore::tokenizerStateForContextElement): Fixed URL. Changed argument
        to be a reference rather than a pointer.
        (WebCore::HTMLDocumentParser::inPumpSession):
        (WebCore::HTMLDocumentParser::shouldDelayEnd):
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Marked constructors
        inline. Updated for data members that are now objects instead of pointers.
        Removed explicit initialization for scalars that are now initialized in
        the class definition.
        (WebCore::HTMLDocumentParser::create): Moved the private creation
        functions in here, out of the header file.
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser): Removed unused
        m_haveBackgroundParser.
        (WebCore::HTMLDocumentParser::prepareToStopParsing): Updated URL and
        removed m_haveBackgroundParser reference.
        (WebCore::HTMLDocumentParser::processingData): Removed a check of
        m_haveBackgroundParser.
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield): Tweak comment.
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Added
        a null check of the result of takeScriptToProcess, since there really
        is no guarantee it's non-null.
        (WebCore::HTMLDocumentParser::canTakeNextToken): Removed assertion
        that was for m_haveBackgroundParser cases only. Rewrapped comment.
        (WebCore::HTMLDocumentParser::contextForParsingSession): Use nullptr.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Rework comments,
        remove assertions that no longer make sense, use auto instead of
        repeating a long type name, update to use m_token and m_tokenizer.
        (WebCore::HTMLDocumentParser::hasInsertionPoint): Rewrapped comment.
        (WebCore::HTMLDocumentParser::insert): Got rid of braces around a
        single-line if body.
        (WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd):
        Removed comment about incorrect m_haveBackgroundParser assertion.
        (WebCore::HTMLDocumentParser::isExecutingScript): Use && style instead
        of early exit for a null check.
        (WebCore::HTMLDocumentParser::textPosition): Tightened up code a little.
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution): Added
        a Ref to protect the parser, as is already done in every other function
        that calls pumpTokenizerIfPossible.
        (WebCore::HTMLDocumentParser::parseDocumentFragment): Take a reference
        instead of a pointer. Also use auto so we get a Ref instead of a RefPtr.

        * html/parser/HTMLDocumentParser.h: Removed unneeded includes.
        Made private inheritance explicit instead of just omitting public.
        Moved function bodies out of the class, and in some cases, out of the
        header entirely. Return a reference from tokenizer(). Marked most
        virtual functions final. Made DocumentFragment version of the
        constructor private rather than protected. Made the functions
        suspendScheduledTasks() and resumeScheduledTasks() private, since
        they are always called through a base class. Removed the private
        token function since it is better to get at m_token directly.
        Removed m_haveBackgroundParser, since we don't have that any more
        and it's always false. Also removed forcePlaintextForTextDocument
        since the tokenizer is exposed and can be used directly to do that.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Made the parser non-const.
        It could only be const before because HTMLDocumentParser::tokenizer
        took a const parser and returned a non-const tokenizer, but that doesn't
        really make sense.
        (WebCore::HTMLTreeBuilder::constructTree): Removed null check for
        tokenizer, which was never null. Updated since tokenizer is a reference.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto. Also fixed and removed
        some assertions like the ones I did recently in the rest of this file.
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processScriptStartTag): Ditto.

        * html/parser/HTMLTreeBuilder.h: Made HTMLDocumentParser& non-const.

        * html/parser/TextDocumentParser.cpp: Removed unneeded include and
        unneeded explicit destructor.
        (WebCore::TextDocumentParser::TextDocumentParser): Updated since
        treeBuilder() returns a reference now, and set the tokenizer state
        directly since tokenizer() is exposed.

        * html/parser/TextDocumentParser.h: Moved initialization of the
        data member here instead of the constructor. Also removed unneeded
        explicitly defined destructor.

2015-01-04  Antti Koivisto  <antti@apple.com>

        Remove GlyphPageTree
        https://bugs.webkit.org/show_bug.cgi?id=140015

        Follow-up to follow-up, fonts/font-fallback-prefers-pictographs.html is now failing.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForNormalVariant):

            Make the loop again go one past the last fallback index, the pictograph special case depends on it.

2015-01-04  Antti Koivisto  <antti@apple.com>

        Remove GlyphPageTree
        https://bugs.webkit.org/show_bug.cgi?id=140015

        Follow-up to r177876 to fix mathml/opentype/munderover-layout-resize.html which is asserting.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForNormalVariant):

        Always return system fallback if no glyph is found.

2015-01-04  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::createAndFillGlyphPage):

2015-01-02  Antti Koivisto  <antti@apple.com>

        Remove GlyphPageTree
        https://bugs.webkit.org/show_bug.cgi?id=140015

        Reviewed by Darin Adler.

        GlyphPageTree is a global cache consisting of a tree of nodes that match SimpleFontData instances.
        The tree levels correspond to font fallback lists so that higher levels fill holes (missing glyphs)
        in the lower levels. This patch replaces it with a simpler and easier to understand caching scheme.
        In particular the goal is to have clearer ownership relations and better control over mutability.

        The new scheme looks like this:

        SimpleFontData instances cache GlyphPages for themselves. These pages are immutable after construction
        and may contain holes. This is a global cache (since SimpleFontDatas are cached globally) with the same
        lifetime as the GlyphPageTree used to have.

        FontGlyphs instances cache resolved GlyphPages for the normal font variant. These are build by traversing
        the fallback list as necessary and collecting glyphs from SimpleFontDatas. As a common case case optimization
        the page from the primary font is cached directly as long as it has the requested glyphs.
        FontGlyphs are shared between sufficiently similar Font instances so this is a shared cache as well.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionFontDataCacheKey::makeFlagKey):

            nonCJKGlyphOrientation matters for glyph selection too and needs to be part of the FontDescription cache key.

        * platform/graphics/FontData.h:
        (WebCore::FontData::FontData):
        (WebCore::FontData::setMaxGlyphPageTreeLevel): Deleted.
        (WebCore::FontData::maxGlyphPageTreeLevel): Deleted.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::primaryFontHasGlyphForCharacter):
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::FontGlyphs):
        (WebCore::glyphDataForCJKCharacterWithoutSyntheticItalic):
        (WebCore::glyphDataForNonCJKCharacterWithGlyphOrientation):
        (WebCore::FontGlyphs::glyphDataForSystemFallback):
        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForNormalCharacter):

            Traverse the fallback list by using simple index instead of indirectly via GlyphPageTreeNode traversal.

        (WebCore::pageFromFontData):

            Fetch a page from the primary font and see if we can use it as-is.
            Vertical fonts have special glyph selection and can't use this path.

        (WebCore::FontGlyphs::createFlattenedGlyphPage):

            Build a hole-free glyph page by pulling characters from the fallback list.

        (WebCore::FontGlyphs::glyphDataForCharacter):
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::primarySimpleFontData):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createForMixedFontData):
        (WebCore::GlyphPage::createCopyForMixedFontData):

            Add copy version.

        (WebCore::GlyphPage::createForSingleFontData):

            Remove owner node field.

        (WebCore::GlyphPage::~GlyphPage):
        (WebCore::GlyphPage::count):
        (WebCore::GlyphPage::GlyphPage):
        (WebCore::GlyphPage::createCopiedSystemFallbackPage): Deleted.
        (WebCore::GlyphPage::owner): Deleted.
        * platform/graphics/GlyphPageTreeNode.cpp: Removed.
        * platform/graphics/GlyphPageTreeNode.h: Removed.
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::SegmentedFontData):
        (WebCore::SegmentedFontData::~SegmentedFontData):
        (WebCore::SegmentedFontData::simpleFontDataForCharacter):

            Return null when there is no usable range so the client can tell the difference.
            Rename for clarity.

        (WebCore::SegmentedFontData::simpleFontDataForFirstRange):

            Add a way to get the fallback font separately. This is always available.

        (WebCore::SegmentedFontData::isLoading):
        (WebCore::SegmentedFontData::fontDataForCharacter): Deleted.
        * platform/graphics/SegmentedFontData.h:
        (WebCore::SegmentedFontData::SegmentedFontData): Deleted.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::initCharWidths):
        (WebCore::SimpleFontData::platformGlyphInit):
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::SimpleFontData::simpleFontDataForCharacter):
        (WebCore::fillGlyphPage):
        (WebCore::createAndFillGlyphPage):

            Move code for initializing glyph pages here. The code is from GlyphPageTreeNode.

        (WebCore::SimpleFontData::glyphPage):

            Cache glyphs for this font. These pages may have holes.

        (WebCore::SimpleFontData::glyphForCharacter):
        (WebCore::SimpleFontData::glyphDataForCharacter):
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):

            Since the cache is now owned by the SimpleFontData all the custom pruning can go away.
            The glyph page cache dies along with it owner.

        (WebCore::SimpleFontData::fontDataForCharacter): Deleted.
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (-[WebCascadeList objectAtIndex:]):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::fontDataForCombiningCharacterSequence):
        * platform/graphics/mac/GlyphPageMac.cpp: Copied from Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp.

            This was already misnamed.

        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: Removed.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        * platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/mac/DragImageMac.mm:

            Add missing FontCachePurgePreventer.

        (WebCore::createDragImageForLink):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData):
        * svg/SVGFontElement.cpp:

2015-01-04  Anders Carlsson  <andersca@apple.com>

        Remove an unused function
        https://bugs.webkit.org/show_bug.cgi?id=140055

        Reviewed by Sam Weinig.

        * Modules/webdatabase/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::setReadOnly): Deleted.
        * Modules/webdatabase/DatabaseAuthorizer.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::setAuthorizerReadOnly): Deleted.
        * Modules/webdatabase/DatabaseBackendBase.h:

2015-01-04  Anders Carlsson  <andersca@apple.com>

        Modernize parts of the database code
        https://bugs.webkit.org/show_bug.cgi?id=140054

        Reviewed by Antti Koivisto.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::runTransaction):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransaction.h:
        (WebCore::SQLTransaction::database):

2015-01-03  Chris Dumez  <cdumez@apple.com>

        Move the CSS Grid properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140051

        Reviewed by Sam Weinig.

        Move the CSS Grid properties from StyleResolver to the new
        StyleBuilder.

        This patch adds support for "ConditionalConverter" parameter in
        CSSPropertyNames.in to support cases where we only want to call the
        property setter conditionally. The converter function is then expected
        to return a boolean to indicate if the setter should be called by the
        StyleBuilder or not.

2015-01-02  Chris Dumez  <cdumez@apple.com>

        Kill the DeprecatedStyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140034

        Reviewed by Darin Adler.

        Move FillLayer properties to the new StyleBuilder and get rid of the
        DeprecatedStyleBuilder now that all its CSS properties have been ported
        to the new StyleBuilder.

2015-01-02  Chris Dumez  <cdumez@apple.com>

        Move 'font-size' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140010

        Reviewed by Darin Adler.

        Move 'font-size' CSS property to the new StyleBuilder by using custom
        code.

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

        Pass Document instead of ScriptExecutionContext to non-worker constructors
        https://bugs.webkit.org/show_bug.cgi?id=140040

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        Generate code passing the document when ConstructorCallWith=Document is used.
        Later, we could base this on whether the constructor is exposed to workers
        or not, instead, but for now this seems a clean way to do it.

        * bindings/scripts/IDLAttributes.txt: Allow ConstructorCallWith=Document.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::create):
        * Modules/notifications/Notification.h:
        * Modules/notifications/Notification.idl:
        * dom/Comment.cpp:
        * dom/Comment.h:
        * dom/Comment.idl:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::nodeName): Use ASCIILiteral (just something
        I noticed in passing).
        * dom/DocumentFragment.h:
        * dom/DocumentFragment.idl:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/Range.idl:
        * dom/Text.cpp:
        * dom/Text.h:
        * dom/Text.idl:
        Change from ScriptExecutionContext to Document, and remove unneeded
        overloads that were just casting. It's better to have the bindings
        layer, which knows these are not ScriptExecutionContext, do the cast
        than to have create functions that cast that are not in any position
        to know the cast is safe.

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

        Re-land the HTMLTreeBuilder change with the assertion fixed.
        https://bugs.webkit.org/show_bug.cgi?id=140032

        Reviewed by Andreas Kling.

2015-01-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177859 and r177861.
        https://bugs.webkit.org/show_bug.cgi?id=140042

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

        Reverted changesets:

        "Modernize coding style of HTMLTreeBuilder"
        https://bugs.webkit.org/show_bug.cgi?id=140032
        http://trac.webkit.org/changeset/177859

        "Tried to fix the iOS build."
        http://trac.webkit.org/changeset/177861

2015-01-02  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * html/parser/HTMLTreeBuilder.cpp:

2015-01-01  Darin Adler  <darin@apple.com>

        Rework code that hides characters in password fields to streamline a little
        https://bugs.webkit.org/show_bug.cgi?id=140035

        Reviewed by Sam Weinig.

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply): Pass the offset after the character
        we want to reveal instead of the offset before. This is more future proof if we
        ever want to handling surrogate pairs or combining marks, rather than hard
        coding the likely incorrect rule of "go back by one code unit". Also got rid of
        the isSecure check here, since RenderText can do that check inside the
        momentarilyRevealLastTypedCharacter instead.

        * rendering/RenderText.cpp: Tweaked the SecureTextTimer class: Marked it final
        and made it derive from TimerBase privately. Made the constructor explicit and
        made it take a reference rather than a pointer. Use initialization in the class
        to set up the variable, and use 0 as the special value instead of -1 since we
        now store the offset *after* the character to be revealed.
        (WebCore::secureTextTimers): Use this function and NeverDestroyed rather than
        a global variable gSecureTextTimers. Also use unique_ptr for the map so we
        don't have to delete explicitly any more.
        (WebCore::SecureTextTimer::SecureTextTimer): Moved out of the class definition
        so the class ia a little easier to read.
        (WebCore::SecureTextTimer::restart): Renamed since the function name doesn't
        have to describe its argument; the function is only called in one place.
        (WebCore::SecureTextTimer::takeOffsetAfterLastTypedCharacter): Changed name
        and made this a one-shot that always zeroes the offset.
        (WebCore::SecureTextTimer::fired): Moved out of line and tweaked as above.
        (WebCore::RenderText::willBeDestroyed): Simplified now that the function
        secureTextTimers() always returns a map and we can just remove since the
        values in the map are unique_ptr, so take care of deletion.
        (WebCore::RenderText::setRenderedText): Tweaked the code that calls secureText
        to make the iOS case clearer.
        (WebCore::RenderText::secureText): Rewrote the function. New version no
        longer relies on a special String::fill function; it's kind of strange that
        String had a built in concept of replacing a string with one that has the
        same length but all with a masking character. This new approach is cleaner.
        I had written a version that handles surrogate pairs and combining marks,
        but then instead wrote a comment explaining why that's not needed/helpful.
        (WebCore::RenderText::momentarilyRevealLastTypedCharacter): Added a check so
        this does nothing if we are not securing the text. Also updated logic so that
        this doesn't double hash any more and updated for other changes like using
        a reference instead of a pointer.

        * rendering/RenderText.h: Removed the unneeded isSecure function and updated
        the argument name in momentarilyRevealLastTypedCharacter since it's now the
        offset after the character, not before the character.

2015-01-01  Darin Adler  <darin@apple.com>

        Modernize coding style of HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140032

        Reviewed by Andreas Kling.

        Changes include:
        - Use references rather than pointers.
        - Mark data members const that are fully set up in the constructor.
        - Remove many unneeded includes and forward declarations.
        - Fix conditionals to be consistent and correct.
        - Merge some multi-line constructs into a single line.
        - Update whatwg.org URLs; not sure we should keep these, though.
        - Cut down on use of WTF_MAKE_NONCOPYABLE since for many classes it's
          impossible to copy anyway due to references, or harmless to copy.
        - Made more things private.
        - Initialize scalars in the class definition rather than each constructor.
        - Use Ref/RefPtr instead of PassRefPtr.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Pass reference rather than pointer to
        the context element.
        (WebCore::HTMLDocumentParser::detach): Removed call to HTMLTreeBuilder::detach. This work
        is instead done when the tree builder is destroyed.
        (WebCore::HTMLDocumentParser::constructTreeFromHTMLToken): Pass reference rather than pointer.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::uninitializedPositionValue1): Marked this inline because it's trivial. It was
        probably getting inlined already.
        (WebCore::isCaptionColOrColgroupTag): Format on a single line.
        (WebCore::isTableBodyContextTag): Ditto.
        (WebCore::isNonAnchorFormattingTag): Ditto.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        Take reference instead of pointer.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemaining): Use makeString helper.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeading): Tweak formatting.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeading): Both of the above.
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::makeString): Added.
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents): Moved the body of this function here,
        since it's only used inside the class.
        (WebCore::HTMLTreeBuilder::isParsingFragmentOrTemplateContents): Ditto.
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Get rid of dead code that handles a null context
        element. The FIXME mentions a bug that is obsolete. Also reorder the data members to be a bit
        more logical and set the new m_destructionProhibited to false at the end of the constructor,
        to check if we accidentally destroy the tree builder while constructing it.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext): Updated to take
        a reference and to let m_fragment get initialized in the class definition.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::fragment): Moved this here since it's only
        used inside the class.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement): Ditto.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElementStackItem): Ditto.
        (WebCore::HTMLTreeBuilder::takeScriptToProcess): Changed return type to RefPtr instead of
        PassRefPtr. Added code to handle m_scriptToProcess of null, since reading the code at the
        single call site makes it clear that it's not guaranteed to be non-null! Added destruction-
        related assertions since this is a public function.
        (WebCore::HTMLTreeBuilder::constructTree): Updated for reference rather than pointer. Also
        added destruction-related assertions since this is a public function.
        (WebCore::HTMLTreeBuilder::processToken): Updated to take a reference.
        (WebCore::HTMLTreeBuilder::processDoctypeToken): Ditto.
        (WebCore::HTMLTreeBuilder::processFakeStartTag): Ditto. Also take an rvalue reference for
        the vector of attributes that we will put into the token.
        (WebCore::HTMLTreeBuilder::processFakeEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope): Ditto.
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput): Ditto.
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): Ditto.
        (WebCore::isLi): Ditto.
        (WebCore::isDdOrDt): Ditto.
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag): Changed loop to use reference
        rather than pointer for never-null stackItem. Also use auto and a for loop to make the
        loop easier to read.
        (WebCore::createCaseMap): Tweaked formatting.
        (WebCore::adjustAttributes): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Use reference instead of pointer.
        Set insertion mode directly instead of using a setInsertionMode function.
        (WebCore::HTMLTreeBuilder::processTemplateStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processTemplateEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processEndOfFileForInTemplateContents): Ditto.
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup): Ditto.
        (WebCore::HTMLTreeBuilder::closeTheCell): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTag): Ditto. Tweaked assertions, so that we
        assert what state we are in before we fall through to each case, rather than asserting
        inside each case. The per-case assertions were sort of excessive and repetitive and
        even a bit hard to understand.
        (WebCore::HTMLTreeBuilder::processHtmlStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): Ditto.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInRow): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInCell): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption): Ditto.
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): Ditto.
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::processComment): Ditto.
        (WebCore::HTMLTreeBuilder::processCharacter): Ditto.
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink): Ditto.
        (WebCore::HTMLTreeBuilder::processCharacterBuffer): Ditto.
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processEndOfFile): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForInitial): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForInHead): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForAfterHead): Ditto.
        (WebCore::HTMLTreeBuilder::defaultForInTableText): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInHead): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::processScriptStartTag): Ditto.
        (WebCore::HTMLTreeBuilder::adjustedCurrentStackItem): Made this return a reference.
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent): More of the same.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): Ditto.
        (WebCore::HTMLTreeBuilder::finished): Changed m_isAttached assertion to !m_destroyed.
        Also updated the comment.
        (WebCore::HTMLTreeBuilder::parseError): Marked this empty function inline.

        * html/parser/HTMLTreeBuilder.h: Removed most includes and forward declarations.
        Changed the phone number functions conditional to be correct. Removed a non-helpful
        FIXME about assertions we really don't need. Removed unneeded use of the inline keyword,
        changed types to references rather than pointer. Removed unneeded public insertionMode
        and setInsertionMode functions. Both are things that are only done inside this class and
        m_insertionMode can be accessed directly instead. Added a destructor that implements
        the destruction assertions. Asserted !m_destroyed at the start of all the public functions.

        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::insertFakePreElement): Use reference rather than pointer.

2015-01-02  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove stack from grid-auto-flow syntax
        https://bugs.webkit.org/show_bug.cgi?id=134842

        Reviewed by Sergio Villar Senin.

        "stack" mode for grid-auto-flow property has been removed from the grid
        layout spec. New syntax is:
          [ row | column ] || dense

        Modified parsing in order to adapt it to the new syntax.

        Also the current behavior relying on "stack" has been updated following
        the spec. Now it won't be possible to mimic the old "none" (or "stack")
        unless you specify manually the grid-placement properties.

        No new tests needed, updated current tests to adapt them to the new
        behavior.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Adapt to new syntax.
        * css/CSSParser.cpp:
        (WebCore::isValidGridAutoFlowId): Remove "stack" from valid ids.
        (WebCore::CSSParser::parseGridAutoFlow): Adapt to new syntax.
        * css/CSSValueKeywords.in: Remove "stack".
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Adapt to new syntax.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid): Remove old "stack" code.
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle): If we
        cannot resolve positions, we have to run the auto-placement algorithm.
        * rendering/style/RenderStyle.h: Remove "stack".
        * rendering/style/RenderStyleConstants.h: Ditto.

2015-01-01  Sam Weinig  <sam@webkit.org>

        Remove GroupSettings
        https://bugs.webkit.org/show_bug.cgi?id=140037

        Reviewed by Dan Bernstein.

        Nothing sets the values in GroupSettings and nothing uses them.
        - The indexedDBDatabasePath is accessed and sent to the IndexedDB backend,
          but the backend then proceeds to not use it.

        * CMakeLists.txt:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::getDatabaseNames):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::PageGroupIndexedDatabase):
        (WebCore::PageGroupIndexedDatabase::from):
        (WebCore::PageGroupIndexedDatabase::factoryBackend):
        * Modules/indexeddb/PageGroupIndexedDatabase.h:
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase):
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        (WebCore::WorkerGlobalScopeIndexedDatabase::indexedDB):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentStyleSheetCollection.cpp:
        * page/CaptionUserPreferences.cpp:
        * page/Frame.cpp:
        * page/GroupSettings.cpp: Removed.
        * page/GroupSettings.h: Removed.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        * page/PageGroup.h:
        (WebCore::PageGroup::groupSettings): Deleted.
        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend):
        * platform/DatabaseStrategy.h:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::create):
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        (WebCore::SharedWorkerProxy::groupSettings): Deleted.
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::create):
        (WebCore::SharedWorkerGlobalScope::SharedWorkerGlobalScope):
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        (WebCore::SharedWorkerThread::createWorkerGlobalScope):
        * workers/SharedWorkerThread.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::groupSettings): Deleted.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:

2015-01-01  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build.

        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):

2015-01-01  Darin Adler  <darin@apple.com>

        Fix itearator typo
        https://bugs.webkit.org/show_bug.cgi?id=140027

        Reviewed by Csaba Osztrogonác.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::nextBreakablePosition): Spelling mistake.

2015-01-01  Alexey Proskuryakov  <ap@apple.com>

        Don't dereference end() in SimpleLineLayout::RunResolver::rangeForRenderer
        https://bugs.webkit.org/show_bug.cgi?id=139951
        rdar://problem/19339881

        Reviewed by Darin Adler.

        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):

2015-01-01  Chris Dumez  <cdumez@apple.com>

        ASSERT that a null key is never used with FeatureCounter
        https://bugs.webkit.org/show_bug.cgi?id=140030

        Reviewed by Darin Adler.

        * platform/FeatureCounter.cpp:
        (WebCore::FeatureCounter::incrementKey):
        (WebCore::FeatureCounter::setKey):
        * platform/ios/FeatureCounter.mm:
        (WebCore::FeatureCounter::incrementKey):
        (WebCore::FeatureCounter::setKey):

2015-01-01  Chris Dumez  <cdumez@apple.com>

        [iOS] Fix memory leak in FeatureCounter
        https://bugs.webkit.org/show_bug.cgi?id=140029
        <rdar://problem/19255690>

        Reviewed by Darin Adler.

        Fix memory leak in FeatureCounter. The NSString for the counter key
        was allocated but never released. The patch switches to using a
        RetainPtr instead of a raw pointer to avoid the issue.

        * platform/ios/FeatureCounter.mm:
        (WebCore::FeatureCounter::incrementKey):
        (WebCore::FeatureCounter::setKey):

2015-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2015
        https://bugs.webkit.org/show_bug.cgi?id=139880

        Reviewed by Darin Adler.

        * Info.plist:

2014-12-31  Sam Weinig  <sam@webkit.org>

        Move scrolling code off of WTF::bind
        https://bugs.webkit.org/show_bug.cgi?id=140019

        Reviewed by Darin Adler.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::tryToHandleWheelEvent):
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):
        (WebCore::derefScrollingCoordinator): Deleted.
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::invalidate):
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        (WebCore::derefScrollingCoordinator): Deleted.
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::pageDestroyed):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2015-01-01  Antti Koivisto  <antti@apple.com>

        Remove FontData::containsCharacters
        https://bugs.webkit.org/show_bug.cgi?id=140026

        Reviewed by Dan Bernstein.

        This virtual function has no clients.

        * platform/graphics/FontData.h:
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::containsCharacter): Deleted.
        (WebCore::SegmentedFontData::containsCharacters): Deleted.
        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::containsCharacters): Deleted.
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::containsCharacters): Deleted.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::containsCharacters): Deleted.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::containsCharacters): Deleted.

2015-01-01  Darin Adler  <darin@apple.com>

        We often misspell identifier as "identifer"
        https://bugs.webkit.org/show_bug.cgi?id=140025

        Reviewed by Michael Saboff.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseNPTFragment):
        * html/parser/AtomicHTMLToken.h:
        * html/parser/HTMLToken.h:
        * html/shadow/SliderThumbElement.h:
        * platform/graphics/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::ISOWebVTTCue):
        * platform/graphics/ISOVTTCue.h:
        (WebCore::ISOWebVTTCue::id):
        Fix mispellings.

2015-01-01  Zalan Bujtas  <zalan@apple.com>

        Saturated arithmetics: Incorrect float/double clamping.
        https://bugs.webkit.org/show_bug.cgi?id=139888
        rdar://problem/19330885

        Reviewed by Simon Fraser.

        Clamp float and double values correctly when applying saturated arithmetics.

        Test: LayoutUnit test for float overflow.

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

2014-12-31  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::commitTreeState):

2014-12-31  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177835.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:

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

        Unreviewed, rolling out r176476.
        https://bugs.webkit.org/show_bug.cgi?id=140021

        Sadly, this didn't reduce media test crashiness (Requested by
        ap on #webkit).

        Reverted changeset:

        "[Mac] Random crashes inside media libraries when creating
        then destroying media quickly."
        https://bugs.webkit.org/show_bug.cgi?id=138980
        http://trac.webkit.org/changeset/176476

2014-12-31  Sam Weinig  <sam@webkit.org>

        Remove the remaining uses of OwnPtr from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=140017

        Reviewed by Dan Bernstein.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::create): Deleted.
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::commitNewTreeState):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::commitNewTreeState):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2014-12-31  Dan Bernstein  <mitz@apple.com>

        Don’t use AccessibilityAllInOne when building with Xcode
        https://bugs.webkit.org/show_bug.cgi?id=139974

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Added all files included by AccessibilityAllInOne.cpp
        to the WebCore target, and removed AccessibilityAllInOne.cpp from the project.

2014-12-30  Chris Dumez  <cdumez@apple.com>

        Move font-related CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140008

        Reviewed by Darin Adler.

        Move font-related CSS properties to the new StyleBuilder
        by teaching makeprop.pl how to generate them.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyFont::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyFont::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyFont::applyValue): Deleted.
        (WebCore::ApplyPropertyFont::createHandler): Deleted.
        * css/makeprop.pl:
        (generateInitialValueSetter):
        (generateInheritValueSetter):
        (generateValueSetter):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::initialItalic):
        (WebCore::FontDescription::initialSmallCaps):
        (WebCore::FontDescription::initialKerning):
        (WebCore::FontDescription::initialFontSmoothing):
        (WebCore::FontDescription::initialTextRenderingMode):

2014-12-30  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-font-variant-ligature' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=140007

        Reviewed by Darin Adler.

        Move '-webkit-font-variant-ligature' CSS property to the new StyleBuilder
        by using custom code.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyFontVariantLigatures::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyFontVariantLigatures::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyFontVariantLigatures::applyValue): Deleted.
        (WebCore::ApplyPropertyFontVariantLigatures::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyInheritWebkitFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyValueWebkitFontVariantLigatures):

2014-12-29  Chris Dumez  <cdumez@apple.com>

        Move animation / transition CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139999

        Reviewed by Darin Adler.

        Move animation / transition CSS properties to the new StyleBuilder by
        teaching makeprop.pl how to generate them.

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Remove more dead code
        https://bugs.webkit.org/show_bug.cgi?id=139998

        Reviewed by Oliver Hunt.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage): Deleted.
        (WebCore::PageGroup::transientLocalStorage): Deleted.
        * page/PageGroup.h:
        (WebCore::PageGroup::hasLocalStorage): Deleted.

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Remove unneeded StorageNamespace functions
        https://bugs.webkit.org/show_bug.cgi?id=139997

        Reviewed by Sam Weinig.

        * loader/EmptyClients.cpp:
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::closeIdleLocalStorageDatabases): Deleted.

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Get rid of some PageGroup storage functions
        https://bugs.webkit.org/show_bug.cgi?id=139996

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::closeLocalStorage): Deleted.
        (WebCore::PageGroup::clearLocalStorageForAllOrigins): Deleted.
        (WebCore::PageGroup::clearLocalStorageForOrigin): Deleted.
        (WebCore::PageGroup::closeIdleLocalStorageDatabases): Deleted.
        (WebCore::PageGroup::syncLocalStorage): Deleted.
        * page/PageGroup.h:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Move storage code from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139558

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MemoryPressureHandler.cpp:

2014-12-29  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Rewrite MediaSource implementation
        https://bugs.webkit.org/show_bug.cgi?id=139441

        Reviewed by Philippe Normand.

        This now is a clean reimplementation around appsrc that works good
        enough for YouTube (except for seeking), but it still does not
        implement the complete API correctly. Further work is required on
        top of this and the Bugzilla ticket linked above contains some
        further work in the right direction.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::doSeek):
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamer::canSaveMediaData):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::totalVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateGStreamer::totalFrameDelay):
        (WebCore::MediaPlayerPrivateGStreamer::isMediaSource):
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::addSourceBuffer):
        (WebCore::MediaSourceGStreamer::durationChanged):
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        (WebCore::MediaSourceGStreamer::readyState):
        (WebCore::MediaSourceGStreamer::setReadyState):
        (WebCore::MediaSourceGStreamer::waitForSeekCompleted):
        (WebCore::MediaSourceGStreamer::seekCompleted):
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::~SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::setClient):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        (WebCore::SourceBufferPrivateGStreamer::readyState):
        (WebCore::SourceBufferPrivateGStreamer::setReadyState):
        (WebCore::SourceBufferPrivateGStreamer::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample):
        (WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::setActive):
        (WebCore::SourceBufferPrivateGStreamer::stopAskingForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_class_init):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetProperty):
        (webKitMediaSrcGetProperty):
        (webKitMediaSrcDoAsyncStart):
        (webKitMediaSrcDoAsyncDone):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcQueryWithParent):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (WebCore::MediaSourceClientGStreamer::MediaSourceClientGStreamer):
        (WebCore::MediaSourceClientGStreamer::~MediaSourceClientGStreamer):
        (WebCore::MediaSourceClientGStreamer::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamer::durationChanged):
        (WebCore::MediaSourceClientGStreamer::append):
        (WebCore::MediaSourceClientGStreamer::markEndOfStream):
        (WebCore::MediaSourceClientGStreamer::removedFromMediaSource):
        (WTF::adoptGRef):
        (WTF::refGPtr<WebKitMediaSrc>):
        (WTF::derefGPtr<WebKitMediaSrc>):
        (webKitMediaSrcAddSrc): Deleted.
        (webKitMediaVideoSrcStop): Deleted.
        (webKitMediaAudioSrcStop): Deleted.
        (webKitMediaVideoSrcStart): Deleted.
        (webKitMediaAudioSrcStart): Deleted.
        (webKitMediaVideoSrcNeedDataMainCb): Deleted.
        (webKitMediaAudioSrcNeedDataMainCb): Deleted.
        (webKitMediaVideoSrcNeedDataCb): Deleted.
        (webKitMediaAudioSrcNeedDataCb): Deleted.
        (webKitMediaVideoSrcEnoughDataMainCb): Deleted.
        (webKitMediaAudioSrcEnoughDataMainCb): Deleted.
        (webKitMediaVideoSrcEnoughDataCb): Deleted.
        (webKitMediaAudioSrcEnoughDataCb): Deleted.
        (webKitMediaVideoSrcSeekMainCb): Deleted.
        (webKitMediaAudioSrcSeekMainCb): Deleted.
        (webKitMediaVideoSrcSeekDataCb): Deleted.
        (webKitMediaAudioSrcSeekDataCb): Deleted.
        (webKitMediaSrcSetMediaPlayer): Deleted.
        (webKitMediaSrcSetPlayBin): Deleted.
        (MediaSourceClientGstreamer::MediaSourceClientGstreamer): Deleted.
        (MediaSourceClientGstreamer::~MediaSourceClientGstreamer): Deleted.
        (MediaSourceClientGstreamer::didReceiveDuration): Deleted.
        (MediaSourceClientGstreamer::didReceiveData): Deleted.
        (MediaSourceClientGstreamer::didFinishLoading): Deleted.
        (MediaSourceClientGstreamer::didFail): Deleted.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h:
        Rewrite MediaSource implementation for GStreamer. The old code was
        overly complicated and did not work at all for anything I've tested
        it with.

2014-12-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, additional build fix on win port since r177786.

        * platform/graphics/opengl/Extensions3DOpenGLES.h: Change a constructor from *protected* to *public*.

2014-12-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, speculative build fix on win port since r177786.

        Apply std::unique_ptr<> and std::make_unique<> to win files as well.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::createWindowsBitmap):

2014-12-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert OwnPtr to std::unique_ptr in WebCore/graphics/
        https://bugs.webkit.org/show_bug.cgi?id=139971

        Reviewed by Darin Adler.

        Use std::unique_ptr<> and std::make_unique<> instead of OwnPtr.

        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::GlyphMetricsMap<T>::locatePageSlowCase):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::getChild):
        (WebCore::GlyphPageTreeNode::pruneCustomFontData):
        (WebCore::GlyphPageTreeNode::pruneFontData):
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/MaskImageOperation.h:
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::create):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        * platform/graphics/wayland/WaylandDisplay.cpp:
        (WebCore::WaylandDisplay::createSharingGLContext):
        * platform/graphics/wayland/WaylandDisplay.h:
        * platform/graphics/wayland/WaylandSurface.cpp:
        (WebCore::WaylandSurface::createGLContext):
        * platform/graphics/wayland/WaylandSurface.h:

2014-12-28  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        Reverted r177781, because it appears to trigger <http://webkit.org/b/139609> on iOS.

        * WebCore.xcodeproj/project.pbxproj:

2014-12-28  Roland Takacs  <rtakacs.u-szeged@partner.samsung.com>

        Set relayoutChildren to 'true' only if size change happens in Table
        https://bugs.webkit.org/show_bug.cgi?id=139676

        Reviewed by Darin Adler.

        Pass 'true' value for layoutPositionedObjects() in case of size change.
        It helps to avoid unneccessary setChildNeedsLayout() and
        setPreferredLogicalWidthsDirty() calls.

        This is a backport of my fix in Blink: https://codereview.chromium.org/714933002/

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

2014-12-28  Dan Bernstein  <mitz@apple.com>

        Don’t use AccessibilityAllInOne when building with Xcode
        https://bugs.webkit.org/show_bug.cgi?id=139974

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj: Added all files included by AccessibilityAllInOne.cpp
        to the WebCore target, and removed AccessibilityAllInOne.cpp from the project.

2014-12-26  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from Element and ElementRareData.
        <https://webkit.org/b/139949>

        Reviewed by Anders Carlsson.

        Make functions that used to take PassRefPtr now take Ref&& or RefPtr&&
        instead depending on possible nullity of incoming values.

        * dom/Element.cpp:
        (WebCore::Element::addShadowRoot):
        (WebCore::Element::setBeforePseudoElement):
        (WebCore::Element::setAfterPseudoElement):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setShadowRoot):
        (WebCore::ElementRareData::setBeforePseudoElement):
        (WebCore::ElementRareData::setAfterPseudoElement):
        * dom/PseudoElement.h:
        * dom/ShadowRoot.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::setBeforeOrAfterPseudoElement):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

2014-12-25  Dhi Aurrahman  <diorahman@rockybars.com>

        Allow strings as argument to :lang()
        https://bugs.webkit.org/show_bug.cgi?id=139678

        Reviewed by Benjamin Poulain.

        Allow strings as argument to :lang()[1]. The selector with empty string argument (e.g. :lang(""))
        is handled as never matching.

        [1] http://www.w3.org/blog/CSS/2014/12/11/minutes-telecon-231/

        Test: fast/css/css-lang-selector-with-string-arguments-text.html
              fast/selectors/lang-extended-filtering-with-string-arguments.html

        * css/CSSGrammar.y.in:
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):

2014-12-25  Andreas Kling  <akling@apple.com>

        DOM exception creator functions should return Ref.
        <https://webkit.org/b/139947>

        Reviewed by Chris Dumez.

        Tweak all the FooException::create() to return Ref instead of
        PassRefPtr since construction always succeeds.

        Also add a toJS() overload for ImplType& to keep bindings building.

        * Modules/indexeddb/IDBDatabaseException.h:
        (WebCore::IDBDatabaseException::create):
        * Modules/webdatabase/SQLException.h:
        (WebCore::SQLException::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * dom/DOMCoreException.h:
        (WebCore::DOMCoreException::create):
        * dom/EventException.h:
        (WebCore::EventException::create):
        * dom/RangeException.h:
        (WebCore::RangeException::create):
        * fileapi/FileException.h:
        (WebCore::FileException::create):
        * svg/SVGException.h:
        (WebCore::SVGException::create):
        * xml/XMLHttpRequestException.h:
        (WebCore::XMLHttpRequestException::create):
        * xml/XPathException.h:
        (WebCore::XPathException::create):

2014-12-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, fix build break on win debug build since r177737.

        Partial revert some code in r177737 because it causes build error on win debug buildbot.

        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):

2014-12-25  Dan Bernstein  <mitz@apple.com>

        Give extract-localizable-strings an option to treat warnings as errors
        https://bugs.webkit.org/show_bug.cgi?id=139943

        Reviewed by Darin Adler.

        Add a --treat-warnings-as-errors option, which makes the script emit its warnings as errors
        and exit with a non-0 return code if it emitted any warnings.

        * extract-localizable-strings.pl:
        Added $treatWarningsAsErrors variable, set to true if the option is passed in.

        (emitWarning): Added. If $treatWarningsAsErrors is true, omits the "warning: " token from
        the message, which makes it appear as an error in Xcode, and sets $sawError to 1.

        Replaced all print statements that printed warnings with calls to emitWarning.

2014-12-25  Dan Bernstein  <mitz@apple.com>

        Bring the state of WEBCORE_EXPORT annotations closer to what the exports file specifies.
        https://bugs.webkit.org/show_bug.cgi?id=136172

        Reviewed by Darin Adler.

        * bridge/NP_jsobject.cpp: Give functions from npruntime_impl.h defined in this file default
        using a compiler pragma, in lieu of introducing WebCore-specific macros into that header.
        * bridge/npruntime.cpp: Ditto.

        * platform/mac/WebCoreSystemInterface.mm: Similarly for WebCoreSystemInterface.h.

        Added or removed WEBCORE_EXPORT in these files as necessary to match what is currently in
        the exports file:

        * Modules/mediasource/SourceBuffer.h:
        * bindings/js/JSDOMBinding.h:
        * css/CSSComputedStyleDeclaration.h:
        * dom/ContainerNode.h:
        * dom/Document.h:
        * dom/MouseEvent.h:
        * dom/Range.h:
        * dom/SecurityContext.h:
        * editing/Editor.h:
        * editing/mac/DictionaryLookup.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.h:
        * loader/icon/IconDatabaseBase.h:
        * page/ChromeClient.h:
        * page/EventHandler.h:
        * page/FrameSnapshotting.h:
        * page/Page.h:
        * page/PageOverlay.h:
        * page/PageOverlayController.h:
        * page/TextIndicator.h:
        * page/UserContentController.h:
        * page/WheelEventDeltaTracker.h:
        * page/mac/TextIndicatorWindow.h:
        * platform/DatabaseStrategy.h:
        * platform/ScrollableArea.h:
        * platform/SuddenTermination.h:
        * platform/URL.h:
        * platform/animation/Animation.h:
        * platform/cocoa/MachSendRight.h:
        * platform/graphics/FloatRoundedRect.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Path.h:
        * platform/graphics/TextRun.h:
        * platform/graphics/ca/TileController.h:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/mac/ColorMac.h:
        * platform/mac/SoftLinking.h:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/network/BlobRegistry.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * rendering/HitTestResult.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderView.h:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageNamespaceProvider.h:
        * testing/Internals.h:

2014-12-25  Chris Dumez  <cdumez@apple.com>

        [iOS] Log better using FeatureCounter why PageCache is failing due to pruned resources
        https://bugs.webkit.org/show_bug.cgi?id=139921

        Reviewed by Gavin Barraclough and Alexey Proskuryakov.

        Log better using FeatureCounter why PageCache is failing due to pruned
        resources. In particular, we now distinguish if the resource was pruned
        due to:
        - Memory pressure
        - Page cache capacity reached
        - WebProcess suspended (WK2)

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::pruneToCapacityNow):
        (WebCore::PageCache::setCapacity):
        (WebCore::pruningReasonToFeatureCounterKey):
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        (WebCore::PageCache::prune):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * platform/FeatureCounterKeys.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2014-12-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr<> in WebCore/dom, plugin, and graphics
        https://bugs.webkit.org/show_bug.cgi?id=139938
        
        Reviewed by Darin Adler.

        Replace OwnPtr with std::unique_ptr<> and std::make_unique<>.

        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        * dom/MutationObserverRegistration.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::boundsForGlyph):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::didReceiveData):
        * plugins/PluginStream.h:

2014-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177712 and r177717.
        https://bugs.webkit.org/show_bug.cgi?id=139944

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

        Reverted changesets:

        "[iOS] Log better using FeatureCounter why PageCache is
        failing due to pruned resources"
        https://bugs.webkit.org/show_bug.cgi?id=139921
        http://trac.webkit.org/changeset/177712

        "Unreviewed, fix build warning after r177712"
        http://trac.webkit.org/changeset/177717

2014-12-25  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests after r177733.

        * bindings/scripts/test/JS/JSTestCallback.h:
        (WebCore::JSTestCallback::create):

2014-12-24  Andreas Kling  <akling@apple.com>

        Convert more creator functions to return Ref instead of PassRefPtr.
        <https://webkit.org/b/139939>

        Reviewed by Darin Adler.

        Convert a slew of functions to return Ref<T> instead of PassRefPtr<T>
        where the result is guaranteed to never be null.

        * Modules/geolocation/Coordinates.h:
        (WebCore::Coordinates::create):
        (WebCore::Coordinates::isolatedCopy):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::isolatedWorld):
        * Modules/webaudio/AnalyserNode.h:
        (WebCore::AnalyserNode::create):
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        (WebCore::AudioBuffer::createFromAudioFileData):
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::create):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioListener.h:
        (WebCore::AudioListener::create):
        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::create):
        * Modules/webaudio/BiquadFilterNode.h:
        (WebCore::BiquadFilterNode::create):
        * Modules/webaudio/ConvolverNode.h:
        (WebCore::ConvolverNode::create):
        * Modules/webaudio/DelayNode.h:
        (WebCore::DelayNode::create):
        * Modules/webaudio/DynamicsCompressorNode.h:
        (WebCore::DynamicsCompressorNode::create):
        * Modules/webdatabase/ChangeVersionWrapper.h:
        (WebCore::ChangeVersionWrapper::create):
        * Modules/webdatabase/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::create):
        * Modules/webdatabase/DatabaseAuthorizer.h:
        * Modules/webdatabase/DatabaseThread.h:
        (WebCore::DatabaseThread::create):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        (WebCore::createFromNode):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::create):
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::create):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::create):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::create):
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::create):
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::create):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::create):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::create):
        (WebCore::AccessibilityMediaControlsContainer::create):
        (WebCore::AccessibilityMediaTimeline::create):
        (WebCore::AccessibilityMediaTimeDisplay::create):
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::create):
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::create):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::create):
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::create):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::create):
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::create):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::create):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySearchFieldButtons.cpp:
        (WebCore::AccessibilitySearchFieldCancelButton::create):
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::create):
        (WebCore::AccessibilitySliderThumb::create):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::create):
        (WebCore::AccessibilitySpinButtonPart::create):
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::create):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::create):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::create):
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::create):
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::create):
        * accessibility/AccessibilityTableRow.h:
        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::create):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::create):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::getJSValue):
        * bindings/objc/DOMCustomXPathNSResolver.h:
        (WebCore::DOMCustomXPathNSResolver::create):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallbackHeader):
        * bridge/c/c_instance.h:
        (JSC::Bindings::CInstance::create):
        * crypto/CryptoKeyPair.h:
        (WebCore::CryptoKeyPair::create):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * css/DOMWindowCSS.cpp:
        (WebCore::DOMWindowCSS::create):
        * css/DOMWindowCSS.h:
        * css/DashboardRegion.h:
        (WebCore::DashboardRegion::create):
        * css/FontLoader.h:
        * dom/DOMError.h:
        (WebCore::DOMError::create):
        * dom/DOMStringList.h:
        (WebCore::DOMStringList::create):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::createForDragAndDrop):
        * dom/DataTransfer.h:
        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::Acceleration::create):
        (WebCore::DeviceMotionData::RotationRate::create):
        (WebCore::DeviceMotionData::create):
        * dom/DeviceMotionData.h:
        * dom/DeviceOrientationData.cpp:
        (WebCore::DeviceOrientationData::create):
        * dom/DeviceOrientationData.h:
        * dom/DocumentMarker.cpp:
        (WebCore::DocumentMarkerDescription::create):
        * editing/AlternativeTextController.cpp:
        (WebCore::AutocorrectionAlternativeDetails::create):
        (WebCore::DictationAlternativeDetails::create):
        * editing/AlternativeTextController.h:
        (WebCore::DictationMarkerDetails::create):
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create):
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::create):
        * editing/BreakBlockquoteCommand.h:
        (WebCore::BreakBlockquoteCommand::create):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::create):
        * editing/CompositeEditCommand.h:
        * editing/CreateLinkCommand.h:
        (WebCore::CreateLinkCommand::create):
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/DictationCommand.cpp:
        (WebCore::DictationMarkerSupplier::create):
        * editing/DictationCommand.h:
        (WebCore::DictationCommand::create):
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create):
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        * editing/FormatBlockCommand.h:
        (WebCore::FormatBlockCommand::create):
        * editing/IndentOutdentCommand.h:
        (WebCore::IndentOutdentCommand::create):
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        * editing/InsertLineBreakCommand.h:
        (WebCore::InsertLineBreakCommand::create):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::create):
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        * editing/MergeIdenticalElementsCommand.h:
        (WebCore::MergeIdenticalElementsCommand::create):
        * editing/ModifySelectionListLevel.h:
        (WebCore::IncreaseSelectionListLevelCommand::create):
        (WebCore::DecreaseSelectionListLevelCommand::create):
        * editing/MoveSelectionCommand.h:
        (WebCore::MoveSelectionCommand::create):
        * editing/RemoveCSSPropertyCommand.h:
        (WebCore::RemoveCSSPropertyCommand::create):
        * editing/RemoveFormatCommand.h:
        (WebCore::RemoveFormatCommand::create):
        * editing/RemoveNodeCommand.h:
        (WebCore::RemoveNodeCommand::create):
        * editing/RemoveNodePreservingChildrenCommand.h:
        (WebCore::RemoveNodePreservingChildrenCommand::create):
        * editing/ReplaceNodeWithSpanCommand.h:
        (WebCore::ReplaceNodeWithSpanCommand::create):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/SetNodeAttributeCommand.h:
        (WebCore::SetNodeAttributeCommand::create):
        * editing/SetSelectionCommand.h:
        (WebCore::SetSelectionCommand::create):
        * editing/SimplifyMarkupCommand.h:
        (WebCore::SimplifyMarkupCommand::create):
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::create):
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionRecordUndoCommand::create):
        * editing/SpellingCorrectionCommand.h:
        (WebCore::SpellingCorrectionCommand::create):
        * editing/SplitElementCommand.h:
        (WebCore::SplitElementCommand::create):
        * editing/SplitTextNodeCommand.h:
        (WebCore::SplitTextNodeCommand::create):
        * editing/SplitTextNodeContainingElementCommand.h:
        (WebCore::SplitTextNodeContainingElementCommand::create):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        * editing/UnlinkCommand.h:
        (WebCore::UnlinkCommand::create):
        * editing/WrapContentsInDummySpanCommand.h:
        (WebCore::WrapContentsInDummySpanCommand::create):
        * editing/ios/DictationCommandIOS.h:
        (WebCore::DictationCommandIOS::create):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::deserialize):
        (WebCore::Blob::slice):
        * fileapi/File.h:
        * fileapi/FileList.h:
        (WebCore::FileList::create):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::create):
        * fileapi/FileReader.h:
        * fileapi/FileReaderSync.h:
        (WebCore::FileReaderSync::create):
        * history/BackForwardList.h:
        (WebCore::BackForwardList::create):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::create):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::create):
        * html/DOMURL.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::plugInImageElementIsolatedWorld):
        * html/canvas/CanvasGradient.h:
        (WebCore::CanvasGradient::create):
        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::create):
        * html/canvas/CanvasPattern.h:
        * html/canvas/DOMPath.h:
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::create):
        * html/shadow/DetailsMarkerControl.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrackList.h:
        * html/track/DataCue.h:
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::create):
        * inspector/CommandLineAPIHost.h:
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::create):
        * loader/FormState.cpp:
        (WebCore::FormState::create):
        * loader/FormState.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:
        * loader/TextResourceDecoder.h:
        (WebCore::TextResourceDecoder::create):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::create):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::create):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create):
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::create):
        * loader/archive/ArchiveResource.h:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::create):
        (WebCore::ObjectCallback::create):
        * loader/icon/IconRecord.h:
        (WebCore::IconRecord::create):
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::create):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::create):
        * mathml/MathMLMathElement.h:
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::create):
        * mathml/MathMLMencloseElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::create):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::create):
        * mathml/MathMLTextElement.h:
        * page/BarProp.h:
        (WebCore::BarProp::create):
        * page/Crypto.h:
        (WebCore::Crypto::create):
        * page/DOMSecurityPolicy.h:
        (WebCore::DOMSecurityPolicy::create):
        * page/DOMSelection.h:
        (WebCore::DOMSelection::create):
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        (WebCore::DOMWindowExtension::create):
        * page/FrameView.cpp:
        (WebCore::FrameView::create):
        * page/FrameView.h:
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::create):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * platform/Cursor.h:
        (WebCore::SharedCursor::create):
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::create):
        * platform/FileChooser.h:
        * platform/animation/Animation.h:
        (WebCore::Animation::create):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::create):
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioHardwareListener.cpp:
        (WebCore::AudioHardwareListener::create):
        * platform/audio/AudioHardwareListener.h:
        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::AudioHardwareListener::create):
        (WebCore::AudioHardwareListenerMac::create):
        * platform/audio/mac/AudioHardwareListenerMac.h:
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::create):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FontFeatureSettings.h:
        (WebCore::FontFeatureSettings::create):
        * platform/graphics/Image.cpp:
        (WebCore::Image::nullImage):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::create):
        * platform/graphics/filters/DistantLightSource.h:
        (WebCore::DistantLightSource::create):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::create):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::create):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::create):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::create):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::create):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::create):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::create):
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::create):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::create):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::create):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::create):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::create):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::create):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::create):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::create):
        * platform/graphics/filters/FETile.h:
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::create):
        * platform/graphics/filters/FETurbulence.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        (WebCore::DisplayRefreshMonitorIOS::create):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        * platform/network/BlobData.h:
        (WebCore::RawData::create):
        (WebCore::BlobData::create):
        * platform/network/BlobDataFileReference.h:
        (WebCore::BlobDataFileReference::create):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::createUncached):
        (WebCore::BidiContext::create):
        * platform/text/BidiContext.h:
        * plugins/DOMMimeType.h:
        (WebCore::DOMMimeType::create):
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::item):
        (WebCore::DOMMimeTypeArray::namedItem):
        * plugins/DOMMimeTypeArray.h:
        (WebCore::DOMMimeTypeArray::create):
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::item):
        (WebCore::DOMPlugin::namedItem):
        * plugins/DOMPlugin.h:
        (WebCore::DOMPlugin::create):
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::namedItem):
        * plugins/DOMPluginArray.h:
        (WebCore::DOMPluginArray::create):
        * plugins/PluginData.h:
        (WebCore::PluginData::create):
        * rendering/ClipPathOperation.h:
        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::create):
        * rendering/CounterNode.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/CursorList.h:
        (WebCore::CursorList::create):
        * replay/CapturingInputCursor.cpp:
        (WebCore::CapturingInputCursor::create):
        * replay/CapturingInputCursor.h:
        * storage/Storage.cpp:
        (WebCore::Storage::create):
        * storage/Storage.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::create):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::create):
        * storage/StorageAreaSync.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::create):
        * storage/StorageMap.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::create):
        * storage/StorageSyncManager.h:
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::create):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::create):
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::createWorkerGlobalScope):
        * workers/SharedWorkerThread.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerLocation.h:
        (WebCore::WorkerLocation::create):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::create):
        * workers/WorkerThread.h:
        * xml/DOMParser.h:
        (WebCore::DOMParser::create):
        * xml/NativeXPathNSResolver.h:
        (WebCore::NativeXPathNSResolver::create):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        * xml/XMLSerializer.h:
        (WebCore::XMLSerializer::create):
        * xml/XPathEvaluator.h:
        (WebCore::XPathEvaluator::create):
        * xml/XPathResult.h:
        (WebCore::XPathResult::create):
        * xml/XSLStyleSheet.h:
        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::create):

2014-12-24  Benjamin Poulain  <bpoulain@apple.com>

        Small cleanup of RenderBlock::paint()
        https://bugs.webkit.org/show_bug.cgi?id=139849

        Reviewed by Daniel Bates.

        Remove a couple of instructions by putting variable in the right scope.

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

2014-12-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WebCoreSystemInterface.h declares two unused symbols
        https://bugs.webkit.org/show_bug.cgi?id=139937

        Reviewed by Tim Horton.

        * platform/graphics/FontPlatformData.h: Removed unused typedefs.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Stop passing always-zero containerRef parameter to
        FontCustomPlatformData constructor.

        * platform/graphics/mac/FontCustomPlatformData.h: Removed unused typedefs.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Removed unused container
        parameter and m_atsContainer member variable.

        * platform/mac/WebCoreSystemInterface.h: Removed unused typedefs and symbols.

2014-12-23  Chris Dumez  <cdumez@apple.com>

        Simplify RenderStyle::invalidColor() function
        https://bugs.webkit.org/show_bug.cgi?id=139898

        Reviewed by Andreas Kling.

        Simplify RenderStyle::invalidColor() function by getting rid of the
        static variable. The default constructor for Color is very cheap
        anyway.

        * rendering/style/RenderStyle.h:

2014-12-23  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, fix build warning after r177712

        ../../Source/WebCore/history/PageCache.cpp: In function ‘const char* WebCore::pruningReasonToFeatureCounterKey(WebCore::PruningReason)’:
        ../../Source/WebCore/history/PageCache.cpp:449:1: error: control reaches end of non-void function [-Werror=return-type]

        No new tests, no behavior changes.

        * history/PageCache.cpp:
        (WebCore::pruningReasonToFeatureCounterKey):

2014-12-23  Chris Dumez  <cdumez@apple.com>

        [iOS] Log better using FeatureCounter why PageCache is failing due to pruned resources
        https://bugs.webkit.org/show_bug.cgi?id=139921
        <rdar://problem/19255690>

        Reviewed by Gavin Barraclough.

        Log better using FeatureCounter why PageCache is failing due to pruned
        resources. In particular, we now distinguish if the resource was pruned
        due to:
        - Memory pressure
        - Page cache capacity reached
        - WebProcess suspended (WK2)

        * WebCore.exp.in:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::pruneToCapacityNow):
        (WebCore::PageCache::setCapacity):
        (WebCore::pruningReasonToFeatureCounterKey):
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        (WebCore::PageCache::prune):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * platform/FeatureCounterKeys.h:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):

2014-12-23  Andreas Kling  <akling@apple.com>

        [Mac] Fix nullptr dereference in EventHandler::platformPrepareForWheelEvents().
        <https://webkit.org/b/139923>
        <rdar://problem/19182531>

        Reviewed by Chris Dumez.

        Don't dereference 'wheelEventTarget' until we know it's non-null.
        This manifested as a crash in Node::renderBox() with some versions of LLVM.

        The compiler was free to assume that the ContainerNode* 'candidate' in
        findEnclosingScrollableContainer() would always be non-null on the first
        iteration of the loop.

        I suspect that we can get here with a null 'wheelEventTarget' during the
        rubberbanding phase of a wheel scroll; if the cursor is sitting over the
        exposed "gutter" area.

        * page/mac/EventHandlerMac.mm:
        (WebCore::findEnclosingScrollableContainer):
        (WebCore::EventHandler::platformPrepareForWheelEvents):

2014-12-23  Timothy Horton  <timothy_horton@apple.com>

        Install a TextIndicator for link immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139897
        <rdar://problem/19333076>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/QuickLookMacSPI.h:
        Add a new piece of SPI.

2014-12-23  Sam Weinig  <sam@webkit.org>

        Rename WebContext to WebProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=139909

        Rubber-stamped by Anders Carlsson.

        Merge SessionID and SessionIDHash into one file to make auto-generation of
        HashMaps with SessionIDs easier.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/MemoryCache.h:
        * page/SessionID.h:
        (WTF::SessionIDHash::hash):
        (WTF::SessionIDHash::equal):
        (WTF::HashTraits<WebCore::SessionID>::emptyValue):
        (WTF::HashTraits<WebCore::SessionID>::constructDeletedValue):
        (WTF::HashTraits<WebCore::SessionID>::isDeletedValue):
        * page/SessionIDHash.h: Removed.

2014-12-23  Myles C. Maxfield  <mmaxfield@apple.com>

        platform/mac/editing/input/devanagari-ligature.html is flaky on Yosemite, ligature fails to form
        https://bugs.webkit.org/show_bug.cgi?id=138683

        Reviewed by Darin Adler.

        This patch changes how we check fonts for equality. In particular, this patch adds a
        objectForEqualityCheck() to Cocoa's FontPlatformData, and callers should pass this object
        to CFEqual() to determine if two platform fonts are equal. This patch also migrates all
        call sites to using this function.

        I don't want to implement operator==() because there are many cases where the same font
        is compared against many others, and this solution is cleaner than caching a comparison
        object inside the font object itself.

        No new tests because this is covered by platform/mac/editing/input/devanagari-ligature.html.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::objectForEqualityCheck):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/spi/cocoa/CoreTextSPI.h:

2014-12-23  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Make Placeholder a move-only type
        https://bugs.webkit.org/show_bug.cgi?id=139870

        Reviewed by Anders Carlsson.

        No new tests because there is no behavior change.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::Placeholder::Placeholder):
        (WebCore::SVGToOTFFontConverter::Placeholder::populate):
        (WebCore::SVGToOTFFontConverter::Placeholder::~Placeholder):

2014-12-23  Chris Dumez  <cdumez@apple.com>

        Move color CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139898

        Reviewed by Antti Koivisto.

        Move color CSS properties to the new StyleBuilder by teaching the
        StyleBuilder generator how to handle them.

        * css/CSSPropertyNames.in:
        - Move color properties to the new StyleBuilder.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::defaultInitialColor): Deleted.
        (WebCore::ApplyPropertyColor::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyColor::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyColor::applyValue): Deleted.
        (WebCore::ApplyPropertyColor::applyColorValue): Deleted.
        (WebCore::ApplyPropertyColor::createHandler): Deleted.
        - Drop color properties support from the DeprecatedStyleBuilder.

        * css/makeprop.pl:
        - Teach the StyleBuilder generator how to handle color properties.
        - Use a class for StyleBuilderFunctions instead of a namespace so
          that it can be made a friend of RenderStyle class.

        * rendering/style/RenderStyle.h:
        - Mark StyleBuilderFunctions class as friend as its functions
          can set RenderStyle members directly. This is similar to what
          is already done for StyleBuilderCustom class. The new color
          properties handling calls private methods on RenderStyle.
        - Mark invalidColor() method as static as it does not require
          an instance.

2014-12-23  Zalan Bujtas  <zalan@apple.com>

        Incorrect dashed and dotted border painting.
        https://bugs.webkit.org/show_bug.cgi?id=139872
        rdar://problem/18024205

        Reviewed by Simon Fraser.

        This patch makes dashed/dotted border painting symmetric and consistent.
        It also works with subpixel positioning.

        Tests: fast/borders/border-painting-correctness-dashed.html
               fast/borders/border-painting-correctness-dotted.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):

2014-12-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Log which type of resources are commonly loaded using FeatureCounter
        https://bugs.webkit.org/show_bug.cgi?id=139890

        Reviewed by Darin Adler.

        Log which type of resources are commonly loaded using FeatureCounter
        (e.g. stylesheets, scripts, fonts, images, ...).

        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoadedUsingFeatureCounter):
        (WebCore::SubresourceLoader::didFinishLoading):
        * platform/FeatureCounterKeys.h:

2014-12-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Log using FeatureCounter when a PacheCache fails due to memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=139874
        <rdar://problem/19255690>

        Reviewed by Darin Adler.

        Log using FeatureCounter when a PacheCache fails due to memory
        pressure. To detect this, a flag is added to HistoryItem to mark
        items that are no longer in the page becaused they were pruned
        (either because of a low memory handling or because the page cache
        reached its maximum capacity).

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        (WebCore::PageCache::prune):
        * platform/FeatureCounterKeys.h:

2014-12-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177658.
        https://bugs.webkit.org/show_bug.cgi?id=139900

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

        Reverted changeset:

        "Incorrect dashed and dotted border painting."
        https://bugs.webkit.org/show_bug.cgi?id=139872
        http://trac.webkit.org/changeset/177658

2014-12-22  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r177661 and r177662

        * dom/SecurityOriginPolicy.cpp: Modify #include path.

2014-12-22  Mark Rowe  <mrowe@apple.com>

        [Mac] Engineering builds of WebCore on OS X 10.8 and 10.9 shouldn't build with -gline-tables-only
        <https://webkit.org/b/139883> / <rdar://problem/19297261>

        Reviewed by Alexey Proskuryakov.

        * Configurations/DebugRelease.xcconfig: Override the setting using conditional settings
        so that they take precedence over the conditional settings in Base.xcconfig.

2014-12-22  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed build fix.

        * WebCore.exp.in: Move SQLiteDatabaseTracker::setClient export out of PLATFORM(IOS) section.

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Remove two functions from SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=139885

        Reviewed by Andreas Kling.

        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessPasswordManager): Deleted.
        (WebCore::SecurityOrigin::canAccessFileSystem): Deleted.

2014-12-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Log using FeatureCounter user-triggered zooming
        https://bugs.webkit.org/show_bug.cgi?id=139879
        <rdar://problem/19329130>

        Reviewed by Benjamin Poulain.

        Log using FeatureCounter user-triggered zooming on iOS.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FeatureCounter.h:
        * platform/FeatureCounterKeys.h:

2014-12-22  Benjamin Poulain  <bpoulain@apple.com>

        Form elements should match :valid and :invalid based on their associated elements
        https://bugs.webkit.org/show_bug.cgi?id=139850

        Reviewed by Darin Adler.

        In the latest HTML spec, form elements can match :valid or :invalid based
        on their associated element.

        The tricky part is that object lifetime is a mess. When elements are associated
        with forms by the parser, the form is set by the constructor of HTMLFormControlElement.
        At that point, the real object has not been initialized yet which
        makes it impossible to find its validity.

        To work around the lifetime problem, the code of HTMLFormControlElement::didChangeForm()
        uses m_willValidateInitialized and m_willValidate direclty instead
        of invoking willValidate(). That way we don't try to validate an incomplete object.

        When the object really validates, HTMLFormControlElement::setNeedsWillValidateCheck()
        takes care of updating the form.

        Tests: fast/css/pseudo-invalid-form-and-fieldset-basics.html
               fast/css/pseudo-invalid-form-basics.html
               fast/css/pseudo-invalid-form-dynamically-created-basics.html
               fast/css/pseudo-invalid-form-invalidation-optimization.html
               fast/css/pseudo-valid-form-and-fieldset-basics.html
               fast/css/pseudo-valid-form-basics.html
               fast/css/pseudo-valid-form-dynamically-created-basics.html
               fast/css/pseudo-valid-form-invalidation-optimization.html
               fast/selectors/invalid-form-style-update-1.html
               fast/selectors/invalid-form-style-update-2.html
               fast/selectors/invalid-form-style-update-3.html
               fast/selectors/valid-form-style-update-1.html
               fast/selectors/valid-form-style-update-2.html
               fast/selectors/valid-form-style-update-3.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::canShareStyleWithElement):
        HTMLFormElement is not a FormControl, we have to generalize the test
        for :valid/:invalid with style sharing.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::~HTMLFormControlElement):
        Since we now have willChangeForm(), didChangeForm(), we have to null
        the form ourself, as documented by FormAssociatedElement.

        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::willChangeForm):
        (WebCore::HTMLFormControlElement::didChangeForm):
        (WebCore::HTMLFormControlElement::updateValidity):
        Update the owner form when any of the associated form element changes
        to invalid.

        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerInvalidAssociatedFormControl):
        (WebCore::HTMLFormElement::removeInvalidAssociatedFormControlIfNeeded):
        (WebCore::HTMLFormElement::matchesValidPseudoClass):
        (WebCore::HTMLFormElement::matchesInvalidPseudoClass):
        This is very similar to the code of fieldset, but we have much weaker
        invariants due to the insane way FormAssociatedElement initializes.

        * html/HTMLFormElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::initializeInputType):
        For completeness, we should always validate when changing the type.
        The code was only doing that when the element was inserted into the tree,
        that was too fragile.

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * dom/DOMAllInOne.cpp:

2014-12-22  Anders Carlsson  <andersca@apple.com>

        Add a SecurityOriginPolicy class
        https://bugs.webkit.org/show_bug.cgi?id=139875

        Reviewed by Sam Weinig.

        This is the first step towards making SecurityOrigin immutable. SecurityOriginPolicy will hold a
        SecurityOrigin and will handle things that would otherwise mutate SecurityOrigin.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/Document.cpp:
        (WebCore::Document::create):
        (WebCore::Document::open):
        (WebCore::Document::cloneDataFromDocument):
        (WebCore::Document::initSecurityContext):
        * dom/ScriptExecutionContext.h:
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::setSecurityOriginPolicy):
        (WebCore::SecurityContext::securityOrigin):
        (WebCore::SecurityContext::isSecureTransitionTo):
        (WebCore::SecurityContext::enforceSandboxFlags):
        (WebCore::SecurityContext::setSecurityOrigin): Deleted.
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::securityOriginPolicy):
        (WebCore::SecurityContext::securityOrigin): Deleted.
        * dom/SecurityOriginPolicy.cpp: Added.
        (WebCore::SecurityOriginPolicy::create):
        (WebCore::SecurityOriginPolicy::SecurityOriginPolicy):
        (WebCore::SecurityOriginPolicy::~SecurityOriginPolicy):
        * dom/SecurityOriginPolicy.h: Added.
        (WebCore::SecurityOriginPolicy::origin):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2014-12-22  Zalan Bujtas  <zalan@apple.com>

        Incorrect dashed and dotted border painting.
        https://bugs.webkit.org/show_bug.cgi?id=139872
        rdar://problem/18024205

        Reviewed by Simon Fraser.

        This patch makes dashed/dotted border painting symmetric and consistent.
        It also works with subpixel positioning.

        Tests: fast/borders/border-painting-correctness-dashed.html
               fast/borders/border-painting-correctness-dotted.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):

2014-12-22  Timothy Horton  <timothy_horton@apple.com>

        TextIndicatorWindow is larger than it needs to be, especially when not bouncing
        https://bugs.webkit.org/show_bug.cgi?id=139876
        <rdar://problem/19311017>

        Reviewed by Sam Weinig.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::wantsBounce):
        (WebCore::TextIndicator::wantsContentCrossfade):
        (WebCore::TextIndicator::wantsFadeIn):
        * page/TextIndicator.h:
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        (-[WebTextIndicatorView _animationDuration]):
        (-[WebTextIndicatorView present]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        (-[WebTextIndicatorView _textIndicatorWantsBounce]): Deleted.
        (-[WebTextIndicatorView _textIndicatorWantsContentCrossfade]): Deleted.
        (-[WebTextIndicatorView _textIndicatorWantsFadeIn]): Deleted.
        Move the various switches over TextIndicatorPresentationTransition into TextIndicator.
        Adjust the margin; only inflate by the shadow if we're not bouncing.
        If we are bouncing, fix the math to more tightly fit the bounce.
        Previously we were inflating by way too much, and even when we didn't need to.

2014-12-22  Chris Dumez  <cdumez@apple.com>

        [iOS] Log using FeatureCounter when a PacheCache entry is not reused because it expired
        https://bugs.webkit.org/show_bug.cgi?id=139869
        <rdar://problem/19255690>

        Reviewed by Darin Adler.

        Log using FeatureCounter when a PacheCache entry is not reused because
        it expired.

        * history/PageCache.cpp:
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):
        * platform/FeatureCounterKeys.h:

2014-12-22  Antti Koivisto  <antti@apple.com>

        Try to fix the windows build.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:

2014-12-22  Timothy Horton  <timothy_horton@apple.com>

        Adjust TextIndicator shadow parameters
        https://bugs.webkit.org/show_bug.cgi?id=139871
        <rdar://problem/19283300>

        Reviewed by Sam Weinig.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        Slightly adjust the shadow and bounce size.

2014-12-22  Chris Dumez  <cdumez@apple.com>

        Consistently use "FeatureCounter*Key" naming for FeatureCounter keys
        https://bugs.webkit.org/show_bug.cgi?id=139867

        Reviewed by Darin Adler.

        Consistently use "FeatureCounter*Key" naming for FeatureCounter keys.

        * loader/FrameLoader.cpp:
        (WebCore::logNavigationWithFeatureCounter):
        * platform/FeatureCounterKeys.h:

2014-12-22  Antti Koivisto  <antti@apple.com>

        Generic font code should not know about SVG font missing glyph
        https://bugs.webkit.org/show_bug.cgi?id=139864

        Reviewed by Andreas Kling and Myles Maxfield.

        The defined missing glyph is an SVG font concept and should be handled in SVG code.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::glyphDataForSystemFallback):
        (WebCore::FontGlyphs::glyphDataForVariant):

            Return null glyph instead of the missing glyph (the missing glyph was already a null glyph in all non-svg-font cases).
            Use early return style.

        * platform/graphics/FontGlyphs.h:
        * platform/graphics/SegmentedFontData.cpp:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:

            Remove the missingGlyph member.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):

            Explicitly skip over null glyphs. Before they had non-null fontData and would get skipped implicitly.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::missingGlyphForFont):

            Get the missing glyph from the SVG font element.

        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

            Return the missing glyph if the normal lookup didn't produce results.

        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData):

2014-12-22  Chris Dumez  <cdumez@apple.com>

        Move "Auto" CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139858

        Reviewed by Antti Koivisto.

        Move "Auto" CSS properties from DeprecatedStyleBuilder to the new
        StyleBuilder, by adding support in the generator for using hasAutoXXX()
        / setHasAutoXXX() methods on RenderStyle.

        No new tests, no web-exposed behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyAuto::setValue): Deleted.
        (WebCore::ApplyPropertyAuto::value): Deleted.
        (WebCore::ApplyPropertyAuto::hasAuto): Deleted.
        (WebCore::ApplyPropertyAuto::setAuto): Deleted.
        (WebCore::ApplyPropertyAuto::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyAuto::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyAuto::applyValue): Deleted.
        (WebCore::ApplyPropertyAuto::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialColumnGap):
        (WebCore::StyleBuilderCustom::applyInheritColumnGap):
        (WebCore::StyleBuilderCustom::applyValueColumnGap):
        * css/makeprop.pl:
        (getNameForMethods):
        (getAutoGetter):
        (getAutoSetter):
        (generateInitialValueSetter):
        (generateInheritValueSetter):
        (generateValueSetter):

2014-12-21  Shivakumar JM  <shiva.jm@samsung.com>

        HTMLSelectElement add() should support adding group of options element (HTMLOptGroupElement).
        https://bugs.webkit.org/show_bug.cgi?id=139806

        Reviewed by Darin Adler.

        HTMLSelectElement add() should support adding group of options (optgroup) element.

        Test: fast/dom/HTMLSelectElement/select-add-optgroup.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::add):

2014-12-21  Chris Dumez  <cdumez@apple.com>

        Fix missing assertion in r177623.
        https://bugs.webkit.org/show_bug.cgi?id=139334

        Reviewed by Darin Adler.

        ValueWithCalculation::setCalculation() was meant to include an
        "isCalculation()" assertion but I inadvertently omitted the
        ASSERT() around the statement.

        * css/CSSParser.h:
        (WebCore::CSSParser::ValueWithCalculation::setCalculation):

2014-12-21  Gabor Rapcsanyi  <rgabor@webkit.org>

        AX: Hidden aria table crash
        https://bugs.webkit.org/show_bug.cgi?id=139856

        Reviewed by Chris Fleizach.

        Change axCaption to pointer and check it's value because
        AXObjectCache::getOrCreate() can return with nullptr.

        Test: accessibility/aria-hidden-crash.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):

2014-12-20  Chris Dumez  <cdumez@apple.com>

        Get rid of error-prone ReleaseParsedCalcValueCondition argument in CSSParser
        https://bugs.webkit.org/show_bug.cgi?id=139334

        Reviewed by Darin Adler.

        Get rid of error-prone ReleaseParsedCalcValueCondition argument in
        CSSParser that determines the the m_parsedCalculation member should
        be released.

        Instead, introduce a new ValueWithCalculation type which wraps a
        CSSParserValue and an optional parsed calculation value. This way,
        the parsed calculation value is now associated with its CSSParserValue.
        This makes it very difficult to use a parsed calculation value for the
        wrong CSSParserValue. The API is also easier to use as developers no
        longer need to explicitly indicate if the calculation value should be
        released or not.

        No new tests, no web-behavior change.

2014-12-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] add optimized fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=139833
        <rdar://problem/18844486>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_VIDEO_PRESENTATION_MODE.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::optimizedFullscreenSupported): Deleted.
        (WebCore::MediaControlsHost::fullscreenMode): Deleted.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.addVideoListeners): Listen for 'webkitpresentationmodechanged'.
        (ControllerIOS.prototype.removeVideoListeners): Stop listening for 'webkitpresentationmodechanged'.
        (ControllerIOS.prototype.configureInlineControls): Call video element instead of using the now 
            removed host property.
        (ControllerIOS.prototype.updateControls): Ditto.
        (ControllerIOS.prototype.presentationMode): New, return webkitPresentationMode when possible.
        (ControllerIOS.prototype.handleFullscreenButtonClicked): Use webkitSetPresentationMode when possible.
        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): Use video element instead of 
            using the now removed host method.
        (ControllerIOS.prototype.handlePresentationModeChange): New, react to presentation mode changes.
        (ControllerIOS.prototype.handleFullscreenChange): Call handlePresentationModeChange.

        * dom/EventNames.h: Add webkitpresentationmodechanged.

        * html/HTMLAttributeNames.in: Add onwebkitpresentationmodechanged.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen): Early return when asked to change to the current 
            mode. Call fullscreenModeChanged() instead of whacking the instance variable directly.
        (WebCore::HTMLMediaElement::exitFullscreen): Ditto.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::fullscreenModeChanged): Make virtual.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Deal with onwebkitpresentationmodechange.
        (WebCore::presentationModeFullscreen): New.
        (WebCore::presentationModeOptimized): Ditto.
        (WebCore::presentationModeInline): Ditto.
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode): Ditto.
        (WebCore::HTMLVideoElement::webkitSetPresentationMode): Ditto.
        (WebCore::HTMLVideoElement::webkitPresentationMode): Ditto.
        (WebCore::HTMLVideoElement::fullscreenModeChanged): Ditto.
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setIsOptimized): Simplify the logic a bit. Don't report
            a mode change when 

2014-12-20  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        Also remove all uses of SQLITE3_HEADER_SEARCH_PATHS and
        WEBCORE_SQLITE3_HEADER_SEARCH_PATHS which were phased out in
        r132859 and needed for Leopard.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        - Set GCC_OPTIMIZATION_LEVEL_normal based on SDK.
        - Simplify SQLITE3_HEADER_SEARCH_PATHS.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebCore.xcconfig:
        - Set EXPORTED_SYMBOLS_FILE_i386, EXPORTED_SYMBOLS_FILE_x86_64,
          FRAMEWORK_SEARCH_PATHS, INSTALL_PATH, DYLIB_INSTALL_NAME_BASE,
          OTHER_LDFLAGS, SECTORDER_FLAGS, NORMAL_WEBCORE_FRAMEWORKS_DIR,
          WEBCORE_FRAMEWORKS_DIR, NORMAL_PRODUCTION_FRAMEWORKS_DIR,
          PRODUCTION_FRAMEWORKS_DIR,
          JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production and
          EXCLUDED_SOURCE_FILE_NAMES based on SDK.
        - Make sure DYLIB_INSTALL_NAME_BASE and OTHER_LDFLAGS are
          overrideable by WebCoreTestSupport.xcconfig.
        * Configurations/WebCoreTestSupport.xcconfig:
        - Set PRIVATE_HEADERS_FOLDER_PATH_Production and
          INSTALL_PATH_Production based on SDK.
        - Override SECT_ORDER_FLAGS from WebCore.xcconfig.

2014-12-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Make placeholders more robust
        https://bugs.webkit.org/show_bug.cgi?id=139836

        Reviewed by Dan Bernstein.

        This patch creates a Placeholder object which hides the complexity of
        populating offsets to subtables.

        No new tests because there is no behavior change.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::Placeholder::Placeholder):
        (WebCore::SVGToOTFFontConverter::Placeholder::populate):
        (WebCore::SVGToOTFFontConverter::Placeholder::~Placeholder):
        (WebCore::SVGToOTFFontConverter::appendArabicReplacementSubtable):
        (WebCore::SVGToOTFFontConverter::appendGSUBTable):

2014-12-19  Chris Dumez  <cdumez@apple.com>

        Fix initial / inherit support for '-webkit-perspective-origin' CSS property
        https://bugs.webkit.org/show_bug.cgi?id=139843

        Reviewed by Simon Fraser.

        Fix initial / inherit support for '-webkit-perspective-origin' CSS
        property. These previously had no effect.

        This patch updates the code to be consistent with
        '-webkit-transform-origin' and gets rid of the code in
        DeprecatedStyleBuilder as it isn't used.

        Test: fast/css/perspective-origin-initial-inherit.html

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyPerspectiveOrigin::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyPerspectiveOrigin::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyPerspectiveOrigin::applyValue): Deleted.
        (WebCore::ApplyPropertyPerspectiveOrigin::createHandler): Deleted.
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitPerspectiveOriginShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-12-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177599.
        https://bugs.webkit.org/show_bug.cgi?id=139846

        this breaks so many things (Requested by thorton_ on #webkit).

        Reverted changeset:

        "TextIndicator's window can be pushed down if it intersects
        the menu bar"
        https://bugs.webkit.org/show_bug.cgi?id=139841
        http://trac.webkit.org/changeset/177599

2014-12-19  Timothy Horton  <timothy_horton@apple.com>

        TextIndicator's window can be pushed down if it intersects the menu bar
        https://bugs.webkit.org/show_bug.cgi?id=139841
        <rdar://problem/19311017>

        Reviewed by Anders Carlsson.

        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Ensure that the textIndicatorWindow sits above the menubar, and re-set
        its frame so that it moves under the menubar if required.

2014-12-19  Anders Carlsson  <andersca@apple.com>

        Use WebCore::MachSendRights for the compositing render server port
        https://bugs.webkit.org/show_bug.cgi?id=139834

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-12-19  Chris Dumez  <cdumez@apple.com>

        [iOS] Log how often media element playback happens using FeatureCounter
        https://bugs.webkit.org/show_bug.cgi?id=139819
        <rdar://problem/19309988>

        Reviewed by Eric Carlson.

        Log using FeatureCounter how often we start loading for audio / video
        elements, and how often they end up being played.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        Add flag to identify when a media element starts playing for the first
        time.

        (WebCore::HTMLMediaElement::loadResource):
        Log when a media element starts loading.

        (WebCore::HTMLMediaElement::updatePlayState):
        Log when a media element starts playing for the first time.

        * html/HTMLMediaElement.h:
        Add flag to identify when a media element starts playing for the first
        time.

        * platform/FeatureCounterKeys.h:
        Add FeatureCounter keys for HTMLMediaElement loading / playback.

2014-12-19  Andreas Kling  <akling@apple.com>

        Ref-ify TextIterator API.
        <https://webkit.org/b/139823>

        Reviewed by Antti Koivisto.

        Change TextIterator functions that always return Range objects to return
        Ref<Range> instead of PassRefPtr<Range>.

        One API (rangeFromLocationAndLength) may return nullptr, so its return type
        is now RefPtr<Range>.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::range):
        (WebCore::TextIterator::node):
        (WebCore::SimplifiedBackwardsTextIterator::range):
        (WebCore::CharacterIterator::range):
        (WebCore::characterSubrange):
        (WebCore::BackwardsCharacterIterator::range):
        (WebCore::TextIterator::subrange):
        (WebCore::TextIterator::rangeFromLocationAndLength):
        (WebCore::TextIterator::getLocationAndLengthFromRange):
        (WebCore::collapsedToBoundary):
        (WebCore::findPlainText):
        * editing/TextIterator.h:

2014-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CRASH in inspector-protocol/debugger/terminate-dedicated-worker-while-paused.html
        https://bugs.webkit.org/show_bug.cgi?id=139792

        Reviewed by Timothy Hatcher.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::removeListener):
        When removing listeners, we could be during WorkerGlobalObject shutdown
        and WorkerGlobalObject::script may be null.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        This postTask may happen after m_pageInspector has been cleared, so
        only execute it if m_pageInspector is still valid.

2014-12-19  Chris Dumez  <cdumez@apple.com>

        Drop useless HTMLMediaElement::m_previousProgress member
        https://bugs.webkit.org/show_bug.cgi?id=139822

        Reviewed by Eric Carlson.

        Drop HTMLMediaElement::m_previousProgress member and it is not used or
        even initialized.

        * html/HTMLMediaElement.h:

2014-12-19  Chris Dumez  <cdumez@apple.com>

        [iOS] Log how successful the memory cache is using FeatureCounter
        https://bugs.webkit.org/show_bug.cgi?id=139802

        Reviewed by Andreas Kling.

        Log how successful the memory cache is using FeatureCounter and why we
        choose not to use the resource in the memory cache when it is present.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * platform/FeatureCounterKeys.h:

2014-12-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177574.
        https://bugs.webkit.org/show_bug.cgi?id=139821

        "Broke Production builds by installing
        libWebCoreTestSupport.dylib in the wrong directory" (Requested
        by ddkilzer on #webkit).

        Reverted changeset:

        "Switch from using PLATFORM_NAME to SDK selectors in WebCore,
        WebInspectorUI, WebKit, WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=139463
        http://trac.webkit.org/changeset/177574

2014-12-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Only when the SVG is inline and only when a shape is referenced before it is defined, this shape will not be drawn.
        https://bugs.webkit.org/show_bug.cgi?id=139451.

        Reviewed by Antti Koivisto.

        Tests: svg/in-html/defs-after-use.html.

        When parsing the children of an SVG element is finished, we need to notify the
        other SVG elements which have incomplete shadow trees because of early referencing
        to this element. The referencing elements need to rebuild their shadow trees and
        make new copies of the this element and its sub-tree.
        
        This is the case where a <use> tag references target elements before these target
        elements are defined. Updating the shadow DOM tree of a <use> element should update
        the corresponding shadow render tree as well.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::finishParsingChildren):
        Invalidate all the referencing elements of a target element whose sub-tree has
        just finished parsing.

2014-12-19  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        Also remove all uses of SQLITE3_HEADER_SEARCH_PATHS and
        WEBCORE_SQLITE3_HEADER_SEARCH_PATHS which were phased out in
        r132859 and needed for Leopard.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        - Set GCC_OPTIMIZATION_LEVEL_normal based on SDK.
        - Simplify SQLITE3_HEADER_SEARCH_PATHS.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebCore.xcconfig:
        - Set EXPORTED_SYMBOLS_FILE_i386, EXPORTED_SYMBOLS_FILE_x86_64,
          FRAMEWORK_SEARCH_PATHS, INSTALL_PATH, DYLIB_INSTALL_NAME_BASE,
          OTHER_LDFLAGS, SECTORDER_FLAGS, NORMAL_WEBCORE_FRAMEWORKS_DIR,
          WEBCORE_FRAMEWORKS_DIR, NORMAL_PRODUCTION_FRAMEWORKS_DIR,
          PRODUCTION_FRAMEWORKS_DIR,
          JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production and
          EXCLUDED_SOURCE_FILE_NAMES based on SDK.
        - Make sure DYLIB_INSTALL_NAME_BASE and OTHER_LDFLAGS are
          overrideable by WebCoreTestSupport.xcconfig.
        * Configurations/WebCoreTestSupport.xcconfig:
        - Set PRIVATE_HEADERS_FOLDER_PATH_Production and
          INSTALL_PATH_Production based on SDK.
        - Override SECT_ORDER_FLAGS from WebCore.xcconfig.

2014-12-19  Chris Dumez  <cdumez@apple.com>

        Clean up StyleBuilderCustom and DeprecatedStyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139807

        Reviewed by Antti Koivisto.

        Clean up StyleBuilderCustom and DeprecatedStyleBuilder.

        * css/DeprecatedStyleBuilder.cpp:

        - Remove unnecessary header includes.

        (WebCore::ApplyPropertyPerspectiveOrigin::applyInheritValue):
        (WebCore::ApplyPropertyPerspectiveOrigin::applyInitialValue):
        (WebCore::ApplyPropertyPerspectiveOrigin::applyValue):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyExpanding::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyExpanding::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyExpanding::applyValue): Deleted.
        (WebCore::ApplyPropertyExpanding::createHandler): Deleted.

        - Rename ApplyPropertyExpanding to ApplyPropertyPerspectiveOrigin as
          PerspectiveOrigin is the only remaining user of this class. This also
          allows us to simplify the implementation a lot.

        (WebCore::ApplyPropertyDefaultBase::setValue): Deleted.
        (WebCore::ApplyPropertyDefaultBase::value): Deleted.
        (WebCore::ApplyPropertyDefaultBase::initial): Deleted.
        (WebCore::ApplyPropertyDefaultBase::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyDefaultBase::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyDefaultBase::applyValue): Deleted.

        - There is no longer any user of this templated class.

        * css/StyleBuilderCustom.h:

        - Introduce a macro that declares all 3 handlers (inherit, initial and
          value) in the StyleBuilderCustom class. This greatly reduces the
          number of lines in this class.
        - Also alphabetize the handlers.

2014-12-18  Jeremy Jones  <jeremyj@apple.com>

        dispatch to main thread before accessing playerController() in WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse
        https://bugs.webkit.org/show_bug.cgi?id=139809

        Reviewed by Dan Bernstein.

        This prevents a race in playerController().

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse):

2014-12-18  Jessie Berlin  <jberlin@webkit.org>

        More speculative build fixing.

        * WebCore.exp.in:

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify various Document-related things.
        <https://webkit.org/b/139796>

        Reviewed by Anders Carlsson.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument createDocumentFragmentWithText:]):
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::create):
        (WebCore::CDATASection::virtualCreate):
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        (WebCore::Comment::create):
        * dom/Comment.h:
        * dom/Document.cpp:
        (WebCore::Document::create):
        (WebCore::Document::createDocumentFragment):
        (WebCore::Document::createTextNode):
        (WebCore::Document::createComment):
        (WebCore::Document::createEditingTextNode):
        (WebCore::Document::createCSSStyleDeclaration):
        (WebCore::Document::createElement):
        (WebCore::Document::createRange):
        (WebCore::Document::createParser):
        (WebCore::Document::cloneNodeInternal):
        (WebCore::Document::cloneDocumentWithoutChildren):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        (WebCore::Document::createNonRenderedPlaceholder):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create):
        * dom/DocumentFragment.h:
        * dom/DocumentType.h:
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::create):
        * dom/EntityReference.h:
        * dom/Text.cpp:
        (WebCore::Text::create):
        (WebCore::Text::createEditingText):
        (WebCore::Text::splitText):
        (WebCore::Text::virtualCreate):
        (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        * editing/markup.cpp:
        (WebCore::replaceChildrenWithText):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::createParser):
        * html/FTPDirectoryDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::createSynthesizedDocument):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createParser):
        * html/ImageDocument.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::createParser):
        * html/MediaDocument.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::createParser):
        * html/PluginDocument.h:
        * html/TextDocument.cpp:
        (WebCore::TextDocument::createParser):
        * html/TextDocument.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::create):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::createParser):
        * loader/SinkDocument.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::cloneDocumentWithoutChildren):
        * svg/SVGDocument.h:
        * xml/parser/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::create):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Use MachSendRight in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139800

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * platform/cocoa/MachSendRight.h:
        (WebCore::MachSendRight::MachSendRight):
        (WebCore::MachSendRight::sendRight):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createFromSendRight):
        (IOSurface::createFromMachPort): Deleted.

2014-12-18  Gavin Barraclough  <barraclough@apple.com>

        Add strong typing to RefCounter interface, return value as a bool.
        https://bugs.webkit.org/show_bug.cgi?id=139776

        Reviewed by Geoff Garen.

        Currently all token vended by a RefCounter have the same type - Ref<RefCounter::Count>.
        This means there is no compile time type checking to prevent mistakes. Update the count()
        method to token<>(), templated on type used to identify the token being returned.
        Calls to token<T>() will return a result of type RefCounter::Token<T>.

        There are a few problems with the fact the counter will return you an exact count of the
        number of outstanding tokens:
          - It is desirable to only fire the callback on zero-edge changes; it is more consistent
            to do so if the value is only readable as a boolean.
          - It is desirable to provide the value as an argument to the callback, however to make
            this useful for integer values it is also necessary to indicate the direction of change
            (0->1 is often interesting where 2->1 is not).
          - There is a mismatch between the precision of returning a count, and the inherent
            imprecision of a token based mechanism, where it may be difficult to guarantee
            absolutely no unnecessary refcount churn, and thus unintentional counter values.

        * page/PageThrottler.cpp:
        (WebCore::m_mediaActivityCounter):
        (WebCore::m_pageLoadActivityCounter):
            - lambdas now passed the value.
        (WebCore::PageThrottler::mediaActivityToken):
        (WebCore::PageThrottler::pageLoadActivityToken):
            - count() -> token<>().
        * page/PageThrottler.h:
            - specify tpoken type for PageActivityAssertionToken.

2014-12-18  Benjamin Poulain  <bpoulain@apple.com>

        HTMLFormControlElement and HTMLObjectElement need not to look for an ancestor on construction
        https://bugs.webkit.org/show_bug.cgi?id=139791

        Reviewed by Alexey Proskuryakov.

        The objects are being constructed, they have not been inserted into the tree yet.
        There is not chance of finding the owner form at this point,
        that is done when inserting the node into the tree.

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

2014-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Recursive crash at WebCore::accessibleNameForNode
        https://bugs.webkit.org/show_bug.cgi?id=139616

        Reviewed by Mario Sanchez Prada.

        An image that uses aria-labelledby to reference its own parent can lead to a recursion crash.
        There needs to be some information we can pass through these methods to ensure we don't hit this case.

        Test: accessibility/accessibility-description-crash.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::accessibilityDescriptionForElements):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityTextUnderElementMode::AccessibilityTextUnderElementMode):

2014-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Heuristic: Avoid exposing an element as clickable if mouse event delegation is handled on an element with any explicit ARIA role, including presentation.
        https://bugs.webkit.org/show_bug.cgi?id=133613

        Reviewed by Mario Sanchez Prada.

        This adds a heuristic to avoid a problem we have where too many objects that say they respond to press actions for accessibility.
        It results from people installing click handlers on container nodes and then lots of static text objects are "clickable" in the eyes of VoiceOver.

        What we can do is avoid this determination if the element is presentational.

        Test: platform/mac/accessibility/press-action-for-presentational-descendants.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::nodeHasPresentationRole):
        (WebCore::AccessibilityObject::supportsPressAction):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityActionNames]):

2014-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: event.target should sometimes be a descendant element on AXPress-triggered mouse clicks
        https://bugs.webkit.org/show_bug.cgi?id=135689

        Reviewed by Mario Sanchez Prada.

        When trying to find the right sub-node to target, we need to go back up the parent chain to find 
        an Element, in case we land on a Text node for example.

        Test: accessibility/press-target-uses-text-descendant-node.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):

2014-12-16  Sam Weinig  <sam@webkit.org>

        Unify the Mac and iOS implementations of FontPlatformData a bit
        https://bugs.webkit.org/show_bug.cgi?id=139721

        Reviewed by Anders Carlsson.

        This is a first pass of unifying the Mac and iOS implementations of FontPlatformData.
        Notable changes:
        - Change the storage of the platform font to be CTFontRef across the board. Adds NSFont
          setter/getter/constructor as a temporary measures during the transition away from NSFont.
        - Removes duplicate code that only differed by whether the type was NSFont or CTFontRef.
        - Reduces the number of #ifdefs.

        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::openTypeTable): Deleted.
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::nsFont):
        (WebCore::FontPlatformData::setNSFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::toCTFontRef): Deleted.
        (WebCore::FontPlatformData::font): Deleted.
        (WebCore::FontPlatformData::roundsGlyphAdvances): Deleted.
        (WebCore::FontPlatformData::cgFont): Deleted.
        (WebCore::FontPlatformData::hashTableDeletedFontValue): Deleted.
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::FontPlatformData::openTypeTable):
        (WebCore::FontPlatformData::loadFont): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::renderingStyle):
        (WebCore::SimpleFontData::advanceForColorBitmapFont):

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * platform/cocoa/MachSendRight.cpp:

2014-12-18  Timothy Horton  <timothy_horton@apple.com>

        Change page preview loading order, and add a TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=139793
        <rdar://problem/19288547>

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * platform/spi/mac/NSPopoverSPI.h:
        Add an export and some SPI.

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Clean up MachSendRight and add a copySendRight member function
        https://bugs.webkit.org/show_bug.cgi?id=139788

        Reviewed by Tim Horton.

        * platform/cocoa/MachSendRight.cpp:
        (WebCore::retainSendRight):
        (WebCore::releaseSendRight):
        Use mach_error_string.

        (WebCore::MachSendRight::copySendRight):
        Create a new send right with the given mach port.

        (WebCore::MachSendRight::leakSendRight):
        Use std::exchange.

        * platform/cocoa/MachSendRight.h:

2014-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ASSERT seen closing/opening multiple inspectors
        https://bugs.webkit.org/show_bug.cgi?id=139783

        Reviewed by Timothy Hatcher.

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

2014-12-18  Anders Carlsson  <andersca@apple.com>

        Add a MachSendRight class to WebCore and use it in IOSurface
        https://bugs.webkit.org/show_bug.cgi?id=139787

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/MachSendRight.cpp: Added.
        (WebCore::retainSendRight):
        (WebCore::releaseSendRight):
        (WebCore::MachSendRight::adopt):
        (WebCore::MachSendRight::create):
        (WebCore::MachSendRight::MachSendRight):
        (WebCore::MachSendRight::~MachSendRight):
        (WebCore::MachSendRight::operator=):
        (WebCore::MachSendRight::leakSendRight):
        * platform/cocoa/MachSendRight.h: Added.
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (IOSurface::createSendRight):
        (IOSurface::createMachPort): Deleted.

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify DOMSettableTokenList.
        <https://webkit.org/b/139785>

        Reviewed by Chris Dumez.

        Make DOMSettableTokenList::create() return a Ref, and have its two client
        elements store it in a Ref instead of a RefPtr (and fix their getter API
        to return references.)

        * html/DOMSettableTokenList.cpp:
        (WebCore::DOMSettableTokenList::create): Deleted.
        * html/DOMSettableTokenList.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::sizes): Deleted.
        * html/HTMLLinkElement.h:
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::htmlFor): Deleted.
        * html/HTMLOutputElement.h:

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify ClientRectList.
        <https://webkit.org/b/139780>

        Reviewed by Anders Carlsson.

        Make the ClientRectList::create() helpers return Ref, along with a bunch
        of other functions that always return non-null ClientRectLists.

        Also make ClientRectList store a Vector<Ref<ClientRect>> internally since
        entries in the Vector are never null.

        * dom/ClientRectList.cpp:
        (WebCore::ClientRectList::item):
        * dom/ClientRectList.h:
        (WebCore::ClientRectList::create):
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        * dom/Element.h:
        * dom/Range.cpp:
        (WebCore::Range::getClientRects):
        * dom/Range.h:
        * page/Page.cpp:
        (WebCore::Page::nonFastScrollableRects):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::nonFastScrollableRects):
        * testing/Internals.h:

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify ClientRect.
        <https://webkit.org/b/139777>

        Reviewed by Anders Carlsson.

        Make the ClientRect::create() helpers return Ref, along with a bunch
        of other functions that always return non-null ClientRects.

        * dom/ClientRect.h:
        (WebCore::ClientRect::create):
        * dom/Element.cpp:
        (WebCore::Element::getBoundingClientRect):
        * dom/Element.h:
        * dom/Range.cpp:
        (WebCore::Range::getBoundingClientRect):
        * dom/Range.h:
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::displayLastTextTrackCueBox):
        * testing/Internals.cpp:
        (WebCore::Internals::absoluteCaretBounds):
        (WebCore::Internals::boundingBox):
        (WebCore::Internals::selectionBounds):
        * testing/Internals.h:

2014-12-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Log navigation types using FeatureCounter API
        https://bugs.webkit.org/show_bug.cgi?id=139753

        Reviewed by Darin Adler.

        Log navigation types using FeatureCounter API.

        No new tests, no behavior change other than additional feature
        counting.

        * loader/FrameLoader.cpp:
        (WebCore::logNavigationWithFeatureCounter):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * platform/FeatureCounterKeys.h:

2014-12-18  Chris Dumez  <cdumez@apple.com>

        Move 'font-weight' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139765

        Reviewed by Antti Koivisto.

        Move 'font-weight' CSS property to the new StyleBuilder by using
        custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyFontWeight::applyValue): Deleted.
        (WebCore::ApplyPropertyFontWeight::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialFontWeight):
        (WebCore::StyleBuilderCustom::applyInheritFontWeight):
        (WebCore::StyleBuilderCustom::applyValueFontWeight):

2014-12-18  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Internals methods return 0 instead of false when they fail
        https://bugs.webkit.org/show_bug.cgi?id=139766

        Reviewed by Darin Adler.

        Some Internals method explicitly return 0 although
        they expect boolean value.

        No new tests, no behavior change.

        * testing/Internals.cpp:
        (WebCore::Internals::hasSpellingMarker):
        (WebCore::Internals::hasAutocorrectedMarker):
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore::Internals::hasGrammarMarker):
        Return false instead of 0.

2014-12-18  Chris Dumez  <cdumez@apple.com>

        [iOS] Log why cached resources are being revalidated using FeatureCounter API
        https://bugs.webkit.org/show_bug.cgi?id=139759
        <rdar://problem/19288177>

        Reviewed by Antti Koivisto.

        Log why cached resources are being revalidated using FeatureCounter API.
        Also log if revalidation is successful or not.

        No new tests, no behavior change.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::mustRevalidateDueToCacheHeaders):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::failBeforeStarting):
        (WebCore::CachedResource::mustRevalidateDueToCacheHeaders):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::loader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        * platform/FeatureCounterKeys.h:

2014-12-18  Antti Koivisto  <antti@apple.com>

        Remove alwaysUseBaselineOfPrimaryFont setting
        https://bugs.webkit.org/show_bug.cgi?id=139770

        Reviewed by Anders Carlsson.

        "FIXME: This is unneeded and should be removed."

        This iOS-only setting has no clients anymore.

        * page/Settings.in:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):

2014-12-18  Radu Stavila  <stavila@adobe.com>

        [SVG Masking] Enable the use of <mask> elements for -webkit-mask-image
        https://bugs.webkit.org/show_bug.cgi?id=139294

        Reviewed by Simon Fraser.

        This patch links together all parts required for the functionality which improves 
        the -webkit-mask-image property by allowing it to reference a <mask> element defined 
        in an inline or external SVG document.
        Support for this new functionality has been added in a previous patch, under issue
        https://bugs.webkit.org/show_bug.cgi?id=139092. A more detailed description of how
        the new functionality works can be found in the ChangeLog for that commit.
        The containsSVGDocument in ScrollView has been removed because it was added in the
        previous patch but is no longer required.

        Tests: css3/masking/mask-base64.html
               css3/masking/mask-multiple-values.html
               css3/masking/mask-svg-clipped-fragmentId.html
               css3/masking/mask-svg-fragmentId.html
               css3/masking/mask-svg-inline-fragmentId.html
               css3/masking/mask-svg-inline-invalid-fragmentId.html
               css3/masking/mask-svg-invalid-fragmentId.html
               css3/masking/mask-svg-no-fragmentId-tiled.html
               css3/masking/mask-svg-no-fragmentId.html
               css3/masking/mask-svg-script-entire-svg-to-mask.html
               css3/masking/mask-svg-script-mask-to-entire-svg.html
               css3/masking/mask-svg-script-mask-to-none.html
               css3/masking/mask-svg-script-mask-to-png.html
               css3/masking/mask-svg-script-none-to-mask.html
               css3/masking/mask-svg-script-none-to-png.html
               css3/masking/mask-svg-script-png-to-mask.html
               css3/masking/mask-svg-script-png-to-none.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseMaskImage):
        * css/CSSParser.h:
        * css/CSSValue.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustStyleForMaskImages):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createMaskImageOperations):
        (WebCore::StyleResolver::loadPendingImages):
        * css/StyleResolver.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::containsSVGDocument): Deleted.
        * page/FrameView.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper):
        (WebCore::MaskImagePropertyWrapper::equals):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/ScrollView.h:
        (WebCore::ScrollView::containsSVGDocument): Deleted.
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::~MaskImageOperation):
        (WebCore::MaskImageOperation::operator==):
        * platform/graphics/MaskImageOperation.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::maskClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::updateFillImages):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerMaskImageInfo.cpp:
        (WebCore::RenderLayer::MaskImageInfo::~MaskImageInfo):
        (WebCore::RenderLayer::MaskImageInfo::updateMaskImageClients):
        (WebCore::RenderLayer::MaskImageInfo::removeMaskImageClients):
        * rendering/RenderLayerMaskImageInfo.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::hasImage):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::image):
        (WebCore::FillLayer::imageOrMaskImage): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setMaskImage):
        * rendering/style/RenderStyle.h:

2014-12-18  Antti Koivisto  <antti@apple.com>

        Stop returning GlyphPage from various Font functions
        https://bugs.webkit.org/show_bug.cgi?id=139627

        Reviewed by Darin Adler.

        Make all

            std::pair<GlyphData, GlyphPage*> glyphDataAndPage*(...)

        style functions to just return GlyphData only. The GlyphPage value was only used for an obscure SVG fallback case.

        * platform/graphics/Font.h:
        (WebCore::Font::glyphDataForCharacter):
        (WebCore::Font::glyphDataAndPageForCharacter): Deleted.
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::glyphDataForCJKCharacterWithoutSyntheticItalic):
        (WebCore::glyphDataForNonCJKCharacterWithGlyphOrientation):
        (WebCore::FontGlyphs::glyphDataForSystemFallback):
        (WebCore::FontGlyphs::glyphDataForVariant):
        (WebCore::FontGlyphs::glyphDataForCharacter):
        (WebCore::glyphDataAndPageForCJKCharacterWithoutSyntheticItalic): Deleted.
        (WebCore::glyphDataAndPageForNonCJKCharacterWithGlyphOrientation): Deleted.
        (WebCore::FontGlyphs::glyphDataAndPageForSystemFallback): Deleted.
        (WebCore::FontGlyphs::glyphDataAndPageForVariant): Deleted.
        (WebCore::FontGlyphs::glyphDataAndPageForCharacter): Deleted.
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::GlyphPagesStateSaver::GlyphPagesStateSaver): Deleted.
        (WebCore::FontGlyphs::GlyphPagesStateSaver::~GlyphPagesStateSaver): Deleted.

            No longer needed.

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):

            Simplify by not trying to resolve fallbacks in case context sensitive (based on lang attribute etc)
            glyph selection fails. Instead just fall back to a default font. This behavior is not specified
            anywhere as far as I can see. (normal non-context sensitive fallbacks will still work fine).
            This removes the need to hackishly mutate glyph pages.

            Also fix a bug where we didn't use the specified missing glyph when context sensitive selection failed.

2014-12-18  Chris Dumez  <cdumez@apple.com>

        Move 'list-style-image' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139763

        Reviewed by Antti Koivisto.

        Move 'list-style-image' CSS property to the new StyleBuilder
        by reusing an existing Converter helper and renaming it for
        clarity.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyStyleImage::applyValue): Deleted.
        (WebCore::ApplyPropertyStyleImage::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertStyleImage):
        (WebCore::StyleBuilderConverter::convertBorderImageSource): Deleted.

2014-12-17  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r177452.
        https://bugs.webkit.org/show_bug.cgi?id=139752

        * CMakeLists.txt:

2014-12-17  Andreas Kling  <akling@apple.com>

        Ref-ify Range::create().
        <https://webkit.org/b/139755>

        Reviewed by Anders Carlsson.

        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus):
        * dom/Element.cpp:
        (WebCore::Element::innerText):
        * dom/Range.cpp:
        (WebCore::Range::create):
        (WebCore::Range::cloneRange):
        (WebCore::rangeOfContents):
        * dom/Range.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/VisibleUnits.cpp:
        (WebCore::charactersAroundPosition):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedText):
        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus):

2014-12-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19282508> WebKitLegacy is unusable due to bad dylib identifier
        https://bugs.webkit.org/show_bug.cgi?id=139760

        Reviewed by Anders Carlsson.

        * Configurations/WebCore.xcconfig:

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Get rid of FrameLoader::defaultObjectContentType
        https://bugs.webkit.org/show_bug.cgi?id=139758

        Reviewed by Geoffrey Garen.

        Move the FrameLoader::defaultObjectContentType implementation to its only caller in WebKit/win.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType): Deleted.
        * loader/FrameLoader.h:

2014-12-17  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile error, setWasCached method has been removed.
        https://bugs.webkit.org/show_bug.cgi?id=139737

        Reviewed by Alex Christensen.

        The ResourceResponseBase::setWasCached() method has been replaced
        with ResourceResponseBase::setSource().

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):

2014-12-17  Chris Dumez  <cdumez@apple.com>

        [iOS] Make it possible to toggle FeatureCounter support at runtime
        https://bugs.webkit.org/show_bug.cgi?id=139688
        <rdar://problem/19266254>

        Reviewed by Andreas Kling.

        Make it possible to toggle FeatureCounter support at runtime by adding
        a setting (disabled by default) and moving the API to a new
        FeatureCounter class under WebCore/plattorm which only logs if the
        setting is enabled. For privacy reasons, FeatureCounter logging is also
        disabled for private / ephemeral sessions.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * Configurations/WebCore.xcconfig:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        * page/Settings.in:
        * platform/FeatureCounter.cpp: Renamed from Source/WTF/wtf/FeatureCounter.cpp.
        (WebCore::FeatureCounter::shouldUseForPage):
        (WebCore::FeatureCounter::incrementKey):
        (WebCore::FeatureCounter::setKey):
        * platform/FeatureCounter.h: Renamed from Source/WTF/wtf/FeatureCounter.h.
        * platform/FeatureCounterKeys.h:
        * platform/ios/FeatureCounter.mm: Renamed from Source/WTF/wtf/ios/FeatureCounter.mm.
        (WebCore::FeatureCounter::incrementKey):
        (WebCore::FeatureCounter::setKey):

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Get rid of PluginPackageNone.cpp
        https://bugs.webkit.org/show_bug.cgi?id=139735

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * plugins/PluginPackageNone.cpp: Removed.

2014-12-17  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from Frame.
        <https://webkit.org/b/139731>

        Reviewed by Anders Carlsson.

        Remove all use of PassRefPtr from the Frame class, instead using
        Ref or RefPtr as appropriate.

        * WebCore.exp.in:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * page/Frame.cpp:
        (WebCore::Frame::create):
        (WebCore::Frame::setView):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::rangeForPoint):
        (WebCore::Frame::createView):
        * page/Frame.h:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2014-12-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Test fix after r177444.

        Unreviewed.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect):

2014-12-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing more post-review comments in r177035

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):

2014-12-17  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Sprinkle range-based for-loops where still possible
        https://bugs.webkit.org/show_bug.cgi?id=138752

        Reviewed by Chris Dumez.

        Apply range-based for-loops where possible in the TextureMapper,
        TextureMapperGL and TextureMapperTiledBackingStore classes.

        Also prettify the loop in SharedGLData destructor and return
        nullptr instead of explicitly constructing the empty PassRefPtr
        object in TextureMapperTiledBackingStore::texture().

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexturePool::acquireTexture):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::~SharedGLData):
        (WebCore::TextureMapperGLData::~TextureMapperGLData):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper):
        (WebCore::TextureMapperTiledBackingStore::drawBorder):
        (WebCore::TextureMapperTiledBackingStore::drawRepaintCounter):
        (WebCore::TextureMapperTiledBackingStore::createOrDestroyTilesIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        (WebCore::TextureMapperTiledBackingStore::texture):

2014-12-17  Radu Stavila  <stavila@adobe.com>

        The SVGDocument of an SVGImage should not perform any additional actions when the SVGImage is being destroyed
        https://bugs.webkit.org/show_bug.cgi?id=139644

        Reviewed by Antti Koivisto.

        When an SVGImage is destroyed, having its SVGDocument perform style recalc and dispatching events is not only
        useless but can also cause problems, such as re-entrancy in StyleResolver::loadPendingResources.

        No new tests required, existing tests cover this change.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::isBeingDestroyed):
        (WebCore::Document::setIsBeingDestroyed):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeURL):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage):

2014-12-17  Chris Dumez  <cdumez@apple.com>

        Drop useless 'clipToContents' argument for windowClipRect()
        https://bugs.webkit.org/show_bug.cgi?id=139722

        Reviewed by Darin Adler.

        Drop useless 'clipToContents' argument for windowClipRect(). This
        argument is never used.

        No new tests, no behavior change.

        * page/FrameView.cpp:
        (WebCore::FrameView::windowClipRect):
        * page/FrameView.h:
        * platform/ScrollView.h:

2014-12-16  Shivakumar JM  <shiva.jm@samsung.com>

        text node should not be created, On setting document.title to the empty string.
        https://bugs.webkit.org/show_bug.cgi?id=139121

        Reviewed by Darin Adler.

        Do not create text node, On setting document.title to the empty string as in spec.
        I have confirmed this matches the behavior of Firefox and Chrome.

        Test: fast/dom/Document/document-set-title-no-child.html

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::setText):

2014-12-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/platform/graphics/surfaces to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=139641

        Reviewed by Andreas Kling.

        Replace OwnPtr|PassOwnPtr with std::make_unique<>|std::unique_ptr<>.

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::sharingContext):
        (WebCore::GLContext::createContextForWindow):
        (WebCore::GLContext::createOffscreenContext):
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createPbufferContext):
        (WebCore::GLContextEGL::createPixmapContext):
        (WebCore::GLContextEGL::createContext):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::createWindowContext):
        (WebCore::GLContextGLX::createPbufferContext):
        (WebCore::GLContextGLX::createPixmapContext):
        (WebCore::GLContextGLX::createContext):
        * platform/graphics/glx/GLContextGLX.h:
        * platform/graphics/surfaces/GLTransportSurface.cpp:
        (WebCore::GLTransportSurface::createTransportSurface):
        (WebCore::GLTransportSurfaceClient::createTransportSurfaceClient):
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/GraphicsSurface.h:
        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        * platform/graphics/surfaces/efl/GraphicsSurfaceCommon.cpp:
        * platform/graphics/surfaces/egl/EGLSurface.cpp:
        (WebCore::EGLTransportSurface::createTransportSurface):
        (WebCore::EGLTransportSurface::createTransportSurfaceClient):
        (WebCore::EGLTransportSurface::EGLTransportSurface):
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/egl/EGLXSurface.cpp:
        (WebCore::EGLXTransportSurfaceClient::EGLXTransportSurfaceClient):
        * platform/graphics/surfaces/egl/EGLXSurface.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        (WebCore::GLXTransportSurface::GLXTransportSurface):
        (WebCore::GLXOffScreenSurface::initialize):
        * platform/graphics/surfaces/glx/GLXSurface.h:

2014-12-16  Timothy Horton  <timothy_horton@apple.com>

        Implement and adopt two new TextIndicator presentation animations
        https://bugs.webkit.org/show_bug.cgi?id=139715
        <rdar://problem/19237945>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Adjust one symbol and export another.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        Take a blue-highlight snapshot if we're doing a crossfade without a bounce.

        * page/TextIndicator.h:
        (WebCore::TextIndicator::presentationTransition):
        Add FadeIn and Crossfade transition types.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        (createBounceAnimation):
        (createContentCrossfadeAnimation):
        (createShadowFadeAnimation):
        (createFadeInAnimation):
        (-[WebTextIndicatorView _textIndicatorWantsBounce]):
        (-[WebTextIndicatorView _textIndicatorWantsContentCrossfade]):
        (-[WebTextIndicatorView _textIndicatorWantsFadeIn]):
        Factor out the animation construction.

        (-[WebTextIndicatorView _animationDuration]):
        Factor out the duration computation.

        (-[WebTextIndicatorView present]):
        (-[WebTextIndicatorView setAnimationProgress:]):
        Implement FadeIn and Crossfade transitions.
        They can be driven externally and then continue from where they
        left off when the progress reaches 100%.
        FadeIn changes the opacity of the whole bubble, Crossfade
        crossfades the content (from blue to yellow).

        (WebCore::TextIndicatorWindow::TextIndicatorWindow):
        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
        Don't immediately destroy the window if it is crossfades or fades in.
        Fade it out, instead.

        (WebCore::TextIndicatorWindow::setAnimationProgress):
        Drive the paused animation manually. If progress hits 100%,
        start running it automatically from where it last left off.

        (WebCore::TextIndicatorWindow::setTextIndicator):
        (WebCore::TextIndicatorWindow::startFadeOut):
        (-[WebTextIndicatorView presentWithCompletionHandler:]): Deleted.
        (WebCore::TextIndicatorWindow::startFadeOutTimerFired): Deleted.
        Remove the completion block from -present.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:
        Add some SPI.

2014-12-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/platform/image-decoders to std::unique_ptr<>
        https://bugs.webkit.org/show_bug.cgi?id=139668

        Reviewed by Andreas Kling.

        As a step to use std::unique_ptr<>, this patch replaces OwnPtr|PassOwnPtr with
        std::unique_ptr<> | std::make_unique<>.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::setFailed):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::decodeHelper):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setFailed):
        (WebCore::GIFImageDecoder::gifComplete):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFFrameContext::decode):
        (GIFImageReader::addFrameIfNecessary):
        * platform/image-decoders/gif/GIFImageReader.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::setFailed):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::setFailed):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:

2014-12-16  Andreas Kling  <akling@apple.com>

        Use Ref for SecurityOrigin.
        <https://webkit.org/b/139710>

        Reviewed by Anders Carlsson.

        Make SecurityOrigin::create*() return Ref<SecurityOrigin>.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::origin):
        * loader/DocumentLoadTiming.cpp:
        (WebCore::DocumentLoadTiming::addRedirect):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendPing):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::isApplicationCacheBlockedForRequest):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::stripURLForUseInReport):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
        * page/SecurityOrigin.cpp:
        (WebCore::getCachedOrigin):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::createUnique):
        (WebCore::SecurityOrigin::isolatedCopy):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::createFromString):
        (WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        * page/SecurityOrigin.h:
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::isAccessToURLWhiteListed):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin):
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::deleteOriginWithIdentifier):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):

2014-12-16  Chris Dumez  <cdumez@apple.com>

        Move 'cursor' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139660

        Reviewed by Benjamin Poulain.

        Move 'cursor' CSS property to the new StyleBuilder by using
        custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyCursor::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyCursor::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyCursor::applyValue): Deleted.
        (WebCore::ApplyPropertyCursor::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCursor):
        (WebCore::StyleBuilderCustom::applyInheritCursor):
        (WebCore::StyleBuilderCustom::applyValueCursor):

2014-12-16  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Animating HTML elements leaves trails when embedded to a subpxiel positioned iframe.
        https://bugs.webkit.org/show_bug.cgi?id=139691
        rdar://problem/19078958

        Reviewed by Simon Fraser.

        This patch ensures that repaint rect and actual paint coordinate calculations are in sync.

        RenderWidget painting still snaps final coordinates to integral positions. We need to
        mimic the same snapping behaviour when the repaint rects are being calculated so that
        they are in sync with the final repaint rects. This is a workaround until after
        widgets get pushed to device pixel positions.

        Test: fast/repaint/hidpi-content-inside-iframe-leaves-trails.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):

2014-12-16  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Preview popovers obscure the link, look wrong
        https://bugs.webkit.org/show_bug.cgi?id=139711
        -and corresponding-
        rdar://problem/19271854

        Reviewed by Tim Horton.

        New SPI.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSPopoverSPI.h: Added.

2014-12-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Cherokee language is drawn as boxes
        https://bugs.webkit.org/show_bug.cgi?id=139706

        Reviewed by Simon Fraser.

        Test: platform/ios-simulator/fast/text/cherokee.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::languageSpecificFallbackFont):

2014-12-16  Enrica Casucci  <enrica@apple.com>

        Fix iOS builders for 8.0
        https://bugs.webkit.org/show_bug.cgi?id=139495

        Reviewed by Jer Noble

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:mode:]):
        (-[WebVideoFullscreenController requestHideAndExitFullscreen]):
        (-[WebVideoFullscreenController enterFullscreen:]): Deleted.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:

2014-12-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Ruby overhang uses ints instead of floats
        https://bugs.webkit.org/show_bug.cgi?id=139624

        Reviewed by Dave Hyatt.

        Simply change the type.

        Updated existing tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::setMarginsForRubyRun):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderRubyRun.h:
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::applyOverhang):

2014-12-16  Gavin Barraclough  <barraclough@apple.com>

        Move Mac process suppression from WebCore to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139705

        Reviewed by Geoff Garen.

        Currently PageThrottler constructs the PageActivityState, holds a copy of the ViewState,
        and an optional UserActivity.

        Instead, still construct the PageActivityState but just pass this out via the Page to WebPage.
        Logic From PageThrottler::updateUserActivity merged into WebPage::updateUserActivity.

        * WebCore.exp.in:
            - removed createUserActivity.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::setPageActivityState):
            - added to propagate PageActivityState to WebPage.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - PageThrottler constructor now takes a Page&.
        (WebCore::Page::setViewState):
            - no longer necessary to pass this to PageThrottler.
        (WebCore::Page::setPageActivityState):
            - added to propagate PageActivityState to WebPage.
        (WebCore::Page::enablePageThrottler): Deleted.
            - PageThrottler no longer has a UserActivity.
        * page/Page.h:
        (WebCore::Page::pageThrottler):
            - added setPageActivityState, removed enablePageThrottler.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - removed m_viewState, added m_page.
        (WebCore::PageThrottler::setActivityFlag):
            - propagate PageActivityState via Page to WebPage.
        (WebCore::PageThrottler::createUserActivity): Deleted.
        (WebCore::PageThrottler::updateUserActivity): Deleted.
        (WebCore::PageThrottler::setViewState): Deleted.
            - removed; PageThrottler no longer has a PageThrottler or UserActivity.
        * page/PageThrottler.h:
            - removed createUserActivity, setViewState, m_viewState, m_activity; added m_page.

2014-12-16  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r177375; explicitly cast to NSUInteger.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions):
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions):

2014-12-16  peavo@outlook.com  <peavo@outlook.com>

        [Win] Compiling WebCore fails because of invalid project file.
        https://bugs.webkit.org/show_bug.cgi?id=139686

        Reviewed by Alex Christensen.

        A WebCore project file contains illegal characters.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2014-12-16  Gavin Barraclough  <barraclough@apple.com>

        Introduce PageActivityState
        https://bugs.webkit.org/show_bug.cgi?id=139687

        Reviewed by Anders Carlsson.

        Add a bitfield to track each of the activities on the page separately.
        Split the hysteresis & counters so we can track these separately.

        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - initialze new hysteresis, counters; closures call setActivityFlag.
        (WebCore::PageThrottler::mediaActivityToken):
        (WebCore::PageThrottler::pageLoadActivityToken):
            - split m_pageActivityCounter -> m_mediaActivityCounter, m_pageLoadActivityCounter.
        (WebCore::PageThrottler::updateUserActivity):
            - use m_activityState to check for activity.
        (WebCore::PageThrottler::setActivityFlag):
            - helper to clear/set a bit in m_activityState, and call updateUserActivity as necessary.
        * page/PageThrottler.h:
        (WebCore::PageThrottler::didReceiveUserInput):
        (WebCore::PageThrottler::pluginDidEvaluateWhileAudioIsPlaying):
            - split m_hysteresis -> m_userInputHysteresis, m_audiblePluginHysteresis

2014-12-16  Myles C. Maxfield  <litherum@gmail.com>

        Ruby does not preserve expansion opportunities from enclosing context
        https://bugs.webkit.org/show_bug.cgi?id=139618

        Reviewed by David Hyatt.

        There is currently no sharing of expansion opportunity information between
        ruby bases and the text surrounding the ruby. This patch adds a bit on
        RenderText, m_contentIsKnownToFollow, which affects how expansion
        opportunities are handled at paint-time, as well as a bit on RenderRubyBase,
        m_isAfterExpansion, which affects how expansions are calculated when laying
        out a line. This patch also adds a field to RenderRubyBase which represents
        the base's starting position within a ruby. This field is necessary because
        an expansion from a line might occur at the very beginning of a ruby base,
        so we have to remember some state from expansion time to RenderRubyBase
        layout time.

        Added more tests to fast/ruby/ruby-justification.html.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::setExpansionWithoutGrowing):
        (WebCore::InlineBox::expansion):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::removeChild): Keep the bit on InlineTextBox up to
        date.
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection): Set expansion
        information in InlineFlowBoxes so the total expansion for a whole line
        is held in the RootInlineBox's expansion.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText):
        updateRubyForJustifiedText() had a bunch of problems with it. First of all,
        it didn't actually set the InlineBoxes as dirty, so the second layout pass
        sometimes wouldn't perform any updates. Secondarily, it didn't take
        overhangs into account. Thirdly, it didn't mark the ruby base and text as
        needing layout so that subsequent layouts would actually traverse into them.
        (WebCore::RenderBlockFlow::computeExpansionForJustifiedText):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        This nested if triangle is super nasty, but I'm not sure of a better way to
        write it.
        (WebCore::updateRubyForJustifiedText): Deleted.
        (WebCore::computeExpansionForJustifiedText): Deleted.
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        (WebCore::RenderRubyBase::adjustInlineDirectionLineBounds):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        * rendering/RenderText.h:
        (WebCore::RenderText::contentIsKnownToFollow):
        (WebCore::RenderText::setContentIsKnownToFollow):

2014-12-16  Jer Noble  <jer.noble@apple.com>

        [iOS] Crash in WebKit::WebPageProxy::dispatchViewStateChange() tapping a link from another app while playing a video
        https://bugs.webkit.org/show_bug.cgi?id=139550

        Reviewed by Anders Carlsson.

        The existing "dispatch to WebThread, then release" model is insufficient and still
        can result in RefPtr race conditions between the main thread and the web thread.
        Make WebVideoFullscreenInterfaceAVKit a thread-safe ref-counted class, which
        eliminates the necessity of disptaching back to the web thread before releasing.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setDuration): Use a strongThis model.
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setRate): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setSeekableRanges): Ditto.
        (mediaSelectionOptions): Return a RetainPtr object.
        (WebVideoFullscreenInterfaceAVKit::setAudioMediaSelectionOptions): Use a strongThis model.
        (WebVideoFullscreenInterfaceAVKit::setLegibleMediaSelectionOptions): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setExternalPlayback): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): Ditto.
        (WebVideoFullscreenInterfaceAVKit::setupFullscreenInternal): Added utility
            function. Lets us use the implied this pointer rather than an explicit
            strongThis.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized): Ditto.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard): Ditto.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreenInternal): Ditto.
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): Use a strongThis model.

2014-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Nested template contents are not cloned by document.importNode
        https://bugs.webkit.org/show_bug.cgi?id=137619

        Reviewed by Andreas Kling.

        The bug was caused by Document.importNode not cloning HTMLTemplateElement's content.

        Fixed the bug by sharing code between Document::importNode and Node::cloneNode by
        generalizing Node::cloneNodeInternal, added in r177314, by taking the owner document
        as an argument. The most of code changes are the result of adding this argument.

        Document::importNode is the only function in which the actual logic changes.
        Note that the code to import TEXT_NODE, CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE,
        PROCESSING_INSTRUCTION_NODE and COMMENT_NODE nodes are identical to that of cloneNode.

        This patch removes the call to hasValidNamespaceForElements in ELEMENT_NODE but this
        should not introduce an observable behavior change since all instantiated elements
        should have a valid namespace in the first place.

        Because DOCUMENT_NODE and DOCUMENT_TYPE_NODE cannot be imported and DOCUMENT_TYPE_NODE
        can only appear as a direct child of DOCUMENT_NODE, neither nodes nor unimplemented
        XPATH_NAMESPACE_NODE and XPATH_NAMESPACE_NODE can appear inside the recursive calls
        for ELEMENT_NODE and DOCUMENT_FRAGMENT_NODE nodes.

        While importNode behaves differently from cloneNode for ATTRIBUTE_NODE, namely that
        it merges all of its child nodes, this behavior isn't present when recursing inside
        ELEMENT_NODE and DOCUMENT_FRAGMENT_NODE since we are using cloneDataFromElement.

        Thus there should be no observable behavior changes for DOCUMENT_FRAGMENT_NODE and
        ELEMENT_NODE nodes either.

        Test: fast/dom/HTMLTemplateElement/importNode-nested-templates.html

        * dom/Attr.cpp:
        (WebCore::Attr::cloneNodeInternal):
        * dom/Attr.h:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::cloneNodeInternal):
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        (WebCore::Comment::cloneNodeInternal):
        * dom/Comment.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::cloneNodeInternal):
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::cloneNodeInternal):
        * dom/DocumentFragment.h:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::cloneNodeInternal):
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::cloneNodeInternal):
        (WebCore::Element::cloneElementWithChildren):
        (WebCore::Element::cloneElementWithoutChildren):
        (WebCore::Element::cloneElementWithoutAttributesAndChildren):
        * dom/Element.h:
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::cloneNodeInternal):
        * dom/EntityReference.h:
        * dom/Node.h:
        (WebCore::Node::cloneNode):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::cloneNodeInternal):
        * dom/ProcessingInstruction.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::cloneNodeInternal):
        * dom/ShadowRoot.h:
        * dom/Text.cpp:
        (WebCore::Text::cloneNodeInternal):
        * dom/Text.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::doApply):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::doApply):
        * editing/markup.cpp:
        (WebCore::createFragmentFromText):
        * html/HTMLKeygenElement.cpp:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren):
        * html/HTMLScriptElement.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::cloneNodeInternal):
        * html/HTMLTemplateElement.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::cloneElementWithoutAttributesAndChildren):
        * html/shadow/SliderThumbElement.h:
        * html/track/WebVTTElement.cpp:
        (WebCore::WebVTTElement::cloneElementWithoutAttributesAndChildren):
        * html/track/WebVTTElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren):
        * svg/SVGScriptElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):

2014-12-16  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Document.contentType implementation
        https://bugs.webkit.org/show_bug.cgi?id=132269

        Reviewed by Darin Adler.

        Chromium merge from https://codereview.chromium.org/151653004

        Tests: fast/dom/document-contentType-DOMParser.html
               fast/dom/document-contentType-createDocument.html
               fast/dom/document-contentType-data-uri.html
               fast/xsl/xslt-contentType.html
               http/tests/dom/document-contentType-meta.html
               http/tests/dom/document-contentType-xhr.html
               http/tests/dom/document-contentType.html

        * dom/Document.cpp:
        (WebCore::Document::overrideMIMEType):
        (WebCore::Document::contentType):
        (WebCore::Document::cloneDataFromDocument):
        * dom/Document.h:
        * dom/Document.idl:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::currentContentType):
        * loader/DocumentLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Put some common code in StorageNamespaceProvider
        https://bugs.webkit.org/show_bug.cgi?id=139682

        Reviewed by Tim Horton.

        We have code in two places that gets the local storage area from a given document,
        choosing either the local storage namespace or the transient local storage namespace.
        Move it to StorageNamespaceProvider::localStorageArea.

        * bindings/js/ScriptController.cpp:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/Navigator.cpp:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        (WebCore::StorageNamespaceProvider::localStorageNamespace):
        * storage/StorageNamespaceProvider.h:

2014-12-16  Anders Carlsson  <andersca@apple.com>

        Add FeatureCounterKeys.h to the Xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2014-12-16  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r163928): Animated GIFs are not resumed when translated into view using -webkit-transform
        https://bugs.webkit.org/show_bug.cgi?id=139672
        <rdar://problem/19260797>

        Reviewed by Antti Koivisto.

        After r163928, animated GIFs were not resumed when translated into view
        using '-webkit-transform' CSS property.

        This broke animated gifs on the mobile version of weibo.com (which is
        one of the most popular blogging sites in China) on iPhone. e.g.
        http://m.weibo.cn/page/tpl?containerid=1005052150182731_-_WEIBO_SECOND_PROFILE_WEIBO&itemid=&title=全部微博

        This patch calls FrameView::resumeVisibleImageAnimationsIncludingSubframes()
        after style recalc so that we resume animated images if they become visible
        after the style has changed. Doing so after layout wouldn't work because
        no layout happens in this case.

        Test: fast/images/animated-gif-webkit-transform.html

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

2014-12-16  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Fix deadlock when shutting down AudioDestination
        https://bugs.webkit.org/show_bug.cgi?id=139496

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):
        (webKitWebAudioSrcChangeState):
        Sometimes we would wait forever for the task to shut down. This
        was happening because of a bug in GStreamer that caused joining
        a paused task to deadlock.

2014-12-15  Dhi Aurrahman  <diorahman@rockybars.com>

        Extend :lang()'s selector checker to handle ranges with '*' properly and perform matching within the ASCII range
        https://bugs.webkit.org/show_bug.cgi?id=139340

        Reviewed by Benjamin Poulain.

        Asterisk is considered as a valid subtag of a language range to express wildcard matching 
        in :lang()'s extended filtering procedure. The matching rules introduced by language 
        range with '*' is outlined in [1].

        The matching of subtags is performed case-insensitively within the ASCII range[2].

        [1] www.ietf.org/rfc/rfc4647.txt
        [2] http://dev.w3.org/csswg/selectors4/#the-lang-pseudo

        Test: fast/selectors/lang-equal-ignoring-case.html
              fast/selectors/lang-valid-extended-filtering.html

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::equalIgnoringCaseWithinASCIIRange): Handle matching case-insensitively within the ASCII range.
        (WebCore::containslanguageSubtagMatchingRange):
        (WebCore::matchesLangPseudoClass):

2014-12-15  Chris Dumez  <cdumez@apple.com>

        [iOS] Add feature counting support
        https://bugs.webkit.org/show_bug.cgi?id=139652
        <rdar://problem/19255690>

        Reviewed by Gavin Barraclough.

        Use FeatureCounter API to log PageCache failure reasons
        as well as its success rate.

        No new tests, no behavior change.

        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * platform/FeatureCounterKeys.h: Added.

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/spi/mac/LookupSPI.h:

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/spi/mac/LookupSPI.h:

2014-12-15  Jer Noble  <jer.noble@apple.com>

        Switching src of <video> with clipping layer results in empty black square.
        https://bugs.webkit.org/show_bug.cgi?id=139650

        Reviewed by Simon Fraser.

        Test: compositing/video-clip-change-src.html

        When the contentsLayer changes after a contentsClippingLayer has already been created, make sure to parent the
        new contentsLayer, as updateRects() will only reparent when first creating a contentsClippingLayer.

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

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Make lookup an immediate action instead of an action menu item
        https://bugs.webkit.org/show_bug.cgi?id=139661
        -and corresponding-
        rdar://problem/19198414

        Reviewed by Tim Horton.

        New SPI.
        * platform/spi/mac/LookupSPI.h:

2014-12-12  Anders Carlsson  <andersca@apple.com>

        Get rid of the DONT_FINALIZE_ON_MAIN_THREAD #define
        https://bugs.webkit.org/show_bug.cgi?id=139613

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Update symbols.

        * WebCore.xcodeproj/project.pbxproj:
        Remove -Wno-deprecated-declarations from the WebCoreObjCExtras.mm build flags.

        * platform/mac/WebCoreObjCExtras.h:
        If OBJC_NO_GC is defined to 1, just make WebCoreObjCFinalizeOnMainThread a no-op inline function.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCFinalizeOnMainThread):
        Move this to the .h file for easier inlining.

        (WebCoreObjCScheduleDeallocateOnMainThread):
        Use a lambda.

2014-12-15  Gavin Barraclough  <barraclough@apple.com>

        Separate counted and hysteresis activities in PageThrottler
        https://bugs.webkit.org/show_bug.cgi?id=139657

        Reviewed by Sam Weinig.

        Currently all activities funnel into a common hysteresis mechanism, the result of
        which is combined with the visually idle state, the result of which in turn drives
        a UserActivity::Impl.

        This is a first refactoring towards moving the UserActivity out to WebKit2. Use
        m_hysteresis only of the impulse activities (plugin evaluation, user input), and
        flatten the three types of activities (impulse, counted, ViewState) to all directly
        control a UserActivity. Switch from a UserActivity::Impl to a UserActivity since
        this will provide hysteresis for media activity.

        * page/PageThrottler.cpp:
        (WebCore::m_pageActivityCounter):
            - when the RefCounter changes just call updateUserActivity directly, removeed redundant call to updateUserActivity.
        (WebCore::PageThrottler::createUserActivity):
            - m_activity is now a UserActivity.
        (WebCore::PageThrottler::updateUserActivity):
            - previously just checked m_hysteresis for activity; now check m_pageActivityCounter too.
        (WebCore::PageThrottler::pageActivityCounterValueDidChange): Deleted.
            - no longer needed; when the RefCounter changes just call updateUserActivity directly.
        * page/PageThrottler.h:
            - removed pageActivityCounterValueDidChange, m_activity is now a UserActivity.

2014-12-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177284.
        https://bugs.webkit.org/show_bug.cgi?id=139658

        "Breaks API tests and LayoutTests on Yosemite Debug"
        (Requested by msaboff on #webkit).

        Reverted changeset:

        "Make sure range based iteration of Vector<> still receives
        bounds checking"
        https://bugs.webkit.org/show_bug.cgi?id=138821
        http://trac.webkit.org/changeset/177284

2014-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        cloneNode(true) does not clone nested template elements' contents
        https://bugs.webkit.org/show_bug.cgi?id=137755

        Reviewed by Darin Adler.

        The bug was caused by cloneChildNodes not copying template element's content.

        Fixed the bug by adding the third behavior (CloneContent) to the polymorphic
        cloneNodeInternal, which copies template element's content but not its children,
        in addition to the existing CloneSelf (deep=false) and CloneChildren (deep=true).

        Test: fast/dom/HTMLTemplateElement/cloneNode-nested-templates.html

        * dom/Attr.cpp:
        (WebCore::Attr::cloneNodeInternal): Renamed from cloneNode.
        * dom/Attr.h:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::cloneNodeInternal): Renamed from cloneNode.
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        (WebCore::Comment::cloneNodeInternal): Renamed from cloneNode.
        * dom/Comment.h:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes): Calls cloneNode with CloneContent.
        * dom/Document.cpp:
        (WebCore::Document::cloneNodeInternal): Renamed from cloneNode.
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::cloneNodeInternal): Renamed from cloneNode.
        * dom/DocumentFragment.h:
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::cloneNodeInternal): Renamed from cloneNode.
        * dom/DocumentType.h:
        * dom/Element.cpp:
        (WebCore::Element::cloneNodeInternal): Renamed from cloneNode.
        * dom/Element.h:
        * dom/EntityReference.cpp:
        (WebCore::EntityReference::cloneNodeInternal): Renamed from cloneNode.
        * dom/EntityReference.h:
        * dom/Node.h:
        (WebCore::Node::cloneNode): Added. It calls cloneNodeInternal with CloneSelf or CloneChildren.
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::cloneNodeInternal): Renamed from cloneNode.
        * dom/ProcessingInstruction.h:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::cloneNodeInternal): Renamed from cloneNode. Also moved from ShadowRoot.h.
        * dom/ShadowRoot.h:
        * dom/Text.cpp:
        (WebCore::Text::cloneNodeInternal): Renamed from cloneNode.
        * dom/Text.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::cloneNodeInternal): Renamed from cloneNode. This is the only
        function in which CloneContent results in a different behavior from CloneSelf.
        * html/HTMLTemplateElement.h:

2014-12-15  Benjamin Poulain  <bpoulain@apple.com>

        Unify the various serialization of selector list
        https://bugs.webkit.org/show_bug.cgi?id=139606

        Reviewed by Andreas Kling.

        There were code in various place to build a string from the selectors contained
        in a selecor list.

        This patch adds a single function to do that: buildSelectorsText(). All the call sites
        were modified to use it.

        The serialization of :-webkit-any() gets fixed as a result.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        (WebCore::appendSelectorList): Deleted.
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::selectorsText):
        (WebCore::CSSSelectorList::buildSelectorsText):
        * css/CSSSelectorList.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::generateSelectorText):
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::cssText):

2014-12-15  Antti Koivisto  <antti@apple.com>

        Try to fix iOS build.

        * WebCore.exp.in:

2014-12-15  Javier Fernandez  <jfernandez@igalia.com>

        Floats Don't Overhang Their Block Formatting Contex
        https://bugs.webkit.org/show_bug.cgi?id=139476

        Reviewed by David Hyatt.

        From Blink r172530 by <robhogan@gmail.com>

        Floats Don't Overhang Their Block Formatting Context Per
        http://www.w3.org/TR/CSS2/visuren.html#float-position: "References
        to [the elements] in the [rules that govern the behaviour of
        floats] refer only to other elements in the same block formatting
        context as the float."

        This means we don't need to look for intruding or overhanging
        floats in boxes that establish a new block formatting
        context. Even that we don't have a test breaking this rule it
        seems we are doing unnecessary work in
        rebuildFloatsFromIntruding() so make sure we avoid adding floats
        from different block formatting contexts.

        Test:
        fast/block/float/floats-do-not-overhang-from-block-formatting-context.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addIntrudingFloats):

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r177301

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::elementRectRelativeToRootView):

2014-12-15  Timothy Horton  <timothy_horton@apple.com>

        Implement Data Detectors immediate actions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139617
        <rdar://problem/19198539>

        Reviewed by Beth Dakin.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add some new SPI.

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

        REGRESSION (r168217): Images are cropped out during animation at jetblue.com
        https://bugs.webkit.org/show_bug.cgi?id=136410
        rdar://problem/18188533

        Reviewed by Dean Jackson.
        
        During GraphicsLayer flushing, for tiled layers we can compute a visible rect using
        the current state of an animation, which is obtained via the AnimationController.
        If that animation was running in a subframe, AnimationController could use a stale
        beginAnimationUpdateTime since no-one called its beginAnimationUpdate(). That
        resulted in an incorrect computation of the visible rect, resulting in missing tiles.
        
        There are two parts to this fix. First, add an assertion that beginAnimationUpdateTime()
        is being called inside an animation update block. This required moving m_beginAnimationUpdateCount
        into AnimationControllerPrivate, and changes to endAnimationUpdate().
        
        The second is adding a AnimationUpdateBlock to getAnimatedStyleForRenderer(), which
        can be called outside of style resolution. We also need some in other API functions.
        
        Testing revealed that layout can call via layoutOverflowRectForPropagation(), suggesting
        that we should have an animation batch inside FrameView::layout(). In addition, a single
        resolveStyle/layout should use the same animationBeginTime, so we add a batch to 
        updateLayoutAndStyleIfNeededRecursive().
        
        Identical to the patch that was rolled out in r177269 with the addition of a 
        Ref<Frame> protector(m_frame) in AnimationControllerPrivate::animationTimerFired()
        that ensures that the AnimationControllerPrivate is kept alive for the scope of
        the AnimationPrivateUpdateBlock, when a transitionEnd event destroys an iframe.
        
        No test because it's timing-dependent. Existing tests exercise the new assertion.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationPrivateUpdateBlock::AnimationPrivateUpdateBlock):
        (WebCore::AnimationPrivateUpdateBlock::~AnimationPrivateUpdateBlock):
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::beginAnimationUpdate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::AnimationController::AnimationController):
        (WebCore::AnimationController::notifyAnimationStarted):
        (WebCore::AnimationController::pauseAnimationAtTime):
        (WebCore::AnimationController::pauseTransitionAtTime):
        (WebCore::AnimationController::resumeAnimationsForDocument):
        (WebCore::AnimationController::startAnimationsIfNotSuspended):
        (WebCore::AnimationController::beginAnimationUpdate):
        (WebCore::AnimationController::endAnimationUpdate):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:

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

        REGRESSION (r168217): Images are cropped out during animation at jetblue.com
        https://bugs.webkit.org/show_bug.cgi?id=136410

        Reviewed by Dean Jackson.

        We were hitting the new assertion under Page::setPageScaleFactor(), which
        calls recalcStyle(), so move the AnimationUpdateBlock from updateStyleIfNeeded()
        to recalcStyle().

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateStyleIfNeeded):

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments in r177035
        https://bugs.webkit.org/show_bug.cgi?id=139557

        Reviewed by Darin Adler.

        This patch deletes the helper functions rendererBoundingBox() and rendererAnchorRect() and
        migrates callers to using renderers directly.

        It also improves the comment in RenderElement.h regarding RenderElement::anchorRect().

        No new tests because this is simply refactoring.

        * WebCore.exp.in: Delete exported symbol for rendererBoundingBox()
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect): Migrate off rendererBoundingBox()
        * dom/ContainerNode.cpp:
        (WebCore::rendererAnchorRect): Deleted.
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::rendererBoundingBox): Deleted.
        * dom/Node.h:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::elementRectRelativeToRootView): Migrate off rendererBoundingBox().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters): Ditto.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollElementToRect): Migrate off rendererAnchorRect().
        (WebCore::FrameView::scrollToAnchor): Ditto.
        * page/SpatialNavigation.cpp:
        (WebCore::nodeRectInAbsoluteCoordinates): Migrate off rendererBoundingBox().
        * rendering/RenderElement.h:

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Notation because we don't use it
        https://bugs.webkit.org/show_bug.cgi?id=139171

        Reviewed by Kent Tamura.

        No tests because this is un-exposing something that never gets instantiated.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/WebKitDOMNodeFilter.h:
        * bindings/gobject/WebKitDOMNodeFilter.symbols:
        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * bindings/gobject/webkitdom.symbols:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/objc/DOMCore.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::adoptNode):
        (WebCore::Document::childTypeAllowed):
        (WebCore::Document::canReplaceChild):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupPrefix):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::appendTextContent):
        (WebCore::Node::setTextContent):
        * dom/Node.h:
        * dom/Node.idl:
        * dom/NodeFilter.h:
        * dom/NodeFilter.idl:
        * dom/Notation.cpp: Removed.
        * dom/Notation.h: Removed.
        * dom/Notation.idl: Removed.
        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        (WebCore::Range::processContentsBetweenOffsets):
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::checkNodeBA):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2014-12-15  Gavin Barraclough  <barraclough@apple.com>

        Change HysteresisActivity to use a lambda
        https://bugs.webkit.org/show_bug.cgi?id=139636

        Reviewed by Darin Adler.

        The current implementation provides notifications via callbacks to a delegate. Using a delegate
        with callbacks is limiting a number of ways. The callback names are very ambiguous, the callbacks
        must either be on a separate object (more boilerplate), or the callback must be public for
        HysteresisActivity to call them, or friends get involved. Without the boilerplate of extra
        delegate objects it's hard to scale use of these objects - a single object can't serve as a
        delegate for multiple HysteresisActivity members.

        Instead, make HysteresisActivity take a lambda to callback on state change. To simplify, changed
        HysteresisState to only track Started/Stopped states (removed WillStopPendingTimeout).

        * WebCore.exp.in:
            - removed exports of deleted functions.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - m_hysteresis lambda calls updateUserActivity.
        (WebCore::PageThrottler::pageActivityCounterValueDidChange):
            - ASSERT updated due to removal of WillStopPendingTimeout state.
        (WebCore::PageThrottler::started): Deleted.
        (WebCore::PageThrottler::stopped): Deleted.
            - functionality replaced by lambda.
        * page/PageThrottler.h:
            - HysteresisActivity is no longer templated on delegate type, removed function declarations & friend.
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::HysteresisActivity):
            - HysteresisActivity takes a lambda, not a delegate.
        (WebCore::HysteresisActivity::start):
            - delegate call -> callback.
        (WebCore::HysteresisActivity::state):
            - simplified to remove WillStopPendingTimeout.
        (WebCore::HysteresisActivity::hysteresisTimerFired):
            - delegate call -> callback.
        * platform/UserActivity.cpp:
        (WebCore::UserActivity::UserActivity):
            - HysteresisActivity lambda calls hysteresisUpdated.
        (WebCore::UserActivity::hysteresisUpdated):
        (WebCore::UserActivity::started): Deleted.
        (WebCore::UserActivity::stopped): Deleted.
            - started/stopped -> hysteresisUpdated.
        * platform/UserActivity.h:
            - started/stopped -> hysteresisUpdated, removed friend.

2014-12-15  Antti Koivisto  <antti@apple.com>

        WebKit level persistent caching
        https://bugs.webkit.org/show_bug.cgi?id=30322

        Reviewed by Sam Weinig.

        Test: http/tests/cache/disk-cache-validation.html

        * WebCore.exp.in:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::source):
        (WebCore::ResourceResponseBase::setSource):
        (WebCore::ResourceResponseBase::wasCached): Deleted.
        (WebCore::ResourceResponseBase::setWasCached): Deleted.

            Replace wasCached bit with Source enum.
            This is useful for testing.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::containsCertificateInfo):
        (WebCore::ResourceResponseBase::encode):
        (WebCore::ResourceResponseBase::decode):
        * testing/Internals.cpp:
        (WebCore::Internals::xhrResponseSource):
        (WebCore::Internals::clearMemoryCache):
        * testing/Internals.h:
        * testing/Internals.idl:

            Testing support.

        * xml/XMLHttpRequest.h:

2014-12-15  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from FocusEvent code.
        <https://webkit.org/b/139647>

        Reviewed by Anders Carlsson.

        Convert FocusEvent-related code from using PassRefPtr to using RefPtr&& instead.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        * dom/Element.cpp:
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        (WebCore::Element::dispatchFocusEvent):
        (WebCore::Element::dispatchBlurEvent):
        * dom/Element.h:
        * dom/FocusEvent.cpp:
        (WebCore::FocusEvent::FocusEvent):
        * dom/FocusEvent.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchBlurEvent):
        * html/HTMLFormControlElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::dispatchFocusEvent):
        (WebCore::HTMLSelectElement::dispatchBlurEvent):
        * html/HTMLSelectElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
        * html/HTMLTextFormControlElement.h:
        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedElement):

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Codepoints not associated with languages are drawn as boxes
        https://bugs.webkit.org/show_bug.cgi?id=138906

        Reviewed by Darin Adler.

        Use SPI CTFontCreateForCharacters(), but only if we don't already know what to do
        with the characters.

        Test: platform/ios-simulator/fast/text/non-language-font-fallback.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/spi/cocoa/CoreTextSPI.h:

2014-12-15  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Fix StyleBuilder code to use CSSValueNone to match spec and other code
        https://bugs.webkit.org/show_bug.cgi?id=139601

        Reviewed by Chris Dumez.

        Change the code to properly use CSSValueNone instead of CSSValueAuto.
        Asserts have been added to catch similar errors in the future.
        In doing this change, it became apparent that there is nothing
        special about the shape-outside property that requires custom code, so
        it was changed to use a standard converter function. 

        No change observable via LayoutTests.

        * css/CSSPropertyNames.in: Use a converter instead of custom code.
        * css/StyleBuilderConverter.h:
        (WebCore::isImageShape): Helper function so that isImageSetValue can
            be properly guarded.
        (WebCore::StyleBuilderConverter::convertShapeValue): Format as a
            converter instead of custom code.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitShapeOutside): Deleted.

2014-12-15  Oliver Hunt  <oliver@apple.com>

        Make sure range based iteration of Vector<> still receives bounds checking
        https://bugs.webkit.org/show_bug.cgi?id=138821

        Reviewed by Mark Lam.

        Update to deal with different iterator type.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserializeString):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isBadMatch):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::fontDataForCharacter):
        (WebCore::SegmentedFontData::containsCharacter):
        (WebCore::SegmentedFontData::isLoading):
        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::convertWOFFToSfnt):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * svg/SVGFontElement.cpp:
        (WebCore::kerningForPairOfStringsAndGlyphs):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::append):
        * xml/XPathNodeSet.h:
        (WebCore::XPath::NodeSet::begin):
        (WebCore::XPath::NodeSet::end):

2014-12-15  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-text-decoration-skip' to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139633

        Reviewed by Darin Adler.

        Move '-webkit-text-decoration-skip' to the new StyleBuilder by
        introducing a new TextDecorationSkip converter.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::valueToDecorationSkip): Deleted.
        (WebCore::ApplyPropertyTextDecorationSkip::applyValue): Deleted.
        (WebCore::ApplyPropertyTextDecorationSkip::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::valueToDecorationSkip):
        (WebCore::StyleBuilderConverter::convertTextDecorationSkip):

2014-12-15  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Prevent SourceBuffer monitoring algorithm from triggering a HAVE_NOTHING to HAVE_METADATA transition.
        https://bugs.webkit.org/show_bug.cgi?id=139444

        Reviewed by Jer Noble.

        In case of 2 SourceBuffers, there can be transition to HaveMetadata from monitorSourceBuffers,
        even though second SourceBuffer did not receive init segment - we can't query for it's metadata
        such as width/height (if second one was video), so we shouldn't fire the event.
        W3 Bug reference : https://www.w3.org/Bugs/Public/show_bug.cgi?id=27542

        Test: media/media-source/media-source-loadedmetada-with-two-sourcebuffers.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers):
        * Modules/mediasource/SourceBuffer.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::mimeTypeCache):

2014-12-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/platform/text to std::unique_ptr 
        https://bugs.webkit.org/show_bug.cgi?id=139395

        Reviewed by Darin Adler.

        As a step to use std::unique_ptr<>, this patch replaces OwnPtr|PassOwnPtr with
        std::unique_ptr<> | std::make_unique<>.

        * dom/Document.h:
        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::LineBreakIteratorPool):
        (WebCore::LineBreakIteratorPool::create): Deleted.
        * platform/text/LocaleICU.cpp:
        (WebCore::Locale::create):
        (WebCore::LocaleICU::createLabelVector):
        (WebCore::createFallbackMonthLabels):
        (WebCore::createFallbackAMPMLabels):
        (WebCore::LocaleICU::initializeDateTimeFormat):
        (WebCore::LocaleICU::shortMonthLabels):
        (WebCore::LocaleICU::create): Deleted.
        (WebCore::LocaleICU::standAloneMonthLabels): Deleted.
        (WebCore::LocaleICU::shortStandAloneMonthLabels): Deleted.
        * platform/text/LocaleICU.h:
        * platform/text/LocaleNone.cpp:
        (WebCore::Locale::create):
        * platform/text/PlatformLocale.h:
        (WebCore::Locale::createDefault):
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUTF16.cpp:
        * platform/text/TextEncoding.cpp:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::Locale::create):
        (WebCore::LocaleMac::create):
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/win/LocaleWin.cpp:
        (WebCore::Locale::create):
        (WebCore::LocaleWin::create):
        * platform/text/win/LocaleWin.h:
        * platform/text/win/TextCodecWin.cpp:
        (WebCore::newTextCodecWin):

2014-12-15  Xavier Claessens  <xavier.claessens@collabora.com>

        [GStreamer] the webkitwebsrc element can stale
        https://bugs.webkit.org/show_bug.cgi?id=138425

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (removeTimeoutSources):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):

2014-12-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [GTK] Remove GamepadDeviceGtk::create()
        https://bugs.webkit.org/show_bug.cgi?id=139637

        Reviewed by Carlos Garcia Campos.

        std::make_unique<> can replace GamepadDeviceGtk::create() factory function.

        * platform/gtk/GamepadsGtk.cpp: Add "explicit" to GamepadsGtk constructor.
        (WebCore::GamepadsGtk::registerDevice):
        (WebCore::GamepadDeviceGtk::create): Deleted.

2014-12-15  Chris Dumez  <cdumez@apple.com>

        Move 'counter-increment' / 'counter-reset' to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139635

        Reviewed by Antti Koivisto.

        Move 'counter-increment' / 'counter-reset' to the new StyleBuilder by
        using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyCounter::emptyFunction): Deleted.
        (WebCore::ApplyPropertyCounter::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyCounter::applyValue): Deleted.
        (WebCore::ApplyPropertyCounter::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialCounterIncrement):
        (WebCore::StyleBuilderCustom::applyInitialCounterReset):
        (WebCore::StyleBuilderCustom::applyInheritCounter):
        (WebCore::StyleBuilderCustom::applyValueCounter):
        (WebCore::StyleBuilderCustom::applyInheritCounterIncrement):
        (WebCore::StyleBuilderCustom::applyValueCounterIncrement):
        (WebCore::StyleBuilderCustom::applyInheritCounterReset):
        (WebCore::StyleBuilderCustom::applyValueCounterReset):

2014-12-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177238 and r177244.
        https://bugs.webkit.org/show_bug.cgi?id=139632

        Introduced memory corruption (Requested by ap on #webkit).

        Reverted changesets:

        "REGRESSION (r168217): Images are cropped out during animation
        at jetblue.com"
        https://bugs.webkit.org/show_bug.cgi?id=136410
        http://trac.webkit.org/changeset/177238

        https://bugs.webkit.org/show_bug.cgi?id=139596
        http://trac.webkit.org/changeset/177244

2014-12-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177223 and r177226.
        https://bugs.webkit.org/show_bug.cgi?id=139631

        Multiple tests are flakily asserting in
        StyleResolver::loadPendingResources (Requested by ap_ on
        #webkit).

        Reverted changesets:

        "[SVG Masking] Enable the use of <mask> elements for -webkit-
        mask-image"
        https://bugs.webkit.org/show_bug.cgi?id=139294
        http://trac.webkit.org/changeset/177223

        "animations/cross-fade-webkit-mask-image.html is flaky"
        https://bugs.webkit.org/show_bug.cgi?id=139590
        http://trac.webkit.org/changeset/177226

2014-12-14  Andreas Kling  <akling@apple.com>

        Event construction helpers should return Ref instead of PassRefPtr.
        <https://webkit.org/b/139625>

        Reviewed by Antti Koivisto.

        Change all the FooEvent::create() construction helpers to return Ref<FooEvent>
        instead of PassRefPtr<FooEvent>.

        This allows the compiler to omit null checks at each call site, since we know
        that these functions always return valid objects.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        (WebCore::MediaKeyMessageEvent::create):
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        (WebCore::MediaKeyNeededEvent::create):
        * Modules/gamepad/GamepadEvent.h:
        (WebCore::GamepadEvent::create):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore::IDBVersionChangeEvent::create):
        * Modules/indieui/UIRequestEvent.cpp:
        (WebCore::UIRequestEvent::create):
        * Modules/indieui/UIRequestEvent.h:
        * Modules/mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEvent::create):
        * Modules/mediastream/MediaStreamEvent.h:
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        (WebCore::MediaStreamTrackEvent::create):
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        (WebCore::RTCDataChannelEvent::create):
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCIceCandidateEvent.cpp:
        (WebCore::RTCIceCandidateEvent::create):
        * Modules/mediastream/RTCIceCandidateEvent.h:
        * Modules/speech/SpeechSynthesisEvent.cpp:
        (WebCore::SpeechSynthesisEvent::create):
        * Modules/speech/SpeechSynthesisEvent.h:
        * Modules/webaudio/AudioProcessingEvent.cpp:
        (WebCore::AudioProcessingEvent::create):
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp:
        (WebCore::OfflineAudioCompletionEvent::create):
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/websockets/CloseEvent.h:
        (WebCore::CloseEvent::create):
        * dom/AnimationEvent.h:
        * dom/AutocompleteErrorEvent.h:
        * dom/BeforeLoadEvent.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.h:
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.h:
        * dom/CustomEvent.h:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.h:
        * dom/ErrorEvent.h:
        * dom/Event.h:
        (WebCore::Event::create):
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/KeyboardEvent.h:
        * dom/MessageEvent.h:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::SimulatedMouseEvent::create):
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::create):
        * dom/MutationEvent.h:
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::create):
        * dom/PopStateEvent.h:
        * dom/ProgressEvent.h:
        (WebCore::ProgressEvent::create):
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::createForDrop):
        (WebCore::TextEvent::createForDictation):
        * dom/TextEvent.h:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.h:
        * dom/UIEvent.h:
        (WebCore::UIEvent::create):
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitTransitionEvent.h:
        * dom/WheelEvent.h:
        * html/MediaKeyEvent.h:
        * html/canvas/WebGLContextEvent.h:
        * html/track/TrackEvent.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        * storage/StorageEvent.h:
        * svg/SVGZoomEvent.h:
        (WebCore::SVGZoomEvent::create):
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create):

2014-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r160182): Fragment parser doesn't close a form element with a close tag
        https://bugs.webkit.org/show_bug.cgi?id=139561

        Reviewed by Darin Adler.

        The bug was caused by us not setting the form pointer in insertHTMLFormElement.
        Since we already avoid associating a form inside HTMLConstructionSite::createHTMLElement,
        we didn't need this code at all.

        Fixed the bug by partially reverting r160182.

        Test: fast/dom/dom-parse-close-form.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        (WebCore::HTMLConstructionSite::insideTemplateElement): Deleted.
        * html/parser/HTMLConstructionSite.h:

2014-12-14  Andreas Kling  <akling@apple.com>

        Fix build even more. Not a strong performance here.

        * platform/graphics/Font.cpp:
        (WebCore::FontGlyphsCacheEntry::FontGlyphsCacheEntry):
        (WebCore::retrieveOrAddCachedFontGlyphs):

2014-12-14  Andreas Kling  <akling@apple.com>

        Fix build. :-|

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::CSSFunctionValue):
        * css/CSSFunctionValue.h:

2014-12-14  Andreas Kling  <akling@apple.com>

        Minor follow-up tweaks suggested by Darin on bug 139587.

        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::create):
        * platform/graphics/Font.cpp:
        (WebCore::retrieveOrAddCachedFontGlyphs):
        (WebCore::FontGlyphsCacheEntry::FontGlyphsCacheEntry): Deleted.
        * rendering/RenderScrollbarPart.h:

2014-12-14  Andreas Kling  <akling@apple.com>

        Replace PassRef with Ref/Ref&& across the board.
        <https://webkit.org/b/139587>

        Reviewed by Darin Adler.

        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::create):
        * Modules/battery/BatteryManager.h:
        * Modules/battery/BatteryStatus.cpp:
        (WebCore::BatteryStatus::create):
        * Modules/battery/BatteryStatus.h:
        * Modules/gamepad/GamepadButton.h:
        (WebCore::GamepadButton::create):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::gamepadFromPlatformGamepad):
        * Modules/gamepad/NavigatorGamepad.h:
        * Modules/gamepad/deprecated/GamepadList.h:
        (WebCore::GamepadList::create):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::create):
        * Modules/geolocation/Geolocation.h:
        (WebCore::Geolocation::GeoNotifier::create):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::setPrivateAndOpen):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::create):
        (WebCore::SourceBuffer::SourceBuffer):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::requestPermission):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::create):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::create):
        * Modules/notifications/NotificationCenter.h:
        * Modules/plugins/PluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::createElementRenderer):
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::createElementRenderer):
        * Modules/plugins/YouTubePluginReplacement.h:
        * Modules/proximity/DeviceProximityEvent.h:
        (WebCore::DeviceProximityEvent::create):
        * WebCore.exp.in:
        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSAspectRatioValue.h:
        (WebCore::CSSAspectRatioValue::create):
        * css/CSSBorderImage.cpp:
        (WebCore::createBorderImageValue):
        * css/CSSBorderImage.h:
        * css/CSSBorderImageSliceValue.h:
        (WebCore::CSSBorderImageSliceValue::create):
        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        * css/CSSCalculationValue.h:
        (WebCore::CSSCalcValue::CSSCalcValue):
        (WebCore::CSSCalcValue::createCalculationValue):
        * css/CSSCanvasValue.h:
        (WebCore::CSSCanvasValue::create):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForImageSliceSide):
        (WebCore::valueForNinePieceImageSlice):
        (WebCore::valueForNinePieceImageQuad):
        (WebCore::valueForNinePieceImageRepeat):
        (WebCore::valueForNinePieceImage):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::createPositionListForLayer):
        (WebCore::percentageOrZoomAdjustedValue):
        (WebCore::autoOrZoomAdjustedValue):
        (WebCore::getBorderRadiusCornerValues):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::getBorderRadiusShorthandValue):
        (WebCore::matrixTransformValue):
        (WebCore::computedTransform):
        (WebCore::adjustLengthForZoom):
        (WebCore::ComputedStyleExtractor::valueForShadow):
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::specifiedValueForGridTrackBreadth):
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::valueForGridTrackList):
        (WebCore::valueForGridPosition):
        (WebCore::createTransitionPropertyValue):
        (WebCore::getTransitionPropertyValue):
        (WebCore::scrollSnapDestination):
        (WebCore::scrollSnapPoints):
        (WebCore::scrollSnapCoordinates):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::createTimingFunctionValue):
        (WebCore::getTimingFunctionValue):
        (WebCore::createLineBoxContainValue):
        (WebCore::valueForFamily):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::renderTextDecorationStyleFlagsToCSSValue):
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSourceTypeToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::altTextToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::fontFamilyFromStyle):
        (WebCore::lineHeightFromStyle):
        (WebCore::fontSizeFromStyle):
        (WebCore::fontStyleFromStyle):
        (WebCore::fontVariantFromStyle):
        (WebCore::fontWeightFromStyle):
        (WebCore::CSSComputedStyleDeclaration::copyProperties):
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::copyProperties):
        (WebCore::ComputedStyleExtractor::copyPropertiesInSet):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.h:
        (WebCore::CSSCrossfadeValue::create):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
        * css/CSSCursorImageValue.h:
        (WebCore::CSSCursorImageValue::create):
        * css/CSSFilterImageValue.h:
        (WebCore::CSSFilterImageValue::create):
        * css/CSSFontFaceSrcValue.h:
        (WebCore::CSSFontFaceSrcValue::create):
        (WebCore::CSSFontFaceSrcValue::createLocal):
        * css/CSSFontFeatureValue.h:
        (WebCore::CSSFontFeatureValue::create):
        * css/CSSFontValue.h:
        (WebCore::CSSFontValue::create):
        * css/CSSFunctionValue.h:
        (WebCore::CSSFunctionValue::create):
        * css/CSSGradientValue.h:
        (WebCore::CSSLinearGradientValue::create):
        (WebCore::CSSLinearGradientValue::clone):
        (WebCore::CSSRadialGradientValue::create):
        (WebCore::CSSRadialGradientValue::clone):
        * css/CSSGridTemplateAreasValue.h:
        (WebCore::CSSGridTemplateAreasValue::create):
        * css/CSSImageSetValue.h:
        (WebCore::CSSImageSetValue::create):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::create):
        * css/CSSInheritedValue.h:
        (WebCore::CSSInheritedValue::create):
        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit):
        (WebCore::CSSInitialValue::createImplicit):
        * css/CSSKeyframeRule.cpp:
        (WebCore::StyleKeyframe::StyleKeyframe):
        * css/CSSKeyframeRule.h:
        (WebCore::StyleKeyframe::create):
        * css/CSSKeyframesRule.h:
        (WebCore::StyleRuleKeyframes::create):
        (WebCore::StyleRuleKeyframes::copy):
        * css/CSSLineBoxContainValue.h:
        (WebCore::CSSLineBoxContainValue::create):
        * css/CSSParser.cpp:
        (WebCore::createPrimitiveValuePair):
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleProperties):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::createPrimitiveStringValue):
        (WebCore::CSSParser::addFillValue):
        (WebCore::CSSParser::addAnimationValue):
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::createParserOperator):
        (WebCore::CSSPrimitiveValue::createColor):
        (WebCore::CSSPrimitiveValue::create):
        (WebCore::CSSPrimitiveValue::createAllowingMarginQuirk):
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::create):
        * css/CSSShadowValue.h:
        (WebCore::CSSShadowValue::create):
        * css/CSSStyleDeclaration.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::createInline):
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSCubicBezierTimingFunctionValue::create):
        (WebCore::CSSStepsTimingFunctionValue::create):
        * css/CSSUnicodeRangeValue.h:
        (WebCore::CSSUnicodeRangeValue::create):
        * css/CSSValue.cpp:
        (WebCore::TextCloneCSSValue::create):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::createCommaSeparated):
        (WebCore::CSSValueList::createSpaceSeparated):
        (WebCore::CSSValueList::createSlashSeparated):
        (WebCore::CSSValueList::createFromParserValueList):
        (WebCore::CSSValueList::append):
        (WebCore::CSSValueList::prepend):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createIdentifierValue):
        (WebCore::CSSValuePool::createColorValue):
        (WebCore::CSSValuePool::createValue):
        (WebCore::CSSValuePool::createFontFamilyValue):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createInheritedValue):
        (WebCore::CSSValuePool::createImplicitInitialValue):
        (WebCore::CSSValuePool::createExplicitInitialValue):
        (WebCore::CSSValuePool::createValue):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::copyProperties):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/StyleProperties.cpp:
        (WebCore::ImmutableStyleProperties::create):
        (WebCore::StyleProperties::immutableCopyIfNeeded):
        (WebCore::StyleProperties::copyBlockProperties):
        (WebCore::StyleProperties::mutableCopy):
        (WebCore::StyleProperties::copyPropertiesInSet):
        (WebCore::MutableStyleProperties::create):
        * css/StyleProperties.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::setStyle):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::styleForKeyframe):
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::defaultStyleForElement):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::takeStyle):
        (WebCore::StyleResolver::State::setParentStyle):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::create):
        (WebCore::StyleRulePage::StyleRulePage):
        (WebCore::StyleRuleFontFace::StyleRuleFontFace):
        (WebCore::StyleRuleGroup::wrapperInsertRule):
        (WebCore::StyleRuleViewport::StyleRuleViewport):
        * css/StyleRule.h:
        (WebCore::StyleRule::create):
        (WebCore::StyleRule::copy):
        (WebCore::StyleRuleFontFace::create):
        (WebCore::StyleRuleFontFace::copy):
        (WebCore::StyleRulePage::create):
        (WebCore::StyleRulePage::copy):
        (WebCore::StyleRuleMedia::create):
        (WebCore::StyleRuleMedia::copy):
        (WebCore::StyleRuleSupports::create):
        (WebCore::StyleRuleSupports::copy):
        (WebCore::StyleRuleRegion::create):
        (WebCore::StyleRuleRegion::copy):
        (WebCore::StyleRuleViewport::create):
        (WebCore::StyleRuleViewport::copy):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::create):
        * css/StyleRuleImport.h:
        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::create):
        (WebCore::StyleSheetContents::copy):
        * css/WebKitCSSFilterValue.h:
        (WebCore::WebKitCSSFilterValue::create):
        * css/WebKitCSSResourceValue.h:
        (WebCore::WebKitCSSResourceValue::create):
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::create):
        * dom/ChildNodeList.h:
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::create):
        * dom/ClassNodeList.h:
        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Document.h:
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):
        * dom/DocumentSharedObjectPool.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::addAuthorSheet):
        (WebCore::DocumentStyleSheetCollection::addUserSheet):
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.cpp:
        (WebCore::Element::createElementRenderer):
        * dom/Element.h:
        * dom/ElementData.cpp:
        (WebCore::ShareableElementData::createWithAttributes):
        (WebCore::UniqueElementData::create):
        (WebCore::ElementData::makeUniqueCopy):
        (WebCore::UniqueElementData::makeShareableCopy):
        * dom/ElementData.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setComputedStyle):
        * dom/NameNodeList.h:
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::ensureFlowWithName):
        * dom/NamedFlowCollection.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::create):
        * dom/TagNodeList.h:
        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::createInputRenderer):
        * html/BaseButtonInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::createInputRenderer):
        * html/FileInputType.h:
        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::create):
        * html/HTMLAllCollection.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::createElementRenderer):
        * html/HTMLAppletElement.h:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::createElementRenderer):
        * html/HTMLBRElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::createElementRenderer):
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createElementRenderer):
        * html/HTMLCanvasElement.h:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::create):
        * html/HTMLCollection.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::createElementRenderer):
        * html/HTMLDetailsElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createElementRenderer):
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::createElementRenderer):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::create):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::createElementRenderer):
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::createElementRenderer):
        * html/HTMLFrameSetElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::createElementRenderer):
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createElementRenderer):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createElementRenderer):
        * html/HTMLInputElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::createElementRenderer):
        * html/HTMLMeterElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::create):
        * html/HTMLOptionsCollection.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::createElementRenderer):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createElementRenderer):
        * html/HTMLProgressElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::createElementRenderer):
        * html/HTMLSelectElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createElementRenderer):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::create):
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createElementRenderer):
        * html/HTMLTextAreaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createElementRenderer):
        * html/HTMLVideoElement.h:
        * html/HTMLWBRElement.cpp:
        (WebCore::HTMLWBRElement::createElementRenderer):
        * html/HTMLWBRElement.h:
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::createInputRenderer):
        * html/HiddenInputType.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::createInputRenderer):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::createInputRenderer):
        * html/InputType.h:
        * html/LabelsNodeList.h:
        * html/RadioNodeList.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createInputRenderer):
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::createInputRenderer):
        * html/SearchInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createInputRenderer):
        * html/TextFieldInputType.h:
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::createElementRenderer):
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineContainerElement::createElementRenderer):
        (WebCore::MediaControlVolumeSliderContainerElement::createElementRenderer):
        (WebCore::MediaControlTextTrackContainerElement::createElementRenderer):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MeterShadowElement.cpp:
        (WebCore::MeterInnerElement::createElementRenderer):
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::createElementRenderer):
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderThumb::RenderSliderThumb):
        (WebCore::SliderThumbElement::createElementRenderer):
        (WebCore::SliderContainerElement::createElementRenderer):
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::createElementRenderer):
        (WebCore::TextControlInnerTextElement::createElementRenderer):
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::RenderImageControlsButton::RenderImageControlsButton):
        (WebCore::ImageControlsButtonElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsButtonElementMac.h:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::RenderImageControls::RenderImageControls):
        (WebCore::ImageControlsRootElementMac::createElementRenderer):
        * html/shadow/mac/ImageControlsRootElementMac.h:
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::createElementRenderer):
        * html/track/VTTCue.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::saveParsedStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::create):
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createElementRenderer):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::createElementRenderer):
        * mathml/MathMLMathElement.h:
        * mathml/MathMLMencloseElement.cpp:
        (WebCore::MathMLMencloseElement::createElementRenderer):
        * mathml/MathMLMencloseElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::createElementRenderer):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createElementRenderer):
        * mathml/MathMLTextElement.h:
        * page/Page.cpp:
        (WebCore::Page::setStorageNamespaceProvider):
        (WebCore::Page::setVisitedLinkStore):
        * page/Page.h:
        * page/UserMessageHandler.h:
        (WebCore::UserMessageHandler::create):
        * page/UserMessageHandlersNamespace.h:
        (WebCore::UserMessageHandlersNamespace::create):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::addElementChangeToDispatch):
        (WebCore::AnimationController::updateAnimations):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:
        * platform/CalculationValue.cpp:
        (WebCore::CalculationValue::create):
        * platform/CalculationValue.h:
        * platform/Length.cpp:
        (WebCore::CalculationValueMap::insert):
        (WebCore::Length::Length):
        * platform/Length.h:
        * platform/graphics/Font.cpp:
        (WebCore::FontGlyphsCacheEntry::FontGlyphsCacheEntry):
        (WebCore::retrieveOrAddCachedFontGlyphs):
        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::create):
        (WebCore::FontGlyphs::createForPlatformFont):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::create):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/MediaSourcePrivateClient.h:
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::create):
        * platform/graphics/Pattern.h:
        * platform/mac/SerializedPlatformRepresentationMac.h:
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::SerializedPlatformRepresentationMac::create):
        * platform/mock/UserMediaClientMock.h:
        (WebCore::UserMediaClientRequestNotifier::UserMediaClientRequestNotifier):
        * rendering/ClipPathOperation.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::RenderBoxModelObject):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::RenderButton):
        * rendering/RenderButton.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::RenderDeprecatedFlexibleBox):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        (WebCore::RenderElement::createFor):
        (WebCore::RenderElement::setStyle):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setStyleInternal):
        (WebCore::RenderElement::setAnimatableStyle):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::createForApplet):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::RenderFieldset):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::createFlowThreadStyle):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::RenderFrame):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::RenderFrameBase):
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::RenderFrameSet):
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::RenderFullScreen):
        (WebCore::createFullScreenStyle):
        (WebCore::RenderFullScreen::createPlaceholder):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::RenderHTMLCanvas):
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::RenderIFrame):
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::RenderLayerModelObject):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::RenderLineBreak):
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::RenderListMarker):
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderMedia.h:
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer):
        (WebCore::RenderMediaControlTimelineContainer::RenderMediaControlTimelineContainer):
        (WebCore::RenderTextTrackContainerElement::RenderTextTrackContainerElement):
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::RenderMultiColumnFlowThread):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::RenderMultiColumnSpannerPlaceholder):
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote):
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.cpp:
        (WebCore::RenderRegionSet::RenderRegionSet):
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced):
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::RenderReplica):
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::RenderRubyBase):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun):
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::RenderRubyText):
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::RenderScrollbarPart):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::RenderSearchField):
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::RenderSlider):
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::RenderTableCaption):
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::RenderTableCol):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        * rendering/RenderTableSection.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::RenderVTTCue):
        * rendering/RenderVTTCue.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget):
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::RenderMathMLBlock):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.cpp:
        (WebCore::RenderMathMLMath::RenderMathMLMath):
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::RenderMathMLMenclose):
        * rendering/mathml/RenderMathMLMenclose.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::RenderMathMLRadicalOperator):
        * rendering/mathml/RenderMathMLRadicalOperator.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::RenderMathMLRoot):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::RenderMathMLRow):
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::RenderMathMLScripts):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::RenderMathMLSpace):
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::RenderMathMLSquareRoot):
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::RenderMathMLToken):
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver):
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:
        * rendering/style/DataRef.h:
        (WebCore::DataRef::DataRef):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImageData::copy):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImageData::create):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::create):
        (WebCore::RenderStyle::createDefaultStyle):
        (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
        (WebCore::RenderStyle::clone):
        (WebCore::RenderStyle::createStyleInheritingFromPseudoStyle):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::createDefaultStyle):
        (WebCore::SVGRenderStyle::copy):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::create):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleFillData::copy):
        (WebCore::StyleStrokeData::copy):
        (WebCore::StyleStopData::copy):
        (WebCore::StyleTextData::copy):
        (WebCore::StyleMiscData::copy):
        (WebCore::StyleShadowSVGData::copy):
        (WebCore::StyleResourceData::copy):
        (WebCore::StyleInheritedResourceData::copy):
        (WebCore::StyleLayoutData::copy):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleFillData::create):
        (WebCore::StyleStrokeData::create):
        (WebCore::StyleStopData::create):
        (WebCore::StyleTextData::create):
        (WebCore::StyleMiscData::create):
        (WebCore::StyleShadowSVGData::create):
        (WebCore::StyleResourceData::create):
        (WebCore::StyleInheritedResourceData::create):
        (WebCore::StyleLayoutData::create):
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::copy):
        * rendering/style/StyleBackgroundData.h:
        (WebCore::StyleBackgroundData::create):
        * rendering/style/StyleBoxData.cpp:
        (WebCore::StyleBoxData::copy):
        * rendering/style/StyleBoxData.h:
        (WebCore::StyleBoxData::create):
        * rendering/style/StyleDeprecatedFlexibleBoxData.cpp:
        (WebCore::StyleDeprecatedFlexibleBoxData::copy):
        * rendering/style/StyleDeprecatedFlexibleBoxData.h:
        (WebCore::StyleDeprecatedFlexibleBoxData::create):
        * rendering/style/StyleFilterData.cpp:
        (WebCore::StyleFilterData::copy):
        * rendering/style/StyleFilterData.h:
        (WebCore::StyleFilterData::create):
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::copy):
        * rendering/style/StyleFlexibleBoxData.h:
        (WebCore::StyleFlexibleBoxData::create):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::copy):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::create):
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::copy):
        * rendering/style/StyleGridItemData.h:
        (WebCore::StyleGridItemData::create):
        * rendering/style/StyleInheritedData.cpp:
        (WebCore::StyleInheritedData::copy):
        * rendering/style/StyleInheritedData.h:
        (WebCore::StyleInheritedData::create):
        * rendering/style/StyleMarqueeData.cpp:
        (WebCore::StyleMarqueeData::copy):
        * rendering/style/StyleMarqueeData.h:
        (WebCore::StyleMarqueeData::create):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::copy):
        * rendering/style/StyleMultiColData.h:
        (WebCore::StyleMultiColData::create):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::copy):
        * rendering/style/StyleRareInheritedData.h:
        (WebCore::StyleRareInheritedData::create):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::copy):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::StyleRareNonInheritedData::create):
        * rendering/style/StyleScrollSnapPoints.cpp:
        (WebCore::StyleScrollSnapPoints::copy):
        * rendering/style/StyleScrollSnapPoints.h:
        (WebCore::StyleScrollSnapPoints::create):
        * rendering/style/StyleSurroundData.cpp:
        (WebCore::StyleSurroundData::copy):
        * rendering/style/StyleSurroundData.h:
        (WebCore::StyleSurroundData::create):
        * rendering/style/StyleTransformData.cpp:
        (WebCore::StyleTransformData::copy):
        * rendering/style/StyleTransformData.h:
        (WebCore::StyleTransformData::create):
        * rendering/style/StyleVisualData.cpp:
        (WebCore::StyleVisualData::copy):
        * rendering/style/StyleVisualData.h:
        (WebCore::StyleVisualData::create):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::RenderSVGBlock):
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::RenderSVGEllipse):
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::RenderSVGForeignObject):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::RenderSVGGradientStop):
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::RenderSVGHiddenContainer):
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::RenderSVGModelObject):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::RenderSVGPath):
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::RenderSVGRect):
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::RenderSVGResourceFilter):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::RenderSVGResourceLinearGradient):
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::RenderSVGResourceMarker):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::RenderSVGResourcePattern):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::RenderSVGResourceRadialGradient):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::RenderSVGShape):
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::RenderSVGTextPath):
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::RenderSVGTransformableContainer):
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::RenderSVGViewportContainer):
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveForDocument.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::styleForElement):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createElementRenderer):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::createElementRenderer):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::createElementRenderer):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::createElementRenderer):
        * svg/SVGClipPathElement.h:
        * svg/SVGColor.h:
        (WebCore::SVGColor::createFromString):
        (WebCore::SVGColor::createFromColor):
        (WebCore::SVGColor::createCurrentColor):
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::createElementRenderer):
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::createElementRenderer):
        * svg/SVGEllipseElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::createElementRenderer):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::createElementRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::srcValue):
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::srcValue):
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::createElementRenderer):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::createElementRenderer):
        * svg/SVGGElement.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::createElementRenderer):
        * svg/SVGGraphicsElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::createElementRenderer):
        * svg/SVGImageElement.h:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::toCSSPrimitiveValue):
        * svg/SVGLength.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::createElementRenderer):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::createElementRenderer):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::createElementRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGPaint.h:
        (WebCore::SVGPaint::createUnknown):
        (WebCore::SVGPaint::createNone):
        (WebCore::SVGPaint::createCurrentColor):
        (WebCore::SVGPaint::createColor):
        (WebCore::SVGPaint::createURI):
        (WebCore::SVGPaint::createURIAndColor):
        (WebCore::SVGPaint::createURIAndNone):
        (WebCore::SVGPaint::create):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::createElementRenderer):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::createElementRenderer):
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::createElementRenderer):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::createElementRenderer):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createElementRenderer):
        * svg/SVGSVGElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::createElementRenderer):
        * svg/SVGStopElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::createElementRenderer):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::createElementRenderer):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::create):
        (WebCore::SVGTRefElement::createElementRenderer):
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::createElementRenderer):
        * svg/SVGTSpanElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::createElementRenderer):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::createElementRenderer):
        * svg/SVGTextPathElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::createElementRenderer):
        * svg/SVGUseElement.h:

2014-12-13  Zalan Bujtas  <zalan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=139597
        rdar://problem/19237334
        Fixed positioned pseudo content does not get composited.

        Reviewed by Simon Fraser.

        This patch ensures that adjustRenderStyle() can access to settings even when Element* is null. 

        Test: compositing/fixed-positioned-pseudo-content-no-compositing.html

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

2014-12-12  Mark Rowe  <mrowe@apple.com>

        [Mac] Work around a bug in dsymutil on older OS versions
        <https://webkit.org/b/139609> / <rdar://problem/16045763>

        Older versions of dsymutil are unable to write out more than 2GB of symbols per architecture.
        WebCore has recently passed that threshold. To work around this we will reduce the level of
        symbols included in the dSYM bundles on the affected OS versions.

        Reviewed by Geoff Garen.

        * Configurations/Base.xcconfig: Include line tables only in the debug symbols for production
        builds on OS X 10.8 and 10.9.
        * Configurations/DebugRelease.xcconfig: Include full symbols in debug and release builds since they
        do not make use of dSYMs.

2014-12-12  Beth Dakin  <bdakin@apple.com>

        Need a fake mouse move after hiding data detectors UI
        https://bugs.webkit.org/show_bug.cgi?id=139608
        -and corresponding-
        rdar://problem/19221935

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-12-12  Dean Jackson  <dino@apple.com>

        [Media iOS] Inline video controls have an outlined scrubber
        https://bugs.webkit.org/show_bug.cgi?id=139602
        <rdar://problem/19184212>

        Reviewed by Eric Carlson.

        This is another change similar to https://bugs.webkit.org/show_bug.cgi?id=138378
        where the specificity of pseduo elements had changed, and thus iOS
        was inheriting some of the UA styles.

        The fix is to add some more style rules to ensure that the timeline track
        is drawn in white.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline): Border rules not needed here.
        (video::-webkit-media-controls-timeline::-webkit-slider-runnable-track): But are needed
        here, along with some other things.
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb): Now that the runnable
        track has some style, we need to account for the change.

2014-12-12  Anders Carlsson  <andersca@apple.com>

        Remove a workaround for a bug that was fixed in Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=139605

        Reviewed by Sam Weinig.

        * WebCorePrefix.h:
        (move): Deleted.

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

        https://bugs.webkit.org/show_bug.cgi?id=139596
        Subpixel rendering: REGRESSION (r163272): Fixed positioned pseudo content leaves trails while scrolling.
        rdar://problem/18697851

        Reviewed by Simon Fraser.

        Final repaint rect at FrameView::scrollContentsFastPath needs to be pixel aligned (as opposed to snap to int).
        However we can't pixelsnap it until after ScrollView finished transitioning to Float/LayoutRect.
        Use enclosing int rect for now to ensure scrolling does not leave trails.

        Unable to test. Apparently scrolling clears trails in dumprendertree. (repaint rects are not useful either with scrolling)

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

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

        REGRESSION (r168217): Images are cropped out during animation at jetblue.com
        https://bugs.webkit.org/show_bug.cgi?id=136410

        Reviewed by Dean Jackson.

        We were hitting the new assertion under Page::setPageScaleFactor(), which
        calls recalcStyle(), so move the AnimationUpdateBlock from updateStyleIfNeeded()
        to recalcStyle().

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateStyleIfNeeded):

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

        REGRESSION (r168217): Images are cropped out during animation at jetblue.com
        https://bugs.webkit.org/show_bug.cgi?id=136410
        rdar://problem/18188533

        Reviewed by Dean Jackson.
        
        During GraphicsLayer flushing, for tiled layers we can compute a visible rect using
        the current state of an animation, which is obtained via the AnimationController.
        If that animation was running in a subframe, AnimationController could use a stale
        beginAnimationUpdateTime since no-one called its beginAnimationUpdate(). That
        resulted in an incorrect computation of the visible rect, resulting in missing tiles.
        
        There are two parts to this fix. First, add an assertion that beginAnimationUpdateTime()
        is being called inside an animation update block. This required moving m_beginAnimationUpdateCount
        into AnimationControllerPrivate, and changes to endAnimationUpdate().
        
        The second is adding a AnimationUpdateBlock to getAnimatedStyleForRenderer(), which
        can be called outside of style resolution. We also need some in other API functions.
        
        Testing revealed that layout can call via layoutOverflowRectForPropagation(), suggesting
        that we should have an animation batch inside FrameView::layout(). In addition, a single
        resolveStyle/layout should use the same animationBeginTime, so we add a batch to 
        updateLayoutAndStyleIfNeededRecursive().
        
        No test because it's timing-dependent. Existing tests exercise the new assertion.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationPrivateUpdateBlock::AnimationPrivateUpdateBlock):
        (WebCore::AnimationPrivateUpdateBlock::~AnimationPrivateUpdateBlock):
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::AnimationControllerPrivate::beginAnimationUpdate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::AnimationController::AnimationController):
        (WebCore::AnimationController::notifyAnimationStarted):
        (WebCore::AnimationController::pauseAnimationAtTime):
        (WebCore::AnimationController::pauseTransitionAtTime):
        (WebCore::AnimationController::resumeAnimationsForDocument):
        (WebCore::AnimationController::startAnimationsIfNotSuspended):
        (WebCore::AnimationController::beginAnimationUpdate):
        (WebCore::AnimationController::endAnimationUpdate):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:

2014-12-12  Roger Fong  <roger_fong@apple.com>

        [Win] Unreviewed build fix following r177235.

        * WebCore.vcxproj/WebCore.vcxproj:

2014-12-12  Roger Fong  <roger_fong@apple.com>

        Implement EXT_blend_minmax as a WebGL 1 extension.
        https://bugs.webkit.org/show_bug.cgi?id=128974.
        <rdar://problem/19195535>

        Reviewed by Dean Jackson.

        Tested by:
        webgl/1.0.3/conformance/extensions/ext-blend-minmax.html
        fast/canvas/webgl/constants.html

        Specifications for this extension:
        https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * html/canvas/EXTBlendMinMax.cpp: Added.
        (WebCore::EXTBlendMinMax::EXTBlendMinMax):
        (WebCore::EXTBlendMinMax::~EXTBlendMinMax):
        (WebCore::EXTBlendMinMax::getName):
        * html/canvas/EXTBlendMinMax.h: Added.
        * html/canvas/EXTBlendMinMax.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateBlendEquation):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/Extensions3D.h:

2014-12-12  Benjamin Poulain  <bpoulain@apple.com>

        Remove the concept of simple selector from the parser
        https://bugs.webkit.org/show_bug.cgi?id=139575

        Reviewed by Mark Lam.

        We have complete support for nested selector list, we no longer
        need the old concept of simple selector.

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::isSimple): Deleted.
        * css/CSSParserValues.h:

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

        FontGlyphs::glyphDataAndPageForCharacter cleanups
        https://bugs.webkit.org/show_bug.cgi?id=139584

        Reviewed by Andreas Kling.

        Split it up and use helper functions.

        * WebCore.exp.in:
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::determinePitch):
        (WebCore::FontGlyphs::realizeFontDataAt):
        (WebCore::FontGlyphs::glyphDataAndPageForSystemFallback):
        (WebCore::FontGlyphs::glyphDataAndPageForVariant):

            Add private helpers.

        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):

            Do the m_pages cache lookup only once and use the pointer reference afterwards.

        * platform/graphics/FontGlyphs.h:
        (WebCore::FontGlyphs::fontSelector):
        (WebCore::FontGlyphs::widthCache):
        (WebCore::FontGlyphs::primaryFontData):
        (WebCore::FontGlyphs::isFixedPitch):
        (WebCore::FontGlyphs::primarySimpleFontData):

            Also removed the mutable attribute from the fields (almost everything was marked mutable) and made the inteface
            non-const. The FontGlyphs member of Font is already mutable so this is not needed.

2014-12-12  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for StyleRuleBase subclasses
        https://bugs.webkit.org/show_bug.cgi?id=139571

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for StyleRuleBase subclasses for safety and
        consistency.

        No new tests, no behavior change.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::reattach):
        * css/CSSKeyframesRule.h:
        (isType):
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::reattach):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::reattach):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addChildRules):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        (isType):
        (WebCore::toStyleRule): Deleted.
        * css/StyleRuleImport.h:
        (isType):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):
        (WebCore::StyleSheetContents::wrapperInsertRule):
        (WebCore::StyleSheetContents::addSubresourceStyleURLs):
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::reattach):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):

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

        [MSE] Add support for SourceBuffer.mode.
        https://bugs.webkit.org/show_bug.cgi?id=139265

        Reviewed by Eric Carlson.

        Support setting SourceBuffer's mode property, and add support for "sequence" mode. Prior
        to this change, "segments" mode was implied.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::regenerateActiveSourceBuffers):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::segmentsKeyword):
        (WebCore::SourceBuffer::sequenceKeyword):
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::setTimestampOffset):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::setMode):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

2014-12-12  Radu Stavila  <stavila@adobe.com>

        [SVG Masking] Enable the use of <mask> elements for -webkit-mask-image
        https://bugs.webkit.org/show_bug.cgi?id=139294

        Reviewed by Simon Fraser.

        This patch links together all parts required for the functionality which improves 
        the -webkit-mask-image property by allowing it to reference a <mask> element defined 
        in an inline or external SVG document.
        Support for this new functionality has been added in a previous patch, under issue
        https://bugs.webkit.org/show_bug.cgi?id=139092. A more detailed description of how
        the new functionality works can be found in the ChangeLog for that commit.
        The containsSVGDocument in ScrollView has been removed because it was added in the
        previous patch but is no longer required.

        Tests: css3/masking/mask-base64.html
               css3/masking/mask-multiple-values.html
               css3/masking/mask-svg-clipped-fragmentId.html
               css3/masking/mask-svg-fragmentId.html
               css3/masking/mask-svg-inline-fragmentId.html
               css3/masking/mask-svg-inline-invalid-fragmentId.html
               css3/masking/mask-svg-invalid-fragmentId.html
               css3/masking/mask-svg-no-fragmentId-tiled.html
               css3/masking/mask-svg-no-fragmentId.html
               css3/masking/mask-svg-script-entire-svg-to-mask.html
               css3/masking/mask-svg-script-mask-to-entire-svg.html
               css3/masking/mask-svg-script-mask-to-none.html
               css3/masking/mask-svg-script-mask-to-png.html
               css3/masking/mask-svg-script-none-to-mask.html
               css3/masking/mask-svg-script-none-to-png.html
               css3/masking/mask-svg-script-png-to-mask.html
               css3/masking/mask-svg-script-png-to-none.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseMaskImage):
        * css/CSSParser.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustStyleForMaskImages):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createMaskImageOperations):
        (WebCore::StyleResolver::loadPendingImages):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper):
        (WebCore::MaskImagePropertyWrapper::equals):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::~MaskImageOperation):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::maskClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::updateFillImages):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setMaskImage):
        * rendering/style/RenderStyle.h:

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

        Fix the !ENABLE(SVG_FONTS) build after r177078
        https://bugs.webkit.org/show_bug.cgi?id=139578

        Reviewed by Martin Robinson.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::dashesForIntersectionsWithRect):

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

        Simple line layout: Add 16bit support.
        https://bugs.webkit.org/show_bug.cgi?id=139469

        Reviewed by Antti Koivisto.

        This patch adds the 16bit support to simple line layout.

        Test: fast/inline/simple-line-layout-16bit-content.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::nextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::findNextNonWhitespace):
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::textWidth):
        (WebCore::SimpleLineLayout::FlowContents::runWidth):
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2014-12-12  ChangSeok Oh  <changseok.oh@collabora.com>

        Implement MemoryPressureHandler for Linux system
        https://bugs.webkit.org/show_bug.cgi?id=123532

        Reviewed by Sergio Villar Senin.

        This is an initial implementation to support MemoryPressureHandler for linux system.
        The patch is based on Tomeu's last patch and improved on top of it.
        Most of current linux distributions support cgroup, so that we use the memory.pressure_level
        mechanism of cgroup to get notifications when an application reaches the 'low' memory
        pressure level.

        No new tests since no engine behavior changed.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        * platform/MemoryPressureHandler.h:
        * platform/linux/MemoryPressureHandlerLinux.cpp: Added.
        (WebCore::nextToken):
        (WebCore::MemoryPressureHandler::~MemoryPressureHandler):
        (WebCore::MemoryPressureHandler::waitForMemoryPressureEvent): run in a seperated thread
        to listen 'low' level event.
        (WebCore::MemoryPressureHandler::logErrorAndCloseFDs):
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::uninstall):
        (WebCore::MemoryPressureHandler::holdOffTimerFired):
        (WebCore::MemoryPressureHandler::holdOff):
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        (WebCore::MemoryPressureHandler::platformReleaseMemory):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformLog):
        (WebCore::MemoryPressureHandler::ReliefLogger::platformMemoryUsage): read /proc/self/status
        to get VM amount used by current process.

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

        Layer borders on contentsLayers don't correctly toggle with the rest of the borders
        https://bugs.webkit.org/show_bug.cgi?id=139570
        rdar://problem/18007746

        Reviewed by Tim Horton.
        
        The "Show Debug Borders" toggle didn't cleanly remove layer borders from
        content layers (image, video), nor did it deal with cloned layers (reflections).
        
        Fix by making updateDebugBorder() update the layer borders on the contents
        layer and cloned layers, moving some code around to avoid having colors
        in more than one place. If the borders are hidden, send an invalid color
        to PlatformCALayer::setBorderColor(), which now knows to remove the color
        property on the layer (to avoid leaving transparent border color properties
        on CALayers).

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::setLayerDebugBorder):
        (WebCore::contentsLayerDebugBorderColor):
        (WebCore::cloneLayerDebugBorderColor):
        (WebCore::GraphicsLayerCA::updateDebugBorder):
        (WebCore::GraphicsLayerCA::setDebugBorder):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setBorderColor):

2014-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Crash when trying to inspect LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=139573

        Reviewed by Anders Carlsson.

        Move away from PageGroup::localStorage and instead to StorageNamespaceProvider.
        This matches what DOMWindow::localStorage does to get the StorageArea for a document.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):

2014-12-11  Simon Fraser  <simon.fraser@apple.com>

        Transform-style should not kill position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=138122

        Reviewed by Dean Jackson.
        
        Various bits of rendering code checked RenderObject::hasTransform() for various
        reasons. Confusingly, this meant "has transform, or preserve-3d, or perspective".
        
        This patch teases those behaviors apart to produce the following behavior:
        
        1. "transform" acts as containing block for fixed position (no behavior change).
        2. "transform" acts as containing block for absolute/relative position (no behavior change).
        3. "perspective" does not act as containing block for fixed position (no behavior change).
        4. "perspective" acts as containing block for absolute/relative position (no behavior change).
        5. "preserve-3d" does not act as containing block for fixed position (behavior change).
        6. "preserve-3d" acts as containing block for absolute/relative position. This is not a
        behavior change, but seems like incorrect behavior (https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566).
        However, we may be forced to keep it for compatibility.
        
        The gist of the change is to rename RenderObject::hasTransform() to RenderObject::hasTransformRelatedProperty(),
        and add hasTransform() with the more restrictive meaning. All call sites of hasTransform() were examined
        and fixed to produce the desired behaviors.

        Tests: transforms/2d/perspective-not-fixed-container.html
               transforms/2d/preserve3d-not-fixed-container.html
               transforms/perspective-is-containing-block-for-absolute.html
               transforms/preserve3d-is-containing-block-for-absolute.html
               transforms/transform-is-containing-block-for-absolute.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform): Now we can just test hasTransform().
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): For now, this
        can just use hasTransformRelatedProperty(), but if we change [6] above this will have
        to change (as documented in the comment). Also FIXME comments about sharing code.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::mapLocalToContainer): Can just use hasTransform() now.
        (WebCore::RenderBox::pushMappingToContainer): Ditto.
        (WebCore::RenderBox::mapAbsoluteToLocalPoint): Ditto.
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Ditto.
        * rendering/RenderBox.h: All transform-related properties create RenderLayers.
        * rendering/RenderBoxModelObject.h: Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderersViaLayers): Rename to clarify. We need to not map via
        layers if we have a perspective (since we need to generate a perspective matrix). It's
        OK with preserve-3d though.
        (WebCore::RenderGeometryMap::pushMappingsToAncestor):
        (WebCore::canMapBetweenRenderers): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateFromStyle):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform): Can just check hasTransform().
        (WebCore::RenderLayer::updateLayerPosition): Avoid calling parent() and enclosingPositionedAncestor() twice.
        (WebCore::RenderLayer::perspectiveTransform): Do the fast bit check hasTransformRelatedProperty() first.
        (WebCore::RenderLayer::perspectiveOrigin): Ditto.
        (WebCore::isContainerForPositioned): This code has to now have different behavior for absolute and fixed
        position. Changed it to call existing functions, rather than having a 3rd place that has to know about
        containing block rules.
        (WebCore::RenderLayer::enclosingAncestorForPosition): Call isContainerForPositioned() now.
        (WebCore::accumulateOffsetTowardsAncestor): Call enclosingAncestorForPosition().
        (WebCore::RenderLayer::createLocalTransformState):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::isPositionedContainer): Deleted.
        (WebCore::isFixedPositionedContainer): Deleted.
        (WebCore::RenderLayer::enclosingPositionedAncestor): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldUseTransformFromContainer): Can just check hasTransform() now.
        (WebCore::RenderObject::container):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasTransformRelatedProperty):
        (WebCore::RenderObject::hasTransform):
        (WebCore::RenderObject::setHasTransformRelatedProperty):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        (WebCore::RenderObject::setHasTransform): Deleted.
        * rendering/RenderTableRow.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer): nullptr goodness.
        (WebCore::RenderView::pushMappingToContainer): Ditto.
        (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto.

2014-12-11  Rich Tibbett <rich.tibbett@gmail.com>

        [iOS] Normalize iOS DeviceOrientation beta/gamma per spec.
        https://bugs.webkit.org/show_bug.cgi?id=137134
        <radr://problem/9414459>

        Reviewed by Benjamin Poulain.

        Normalize DeviceOrientation beta and gamma on iOS to match the
        conventions defined in the W3C DeviceOrientation Events specification.

        beta values are returned in the range [-180, 180). gamma values are
        returned in the range [-90, 90).

        * platform/ios/WebCoreMotionManager.mm:

2014-12-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r177081.
        https://bugs.webkit.org/show_bug.cgi?id=139569

        broke iOS video playback (Requested by eric_carlson on
        #webkit).

        Reverted changeset:

        "Fix iOS builders for 8.0"
        https://bugs.webkit.org/show_bug.cgi?id=139495
        http://trac.webkit.org/changeset/177081

2014-12-11  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Fix to build fix in r177134.

        * html/canvas/WebGLDrawBuffers.cpp: iOS should query the system for GL extension availability.

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

        Implement frag depth as a WebGL 1 extension.
        https://bugs.webkit.org/show_bug.cgi?id=133635.
        <rdar://problem/19195381>

        Reviewed by Dean Jackson.

        Test:
        webgl/1.0.3/conformance/extensions/ext-frag-depth.html

        Spec for this extension outlined here:
        http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * html/canvas/EXTFragDepth.cpp: Added.
        (WebCore::EXTFragDepth::EXTFragDepth):
        (WebCore::EXTFragDepth::~EXTFragDepth):
        (WebCore::EXTFragDepth::getName):
        * html/canvas/EXTFragDepth.h: Added.
        * html/canvas/EXTFragDepth.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::ensureEnabled):

2014-12-11  Chris Dumez  <cdumez@apple.com>

        Optimize RenderElement::rendererForRootBackground() a bit
        https://bugs.webkit.org/show_bug.cgi?id=139527

        Reviewed by Andreas Kling.

        Optimize RenderElement::rendererForRootBackground() a bit by not
        calling Document::body(). We are only interested in the child element
        with a <body> tag. However, Document::body() first checks if a
        <frameset> child is present.

        No new tests, no behavior change.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::rendererForRootBackground):

2014-12-11  Brendan Long  <b.long@cablelabs.com>

        Remove DataCue "text" attribute
        https://bugs.webkit.org/show_bug.cgi?id=139461

        Reviewed by Eric Carlson.

        * html/track/DataCue.cpp:
        * html/track/DataCue.h:
        * html/track/DataCue.idl:

2014-12-11  Alexey Proskuryakov  <ap@apple.com>

        Initialize m_ownsGeneratedFile when decoding a FormDataElement
        https://bugs.webkit.org/show_bug.cgi?id=139566

        Reviewed by Tim Horton.

        No tests, because it's random, and I couldn't reproduce an assertion failure in
        controlled circumstances.

        * platform/network/FormData.h: (WebCore::FormDataElement::decode): A newly created
        FormDataElement by definition doesn't own the file.

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

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

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Move the preview popover to WKImmediateActionController
        https://bugs.webkit.org/show_bug.cgi?id=139560
        <rdar://problem/19208291>

        Reviewed by Beth Dakin.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:
        Add some requisite SPI.

2014-12-11  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash in -[WebVideoFullscreenHUDWindowController playing] in WK1 clients without FULLSCREEN_API enabled.
        https://bugs.webkit.org/show_bug.cgi?id=139546

        Reviewed by Eric Carlson.

        Finish the work started by r173230 and rename mediaElement -> videoElement in WebVideoFullscreenHUDWindowController.

        * platform/mac/WebVideoFullscreenHUDWindowController.h:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController endScrubbing]):
        (-[WebVideoFullscreenHUDWindowController timelinePositionChanged:]):
        (-[WebVideoFullscreenHUDWindowController currentTime]):
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]):
        (-[WebVideoFullscreenHUDWindowController duration]):
        (-[WebVideoFullscreenHUDWindowController decrementVolume]):
        (-[WebVideoFullscreenHUDWindowController incrementVolume]):
        (-[WebVideoFullscreenHUDWindowController volume]):
        (-[WebVideoFullscreenHUDWindowController setVolume:]):
        (-[WebVideoFullscreenHUDWindowController playing]):
        (-[WebVideoFullscreenHUDWindowController setPlaying:]):
        (-[WebVideoFullscreenHUDWindowController remainingTimeText]):
        (-[WebVideoFullscreenHUDWindowController elapsedTimeText]):
        (-[WebVideoFullscreenHUDWindowController rewind:]):
        (-[WebVideoFullscreenHUDWindowController fastForward:]):

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncDeleteAllOrigins):

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Stop using SQLiteFileSystem in the storage code
        https://bugs.webkit.org/show_bug.cgi?id=139549

        Reviewed by Sam Weinig.

        Just inline the SQLiteFileSystem calls into their respective call sites.
        This is more preparation for moving the old storage code into WebKit proper.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::deleteEmptyDatabase):
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::ensureDatabaseFileExists):
        (WebCore::StorageTracker::openTrackerDatabase):
        (WebCore::truncateDatabaseFile):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::diskUsageForOrigin):

2014-12-11  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed, rolling out r177155.

        Caused crashes on webarchive tests.

        Reverted changeset:

        "[SVG Masking] Enable the use of <mask> elements for -webkit-
        mask-image"
        https://bugs.webkit.org/show_bug.cgi?id=139294
        http://trac.webkit.org/changeset/177155

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Call StorageThread::releaseFastMallocFreeMemoryInAllThreads from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139547

        Reviewed by Sam Weinig.

        This is another step towards moving StorageThread (and friends) to WebKit.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseMemory):

2014-12-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        ASSERTION FAILED: animatedTypes[0].properties.size() == 1 in WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue.
        https://bugs.webkit.org/show_bug.cgi?id=139046.

        Reviewed by Dirk Schulze.

        Test: svg/animations/unsupported-animate-element-attributes.svg.
        
        The SVG base animator element should not animate an attribute if it is not
        supported by the target SVG element. Besides the CSS presentation attributes, 
        every SVG element defines which attributes can be animated by including them
        between BEGIN_DECLARE_ANIMATED_PROPERTIES and END_DECLARE_ANIMATED_PROPERTIES
        in the definition of the class. This definition builds attribute-properties map.
        When restarting the animation, the animator looks for all the attributes that
        match the animated attribute name. If the supported attribute-properties map
        does not include the animated attribute name, an empty element-properties list
        should be returned. When getting an empty element-properties list, the animator
        should not start any animation for the unsupported attribute.

        Do not start the animation if the animated attribute is not supported by 
        the target SVG element.
        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        
        Return an empty element-properties list if the animated attribute is not
        supported by the target SVG element.
        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):

2014-12-10  Dean Jackson  <dino@apple.com>

        InstancedArray crashes attempting to draw out of bounds
        https://bugs.webkit.org/show_bug.cgi?id=139521

        Reviewed by Simon Fraser.

        We were not doing index validation correctly for instancing.

        Test: fast/canvas/webgl/angle-instanced-arrays-out-of-bounds.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateVertexAttributes): We need to check
        the number of instances drawn against the amount of instance data that has
        been provided, taking into account the number of repeats (the divisor).
        (WebCore::WebGLRenderingContext::drawArrays): Added some whitespace to make it more clear.
        (WebCore::WebGLRenderingContext::validateDrawElements): This needs to take a primcount
        parameter so that it can correctly validate the call (when used from drawElementsInstanced).
        (WebCore::WebGLRenderingContext::drawElements): New signature to validate.
        (WebCore::WebGLRenderingContext::drawArraysInstanced): Rearrange this a bit. The
        primcount validation is already being done by the validateDrawArrays call. Also, there
        was a bogus UNUSED_PARAM hanging around.
        (WebCore::WebGLRenderingContext::drawElementsInstanced): Similar rearrangement. Use
        the primcount parameter.
        * html/canvas/WebGLRenderingContext.h:

2014-12-11  Radu Stavila  <stavila@adobe.com>

        [SVG Masking] Enable the use of <mask> elements for -webkit-mask-image
        https://bugs.webkit.org/show_bug.cgi?id=139294

        Reviewed by Simon Fraser.

        This patch links together all parts required for the functionality which improves 
        the -webkit-mask-image property by allowing it to reference a <mask> element defined 
        in an inline or external SVG document.
        Support for this new functionality has been added in a previous patch, under issue
        https://bugs.webkit.org/show_bug.cgi?id=139092. A more detailed description of how
        the new functionality works can be found in the ChangeLog for that commit.
        The containsSVGDocument in ScrollView has been removed because it was added in the
        previous patch but is no longer required.

        Tests: css3/masking/mask-base64.html
               css3/masking/mask-multiple-values.html
               css3/masking/mask-svg-clipped-fragmentId.html
               css3/masking/mask-svg-fragmentId.html
               css3/masking/mask-svg-inline-fragmentId.html
               css3/masking/mask-svg-inline-invalid-fragmentId.html
               css3/masking/mask-svg-invalid-fragmentId.html
               css3/masking/mask-svg-no-fragmentId-tiled.html
               css3/masking/mask-svg-no-fragmentId.html
               css3/masking/mask-svg-script-entire-svg-to-mask.html
               css3/masking/mask-svg-script-mask-to-entire-svg.html
               css3/masking/mask-svg-script-mask-to-none.html
               css3/masking/mask-svg-script-mask-to-png.html
               css3/masking/mask-svg-script-none-to-mask.html
               css3/masking/mask-svg-script-none-to-png.html
               css3/masking/mask-svg-script-png-to-mask.html
               css3/masking/mask-svg-script-png-to-none.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseMaskImage):
        * css/CSSParser.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustStyleForMaskImages):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createMaskImageOperations):
        (WebCore::StyleResolver::loadPendingImages):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::MaskImagePropertyWrapper::MaskImagePropertyWrapper):
        (WebCore::MaskImagePropertyWrapper::equals):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/MaskImageOperation.cpp:
        (WebCore::MaskImageOperation::~MaskImageOperation):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::maskClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::updateFillImages):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setMaskImage):
        * rendering/style/RenderStyle.h:

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Restore interface state when stopping optimized fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=139465

        Reviewed by Simon Fraser.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController fullscreenMayReturnToInline:]): add empty implementation.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: add declaration
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): restore interface context when optimized mode ends.
        (WebVideoFullscreenInterfaceAVKit::setIsOptimized): restore interface context when optimized mode ends.

2014-12-11  Anders Carlsson  <andersca@apple.com>

        Remove unused storage header includes
        https://bugs.webkit.org/show_bug.cgi?id=139540

        Reviewed by Antti Koivisto.

        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaSync.cpp:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace): Deleted.
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace): Deleted.
        (WebCore::StorageNamespaceImpl::transientLocalStorageNamespace): Deleted.
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        * storage/StorageThread.cpp:
        * storage/StorageTracker.cpp:

2014-12-11  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Async Text Input): Text input method state is not reset when reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=139504
        rdar://problem/19034674

        Reviewed by Enrica Casucci.

        Explicitly notify EditorClient when a composition is voluntarily canceled by WebCore.
        These are almost certainly not all the places where this happens, but this fixes the bug,
        and lays the groundwork for using this new client call instead of didChangeSelection
        hacks.

        * editing/Editor.cpp:
        (WebCore::Editor::clear):
        (WebCore::Editor::cancelComposition):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willTransitionToCommitted):
        * page/EditorClient.h:

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

        Get rid of the storage strategy
        https://bugs.webkit.org/show_bug.cgi?id=139519

        Reviewed by Antti Koivisto.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::sessionStorage):
        (WebCore::Page::setStorageNamespaceProvider):
        * page/Page.h:
        (WebCore::Page::storageNamespaceProvider):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        (WebCore::PageGroup::transientLocalStorage):
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies):
        (WebCore::PlatformStrategies::storageStrategy): Deleted.
        * storage/StorageNamespace.cpp: Removed.
        * storage/StorageNamespace.h:
        * storage/StorageStrategy.cpp: Removed.
        * storage/StorageStrategy.h: Removed.

2014-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move click counter logic back to WebKitWebViewBase
        https://bugs.webkit.org/show_bug.cgi?id=137685

        Reviewed by Martin Robinson.

        Remove GtkClickCounter.

        * PlatformGTK.cmake:
        * platform/gtk/GtkClickCounter.cpp: Removed.
        * platform/gtk/GtkClickCounter.h: Removed.

2014-12-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement sizes attribute for link tag
        https://bugs.webkit.org/show_bug.cgi?id=125775

        Reviewed by Martin Robinson.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_link_element_set_sizes): Add custom setter implementation.
        * bindings/gobject/WebKitDOMCustomUnstable.h:
        * bindings/js/JSHTMLLinkElementCustom.cpp:
        (WebCore::JSHTMLLinkElement::sizes): Remove custom getter implementation.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (HasUnstableCustomAPI): Mark WebKitDOMHTMLLinkElement as having custom unstable API.
        * html/HTMLLinkElement.idl: Mark sizes attribute as CustomSetter
        instead of Custom, since the getter can be autogenerated, and make
        it available to the GObject DOM bindings too.

2014-12-10  Chris Dumez  <cdumez@apple.com>

        http://omfgdogs.info/ only animates when you resize the window
        https://bugs.webkit.org/show_bug.cgi?id=139435
        <rdar://problem/19190493>

        Reviewed by Simon Fraser.

        After r163928, we would fail to animate a gif if:
        - it is used as a background image of a 0-height html element
        - it is used as a background image of a 0-height body element whose
          background is delegated to the root (because the root has no
          background).

        This is because in such cases, shouldRepaintForImageAnimation()
        should use the background rect instead of the renderer's overflow
        rect to determine if the image is inside the viewport. Both cases
        are addressed in this patch.

        Tests: fast/images/animated-gif-body-delegated-background-image.html
               fast/images/animated-gif-body-outside-viewport.html
               fast/images/animated-gif-html-background-image.html

        * rendering/RenderElement.cpp:
        (WebCore::shouldRepaintForImageAnimation):
        * testing/Internals.cpp:
        (WebCore::Internals::hasPausedImageAnimations):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * html/canvas/WebGLDrawBuffers.cpp:
        Yosemite is 101000, not 10100.
        Also, __MAC_OS_X_VERSION_MIN_REQUIRED is only defined for PLATFORM(MAC).

2014-12-10  Zalan Bujtas  <zalan@apple.com>

        Continuously repainting large parts of Huffington Post.
        https://bugs.webkit.org/show_bug.cgi?id=139468

        Reviewed by Antti Koivisto.

        This patch eliminates redundant repaint requests for inlines when neither the parent
        block flow nor any of the inline children are dirty.
        Previously,
        1. simple line layout always recalculated inline content positions regardless of whether
        the content needed relayout at all; as a result, it always triggered full repaint.
        2. inline tree layout ignored the needslayout flag on the last line and treated it dirty
        (unless it broke cleanly (<div>foo<br></div>)).
        This was an ancient workaround for an editing/insert use case, but it seems not to be the case anymore.

        Tests: fast/repaint/implicitly-positioned-block-repaint-complex-line-layout.html
               fast/repaint/implicitly-positioned-block-repaint-simple-line-layout.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::layoutSimpleLines): Check if we need to trigger layout at all.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::determineStartPosition): Remove the last line dirty hack. If it
        happens to introduce regression, we should fix it at the caller site to make the line dirty.

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

        Add an empty storage namespace provider
        https://bugs.webkit.org/show_bug.cgi?id=139520

        Reviewed by Tim Horton.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):

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

        Speculative build fix.

        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h:

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

        WK2: Add initial support for immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139511

        Reviewed by Tim Horton.

        SPI needed for immediate actions.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSImmediateActionGestureRecognizerSPI.h: Added.

2014-12-10  Martin Hock  <mhock@apple.com>

        [iOS] Add setting to ignore viewport scaling constraints
        https://bugs.webkit.org/show_bug.cgi?id=139466
        <rdar://problem/19200328>

        Reviewed by Benjamin Poulain.

        * WebCore.exp.in:
        * page/Settings.in: Add setting to ignore viewport scaling constraints.
        * page/ViewportConfiguration.cpp: Ignore viewport scaling constraints based on preference.
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::allowsUserScaling):
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::setIgnoreScalingConstraints):
        (WebCore::ViewportConfiguration::allowsUserScaling): Moved to cpp.

2014-12-10  Andreas Kling  <akling@apple.com>

        Speculative fix for assertion "frame().view() == this"
        <rdar://problem/18419449>

        Rubber-stamped by Anders Carlsson.

        I have not reproduced this issue, but we can safely ignore animation
        notifications for cached pages.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::newImageAnimationFrameAvailable):

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

        Add session storage handling to StorageNamespaceProvider
        https://bugs.webkit.org/show_bug.cgi?id=139507

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        * storage/StorageNamespaceProvider.h:

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

        Unreviewed. Follow-up patch to r177099.
        https://bugs.webkit.org/show_bug.cgi?id=133634
        <rdar://problem/15949588>

        Enable GL_EXT_draw_buffers on iOS as well.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):

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

        Implement Multiple Render Targets as WebGL 1 extension.
        https://bugs.webkit.org/show_bug.cgi?id=133634.
        <rdar://problem/15949588>

        Reviewed by Brent Fulgham.

        Tested by:
        webgl/1.0.3/conformance/extensions/webgl-draw-buffers.html

        Enable the implementation now that an underlying driver bug has been resolved.
        Do not enable for desktop platforms older that OS X 10.10.
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::supported):

2014-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r164329): Input fields are not honoring the maxlength attribute
        https://bugs.webkit.org/show_bug.cgi?id=139447

        Reviewed by Benjamin Poulain.

        The bug was caused by String::substring being called with the selection's end offset
        in the second argument instead of the selection's length in handleBeforeTextInsertedEvent.

        Fixed the bug by passing the right second argument to String::substring.

        Test: fast/forms/input-maxlength-inserting-in-middle.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):

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

        Add a missing null check.

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

2014-12-10  Antti Koivisto  <antti@apple.com>

        Crash when creating CSSCalcBinaryOperation
        https://bugs.webkit.org/show_bug.cgi?id=134886
        rdar://problem/17663561

        Reviewed by Chris Dumez.

        Test: fast/css/calc-binary-operation-crash.html

        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):

        Ensure that both axis are within the addSubtractResult table.
        Remove unneeded CalcOther test. The call site guarantees it doesn't happen and the normal cases would handle it anyway.
        Also strengthen some asserts.

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

        Add WebStorageNamespaceProvider::closeLocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=139502

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        Call StorageNamespaceProvider::removePage.

        * storage/StorageNamespaceProvider.h:
        (WebCore::StorageNamespaceProvider::optionalLocalStorageNamespace):
        Helper function that returns the local storage namespace if one exists.

2014-12-10  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] MathML tokens with text fail to expose their text content via AtkText
        https://bugs.webkit.org/show_bug.cgi?id=139454

        Reviewed by Chris Fleizach.

        Expose the text content of the element for non-anonymous RenderMathMLOperators.
        This is needed because for ATK we expose the rendered element itself; not the
        descendant text renderers. Also include MathML tokens as objects which should
        implement AtkText.

        Test: accessibility/math-text.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

2014-12-10  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Use appsrcs instead of unconnected queues
        https://bugs.webkit.org/show_bug.cgi?id=139490

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcFinalize):
        (webKitWebAudioSrcSetProperty):
        (webKitWebAudioSrcLoop):
        (webKitWebAudioSrcChangeState):
        Previously we directly chained buffers into unconnected queues,
        which confused some code inside GStreamer and caused some harmless
        warnings. Now we use appsrcs instead, which also allows us to remove
        quite some code.

2014-12-10  Enrica Casucci  <enrica@apple.com>

        Fix iOS builders for 8.0
        https://bugs.webkit.org/show_bug.cgi?id=139495

        Reviewed by Eric Carlson.

        * WebCore.exp.in:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:mode:]):
        (-[WebVideoFullscreenController requestHideAndExitFullscreen]):
        (-[WebVideoFullscreenController enterFullscreen:]): Deleted.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:


2014-12-10  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Cache entry is sometimes deleted when request receives a not modified response.
        https://bugs.webkit.org/show_bug.cgi?id=139339

        Reviewed by Alex Christensen.

        Sometimes it happens that a request receives a not modified response,
        but the cache entry has already been deleted by another request.
        This can be avoided by locking a cache entry while there are pending
        requests for the cache entry's url.

        * platform/network/curl/CurlCacheEntry.h:
        (WebCore::CurlCacheEntry::addClient):
        (WebCore::CurlCacheEntry::removeClient):
        (WebCore::CurlCacheEntry::hasClients):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didFail):
        (WebCore::CurlCacheManager::addCacheEntryClient):
        (WebCore::CurlCacheManager::removeCacheEntryClient):
        * platform/network/curl/CurlCacheManager.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::isHttpNotModified):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2014-12-10  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Use a buffer pool for allocations in the AudioDestination
        https://bugs.webkit.org/show_bug.cgi?id=139487

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):
        (webKitWebAudioSrcChangeState):
        Use a buffer pool for the allocations instead of allocating a
        new small buffer for every 128 samples we produce.

2014-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Add support for text-decoration-skip
        https://bugs.webkit.org/show_bug.cgi?id=131540

        Reviewed by Gustavo Noronha Silva.

        No new tests. This is covered by existing layout tests.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::GlyphIterationState): Added this class, a modified version of the Mac
        port's implementation.
        (WebCore::Font::dashesForIntersectionsWithRect): Ditto.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Added an implementation for
        HarfBuzz that just fills out the GlyphBuffer, but does not render it.
        (WebCore::Font::drawComplexText): Use the new getGlyphsAndAdvancesForComplexText
        in a similar way to the Mac port.
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::fillGlyphBufferFromHarfBuzzRun): We need to pass the current
        character index to GlyphBuffer:add since it's used by dashesForIntersectionsWithRect
        and otherwise it will be uninitialized when we try to access it.

2014-12-10  Andreas Kling  <akling@apple.com>

        REGRESSION(r177048) 11 failures on layout tests fast/selectors.
        <https://webkit.org/b/139483>

        Unreviewed fix for bots.

        When rolling out the broken change, I accidentally also rolled out
        a bug fix that Benjamin had made to sibling invalidation.
        Restore his implementation of nodeOrItsAncestorNeedsStyleRecalc().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc):
        (WebCore::updateStyleIfNeededForNode):
        (WebCore::ComputedStyleExtractor::propertyValue):

2014-12-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] AudioSourceProvider support in the MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=78883

        Reviewed by Gustavo Noronha Silva.

        GStreamer-based audio source provider for the GTK and EFL
        ports. This new component gathers decoded raw audio data from the
        MediaPlayer and pipes it to an AudioBus when required by the
        User Agent.

        * PlatformEfl.cmake: New files in the build.
        * PlatformGTK.cmake: Ditto.
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp: Added.
        (WebCore::onAppsinkNewBufferCallback): Function called when a new
        buffer can be pulled from appsink.
        (WebCore::onGStreamerDeinterleavePadAddedCallback): Function
        called when a new source pad has been added to deinterleave.
        (WebCore::onGStreamerDeinterleaveReadyCallback): Function called
        when the deinterleave element completed the configuration of all
        its source pads.
        (WebCore::copyGstreamerBuffersToAudioChannel): Called for each
        channel of the AudioBus that needs data as input.
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        Create an audio bin that by default routes buffers only to
        autoaudiosink. A new route is added if the provider has a client.
        (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer):
        Clean buffer adapters and audio bin.
        (WebCore::AudioSourceProviderGStreamer::configureAudioBin):
        (WebCore::AudioSourceProviderGStreamer::provideInput): Transfer
        data from the buffer adapters to the bus channels.
        (WebCore::AudioSourceProviderGStreamer::handleAudioBuffer): Pull a
        buffer from appsink and queue it to the buffer adapter.
        (WebCore::AudioSourceProviderGStreamer::setClient): Complete the
        construction of the audio bin by adding a new chain to the tee
        element. This new chain will deinterleave the buffer stream to
        planar audio channels and route them to an appsink per channel for
        data extraction.
        (WebCore::AudioSourceProviderGStreamer::handleNewDeinterleavePad):
        A new appsink after a new source pad has been added to deinterleave.
        (WebCore::AudioSourceProviderGStreamer::deinterleavePadsConfigured):
        Configure the client Node format (number of channels and sample
        rate) once the provider knows how many audio channels are managed
        by the pipeline.
        (WebCore::cleanUpElementsAfterDeinterleaveSourcePadCallback):
        (WebCore::AudioSourceProviderGStreamer::cleanUpElementsAfterDeinterleaveSourcePad):
        Remove the elements after the given deinterleave source pad.
        (WebCore::AudioSourceProviderGStreamer::reset): Cleanup the
        deinterleave source pads. This is especially needed before the
        whole pipeline goes to NULL and later on prerolls again.
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h: Added.
        (WebCore::AudioSourceProviderGStreamer::create): Use this to
        create the provider and get an OwnPtr of it.
        (WebCore::AudioSourceProviderGStreamer::client): Provider client getter.
        (WebCore::AudioSourceProviderGStreamer::getAudioBin): Audio bin
        getter, used by the media player to configure its
        playbin::audio-sink property.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        Provider life cycle management and reset the audio provider before
        going to NULL.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::handlePluginInstallerResult): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::cancelLoad): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::didEnd): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink): Configure
        the audio source provider if needed.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::audioSourceProvider):
        Provider getter, used by MediaPlayer and MediaElement.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Scrolling to anchor tags does nothing in vertical-rl writing mode
        https://bugs.webkit.org/show_bug.cgi?id=137838

        Reviewed by David Hyatt.

        Scroll to a particular tag, and make sure the viewport is rendered as expected.

        Tests: fast/events/scroll-to-anchor-vertical-lr-writing-mode.html
               fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html
               fast/events/scroll-to-anchor-vertical-writing-mode-contained.html
               fast/events/scroll-to-anchor-vertical-writing-mode.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        * rendering/ScrollBehavior.cpp:
        * rendering/ScrollBehavior.h:

2014-12-09  Bem Jones-Bey  <bjonesbe@adobe.com>

        REGRESSION(r155906): Page content disappears on Tuaw article after loading
        https://bugs.webkit.org/show_bug.cgi?id=138100

        Reviewed by Simon Fraser.

        Test: ManualTests/float-layer-not-painting.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertFloatingObject): If a layout happens,
        it can change whether the float's renderer has a self painting layer.
        So in that case, we need to update the flag on the FloatingObject
        instance for that float.

2014-12-09  Andreas Kling  <akling@apple.com>

        Roll out r165076.
        <rdar://problem/18490587>

        This change broke selection when editing Confluence wiki pages.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * dom/Document.cpp:
        (WebCore::nodeOrItsAncestorNeedsStyleRecalc): Deleted.
        (WebCore::Document::updateStyleIfNeededForNode): Deleted.
        * dom/Document.h:
        * editing/htmlediting.cpp:
        (WebCore::isEditablePosition):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix iOS build after r177035.

        Unreviewed.

        I accidentally added my line to WebCore.exp.in inside an
        #IF PLATFORM(MAC) block.

        * WebCore.exp.in:

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Enable automatic optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=139437

        Reviewed by Eric Carlson.

        Anticipate transition to optimized video fullscreen mode when entering background.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::overrideBackgroundPlaybackRestriction): Add logic for automatic transition detection.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::mayAutomaticallyShowVideoOptimized): Add logic for automatic transition detection.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Node::boundingBox()
        https://bugs.webkit.org/show_bug.cgi?id=139333

        Conceptually, boundingBox() should be on RenderInline. In addition,
        Node::boundingBox() is completely broken for inline elements: it
        makes a rect from the top left of the first inline child to the
        bottom right of the last inline child, disregarding the intermediate
        inline children. This breaks with vertical text and with line
        breaks.

        What makes this problem worse is that some functions actually rely
        on this bad behavior. These functions are functions that use the
        Node's so-called "bounding box" to scroll to an anchor tag.

        This patch goes through all the call sites of Node::boundingBox(),
        and segregates them into calls that expect the true bounding box
        and calls that need this false bounding box. This patch then moves
        this false bounding box into RenderElement, using the name
        anchorRect(). Callers what want the correct bounding box have been
        updated to use RenderElement::absoluteBoundingBoxRect().

        Reviewed by Zalan Bujtas.

        No new tests because there should be no behavior change.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect): Use
        RenderObject::absoluteBoundingBoxRect()
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner): Deleted.
        (WebCore::ContainerNode::getLowerRightCorner): Deleted.
        (WebCore::ContainerNode::boundingBox): Deleted.
        * dom/ContainerNode.h:
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView): Use RenderElement::anchorRect().
        (WebCore::Element::scrollIntoViewIfNeeded): Ditto.
        (WebCore::Element::updateFocusAppearance): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::boundingBox): Deleted.
        * dom/Node.h:
        (WebCore::Node::pixelSnappedBoundingBox): Deleted.
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::elementRectRelativeToRootView): Use
        RenderObject::absoluteBoundingBoxRect()
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters): Ditto.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollElementToRect): Use
        RenderElement::anchorRect().
        (WebCore::FrameView::scrollToAnchor): Ditto.
        * page/SpatialNavigation.cpp:
        (WebCore::nodeRectInAbsoluteCoordinates): Use
        RenderObject::absoluteBoundingBoxRect()
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getUpperLeftCorner): Moved from ContainerNode.
        (WebCore::RenderElement::getLowerRightCorner): Moved from
        ContainerNode.
        (WebCore::RenderElement::anchorRect): Moved from ContainerNode.
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::topOfFirstText): Helper for
        RenderElement::anchorRect()
        * rendering/RenderText.h:

2014-12-09  Antti Koivisto  <antti@apple.com>

        REGRESSION (r173272): When open PDF from Safari in iBooks, title is replaced to “QuickLookPDF-s72DbgAU-1”
        https://bugs.webkit.org/show_bug.cgi?id=139453
        rdar://problem/19052192

        Reviewed by Pratik Solanki.

        Pulling the suggested filename from the platform response returned null string on USE(CFNETWORK) code path
        if it was the first thing needed from it.

        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformSuggestedFilename): Use the lazy accessor.

2014-12-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] MathML tokens, tables, and row-like elements are exposed with ATK_ROLE_UNKNOWN
        https://bugs.webkit.org/show_bug.cgi?id=139402

        Reviewed by Chris Fleizach.

        Expose tables and their children using existing table AtkRole types,
        token elements using the new ATK_ROLE_STATIC, and row-like elements
        using ATK_ROLE_PANEL. Also expose <mlabeledtr> as a math table row
        and <ms> as math text.

        No new tests; instead, added MathML elements to roles-exposed.html.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMathToken):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isMathToken):
        (WebCore::AccessibilityRenderObject::isMathText):
        (WebCore::AccessibilityRenderObject::isMathTableRow):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * css/mathml.css:
        (ms, mi, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose):
        (mi, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose): Deleted.
        * mathml/mathtags.in:

2014-12-09  Dean Jackson  <dino@apple.com>

        [Apple] Use Accelerate framework to speed-up FEGaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=139310

        Unreviewed followup, after comments by Andreas Kling.

        It was pointed out that we already have a USE(ACCELERATE), so
        we don't need a HAVE(ACCELERATE) :)

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::platformApply):

2014-12-09  Alberto Garcia  <berto@igalia.com>

        Unreviewed. Style fix following r177019.

        Use nullptr instead of 0.

        * bindings/gobject/ConvertToUTF8String.cpp:
        (convertToUTF8String):

2014-12-09  Javier Fernandez  <jfernandez@igalia.com>

        Refactor of rebuildFloatingObjectSetFromIntrudingFloats function after r176957.
        https://bugs.webkit.org/show_bug.cgi?id=139445

        Reviewed by Darin Adler.

        The function rebuildFloatingObjectSetFromIntrudingFloats would be clearer if
        we use a helper function to locate the previous sibling with overhanging floats.

        These changes has been suggested as part of the patch review for bug #139150, which
        landed in r176957.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::avoidsFloats):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::previousSiblingWithOverhangingFloats):
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem):

2014-12-09  Alberto Garcia  <berto@igalia.com>

        convertToUTF8String converts null string to empty string
        https://bugs.webkit.org/show_bug.cgi?id=133904

        Reviewed by Carlos Garcia Campos.

        Test added to Tools/TestWebKitAPI/Tests/WebKit2Gtk/DOMNodeTest.cpp

        Return 0 if the string is null.

        * bindings/gobject/ConvertToUTF8String.cpp:
        (convertToUTF8String):

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        When invalidating fullscreen, cancel instead of stop optimizedFullscfreen.
        https://bugs.webkit.org/show_bug.cgi?id=139145

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::invalidate): call cancel instead of stop
        * platform/spi/ios/AVKitSPI.h: add -cancelOptimizedFullscreen.

2014-12-09  Alberto Garcia  <berto@igalia.com>

        [Media][GTK][EFL] Reduce style updates (painting) in controls
        https://bugs.webkit.org/show_bug.cgi?id=137773

        Reviewed by Carlos Garcia Campos.

        Don't update media controls if they are not visible, and
        initialize slider to a zero value.

        * Modules/mediacontrols/mediaControlsBase.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleDurationChange):
        (Controller.prototype.updateProgress):
        (Controller.prototype.updateTime):
        * Modules/mediacontrols/mediaControlsGtk.js:
        (ControllerGtk.prototype.updateTime):

2014-12-09  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Add video/mp2t as alternative mimetype for MPEG TS
        https://bugs.webkit.org/show_bug.cgi?id=139433

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):
        It's used e.g. on http://www.jwplayer.com/html5/mediasource/ .

2014-12-09  Jeremy Jones  <jeremyj@apple.com>

        Enable activating optimized fullscreen mode from standard fulscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=139137

        Reviewed by Jer Noble.

        Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
        update the fullscreen mode in HTMLMediaElement and a new standard-and-optimized-fullscreen mode.

        This change KVO observes AVKit's optimizedFullscreenActive and forwards the change down to HTMLMediaElement so it can adjust behavior appropriately.
        It also hides the standard fullscreen window when going into this mode.
        When exiting fullscreen from standard-and-optimized, first exit fullscreen immediately, then stopOptimizedFullscreen, and notify of completion when
        optimizedFullscreen goes inactive.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::fullscreenMode):
            Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
        * WebCore.exp.in: New export for WebVideoFullscreenModelVideoElement::fullscreenModeChanged
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::displayType):
            Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
        * html/HTMLMediaElement.h: Add new fullscreen mode.
        (WebCore::HTMLMediaElement::fullscreenModeChanged): Update fullscreen mode so it does optimized fullscreen mode behaviors when applicable.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare setOptimizedActive
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVVideoLayer setPlayerViewController:]): observe optimizedFullscreenActive
        (-[WebAVVideoLayer observeValueForKeyPath:ofObject:change:context:]): respond to changes to optimizedFullscreenActive
        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit): Init members.
        (WebVideoFullscreenInterfaceAVKit::playerController): 
            Give player controller a reference to the WebVideoFullscreenInterface so it can pass along mode change state.
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Handle new fullscreen modes.
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::invalidate): ditto
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::setOptimizedActive): Handle changes to fullscreen mode.
            Also handle the case that exiting fullscreen happend when optimized mode ends.
        * platform/ios/WebVideoFullscreenModel.h: declare fullscreenModeChanged()
        * platform/ios/WebVideoFullscreenModelVideoElement.h: declare fullscreenModeChanged()
        * platform/ios/WebVideoFullscreenModelVideoElement.mm: add fullscreenModeChanged()
        (WebVideoFullscreenModelVideoElement::WebVideoFullscreenModelVideoElement): Init members.
        (WebVideoFullscreenModelVideoElement::fullscreenModeChanged): Added. Update video element fullscreen mode.

2014-12-08  Benjamin Poulain  <bpoulain@apple.com>

        Fix the iOS build after r177002

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):

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

        Implementation EXT_sRGB as a WebGL1 extension.
        https://bugs.webkit.org/show_bug.cgi?id=109332.
        <rdar://problem/17363470>

        Reviewed by Dean Jackson.

        Tested by:
        webgl/1.0.3/conformance/webgl/ext-sRGB.html
        fast/canvas/webgl/constants.html

        This patch implements the SRGB extension for WebGL1.
        Details of the extension specification are outlined here: 
        https://www.khronos.org/registry/webgl/extensions/EXT_sRGB/

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * html/canvas/EXTsRGB.cpp: Added.
        (WebCore::EXTsRGB::EXTsRGB):
        (WebCore::EXTsRGB::~EXTsRGB):
        (WebCore::EXTsRGB::getName):
        * html/canvas/EXTsRGB.h: Added.
        * html/canvas/EXTsRGB.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::checkStatus):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::getClearBitsByFormat):
        (WebCore::GraphicsContext3D::getChannelBitsByFormat):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):

2014-12-08  Dean Jackson  <dino@apple.com>

        [Apple] Use Accelerate framework to speed-up FEGaussianBlur
        https://bugs.webkit.org/show_bug.cgi?id=139310
        <rdar://problem/18434594>

        Reviewed by Simon Fraser.

        Using Apple's Accelerate framework provides faster blurs
        than the parallel jobs approach, especially since r168577
        which started performing retina-accurate filters.

        Using Accelerate.framework to replace the existing box blur (what
        we use to approximate Gaussian blurs) gets about a 20% speedup on
        desktop class machines, but between a 2x-6x speedup on iOS hardware.
        Obviously this depends on the size of the content being blurred,
        but it is still good.

        The change is to intercept the platformApply function on
        FEGaussianBlur and send it off to Accelerate.

        There is an interactive performance test: PerformanceTests/Interactive/blur-filter-timing.html

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::kernelPosition): Move this to a file static function from the .h.
        (WebCore::accelerateBoxBlur): The Accelerate implementation.
        (WebCore::standardBoxBlur): The default generic/standard implementation.
        (WebCore::FEGaussianBlur::platformApplyGeneric): Use accelerate or the default form.
        (WebCore::FEGaussianBlur::platformApply): Don't try the parallelJobs approach if Accelerate is available.
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::kernelPosition): Deleted. Move into the .cpp.

2014-12-08  Beth Dakin  <bdakin@apple.com>

        Copy and Lookup menu items should be disabled when something is not copyable
        https://bugs.webkit.org/show_bug.cgi?id=139423

        Reviewed by Tim Horton.

        New function allowCopy() indicates whether the HitTestResult would allow itself to 
        be copied onto the pasteboard.
        * WebCore.exp.in:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::allowsCopy):
        * rendering/HitTestResult.h:

2014-12-08  Chris Dumez  <cdumez@apple.com>

        Move 'text-shadow' check from RenderStyle::changeRequiresLayout() to changeAffectsVisualOverflow()
        https://bugs.webkit.org/show_bug.cgi?id=139420

        Reviewed by Simon Fraser.

        Move 'text-shadow' check from RenderStyle::changeRequiresLayout() to
        changeAffectsVisualOverflow(). This has no behavior change as
        changeRequiresLayout() calls changeAffectsVisualOverflow(). However,
        this is clearer as text-shadow affects the visual overflow (similarly
        to box-shadow).

        No new tests, no behavior change.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeAffectsVisualOverflow):
        (WebCore::RenderStyle::changeRequiresLayout):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Fix typo.

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::localStorageNamespaceMap):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        WebStorageNamespaceProvider should create StorageNamespaceImpls
        https://bugs.webkit.org/show_bug.cgi?id=139419

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        Export new symbols.

        * WebCore.xcodeproj/project.pbxproj:
        Make StorageNamespaceImpl.h a private header.

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::localStorageNamespaceMap):
        Use NeverDestroyed.

        (WebCore::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebCore::StorageNamespaceImpl::getOrCreateLocalStorageNamespace):
        Add new functions for creating namespaces.

        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        Call the new functions.

        * storage/StorageNamespaceImpl.h:
        Add new members, make sure to deprecate the ones we don't want anyone calling.

        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageNamespace):
        (WebCore::StorageNamespaceProvider::transientLocalStorageNamespace):
        * storage/StorageNamespaceProvider.h:
        Pass the quota when creating storage namespaces.

2014-12-08  Benjamin Poulain  <benjamin@webkit.org>

        Move the new :nth-child() and :nth-last-child() out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=139329

        Reviewed by Andreas Kling.

        The code is stable.
        Feedback has only been positive.
        All the known issues have been reported to the CSS WG.

        The #ifdef don't really work anymore anyway for :nth-child() and :nth-last-child().

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):

2014-12-08  Benjamin Poulain  <bpoulain@apple.com>

        A selector should not match anything if there is a subselector after a non-scrollbar pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=139336
        rdar://problem/19051623

        Reviewed by Andreas Kling.

        Tests: fast/css/duplicated-after-pseudo-element.html
               fast/css/duplicated-before-pseudo-element.html
               fast/css/simple-selector-after-pseudo-element.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::constructFragments):
        The code filtering out simple selectors was only considering
        the relation CSSSelector::SubSelector. That comes from SelectorChecker where
        the relation considered is the one from the previous selector.

        In this case, the relation is the extracted from the current simple selector,
        which is the relation with the following selector.

        When a single simple selector was following a pseudo element, the relation evaluated
        to descendant/adjacent/direct-adjacent and we were skipping the early return.
        That simple selector was evaluated as a regular filter on the element.

        In the CSS JIT, we can just remove that test altogether. Fragments are built one after
        the other. By definition, the evaluated simple selector belong to the current fragment.

2014-12-08  Benjamin Poulain  <benjamin@webkit.org>

        Fix the parsing of advanced :lang() after r176902
        https://bugs.webkit.org/show_bug.cgi?id=139379

        Reviewed by Andreas Kling.

        There were two mistakes that were only caught in debug:

        The lexer was not calling isIdentifierStart() before parseIdentifier().
        Some identifier we were parsing should have been invalid.
        This was caught with an assertion in parseIdentifier().

        The other issue is that we were accumulating pointer to freed memory.
        The tokenizer for LANGRANGE was creating a new string with a StringBuilder.
        The problem is that CSSParserString does not keep the source string alive.
        Consequently, the list of language range was accumulating pointers to dead
        StringImpls.

        The fix there is to simply extend the token to take the original asterisk character
        from the input. That is not elegant but that's efficient and we know
        the buffer lifetime.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::realLex):
        * css/CSSGrammar.y.in: Fix the indentation of a language range rule.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * WebCore.exp.in:

2014-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Inline elements whose parents have small line-height are laid out too low
        https://bugs.webkit.org/show_bug.cgi?id=139375

        Reviewed by Dave Hyatt.

        This is a port of the Blink patch at
        https://src.chromium.org/viewvc/blink?revision=155253&view=revision.

        When laying out inline elements, we try to align leaf children's parents'
        baselines across the entire line. However, if you set line-height: 0px on a
        span, the entire InlineBox which represents that span will have a height of
        0, and therefore be laid out entirely on the baseline. In addition, we will
        try to vertically center the leaf text in the span's InlineBox, which means
        the leaf text will be vertically centered on the baseline. All the other
        major browsers do not have this behavior; instead, they line up the boxes
        as you would expect.

        This bug led to a rendering problem on the front page of the New York Times.

        Here is the ChangeLog from the Blink patch:

        Fix baseline position when it is outside the element's box

        Specifically, we shouldn't force the baseline to be inside the element. IE
        and FF don't do this, and it's incompatible with the CSS spec:
        
        "The baseline of an 'inline-block' is the baseline of its last line box in
        the normal flow, unless it has either no in-flow line boxes or if its
        'overflow' property has a computed value other than 'visible', in which case
        the baseline is the bottom margin edge."
        -- http://www.w3.org/TR/CSS21/visudet.html#leading
        
        It doesn't have a special case for "baseline is outside of the element's
        margin box".
        
        Test: fast/text/small-line-height.html

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

2014-12-08  Eric Carlson  <eric.carlson@apple.com>

        [iOS] YouTube plug-in replacement should support partial urls
        https://bugs.webkit.org/show_bug.cgi?id=139400

        Reviewed by Alexey Proskuryakov.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::youTubeURL): Call Document::completeURL.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteAllCookiesModifiedSince):

2014-12-08  Andreas Kling  <akling@apple.com>

        Roll out r175352.
        <https://webkit.org/b/139146>

        This change caused some unexpected assertions in line box teardown.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeRemovedFromTree):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed):
        * rendering/RenderReplaced.h:

2014-12-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Narrow non-breaking space does not fall back to a correct font
        https://bugs.webkit.org/show_bug.cgi?id=139335

        Reviewed by Enrica Casucci.

        Test: fast/text/narrow-non-breaking-space.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::requiresCustomFallbackFont):
        (WebCore::FontCache::getCustomFallbackFont):

2014-12-08  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the WebKit build with the public SDK

        Include header UIKit.h.

        * platform/spi/ios/MediaPlayerSPI.h:

2014-12-08  Chris Dumez  <cdumez@apple.com>

        Revert r176293 & r176275

        Unreviewed, revert r176293 & r176275 changing the Vector API to use unsigned type
        instead of size_t. There is some disagreement regarding the long-term direction
        of the API and we shouldn’t leave the API partly transitioned to unsigned type
        while making a decision.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsArray):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * cssjit/SelectorCompiler.cpp:
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        (WebCore::SearchBuffer::prependContext):
        (WebCore::SearchBuffer::search):
        (WebCore::SearchBuffer::length):
        * html/HTMLFormElement.cpp:
        (WebCore::removeFromVector):
        * html/parser/HTMLParserIdioms.h:
        * html/parser/XSSAuditor.cpp:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Make deleting all cookies after a given date a little more sane
        https://bugs.webkit.org/show_bug.cgi?id=139409

        Reviewed by Antti Koivisto.

        * WebCore.exp.in:
        Update exports.

        * platform/network/PlatformCookieJar.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        Rename deleteAllCookiesModifiedAfterDate to deleteAllCookiesModifiedSince and change it
        to take an std::chrono::system_clock::time_point instead.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookieStorage):
        Helper function that returns an NSHTTPCookieStorage given a network session.

        (WebCore::deleteAllCookiesModifiedSince):
        Get the cookie storage from the network storage instead of just getting the global one.

2014-12-08  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176953, add an unreachable return to make GCC happy.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):

2014-12-08  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Grid items must set a new formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=139150

        Reviewed by David Hyatt.

        Grid item's margins must not collapse even when they may be adjoining to
        its content's margins. Also, setting a new formatting context prevents any
        'float' protruding content on the adjoining grid items.

        This patch also renames the expandsToEncloseOverhangingFloats to be more generic now,
        determining whether a new formatting context is set or not. This affects not only to
        how floats behave, but whether margins should collapse or not.

        Tests: fast/css-grid-layout/float-not-protruding-into-next-grid-item.html
               fast/css-grid-layout/grid-item-margins-not-collapse.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::avoidsFloats): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::MarginInfo::MarginInfo): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlockFlow::layoutBlock): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlockFlow::computeOverflow): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlockFlow::addOverhangingFloats): Using the new createsNewFormattingContext function.
        (WebCore::RenderBlockFlow::needsLayoutAfterRegionRangeChange): Using the new createsNewFormattingContext function.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::createsNewFormattingContext): Added.
        (WebCore::RenderBox::avoidsFloats): Removed checks already defined in the new createsNewFormattingContext function.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::isGridItem): Added.

2014-12-08  Daniel Bates  <dabates@apple.com>

        [iOS] Attempt to fix the public SDK build after <https://trac.webkit.org/r176841>
        (https://bugs.webkit.org/show_bug.cgi?id=139227)

        * platform/spi/ios/AVKitSPI.h:

2014-12-08  Chris Dumez  <cdumez@apple.com>

        Stop using ResourceRequest::cachePolicy() in FrameLoader::subresourceCachePolicy()
        https://bugs.webkit.org/show_bug.cgi?id=139350

        Reviewed by Antti Koivisto.

        Stop using ResourceRequest::cachePolicy() in FrameLoader::subresourceCachePolicy()
        and use m_loadType instead. ResourceRequest::cachePolicy() is meant to be passed
        to the network stack, and isn't supposed to be used as input inside WebCore.

        No new tests, no behavior change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):

2014-12-08  Philippe Normand  <pnormand@igalia.com>

        [GTK] UserMedia Permission Request API
        https://bugs.webkit.org/show_bug.cgi?id=136449

        Reviewed by Carlos Garcia Campos.

        Very basic constraints validation support in the GStreamer
        MediaStreamCenter. This is needed so the GTK C API tests using the
        getUserMedia() API would not time out.

        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        (WebCore::MediaStreamCenterGStreamer::~MediaStreamCenterGStreamer):
        (WebCore::MediaStreamCenterGStreamer::validateRequestConstraints):
        (WebCore::MediaStreamCenterGStreamer::createMediaStream):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Remove ResourceHandle::loadsBlocked()
        https://bugs.webkit.org/show_bug.cgi?id=139401

        Reviewed by Daniel Bates.

        This hasn't returned true since Leopard, so get rid of it.

        * page/Chrome.cpp:
        (WebCore::Chrome::canRunModalNow):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::loadsBlocked): Deleted.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::loadsBlocked): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadsBlocked): Deleted.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::loadsBlocked): Deleted.

2014-12-08  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: VoiceOver gets hung on some websites consistently.
        https://bugs.webkit.org/show_bug.cgi?id=139331

        Reviewed by Mario Sanchez Prada.

        iFrames are attachments on iOS, but they do not have attachment views. As a result, 
        WebCore would return incorrect information for the element count and index of children elements.

        No tests. Bug only manifests itself when iOS accessibility frameworks call into WebCore.

        * accessibility/AccessibilityMockObject.h:
        (WebCore::AccessibilityMockObject::isDetachedFromParent):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isDetachedFromParent):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementCount]):
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper accessibilityContainer]):

2014-12-08  Doron Wloschowsky  <doron_wloschowsky@scee.net>

        Webkit using Harfbuzz does not display Arabic script correctly
        https://bugs.webkit.org/show_bug.cgi?id=136337

        Reviewed by Carlos Garcia Campos.

        Using reinterpret_cast to convert hb_codepoint_t* into UChar*
        doesn't work on big endian systems.

        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph):

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Major cleanup of AudioDestination implementation
        https://bugs.webkit.org/show_bug.cgi?id=139370

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        Add an audioresample element before the audio sink. The audio sink
        might not be able to handle our sampling rate.

        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        (WebCore::AudioDestinationGStreamer::stop):
        (WebCore::AudioDestinationGStreamer::finishBuildingPipelineAfterWavParserPadReady): Deleted.
        Don't use a wavparse element but directly link the raw audio from
        the source to the audio sink.

        (WebCore::AudioDestinationGStreamer::start):
        Catch errors when going to PLAYING early, we might not get an error
        message.

        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (getGStreamerMonoAudioCaps):
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcChangeState):
        Don't use a WAV encoder but directly output raw audio. Also don't
        include a unneeded audioconvert element before the interleave.

        (webKitWebAudioSrcLoop):
        Add timestamps and durations to the output buffers, map them in
        READWRITE mode and actually keep them mapped until we're sure
        nothing is actually writing into them.

        (webKitWebAudioSrcLoop):
        Pause the task on errors instead of continuously calling it again
        immediately.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Use gst_message_parse_buffering()
        https://bugs.webkit.org/show_bug.cgi?id=139365

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats):
        Use gst_message_parse_buffering() instead of manually getting
        the percentage from the message's structure. While the latter
        is supposed to work and part of the ABI stability guarantee,
        it's just not nice and overly complicated.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Minor cleanup of the AudioFileReader implementation
        https://bugs.webkit.org/show_bug.cgi?id=139367

        Reviewed by Philippe Normand.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::~AudioFileReader):
        Don't call gst_bus_remove_signal_watch(), the source was already
        destroyed together with the main context and doing it again here
        will give a g_critical().

        (WebCore::AudioFileReader::handleSample):
        Calculate the number of samples from the actual buffer size
        and the bytes-per-frame instead of the buffer duration. Using
        the buffer duration can lead to rounding errors and might cause
        too few samples to be copied over later.

        (WebCore::AudioFileReader::handleMessage):
        Set the pipeline to GST_STATE_NULL immediately when receiving
        errors to prevent other follow-up error messages from propagating
        through the bus and spamming the user's terminal with g_warnings().

        (WebCore::AudioFileReader::handleNewDeinterleavePad):
        Sync the state of the queue and sink after deinterleave with
        the parent state instead of just setting them to READY. That
        way we potentially go to PAUSED state a bit earlier already
        and prevent a potential race condition that could cause buffers
        to arrive in the new elements in READY state already (which would
        fail).

        (WebCore::AudioFileReader::plugDeinterleave):
        Handle multiple decodebin source pads by ignoring all following
        ones just in case there are multiple for whatever reason.

        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        Catch errors from going to PAUSED state early. We might not
        get a error message at all if we're unlucky.

        (WebCore::AudioFileReader::plugDeinterleave):
        (WebCore::AudioFileReader::createBus):
        (WebCore::AudioFileReader::handleSample):
        Downmix to mono if required instead of just using the front
        left channel and claiming it is mono. Downmixing from stereo
        to mono will mix both channels instead of just taking the left.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Handle CLOCK_LOST and LATENCY messages
        https://bugs.webkit.org/show_bug.cgi?id=139341

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        Handle CLOCK_LOST message by shortly going back to PAUSED state
        and then to PLAYING again to let the pipeline select a new clock
        for us.
        This can happen if the stream that ends in a sink that provides
        the current clock disappears, for example if the audio sink
        provides the clock and the audio stream is disabled. It also
        happens relatively often with HTTP adaptive streams when switching
        between different variants of a stream.

        Also handle the LATENCY message by triggering the default GStreamer
        mechanism to update the latency. This can happen if the latency of
        live elements changes, or for one reason or another a new live element
        is added or removed from the pipeline.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Use audio-filter property on GStreamer >= 1.4.2
        https://bugs.webkit.org/show_bug.cgi?id=139360

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        Since 1.4.0 there is an audio-filter property we can use to place
        the pitch-preserving filter at a more canonical position inside
        the pipeline. Since 1.4.2 this property also handles all necessary
        conversions for us.
        This simplifies our sink code a bit because we don't have to create
        a custom sink bin anymore.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Add video/flv to the list of supported mimetypes
        https://bugs.webkit.org/show_bug.cgi?id=139344

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):
        Add video/flv additional to video/x-flv to the list of supported
        mimetypes. It's used on some websites, e.g.
        http://www.jwplayer.com/html5/formats/

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Remove GStreamer 0.10 #ifdefs.
        https://bugs.webkit.org/show_bug.cgi?id=138921

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        Remove GStreamer 0.10 #ifdefs, we depend on >= 1.0.3 at least.

2014-12-08  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Add application/x-mpegurl to the list of supported mimetypes.
        https://bugs.webkit.org/show_bug.cgi?id=139343

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):
        It's an alternative mimetype for the already supported
        application/vnd.apple.mpegurl (aka HLS) and adding it
        allows all streams on http://www.jwplayer.com/html5/hls/
        to be played.

2014-12-07  Gwang Yoon Hwang  <yoon@igalia.com>

        [TextureMapper] Normalize pattern transform for pattern compositing
        https://bugs.webkit.org/show_bug.cgi?id=139374

        Reviewed by Martin Robinson.

        In CoordGfx/TexMapGL, pattern compositing (for background image) uses
        the patternTransform shader uniform. However, current implementation
        miscalculates its transform matrix. It uses simple rectToRect
        transformationMatrix which produces unnormalized garbage term.
        This causes unexpected behavior at the fragmentation stage in some
        mobile GPUs.

        It should calculate its scale based on tileSize and contentSize,
        and its position based on tilePhase and contentSize.

        No new tests because the bug only occurs on some mobile GPUs.

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

2014-12-07  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [Soup][Curl] HTTP header values should be treated as latin1, not UTF-8
        https://bugs.webkit.org/show_bug.cgi?id=128739

        Reviewed by Martin Robinson.

        Removed UTF-8 conversion of HTTP header values (SOUP and CURL).
        Removed unnecessary UTF-8 conversion of HTTP header names (SOUP).
        Changed conversion of HTTP method from UTF-8 to ASCII (SOUP and CURL).
        Added explicit UTF-8 conversion of Content-Disposition header to compute download suggested filename. 

        Test: http/tests/xmlhttprequest/response-special-characters.html

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::headerCallback): Removed header conversion.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback): Ditto.
        (WebCore::ResourceHandleManager::initializeHandle): Changed HTTP method conversion to ASCI.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessageHeaders): Removed header conversion.
        (WebCore::ResourceRequest::updateSoupMessage): Changed HTTP method conversion to ASCII.
        (WebCore::ResourceRequest::toSoupMessage): Ditto.
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessageHeaders): Rmoved header conversion.
        (WebCore::ResourceResponse::platformSuggestedFilename): Added explicit conversion of contentDisposition to UTF-8.

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

        Introduce and deploy a function that allocates and returns an instance of a soft-linked class
        https://bugs.webkit.org/show_bug.cgi?id=139348

        Reviewed by Anders Carlsson.

        In [[getFooClass() alloc] init*], the type of the result of +alloc is id, so the compiler
        picks an arbitrary declaration of init*, not necessarily the Foo one. This can then lead
        to warnings or errors if the types or attributes don’t match, or to runtime errors if Foo
        doesn’t even have the expected initializer. The new allocFooInstance() returns a Foo *, thus
        avoiding the ambiguity.

        * editing/mac/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper allocateVolumeView]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac): Cast the result of +alloc to an instance of the
        expected class.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::createPDFDocument):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (SOFT_LINK_CONSTANT):
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        * platform/ios/WebCoreMotionManager.mm:
        (-[WebCoreMotionManager initializeOnMainThread]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController init]):
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter):

        * platform/mac/SoftLinking.h: Added alloc##className##instance().

        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setVideoElement:]):
        * platform/mediastream/mac/AVAudioCaptureSource.mm:
        (WebCore::AVAudioCaptureSource::setupCaptureSession):
        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::verifyConstraintsForMediaType):
        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::setupSession):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        * platform/network/ios/QuickLook.mm:
        (WebCore::registerQLPreviewConverterIfNeeded):
        (WebCore::QuickLookHandle::QuickLookHandle):

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add Since tags to GObject DOM bindings documentation
        https://bugs.webkit.org/show_bug.cgi?id=139356

        Reviewed by Gustavo Noronha Silva.

        Now that we have a small stable API, and new symbols are added
        manually, we can also add the version to the symbols file, that
        the code generator can ue to add Since tags to the gtk-doc.

        * bindings/gobject/webkitdom.symbols: Add @2.8 to the new symbols
        added for 2.8.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateConstants): Add Since tag to gtk-doc if there's a version
        number for the symbol in the .symbols file.
        (GenerateFunction): Ditto.
        (ReadStableSymbols):

2014-12-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Missing API detected in GObject DOM bindings after r176630
        https://bugs.webkit.org/show_bug.cgi?id=139201

        Reviewed by Gustavo Noronha Silva.

        Bring back WebKitDOMDeprecated and add custom versions of the
        removed symbols as deprecated in favor of the new ones. Also add
        the new ones as stable API.

        * CMakeLists.txt: Pass a list of additional dependencies to GENERATE_BINDINGS.
        * PlatformGTK.cmake: Ditto.
        * PlatformMac.cmake: Ditto.
        * bindings/gobject/WebKitDOMDeprecated.cpp: Added.
        (webkit_dom_html_element_get_inner_html):
        (webkit_dom_html_element_set_inner_html):
        (webkit_dom_html_element_get_outer_html):
        (webkit_dom_html_element_set_outer_html):
        * bindings/gobject/WebKitDOMDeprecated.h: Added.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Added.
        * bindings/gobject/webkitdom.symbols:

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

        URTBF after r176915.

        DisplayRefreshMonitorClient is the parent class of GraphicsLayerUpdater
        only if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) is true, so override
        is incorrect if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) is false.

        That's why r176915 broke the build on non PLATFORM(COCOA) platforms,
        such as GTK, EFL, Apple Windows.

        Additionally displayRefreshFired is only used inside USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
        guard, so there is no reason to define it for non COCOA platforms.

        * platform/graphics/GraphicsLayerUpdater.cpp:
        * platform/graphics/GraphicsLayerUpdater.h:

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

        Fix build with newer versions of clang.
        rdar://problem/18978733

        Add a bunch of overrides since we're not disabling the "inconsistent missing override" warning in WebKit.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingStateOverflowScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:
        (WebCore::ScrollingTreeFrameScrollingNode::updateLayersAfterDelegatedScroll): Deleted.
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h:
        * platform/graphics/GraphicsLayerUpdater.h:
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::supportsControlTints): Deleted.
        (WebCore::ScrollbarThemeMac::maxOverlapBetweenPages): Deleted.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderSnapshottedPlugIn.h:

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

        Fix build with newer versions of clang.
        rdar://problem/18978687

        Add a bunch of overrides since we're not disabling the "inconsistent missing override" warning in WebKit.

        * html/HTMLElement.h:
        * html/HTMLMediaElement.h:
        * html/track/VTTCue.h:
        * loader/FrameNetworkingContext.h:
        (WebCore::FrameNetworkingContext::shouldClearReferrerOnHTTPSToHTTPRedirect): Deleted.
        * loader/cache/CachedImage.h:
        * page/SuspendableTimer.h:
        * platform/Scrollbar.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * rendering/RenderBlockFlow.h:

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

        Follow-up build fix.

        * Configurations/Base.xcconfig:

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

        Fix build with newer versions of clang.
        rdar://problem/18978689

        Disable the "inconsistent missing override" warning due to our use of macros in SVG where it's hard to
        know whether we can add an override or not.

        Also, cast return values of +alloc to the right type, and add some casts for vector iterator arithmetic.

        * Configurations/Base.xcconfig:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidForOriginAndName):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _stringForRange:attributed:]):
        * editing/cocoa/HTMLConverter.mm:
        (_shadowForShadowStyle):
        (HTMLConverter::_addTableForElement):
        * platform/graphics/SVGGlyph.cpp:
        (WebCore::isCompatibleArabicForm):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:]):
        * platform/ios/WebCoreMotionManager.mm:
        (-[WebCoreMotionManager initializeOnMainThread]):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::spannedRows):
        (WebCore::RenderTableSection::spannedColumns):

2014-12-06  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error, missing guard.
        https://bugs.webkit.org/show_bug.cgi?id=139338

        Reviewed by Alex Christensen.

        There is missing a ENABLE(CSS_SELECTORS_LEVEL4) guard in CSSParser.cpp.

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

2014-12-05  Chris Fleizach  <cfleizach@apple.com>

        AX: I cannot activate links on the mobile version of news.google.com
        https://bugs.webkit.org/show_bug.cgi?id=139330

        Reviewed by Simon Fraser.

        This website only listens for touch events. VoiceOver normally dispatches click and mouse events,
        so on iOS this falls and VoiceOver is not able to activate anything.

        The solution here is to dispatch simulated touch down/up events.

        Test: platform/ios-simulator/ios-accessibility/press-fires-touch-events.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::dispatchTouchEvent):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isDetachedFromParent):
        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::dispatchSimulatedTouchEvent):
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::PlatformTouchEventBuilder::PlatformTouchEventBuilder):
        (WebCore::PlatformEventFactory::createPlatformSimulatedTouchEvent):

2014-12-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Directional single quotation marks are not rotated in vertical text
        https://bugs.webkit.org/show_bug.cgi?id=138526

        Reviewed by Darin Adler.

        In vertical text, directional single quotation marks are not rotated along with
        the rest of the letters.

        Test: fast/text/vertical-quotation-marks.html

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::shouldIgnoreRotation):

2014-12-05  Dhi Aurrahman  <diorahman@rockybars.com>

        Implement parser for :lang pseudo class selector arguments that contain wildcard '*' subtags
        https://bugs.webkit.org/show_bug.cgi?id=139014

        Reviewed by Benjamin Poulain.

        Consider each language range in :lang() that consists of an asterisk 
        immediately followed by an identifier beginning with an ASCII hyphen 
        as a valid input for the selector as specified in [1].

        [1] http://dev.w3.org/csswg/selectors4/#the-lang-pseudo 

        Test: fast/css/parsing-css-lang.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::realLex):

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

        Programmatic scrolling and content changes are not always synchronized
        https://bugs.webkit.org/show_bug.cgi?id=139245
        rdar://problem/18833612

        Reviewed by Anders Carlsson.
        
        For programmatic scrolls, AsyncScrollingCoordinator::requestScrollPositionUpdate()
        calls updateScrollPositionAfterAsyncScroll(), then dispatches the requested
        scroll position to the scrolling thread.
        
        Once the scrolling thread commits, it calls back to the main thread via
        scheduleUpdateScrollPositionAfterAsyncScroll(), which schedules a second
        call to updateScrollPositionAfterAsyncScroll() on a timer. That's a problem,
        because some other scroll may have happened in the meantime; when the timer
        fires, it can sometimes restore a stale scroll position.
        
        Fix by bailing early from scheduleUpdateScrollPositionAfterAsyncScroll()
        for programmatic scrolls, since we know that requestScrollPositionUpdate()
        already did the updateScrollPositionAfterAsyncScroll().

        Test:
            ManualTests/programmatic-scroll-flicker.html

        * page/FrameView.cpp:
        (WebCore::FrameView::reset): nullptr.
        (WebCore::FrameView::setScrollPosition): Ditto.
        (WebCore::FrameView::setWasScrolledByUser): Ditto.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate): Use a local variable for
        isProgrammaticScroll just to make sure we use the same value for the duration of this function.
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll): Do nothing
        if this is a programmatic scroll.

2014-12-05  Timothy Horton  <timothy_horton@apple.com>

        Build fix.

        * platform/spi/mac/TUCallSPI.h:

2014-12-05  Roger Fong  <roger_fong@apple.com>

        [Win] proj files copying over too many resources..
        https://bugs.webkit.org/show_bug.cgi?id=139315.
        <rdar://problem/19148278>

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.proj: Don't copy over bin32 build output.

2014-12-05  Timothy Horton  <timothy_horton@apple.com>

        Use the system string for telephone number menu
        https://bugs.webkit.org/show_bug.cgi?id=139324
        <rdar://problem/18726471>

        * platform/spi/mac/TUCallSPI.h: Added.
        Actually add the SPI header from the last commit.

2014-12-05  Tim Horton  <timothy_horton@apple.com>

        Use the system string for telephone number menu
        https://bugs.webkit.org/show_bug.cgi?id=139324
        <rdar://problem/18726471>

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/TUCallSPI.h: Added.
        Add an SPI header.

2014-12-05  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Return absolute value of error code from CDMSessionMediaSourceAVFObjC::update().
        https://bugs.webkit.org/show_bug.cgi?id=139316

        Reviewed by Eric Carlson.

        Similarly to our asynchronous error reporting, return the absolute value of the error code.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::systemCodeForError):
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

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

        Fix build on Windows.

        * page/SessionIDHash.h:

2014-12-05  Zalan Bujtas  <zalan@apple.com>

        Issue repaint at setUnavailablePluginIndicatorIsHidden() only when embedded object's indicator status changes.
        https://bugs.webkit.org/show_bug.cgi?id=139311

        Reviewed by Tim Horton.

        Not testable.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::setUnavailablePluginIndicatorIsHidden):

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

        PassRef should deref on destruction if pointee was not moved.
        <https://webkit.org/b/139309>

        Reviewed by Antti Koivisto.

        Remove calls to PassRef::dropRef() since it's no longer necessary to manually
        notify PassRef that you didn't move the pointee.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        (WebCore::RenderElement::setStyle):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):

2014-12-05  Benjamin Poulain  <bpoulain@apple.com>

        Fix style sharing with the "type" and "readonly" attributes
        https://bugs.webkit.org/show_bug.cgi?id=139283

        Reviewed by Antti Koivisto.

        There are two bugs adressed with this patch:
        1) The attributes "type" and "readonly" where only handled correctly
           for input elements. For everything else, they could incorrectly
           be ignored for style sharing.
        2) The handling of attributes was incorrect for selector lists, leading
           to various bugs (incorrect style sharing in some cases, disabling
           style sharing on valid cases).

        For [1], the problem was that attribute checking had been limited to
        StyleResolver::canShareStyleWithControl(). That function is for handling
        the special states of input element. For any other element, the attributes
        were simply ignored.

        For [2], there were a bunch of small problems. First, containsUncommonAttributeSelector()
        was not recursive, which caused it to ignored any nested selector list. This used to be
        correct but since we have advanced selectors we can no longer assumed selectors are not nested.

        A second issue was that any attribute in a selector list was causing us to fall back
        to the slow case. Now that we have the fast :matches(), we really don't want that.

        The function containsUncommonAttributeSelector() was transformed into a recursive function
        tracking where we are in the selector.

        At the entry point, we start with the flag "startsOnRightmostElement" set to true. The flag is then
        updated on the stack of each recursive call.

        For example, "webkit > is:matches(freaking > awesome)". We evalute "is" with the flag to true, then recurse
        into evaluating "freaking > awesome" with the flag still set to true. When we evalute ">", the flag
        is set to false to evaluate any following selectors.
        After evaluating "freaking > awesome", we go back to our previous stack frame, and the flag
        is back to true and we can continue evaluating with the curren top level state.

        From some logging, I discovered that the attribute handling is way too aggressive.
        This is not a regression and I cannot fix that easily so I left a fixme.

        Tests: fast/css/data-attribute-style-sharing-1.html
               fast/css/data-attribute-style-sharing-2.html
               fast/css/data-attribute-style-sharing-3.html
               fast/css/data-attribute-style-sharing-4.html
               fast/css/data-attribute-style-sharing-5.html
               fast/css/data-attribute-style-sharing-6.html
               fast/css/data-attribute-style-sharing-7.html
               fast/css/readonly-attribute-style-sharing-1.html
               fast/css/readonly-attribute-style-sharing-2.html
               fast/css/readonly-attribute-style-sharing-3.html
               fast/css/readonly-attribute-style-sharing-4.html
               fast/css/readonly-attribute-style-sharing-5.html
               fast/css/readonly-attribute-style-sharing-6.html
               fast/css/readonly-attribute-style-sharing-7.html
               fast/css/type-attribute-style-sharing-1.html
               fast/css/type-attribute-style-sharing-2.html
               fast/css/type-attribute-style-sharing-3.html
               fast/css/type-attribute-style-sharing-4.html
               fast/css/type-attribute-style-sharing-5.html
               fast/css/type-attribute-style-sharing-6.html
               fast/css/type-attribute-style-sharing-7.html

        * css/RuleSet.cpp:
        (WebCore::containsUncommonAttributeSelector):
        (WebCore::RuleData::RuleData):
        (WebCore::selectorListContainsAttributeSelector): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        (WebCore::StyleResolver::canShareStyleWithElement):

2014-12-05  Jer Noble  <jer.noble@apple.com>

        [WTF] MediaTime should support round-tripping from and to doubles.
        https://bugs.webkit.org/show_bug.cgi?id=139248

        Reviewed by Eric Carlson.

        Check whether the MediaTime's underlying data is floating point before converting
        to a CMTime or QTTime.

        * platform/graphics/avfoundation/MediaTimeAVFoundation.cpp:
        (WebCore::toCMTime):
        * platform/graphics/mac/MediaTimeQTKit.mm:
        (WebCore::toQTTime):

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

        Add a private browsing mode to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=139308

        Reviewed by Sam Weinig.

        Use -1 instead of -2 for the deleted value.

        * page/SessionIDHash.h:

2014-12-05  Chris Dumez  <cdumez@apple.com>

        Move 'text-emphasis-style' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139285

        Reviewed by Sam Weinig.

        Move 'text-emphasis-style' CSS property to the new StyleBuilder by
        using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyTextEmphasisStyle::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyTextEmphasisStyle::applyValue): Deleted.
        (WebCore::ApplyPropertyTextEmphasisStyle::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitTextEmphasisStyle):
        (WebCore::StyleBuilderCustom::applyInheritWebkitTextEmphasisStyle):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextEmphasisStyle):

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

        [iOS] remove "enter optimized fullscreen" gesture
        https://bugs.webkit.org/show_bug.cgi?id=139301

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleWrapperTouchStart): Remove gesture recognizer.

2014-12-05  Beth Dakin  <bdakin@apple.com>

        rdar://problem/19156353 Additional build-fixes needed.

        Rubber-stamped by Tim Horton.

        This is a bit unfortunate, but we need to always forward-declare this for now.
        * platform/spi/mac/QuickLookMacSPI.h:

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

        FeatureDefines.xcconfig: Workaround bug in Xcode 5.1.1 when defining ENABLE_WEB_REPLAY
        <http://webkit.org/b/139286>

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig: Switch back to using
        PLATFORM_NAME to workaround a bug in Xcode 5.1.1 on 10.8.

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

        [iOS] allow host application to opt-out of alternate fullscreen pt. 2
        https://bugs.webkit.org/show_bug.cgi?id=139227

        Reviewed by Jer Noble and Anders Carlsson

        * WebCore.exp.in: Export HTMLMediaSession::allowsAlternateFullscreen, change the signature of 
            WebVideoFullscreenInterfaceAVKit::setupFullscreen.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:mode:]): Update for
            WebVideoFullscreenInterfaceAVKit::setupFullscreen change.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Add argument to setupFullscreen.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Ditto.

2014-12-05  Shivakumar JM  <shiva.jm@samsung.com>

        Fix build warning in WebCore/platform/graphics module
        https://bugs.webkit.org/show_bug.cgi?id=139290

        Reviewed by Carlos Garcia Campos.

        Fix a build warning by removing parameter name from function.

        No new tests, no behavior change.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::getFamilyNameStringFromFontDescriptionAndFamily):

2014-12-05  sungmin cho  <sungmin17.cho@lge.com>

        GraphicsLayerTextureMapper: Rename parameter to be more clear
        https://bugs.webkit.org/show_bug.cgi?id=139288

        Reviewed by Martin Robinson.

        Rename 'media' to 'platformLayer'.

        No new tests, no change in functionality.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToPlatformLayer):

2014-12-04  Mark Rowe  <mrowe@apple.com>

        Fix pre-Yosemite builds.

        The #ifs in two SPI wrapper headers were incorrect, resulting in code being included
        prior to Yosemite that required Yosemite to compile.

        * platform/spi/mac/NSSharingServicePickerSPI.h:
        * platform/spi/mac/NSSharingServiceSPI.h:

2014-12-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: timeline probe records have inaccurate per-probe hit counts
        https://bugs.webkit.org/show_bug.cgi?id=138976

        Reviewed by Joseph Pecoraro.

        Update the signature for breakpointActionProbe to take batchId and sampleId.
        Covered by existing test inspector-protocol/debugger/didSampleProbe-multiple-probes.html.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::breakpointActionProbe):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        * inspector/TimelineRecordFactory.h:

2014-12-04  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        Groove/inset/outset borders show solid if the color is black
        https://bugs.webkit.org/show_bug.cgi?id=58608

        Reviewed by Simon Fraser.

        Test: fast/borders/mixed-border-style2.html

        This patch will lighten/darken the border side colors, handling
        border decoration in a similar way as Firefox does.

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

2014-12-04  Chris Dumez  <cdumez@apple.com>

        Move 'webkit-aspect-ratio' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139250

        Reviewed by Sam Weinig.

        Move 'aspect-ratio' CSS property to the new StyleBuilder by
        using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyAspectRatio::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyAspectRatio::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyAspectRatio::applyValue): Deleted.
        (WebCore::ApplyPropertyAspectRatio::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialWebkitAspectRatio):
        (WebCore::StyleBuilderCustom::applyInheritWebkitAspectRatio):
        (WebCore::StyleBuilderCustom::applyValueWebkitAspectRatio):

2014-12-04  Timothy Horton  <timothy_horton@apple.com>

        Further fix the 32-bit build.

        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):

2014-12-04  Timothy Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (WebCore::TextIndicatorWindow::setTextIndicator):

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

        TextIndicator::createWithSelectionInFrame does synchronous IPC in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139252
        <rdar://problem/19140827>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::TextIndicator::TextIndicator):
        * page/TextIndicator.h:
        (WebCore::TextIndicator::selectionRectInWindowCoordinates):
        (WebCore::TextIndicator::textBoundingRectInWindowCoordinates):
        (WebCore::TextIndicator::selectionRectInScreenCoordinates): Deleted.
        (WebCore::TextIndicator::textBoundingRectInScreenCoordinates): Deleted.
        Go back to keeping the rects in "window" coordinates.

        * page/mac/TextIndicatorWindow.h:
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Let callers pass in the contentRect instead of trying to share the code
        to compute it, since it needs to be different for legacy and modern WebKit.

2014-12-04  Oliver Hunt  <oliver@apple.com>

        Serialization of MapData object provides unsafe access to internal types
        https://bugs.webkit.org/show_bug.cgi?id=138653

        Reviewed by Geoffrey Garen.

        We now keep the value portion of the key/value pair in MapData as a
        separate stack. This allows us to maintain the spec semantic of
        "atomic" serialisation of the key/value pair without retaining the
        use of a potentially invalid iterator.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):

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

        [SVG Masking] Add support for referencing <mask> elements from -webkit-mask-image
        https://bugs.webkit.org/show_bug.cgi?id=139092

        Reviewed by Simon Fraser.

        This patch improves the -webkit-mask-image property by allowing it to reference
        a <mask> element defined in an inline or external SVG document.
        Up until now, each image to be used as a mask consisted of a FillLayer object 
        whose m_image member represented the mask. Now, in order to accomodate
        <mask> elements referenced by a fragment identifier (e.g. file.svg#mask1)
        a new class was created (MaskImageOperation) and added as a member of the 
        FillLayer. As such, from now on, all FillLayer objects used for masking will
        store the masking information in this new member.
        When parsing the -webkit-mask-image property (or the -webkit-mask shorthand)
        a new MaskImageOperation object is created for each image. If the value represents
        an external URL, a pending SVG document will be created which will be loaded 
        during the phase that loads the pending resources. When the download is complete,
        the MaskImageOperation is notified by the CachedSVGDocument class and checks if
        the received download is a valid SVG and the requested fragment identifier
        actually exists and identifies a <mask> element. If it does, that element's
        renderer (of type RenderSVGResourceMasker) will be used when painting the mask layers.
        Otherwise, the MaskImageOperation class will use the already downloaded data 
        buffer to create a CachedImage from it and use that instead, basically emulating
        the previous behavior, when only images were accepted. This ensures that all existing
        behavior, like painting entire SVGs, painting normal images (e.g. PNG/JPG), painting
        generated images (e.g. linear-gradient) works as it did before.

        No new tests required, this patch doesn't change any current functionality. 
        It only adds support for referencing <mask> elements for the -webkit-mask-image 
        property. This is sub-part 1 of the bigger patch https://bugs.webkit.org/show_bug.cgi?id=129682.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isWebKitCSSResourceValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::createMaskImageOperations):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::maskImagesWithPendingSVGDocuments):
        * css/WebKitCSSResourceValue.cpp: Added.
        (WebCore::WebKitCSSResourceValue::WebKitCSSResourceValue):
        (WebCore::WebKitCSSResourceValue::customCSSText):
        (WebCore::WebKitCSSResourceValue::isCSSValueNone):
        * css/WebKitCSSResourceValue.h: Added.
        (WebCore::WebKitCSSResourceValue::create):
        (WebCore::WebKitCSSResourceValue::innerValue):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::addCachedResource):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::isSVGDocument):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::createPageFromBuffer):
        * page/Page.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::isSVGDocument):
        * platform/graphics/MaskImageOperation.cpp: Added.
        (WebCore::MaskImageOperation::create):
        (WebCore::MaskImageOperation::MaskImageOperation):
        (WebCore::MaskImageOperation::~MaskImageOperation):
        (WebCore::MaskImageOperation::isCSSValueNone):
        (WebCore::MaskImageOperation::cssValue):
        (WebCore::MaskImageOperation::isMaskLoaded):
        (WebCore::MaskImageOperation::setRenderLayerImageClient):
        (WebCore::MaskImageOperation::addRendererImageClient):
        (WebCore::MaskImageOperation::removeRendererImageClient):
        (WebCore::MaskImageOperation::getOrCreateCachedSVGDocumentReference):
        (WebCore::MaskImageOperation::notifyFinished): This is the method that gets called when the document has finished 
        downloading and checks if it can find a valid <mask> element.
        (WebCore::MaskImageOperation::drawMask):
        (WebCore::MaskImageOperation::getSVGMasker):
        * platform/graphics/MaskImageOperation.h: Added.
        * rendering/RenderBoxModelObject.cpp: The BackgroundImageGeometry class was moved out of RenderBoxModelObject in 
        order to be used as a parameter for other methods. This was necessary to avoid having methods with very many parameters.
        (WebCore::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::BackgroundImageGeometry::clip):
        (WebCore::BackgroundImageGeometry::relativePhase):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::BackgroundImageGeometry::BackgroundImageGeometry):
        (WebCore::BackgroundImageGeometry::destOrigin):
        (WebCore::BackgroundImageGeometry::setDestOrigin):
        (WebCore::BackgroundImageGeometry::destRect):
        (WebCore::BackgroundImageGeometry::setDestRect):
        (WebCore::BackgroundImageGeometry::phase):
        (WebCore::BackgroundImageGeometry::setPhase):
        (WebCore::BackgroundImageGeometry::tileSize):
        (WebCore::BackgroundImageGeometry::setTileSize):
        (WebCore::BackgroundImageGeometry::spaceSize):
        (WebCore::BackgroundImageGeometry::setSpaceSize):
        (WebCore::BackgroundImageGeometry::setPhaseX):
        (WebCore::BackgroundImageGeometry::setPhaseY):
        (WebCore::BackgroundImageGeometry::setHasNonLocalGeometry):
        (WebCore::BackgroundImageGeometry::hasNonLocalGeometry):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::BackgroundImageGeometry): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setHasNonLocalGeometry): Deleted.
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::hasNonLocalGeometry): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerMaskImageInfo.cpp: Added.
        (WebCore::RenderLayer::MaskImageInfo::layerToMaskMap): Returns a static map that links MaskImageInfo objects to RenderLayers.
        (WebCore::RenderLayer::MaskImageInfo::getIfExists): Returns the MaskImageInfo associated with a specific RenderLayer.
        (WebCore::RenderLayer::MaskImageInfo::get): Returns the MaskImageInfo associated with a specific RenderLayer (creates it if necessary).
        (WebCore::RenderLayer::MaskImageInfo::remove): Removes the MaskImageInfo associated with a specific RenderLayer.
        (WebCore::RenderLayer::MaskImageInfo::MaskImageInfo):
        (WebCore::RenderLayer::MaskImageInfo::~MaskImageInfo):
        (WebCore::RenderLayer::MaskImageInfo::notifyFinished): Gets called when the SVG document finished loading, triggers repaint.
        (WebCore::RenderLayer::MaskImageInfo::imageChanged): Gets called when the image object changed, triggers repaint.
        (WebCore::RenderLayer::MaskImageInfo::updateMaskImageClients): Goes through all mask layers and sets image/SVG clients. 
        Updates list of internal and external SVG references.
        (WebCore::RenderLayer::MaskImageInfo::removeMaskImageClients): Removes all image/SVG clients and clears lists of internal and external SVG references.
        * rendering/RenderLayerMaskImageInfo.h: Added.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderSVGResourceMasker):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::cullEmptyLayers):
        (WebCore::FillLayer::hasNonEmptyMaskImage):
        (WebCore::FillLayer::imagesAreLoaded):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::maskImage):
        (WebCore::FillLayer::imageOrMaskImage):
        (WebCore::FillLayer::setMaskImage):
        (WebCore::FillLayer::clearMaskImage):
        (WebCore::FillLayer::hasMaskImage):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applySVGMask):
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawMaskForRenderer):
        * rendering/svg/RenderSVGResourceMasker.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::createElementRenderer):
        (WebCore::SVGMaskElement::addClientRenderLayer):
        (WebCore::SVGMaskElement::removeClientRenderLayer):
        * svg/SVGMaskElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::setCachedDocument):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

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

        Unreviewed, rolling out r176789.
        https://bugs.webkit.org/show_bug.cgi?id=139255

        Broke the non Mac-WK2 builds (Requested by stavila on
        #webkit).

        Reverted changeset:

        "Remove isSpecifiedFont boolean from FontDescription"
        https://bugs.webkit.org/show_bug.cgi?id=139233
        http://trac.webkit.org/changeset/176789

2014-12-03  Antti Koivisto  <antti@apple.com>

        Remove isSpecifiedFont boolean from FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=139233

        Reviewed by Andreas Kling.

        It is barely used.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritFontFamily):
        (WebCore::StyleBuilderCustom::applyValueFontFamily):
        * platform/graphics/FontDescription.cpp:
        (WebCore::genericFamiliesSet):
        (WebCore::FontDescription::hasGenericFirstFamily):

            Add a function to test for generic families.

        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::setTextRenderingMode):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::isSpecifiedFont): Deleted.
        (WebCore::FontDescription::setIsSpecifiedFont): Deleted.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeUseBackslashAsYenSymbol):

            This is the only client.
            Figure out the equivalent information dynamically if needed.

2014-12-03  Joonghun Park  <jh718.park@samsung.com>

        Use std::unique_ptr instead of PassOwnPtr|OwnPtr for Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=139019

        Reviewed by Darin Adler.

        No new tests, no behavior changes.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        * dom/DataTransfer.h:
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingDataTransfer):
        * platform/Pasteboard.h:
        * platform/efl/PasteboardEfl.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createPrivate):
        (WebCore::Pasteboard::createForDragAndDrop):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForGlobalSelection):
        (WebCore::Pasteboard::createPrivate):
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::Pasteboard::create): Deleted.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createPrivate):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createPrivate):
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::Pasteboard::create): Deleted.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createPrivate):
        (WebCore::Pasteboard::createForDragAndDrop):

2014-12-03  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of FrameLoaderClient::dispatchWillRequestResource
        https://bugs.webkit.org/show_bug.cgi?id=139235

        Reviewed by Alexey Proskuryakov.

        It is useless.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchWillRequestResource): Deleted.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):

2014-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        List markers in RTL languages do not draw the first character.
        https://bugs.webkit.org/show_bug.cgi?id=139244

        Reviewed by Simon Fraser.

        Off-by-one error when reversing the string (from LTR to RTL)

        Test: fast/lists/rtl-marker.html

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):

2014-12-03  Beth Dakin  <bdakin@apple.com>

        <input> elements get whitespace action menu instead of editable text menu
        https://bugs.webkit.org/show_bug.cgi?id=139241
        -and corresponding-
        rdar://problem/19072083

        Reviewed by Sam Weinig.

        Since we will hit test form controls as form controls, we need a new function to 
        determine if the hit point is over text inside that form control or not.
        * WebCore.exp.in:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isOverTextInsideFormControlElement):
        * rendering/HitTestResult.h:

2014-12-03  Tim Horton  <timothy_horton@apple.com>

        Keyboard input should be disabled in the preview popover
        https://bugs.webkit.org/show_bug.cgi?id=139219
        <rdar://problem/19052381>

        Reviewed by Anders Carlsson.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::shouldDispatchFakeMouseMoveEvents):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon):
        Allow ChromeClient to disable the dispatch of "fake" mouseMove events
        that happens during scrolling.

2014-12-03  Antti Koivisto  <antti@apple.com>

        Remove genericFamily enum from FontDescription
        https://bugs.webkit.org/show_bug.cgi?id=139207

        Reviewed by Andreas Kling.

        We use predefined AtomicStrings for generic families. The side enum adds no information.

        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        (WebCore::CSSFontSelector::getFontData):

            Match the existing quirk where the default font can be replaced by @font-face rule but user generic families can't.

        (WebCore::CSSFontSelector::resolvesFamilyFor):
        (WebCore::fontDataForGenericFamily): Deleted.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontFamily::applyInheritValue):
        (WebCore::ApplyPropertyFontFamily::applyInitialValue):
        (WebCore::ApplyPropertyFontFamily::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkForGenericFamilyChange):

            Remove the explicit monospace check, earlier useFixedDefaultSize check is equivalent.

        (WebCore::StyleResolver::initializeFontStyle):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::useFixedDefaultSize):
        (WebCore::FontDescription::setWeight):
        (WebCore::FontDescription::equalForTextAutoSizing):
        (WebCore::FontDescription::operator==):
        (WebCore::FontDescription::genericFamily): Deleted.
        (WebCore::FontDescription::setGenericFamily): Deleted.
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::controlFont):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

            Reset the lineheight unconditionally for buttons.
            This always happened before because the explicitly set generic family made the font compare false.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFont):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

            Resolve document style for final value immediately as it can't be affected by @font-face rules.

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

        ASSERTION: RenderMultiColumnFlowThread::processPossibleSpannerDescendant() when column spanner's parent is not a RenderBlockFlow.
        https://bugs.webkit.org/show_bug.cgi?id=139188
        rdar://problem/18502182

        Reviewed by David Hyatt.

        This patch ensures that the validation check for spanner in isValidColumnSpanner() is in synch
        with the expectation in RenderMultiColumnFlowThread::processPossibleSpannerDescendant().
        (descendant's parent is expected to be a RenderBlockFlow)

        Test: fast/multicol/svg-content-as-column-spanner-crash.html

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):

2014-12-03  peavo@outlook.com  <peavo@outlook.com>

        [TexMap] Redundant method in GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=138005

        Reviewed by Alex Christensen.

        The TextureMapperLayer method descendantsOrSelfHaveRunningAnimations() can be used
        instead of the GraphicsLayerTextureMapper method startedAnimation().

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2014-12-03  Jeremy Jones  <jeremyj@apple.com>

        Subtitle menu should only appear when useful.
        https://bugs.webkit.org/show_bug.cgi?id=139133

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController hasLegibleMediaSelectionOptions]): only enable when there are non default options.
        (-[WebAVPlayerController hasAudioMediaSelectionOptions]): only enable when there is more than one option.

2014-12-03  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Inline text elements with accessible object attributes and/or event handlers are not exposed
        https://bugs.webkit.org/show_bug.cgi?id=139071

        Reviewed by Chris Fleizach.

        Adds a new InlineRole accessibility role type for non-focusable inline
        elements which have an event handler or attribute suggesting possible
        inclusion by the platform. This is mapped to ATK_ROLE_STATIC for GTK and
        EFL. On the Mac, it is currently ignored to preserve existing behavior.

        Added new test cases to the existing roles-exposed.html test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsDatetimeAttribute): Added.
        * accessibility/AccessibilityObject.h: Added InlineRole.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole): Handle InlineRole.
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): Include InlineRole objects.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): Ignore InlineRole objects.
        * html/HTMLTagNames.in: Added 'time'.

2014-12-03  Jer Noble  <jer.noble@apple.com>

        [Mac] Hang when calling -[AVAsset resolvedURL].
        https://bugs.webkit.org/show_bug.cgi?id=139223

        Reviewed by Eric Carlson.

        On a particularly slow-loading site, a call to -[AVAsset resolvedURL] can take an arbitrarily long
        time. Treat this AVAsset property similar to other "metadata" properties, and check the load status
        of the property before requesting it.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasSingleSecurityOrigin): Check the load state of -resolvedURL.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::resolvedURL): Ditto.
        (WebCore::assetMetadataKeyNames): Add @"resolvedURL".

2014-12-03  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176721 to fix ENABLE(CSS_DEVICE_ADAPTATION) build.

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

2014-12-03  Chris Dumez  <cdumez@apple.com>

        Move 'display' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139218

        Reviewed by Antti Koivisto.

        Move 'display' CSS property to the new StyleBuilder.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue): Deleted.
        (WebCore::ApplyPropertyDisplay::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyDisplay::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyDisplay::applyValue): Deleted.
        (WebCore::ApplyPropertyDisplay::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::isValidDisplayValue):
        (WebCore::StyleBuilderCustom::applyInheritDisplay):
        (WebCore::StyleBuilderCustom::applyValueDisplay):
        * css/makeprop.pl:
        Add support for passing multiple values for Custom option, e.g.:
        'Custom=Inherit|Value'. This was useful as we did not need custom
        code for display's initial value.

2014-12-03  Chris Dumez  <cdumez@apple.com>

        Modernize the CSSParser code
        https://bugs.webkit.org/show_bug.cgi?id=139209

        Reviewed by Antti Koivisto.

        Modernize the CSSParser code by:
        - Using more references instead of pointers
        - Using nullptr instead of 0

        No new tests, no behavior change.

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

        [iOS] REGRESSION (r176622): WebCore fails to link

        Speculative fix for the following build failure:

            Ld WebCore
            Undefined symbols for architecture armv7s:
              "__ZN3JSC10IdentifierC1EPNS_9ExecStateERKN3WTF12AtomicStringE", referenced from:
                  __ZN7WebCoreL24createAccelerationObjectEPKNS_16DeviceMotionData12AccelerationEPN3JSC9ExecStateE in JSDeviceMotionEventCustom.o

        * bindings/js/JSDeviceMotionEventCustom.cpp: Include
        <runtime/IdentifierInlines.h> to define missing symbol.

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

        [Media] Audio content shouldn't have fullscreen buttons, even if in a video element
        https://bugs.webkit.org/show_bug.cgi?id=139200
        <rdar://problem/18914506>

        Reviewed by Eric Carlson.

        An audio-only resource, even if loaded into a <video> element, should not
        present the fullscreen or optimised fullscreen controls. This includes a
        MediaDocument, which is always a <video> element. We can detect this by
        examining the length of the videoTracks property as our content loads.

        Test: media/audio-as-video-fullscreen.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Initialize a hasVisualMedia to false.
        (Controller.prototype.handleReadyStateChange): If we see a videoTrack, hasVisualMedia is now true.
        (Controller.prototype.updateFullscreenButtons): Merge the updateFullscreenButton and
        updateOptimizedFullscreenButton methods into this single spot, and check for
        hasVisualMedia.
        (Controller.prototype.updateFullscreenButton): Deleted.
        (Controller.prototype.updateOptimizedFullscreenButton): Deleted.

        * Modules/mediacontrols/mediaControlsBase.js: Do the same for the other ports.

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

        Missing support for innerHTML on SVGElement
        https://bugs.webkit.org/show_bug.cgi?id=136903

        Unreviewed followup from r176630. Minor style nits that I missed in my review.

        * dom/Element.h: Remove unnecessary parameter name.
        * html/parser/HTMLTreeBuilder.cpp: Whitespace cleanup.
        (WebCore::HTMLTreeBuilder::adjustedCurrentStackItem):

2014-12-03  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        [EFL] Add subtle crypto to the build system
        https://bugs.webkit.org/show_bug.cgi?id=138612

        Reviewed by Csaba Osztrogonác.

        It is obvious to make Efl use GnuTLS as well,
        and since there seems no reason why to separate
        Efl and Gtk implementations from each other, I
        also propose renaming the gtk directory and file
        suffixes to gnutls.

        No new tests needed.

        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * crypto/gnutls/CryptoAlgorithmAES_CBCGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmAES_CBCGtk.cpp.
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmAES_KWGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmAES_KWGtk.cpp.
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmHMACGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmHMACGtk.cpp.
        (WebCore::getGnutlsDigestAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/gnutls/CryptoAlgorithmRSAES_PKCS1_v1_5GnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmRSAES_PKCS1_v1_5Gtk.cpp.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmRSASSA_PKCS1_v1_5GnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmRSASSA_PKCS1_v1_5Gtk.cpp.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify):
        * crypto/gnutls/CryptoAlgorithmRSA_OAEPGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmRSA_OAEPGtk.cpp.
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gnutls/CryptoAlgorithmRegistryGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoAlgorithmRegistryGtk.cpp.
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/gnutls/CryptoDigestGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoDigestGtk.cpp.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):
        * crypto/gnutls/CryptoKeyRSAGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/CryptoKeyRSAGtk.cpp.
        (WebCore::CryptoKeyRSA::CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::create):
        (WebCore::CryptoKeyRSA::~CryptoKeyRSA):
        (WebCore::CryptoKeyRSA::restrictToHash):
        (WebCore::CryptoKeyRSA::isRestrictedToHash):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        (WebCore::CryptoKeyRSA::exportData):
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/gnutls/SerializedCryptoKeyWrapGnuTLS.cpp: Renamed from Source/WebCore/crypto/gtk/SerializedCryptoKeyWrapGtk.cpp.
        (WebCore::getDefaultWebCryptoMasterKey):
        (WebCore::wrapSerializedCryptoKey):
        (WebCore::unwrapSerializedCryptoKey):
        * crypto/keys/CryptoKeyRSA.h:

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

        Little cleanup of the default stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=139168

        Reviewed by Antti Koivisto.

        The default stylesheet has a lot of historical junk that need cleaning. This patch addresses
        only the bits that do not change behaviors and have positive perf and readability impact.

        I have limited :matches() to attributes for now. The idea is to only target
        simple selectors that are not used for filtering by the collectors.
        We should eventually clean up more cases, one thing at a time.

        Tests: fast/css/map-tag-default-display.html
               fast/selectors/map-tag-default-display.html

        * css/html.css:
        (map): Deleted.
        map was explicitely setting its display to inline. Remove that since it is the default.

        (head): Deleted.
        (meta): Deleted.
        (title): Deleted.
        (link): Deleted.
        (style): Deleted.
        (script): Deleted.
        (div): Deleted.
        (layer): Deleted.
        (article, aside, footer, header, hgroup, main, nav, section): Deleted.
        (address): Deleted.
        (head, link, meta, script, style, title):
        (address, article, aside, div, footer, header, hgroup, layer, main, nav, section):
        Group the standard blocks in a single rule.

        (input:matches([type="hidden"], [type="image"], [type="file"])):
        (input:matches([type="radio"], [type="checkbox"])):
        (input:matches([type="button"], [type="submit"], [type="reset"])):
        (input:matches([type="button"], [type="submit"], [type="reset"]), input[type="file"]::-webkit-file-upload-button, button):
        (input:matches([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]::-webkit-file-upload-button:active, button:active):
        (input:matches([type="button"], [type="submit"], [type="reset"]):active, input[type="file"]:active::-webkit-file-upload-button, button:active):
        (input[type="file"]:active:disabled::-webkit-file-upload-button, button:active:disabled):
        (input:matches([type="checkbox"], [type="radio"]):checked):
        (input:matches([type="checkbox"], [type="radio"]):checked:disabled):
        (select:matches([size], [multiple], [size][multiple])):
        (select:matches([size="0"], [size="1"])):
        (input[type="hidden"], input[type="image"], input[type="file"]): Deleted.
        (input[type="radio"], input[type="checkbox"]): Deleted.
        (input[type="button"], input[type="submit"], input[type="reset"]): Deleted.
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button): Deleted.
        (input[type="button"]:active, input[type="submit"]:active, input[type="reset"]:active, input[type="file"]::-webkit-file-upload-button:active, button:active): Deleted.
        (input[type="button"]:active, input[type="submit"]:active, input[type="reset"]:active, input[type="file"]:active::-webkit-file-upload-button, button:active): Deleted.
        (input[type="button"]:active:disabled, input[type="submit"]:active:disabled, input[type="reset"]:active:disabled, input[type="file"]:active:disabled::-webkit-file-upload-button, button:active:disabled): Deleted.
        (input[type="checkbox"]:checked, input[type="radio"]:checked): Deleted.
        (input[type="checkbox"]:checked:disabled, input[type="radio"]:checked:disabled): Deleted.
        (select[size][multiple]): Deleted.
        (select[size="1"]): Deleted.
        Group every selector lists that only differentiates complex selectors through attributes
        into a simple complex selector with :matches().

2014-12-02  Mark Lam  <mark.lam@apple.com>

        Rolling out r176592, r176603, r176616, and r176705 until build and perf issues are resolved.
        https://bugs.webkit.org/show_bug.cgi?id=138821

        Not reviewed.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserializeString):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isBadMatch):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::fontDataForCharacter):
        (WebCore::SegmentedFontData::containsCharacter):
        (WebCore::SegmentedFontData::isLoading):
        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::convertWOFFToSfnt):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * svg/SVGFontElement.cpp:
        (WebCore::kerningForPairOfStringsAndGlyphs):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::append):
        * xml/XPathNodeSet.h:
        (WebCore::XPath::NodeSet::begin):
        (WebCore::XPath::NodeSet::end):

2014-12-02  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break EFL port since r176696
        https://bugs.webkit.org/show_bug.cgi?id=139215

        Unreviewed, build fix for EFL port.

        * storage/StorageNamespaceProvider.h: Include SecurityOriginHash.h from WebCore/page directory.

2014-12-02  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Table captions and table rows are missing from the accessible hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=139005

        Reviewed by Chris Fleizach.

        Expose table captions and rows via ATK. Accomplishing the former is done
        by role mapping and inclusion of the object as a child of the table for
        ATK. Accomplishing the latter was mostly a matter of deleting all the ATK
        platform code that had been forcing rows to be ignored. Because captions
        are not being exposed on the Mac, they are now explicitly being ignored
        for that platform.

        Tests: accessibility/aria-table-hierarchy.html
               accessibility/table-hierarchy.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole): Added CaptionRole.
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren): Include non-ignored captions as table children.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetNChildren): Removed special handling for tables.
        (webkitAccessibleRefChild): Removed special handling for tables.
        (webkitAccessibleGetIndexInParent): Removed special handling for table cells.
        (atkRole): Corrected broken mapping for RowRole.
        (getNChildrenForTable): Deleted.
        (getChildForTable): Deleted.
        (getIndexInParentForCellInRow): Deleted.
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): Ignore captions as table children.

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

        http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=139149

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Added ApplicationCache::deleteAllCaches.

        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::deleteAllCaches): Added.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getManifestURLs): Removed logging. It is OK to
        have this function called when there is no database file.

        * loader/appcache/ApplicationCacheStorage.h: Renamed manifestURLs to getManifestURLs,
        because WebKit style.

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

        Remove a SnowLeopard-era quirk for QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=139208
        <rdar://problem/19121822>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        * loader/FrameLoaderClient.h:
        * platform/mac/QuickLookMac.h: Removed.
        * platform/mac/QuickLookMac.mm: Removed.

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

        Begin stubbing out a StorageNamespaceProvider class
        https://bugs.webkit.org/show_bug.cgi?id=139203

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        If the page has a storage namespace provider, get the local storage from it.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Move the storage namespace provider from the configuration.

        (WebCore::Page::setStorageNamespaceProvider):
        Add a setter. This will be used by setGroupName.

        * page/Page.h:
        (WebCore::Page::storageNamespaceProvider):
        Add a getter.

        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        Add a storage namespace provider member.

        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::StorageNamespaceProvider):
        (WebCore::StorageNamespaceProvider::~StorageNamespaceProvider):
        (WebCore::StorageNamespaceProvider::addPage):
        (WebCore::StorageNamespaceProvider::removePage):
        (WebCore::StorageNamespaceProvider::localStorageNamespace):
        (WebCore::StorageNamespaceProvider::transientLocalStorageNamespace):
        * storage/StorageNamespaceProvider.h:
        Stub out a storage namespace provider class.

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

        More build fixing.

        * platform/spi/mac/QuickLookMacSPI.h:

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

        Another build fix.

        * platform/spi/mac/NSMenuSPI.h:

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

        Speculative build fix.

        * platform/spi/mac/QuickLookMacSPI.h:

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

        Speculative build fix.

        * platform/spi/mac/QuickLookMacSPI.h:

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

        Unreviewed, fix typo introduced in r176673.

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

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

        Should use standardQuickLookMenuItem for apps that don't implement customizations
        https://bugs.webkit.org/show_bug.cgi?id=139193
        -and corresponding-
        rdar://problem/18944696

        Reviewed by Anders Carlsson.

        New SPI headers.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/NSMenuSPI.h: Added.
        * platform/spi/mac/QuickLookMacSPI.h: Added.

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

        Generalize PageActivityAssertionToken
        https://bugs.webkit.org/show_bug.cgi?id=139106

        Reviewed by Sam Weinig.

        PageActivityAssertionToken is a RAII mechanism implementing a counter, used by PageThrottler
        to count user visible activity in progress on the page (currently page load and media playback).
        Use of an RAII type is prevents a number of possible errors, including double counting a single
        media element, or failing to decrement the count after a media element has been deallocated.

        The current implementation has a number of drawbacks that have been addressed by this refactoring:
         - specific to single use in PageThrottler class - not reusable.
         - incomplete encapsulation - the counter and WeakPtrFactory that comprise the current implementation
           are not encapsulated (are in the client type, PageThrottler).
         - tokens are not shared - PageActivityAssertionToken instances are managed by std::unique, every
           increment requires an object allocation.
         - redundancy - the current implementation uses a WeakPtr to safely reference the PageThrottler, this
           is internally implemented using a reference counted type, resulting in two counters being
           incremented (one in the PageActivityAssertionToken, one in the PageThrottler).

        In the reimplementation:
         - a callback is provided via a lambda function, which allows for easy reuse without a lot of
           boilerplate code.
         - the counter, callback and ownership of the otherwise weakly-owned token is encapsulated within the
           RefCounter type.
         - a single count within RefCounter::Count stores the counter value, and also manage the lifetime
           of this object.
         - standard RefPtrs are used to manage references to the RefCounter::Count.

        * WebCore.xcodeproj/project.pbxproj:
            - removed PageActivityAssertionToken.cpp/.h
        * html/HTMLMediaElement.cpp:
            - removed PageActivityAssertionToken.h
        * html/HTMLMediaElement.h:
            - std::unique_ptr<PageActivityAssertionToken> -> RefPtr<RefCounter::Count>
        * loader/FrameLoader.cpp:
            - removed PageActivityAssertionToken.h
        * loader/FrameLoader.h:
            - std::unique_ptr<PageActivityAssertionToken> -> RefPtr<RefCounter::Count>
        * loader/SubresourceLoader.cpp:
            - removed PageActivityAssertionToken.h
        * loader/SubresourceLoader.h:
            - removed class PageActivityAssertionToken
        * page/Page.cpp:
            - removed PageActivityAssertionToken.h
        (WebCore::Page::Page):
            - removed Page* parameter to PageThrottler
        * page/Page.h:
            - removed class PageActivityAssertionToken
        * page/PageActivityAssertionToken.cpp: Removed.
        * page/PageActivityAssertionToken.h: Removed.
            - removed PageActivityAssertionToken.cpp/.h
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - removed m_page, m_weakPtrFactory, m_activityCount; added m_pageActivityCounter.
        (WebCore::PageThrottler::mediaActivityToken):
            - std::unique_ptr<PageActivityAssertionToken> -> PassRefPtr<RefCounter::Count>
        (WebCore::PageThrottler::pageLoadActivityToken):
            - std::unique_ptr<PageActivityAssertionToken> -> PassRefPtr<RefCounter::Count>
        (WebCore::PageThrottler::pageActivityCounterValueDidChange):
            - merged functionality of incrementActivityCount/decrementActivityCount
        (WebCore::PageThrottler::incrementActivityCount): Deleted.
            - see pageActivityCounterValueDidChange
        (WebCore::PageThrottler::decrementActivityCount): Deleted.
            - see pageActivityCounterValueDidChange
        * page/PageThrottler.h:
        (WebCore::PageThrottler::weakPtr): Deleted.
            - no longer required; this functionality is now encapsulated within RefCounter.

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

        Always show the arrow for text selection services
        https://bugs.webkit.org/show_bug.cgi?id=139191
        <rdar://problem/18903995>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/DataDetectorsSPI.h:
        * page/mac/ServicesOverlayController.mm:
        Move a few things to DataDetectorsSPI.h.

        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        Make use of the real DDHighlightStyle names.
        Add DDHighlightStyleButtonShowAlways for selection services.

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

        Fix iOS build.

        * WebCore.exp.in:

2014-12-02  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'flex' CSS property to 'calc(2 * 3) calc(2 * 3)'
        https://bugs.webkit.org/show_bug.cgi?id=139162

        Reviewed by Darin Adler.

        Add support for calculated values in 'flex' CSS property.
        Previously, those did not work in release builds, and were hitting
        an assertion in debug builds.

        Test: fast/css/flex-calculated-value.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validCalculationUnit):
        Do not call RefPtr::release() as we are not interested in the return
        value. Assign nullptr to the member instead.

        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::CSSParser::parsedDouble):
        (WebCore::CSSParser::colorIntFromValue):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        (WebCore::CSSParser::parseFlex):
        * css/CSSParser.h:

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

        Fix logging typo
        https://bugs.webkit.org/show_bug.cgi?id=139182

        Reviewed by Alexey Proskuryakov.

        No new tests, only logging code is changed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Don't use %f to log a string.

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

        Get rid of the WinINet based network implementation
        https://bugs.webkit.org/show_bug.cgi?id=139187

        Reviewed by Andreas Kling.

        This code was only used by the Windows CE port. Now it's unused.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/win/AuthenticationChallenge.h: Removed.
        * platform/network/win/CookieJarWin.cpp: Removed.
        * platform/network/win/CredentialStorageWin.cpp: Removed.
        * platform/network/win/ProxyServerWin.cpp: Removed.
        * platform/network/win/ResourceError.h: Removed.
        * platform/network/win/ResourceHandleWin.cpp: Removed.
        * platform/network/win/ResourceRequest.h: Removed.
        * platform/network/win/ResourceResponse.h: Removed.
        * platform/network/win/SocketStreamError.h: Removed.
        * platform/network/win/SocketStreamHandle.h: Removed.
        * platform/network/win/SocketStreamHandleWin.cpp: Removed.

2014-12-02  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'column-span' CSS property to 'calc(2 * 3)'
        https://bugs.webkit.org/show_bug.cgi?id=139170

        Reviewed by Darin Adler.

        Add support for calculated values for 'column-span' and 'column-width'
        CSS properties. Previously, these were not working in release builds
        and hitting assertions in debug builds.

        Tests: fast/css/column-width-calculated-value.html
               fast/css/webkit-column-span-calculated-value.html

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

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

        Remove visited link handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139185

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/HistoryController.cpp:
        * page/Chrome.cpp:
        (WebCore::ChromeClient::populateVisitedLinks): Deleted.
        * page/ChromeClient.h:
        * page/DefaultVisitedLinkStore.cpp: Removed.
        * page/DefaultVisitedLinkStore.h: Removed.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::visitedLinkStore):
        (WebCore::Page::setVisitedLinkStore):
        (WebCore::Page::removeAllVisitedLinks): Deleted.
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::visitedLinkStore): Deleted.
        (WebCore::PageGroup::isLinkVisited): Deleted.
        (WebCore::PageGroup::addVisitedLinkHash): Deleted.
        (WebCore::PageGroup::addVisitedLink): Deleted.
        (WebCore::PageGroup::removeVisitedLink): Deleted.
        (WebCore::PageGroup::removeVisitedLinks): Deleted.
        (WebCore::PageGroup::removeAllVisitedLinks): Deleted.
        (WebCore::PageGroup::setShouldTrackVisitedLinks): Deleted.
        * page/PageGroup.h:

2014-12-02  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Use references instead of pointers in EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=137918

        Reviewed by Darin Adler.

        * editing/EditingStyle.cpp:
        (WebCore::extractPropertyValue):
        (WebCore::identifierForStyleProperty):
        (WebCore::textColorFromStyle):
        (WebCore::backgroundColorFromStyle):
        (WebCore::textAlignResolvingStartAndEnd):
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode):
        (WebCore::EditingStyle::prepareToApplyAt):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        (WebCore::StyleChange::StyleChange):
        (WebCore::setTextDecorationProperty):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::fontWeightIsBold):
        (WebCore::extractPropertiesNotIn):
        (WebCore::getPropertiesNotIn):
        * editing/EditingStyle.h:

2014-12-02  Bartlomiej Gajda  <b.gajda@samsung.com>

        [GStreamer] Media Source sending seek event fails.
        https://bugs.webkit.org/show_bug.cgi?id=139181

        Reviewed by Philippe Normand.

        There were callbacks connected to app_src on 'seek', but if stream type is not seekable, they would never launch,
        and seeking (as in MediaPlayerPrivateGStreamer::doSeek) fails.

        No new tests needed.

        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_init):

2014-12-02  Chris Dumez  <cdumez@apple.com>

        Move 'font-family' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139172

        Reviewed by Antti Koivisto.

        Move 'font-family' CSS property to the new StyleBuilder by using
        custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyFontFamily::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyFontFamily::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyFontFamily::applyValue): Deleted.
        (WebCore::ApplyPropertyFontFamily::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInitialFontFamily):
        (WebCore::StyleBuilderCustom::applyInheritFontFamily):
        (WebCore::StyleBuilderCustom::applyValueFontFamily):

2014-12-02  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix class was previously declared as a struct warnings
        https://bugs.webkit.org/show_bug.cgi?id=139131

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/graphics/texmap/TextureMapperGL.h:

2014-12-02  Sylvain Galineau  <galineau@adobe.com>

        Missing support for innerHTML on SVGElement
        https://bugs.webkit.org/show_bug.cgi?id=136903

        Reviewed by Dean Jackson.

        Two parts to this patch:
        1. Move innerHTML/outerHTML to Element so SVG elements can inherit them, per https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#innerhtml
        2. Make sure fragment insertion is processed relative to the proper node, per http://www.whatwg.org/specs/web-apps/current-work/#adjusted-current-node

        The latter part was ported over from Blink. 

        Test: svg/in-html/svg-inner-html.html

        * bindings/objc/PublicDOMInterfaces.h: Move innerHTML/outerHTML to Element.
        * dom/Element.cpp:
        (WebCore::Element::mergeWithNextTextNode): Helper used by Element::innerHTML/outerHTML as well as HTMLElement::innerText/outerText; moved to Element as protected static.
        (WebCore::Element::innerHTML): Moved from HTMLElement.
        (WebCore::Element::outerHTML): Moved from HTMLElement.
        (WebCore::Element::setOuterHTML): Moved from HTMLElement.
        (WebCore::Element::setInnerHTML): Moved from HTMLElement.
        * dom/Element.h: 
        * dom/Element.idl:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::innerHTML): Deleted.
        (WebCore::HTMLElement::outerHTML): Deleted.
        (WebCore::HTMLElement::setInnerHTML): Deleted.
        (WebCore::mergeWithNextTextNode): Deleted.
        (WebCore::HTMLElement::setOuterHTML): Deleted.
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext): no more m_contextElement.
        (WebCore::HTMLTreeBuilder::constructTree): read namespace from adjusted current node.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): use contextElementStackItem for insertion.
        (WebCore::HTMLTreeBuilder::adjustedCurrentStackItem): compute adjusted current node.
        (WebCore::HTMLTreeBuilder::shouldProcessTokenInForeignContent): use adjusted current node for context.
        (WebCore::HTMLTreeBuilder::processTokenInForeignContent): use adjusted current node to read namespace.
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement): Deleted. Read from contextElementStackItem.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElementStackItem): Added.

2014-11-20  Jeffrey Pfau  <jpfau@apple.com>

        Add cancelable version of willSendRequest
        https://bugs.webkit.org/show_bug.cgi?id=138987

        Reviewed by Anders Carlsson.

        Covered by existing tests.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        * loader/ResourceLoader.h:

2014-12-01  Benjamin Poulain  <benjamin@webkit.org>

        Add the dynamic specificity of the selector list argument when matching :nth-child() and :nth-last-child()
        https://bugs.webkit.org/show_bug.cgi?id=139001

        Reviewed by Andreas Kling.

        When matching :nth-child(An+B of selector list) or :nth-last-child(An+B of selector list),
        we were previously ignoring the arguments.

        That behavior seems to be confusing for users. We made the proposal to include the selector list
        like when using :matches():
            http://lists.w3.org/Archives/Public/www-style/2014Oct/0533.html
        David Baron also agrees with this behavior:
            http://lists.w3.org/Archives/Public/www-style/2014Oct/0534.html

        This patch adds the specificity computation.

        Tests: fast/css/nth-child-specificity-1.html
               fast/css/nth-child-specificity-2.html
               fast/css/nth-last-child-specificity-1.html
               fast/css/nth-last-child-specificity-2.html

        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorFunctionalPseudoClassStaticSpecificity):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matchSelectorList):
        * css/SelectorChecker.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-12-01  Chris Dumez  <cdumez@apple.com>

        Move 'text-shadow' / 'box-shadow' / '-webkit-box-shadow' to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138938

        Reviewed by Sam Weinig.

        Move 'text-shadow' / 'box-shadow' / '-webkit-box-shadow' CSS properties
        from StyleResolver to the new StyleBuilder by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyTextOrBoxShadowValue):
        (WebCore::StyleBuilderCustom::applyInitialTextShadow):
        (WebCore::StyleBuilderCustom::applyInheritTextShadow):
        (WebCore::StyleBuilderCustom::applyValueTextShadow):
        (WebCore::StyleBuilderCustom::applyInitialBoxShadow):
        (WebCore::StyleBuilderCustom::applyInheritBoxShadow):
        (WebCore::StyleBuilderCustom::applyValueBoxShadow):
        (WebCore::StyleBuilderCustom::applyInitialWebkitBoxShadow):
        (WebCore::StyleBuilderCustom::applyInheritWebkitBoxShadow):
        (WebCore::StyleBuilderCustom::applyValueWebkitBoxShadow):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-12-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Add a ENABLE_CSS_SCROLL_SNAP macro to CMake build system
        https://bugs.webkit.org/show_bug.cgi?id=139085

        Reviewed by Andreas Kling.

        * PlatformEfl.cmake: 
            Include page/scrolling/AxisScrollSnapOffsets.cpp to EFL build files to fix build break.

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

        Twitter avatar moves when hovering/unhovering the "follow" button.
        https://bugs.webkit.org/show_bug.cgi?id=139147
        rdar://problem/19096508

        Reviewed by Simon Fraser.

        This patch ensures that the out of flow positioned render boxes (RenderReplaced) do not
        get repositioned when their inline box wrappers move.
        Ideally, out of flow positioned renderers do not have inline wrappers by the time we start
        placing inline boxes, but in certain case (optimized code path for descendantsHaveSameLineHeightAndBaseline()),
        they are still part of the inline box tree.
        This patch prevents those renderer boxes from getting positioned as part of the inline box placement.
        They will get removed later at RenderBlockFlow::computeBlockDirectionPositionsForLine().

        Test: fast/inline/out-of-flow-positioned-render-replaced-box-moves.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):

2014-12-01  Tim Horton  <timothy_horton@apple.com>

        Null deref under TextIndicator::createWithSelectionInFrame using find-in-page on bugzilla
        https://bugs.webkit.org/show_bug.cgi?id=139164
        <rdar://problem/19107247>

        Reviewed by Beth Dakin.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        Null-check the ImageBuffer in addition to the Image.

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

        Remove IWebCookieManager on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139144

        Reviewed by Sam Weinig.

        Remove code that handles overriding the cookie storage.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::cookieStorageOverride): Deleted.
        (WebCore::overrideCookieStorage): Deleted.
        (WebCore::overridenCookieStorage): Deleted.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):

2014-12-01  Dean Jackson  <dino@apple.com>

        [iOS Media] Slider knob should not have a border
        https://bugs.webkit.org/show_bug.cgi?id=139160
        <rdar://problem/19075185>

        Reviewed by Jer Noble.

        The change in r175715 required adding !important to a bunch
        of rules for pseudo elements. The border width of slider knobs
        for media controls should be zero, so add an !important there.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb): Change
        border to border-width and force it to zero.

2014-12-01  Chris Dumez  <cdumez@apple.com>

        Take into consideration canvas drawing for throttling DOM timers
        https://bugs.webkit.org/show_bug.cgi?id=139140
        <rdar://problem/19102218>

        Reviewed by Andreas Kling.

        Take into consideration canvas drawing for throttling DOM timers so
        that:
        - Timers drawing on a visible canvas can no longer get throttled.
          This fixes the following sites:
          - http://hint.fm/wind/
          - http://radar.weather.gov/Conus/full_loop.php
        - Timers that are drawing on a canvas that is not user observable
          now get throttled, thus using less CPU. As an example, on
          http://hint.fm/wind/, CPU usage is at 110% when the canvas is
          inside the viewport on my machine. CPU usage would remain at
          110% when scrolling the canvas outside the viewport before this
          patch. After this patch, the CPU usage goes down to 5% when
          the canvas is outside the viewport.

        Tests: fast/canvas/canvas-inside-viewport-timer-throttling.html
               fast/canvas/canvas-outside-viewport-timer-throttling.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::setScriptMadeNonUserObservableChangesToElement):
        (WebCore::DOMTimer::scriptDidCauseElementRepaint):
        (WebCore::DOMTimerFireState::setScriptMadeNonUserObservableChangesToElementStyle): Deleted.
        (WebCore::DOMTimer::scriptDidUpdateStyleOfElement): Deleted.
        * page/DOMTimer.h:

2014-12-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in Font::dashesForIntersectionsWithRect() due to underlining SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=139158

        Reviewed by Simon Fraser.

        RenderingContexts are only created if the primary SimpleFontData is an SVG font,
        but dashesForIntersectionWithRect() uses the first character's SimpleFontData.
        One might be an SVG font but the other might not be.

        Note that this brittle design will be fixed with the SVG -> OTF translator.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):

2014-12-01  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Fix not always calling mediaPlayer seek.
        https://bugs.webkit.org/show_bug.cgi?id=139139

        Reviewed by Jer Noble.

        Original comment states that media source shall always be notified of seek if it's not closed.

        No new tests needed.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seekTimerFired):

2014-12-01  Tim Horton  <timothy_horton@apple.com>

        Implement yellow highlight for WebKit1 data detectors
        https://bugs.webkit.org/show_bug.cgi?id=138956
        <rdar://problem/18992185>

        Reviewed by Beth Dakin.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::TextIndicator::TextIndicator):
        * page/TextIndicator.h:
        (WebCore::TextIndicator::selectionRectInScreenCoordinates):
        (WebCore::TextIndicator::textBoundingRectInScreenCoordinates):
        (WebCore::TextIndicator::selectionRectInWindowCoordinates): Deleted.
        (WebCore::TextIndicator::textBoundingRectInWindowCoordinates): Deleted.
        Store TextIndicator rects in screen coordinates, since that's what we
        want anyway, and this makes it easier to share this code between the WebKits.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:]):
        (WebCore::TextIndicatorWindow::setTextIndicator):
        Avoid some rect conversion because the TextIndicator rects are already in screen coordinates.

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

        Remove old site specific quirks code that was added in 2009
        https://bugs.webkit.org/show_bug.cgi?id=139141

        Reviewed by Antti Koivisto.

        * platform/network/NetworkingContext.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):

2014-12-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DOMExceptions do not show the error message string in Pause Reason section
        https://bugs.webkit.org/show_bug.cgi?id=138988

        Reviewed by Timothy Hatcher.

        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::type):
        Give all DOM Exception types the "error" RemoteObject subtype.

2014-12-01  Bartlomiej Gajda  <b.gajda@samsung.com>

        [MSE] Unset timestamps of trackbuffers during Reset Parser State algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=139075.

        Reviewed by Jer Noble.

        Specification requires from us to unset timestamps for trackBuffers
        during abort() method.

        Test: media/media-source/media-source-append-nonsync-sample-after-abort.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::resetParserState):
        (WebCore::SourceBuffer::abort):
        * Modules/mediasource/SourceBuffer.h:

2014-12-01  Chris Dumez  <cdumez@apple.com>

        Transform StyleBuilderCustom into a class and mark it as a friend of RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=138999

        Reviewed by Sam Weinig.

        Transform StyleBuilderCustom into a class and mark it as a friend of
        RenderStyle. This is needed because some of the StyleBuilderCustom
        functions need to access RenderStyle's private API.

        No new tests, no behavior change.

        * css/StyleBuilderCustom.h:
          Move functions from StyleBuilderFunctions namespace to
          StyleBuilderCustom class.

        * css/makeprop.pl:
          Use StyleBuilderCustom scope instead of StyleBuilderFunctions for
          custom implementation.

        * rendering/style/RenderStyle.h:
          Mark StyleBuilderCustom class as a friend, similarly to what was
          already done for DeprecatedStyleBuilder and StyleResolver.

2014-11-17  Oliver Hunt  <oliver@apple.com>

        Make sure range based iteration of Vector<> still receives bounds checking
        https://bugs.webkit.org/show_bug.cgi?id=138821

        Reviewed by Mark Lam.

        There are a few uses of begin()/end() that explicitly require pointers,
        so we use getPtr() to extract the underlying pointer generically.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserializeString):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isBadMatch):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::fontDataForCharacter):
        (WebCore::SegmentedFontData::containsCharacter):
        (WebCore::SegmentedFontData::isLoading):
        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::convertWOFFToSfnt):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * svg/SVGFontElement.cpp:
        (WebCore::kerningForPairOfStringsAndGlyphs):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::append):
        * xml/XPathNodeSet.h:
        (WebCore::XPath::NodeSet::begin):
        (WebCore::XPath::NodeSet::end):

2014-11-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix a build warning when CSS_SCROLL_SNAP is enabled
        https://bugs.webkit.org/show_bug.cgi?id=139084

        Reviewed by Andrei Bucur.

        Fix a build warning. Copy constructor of StyleScrollSnapPoints should initialize its base class.

        * rendering/style/StyleScrollSnapPoints.cpp:
        (WebCore::StyleScrollSnapPoints::StyleScrollSnapPoints): Call RefCounted().

2014-11-29  Sam Weinig  <sam@webkit.org>

        Move the '-webkit-locale', '-webkit-text-orientation', '-webkit-writing-mode', '-webkit-justify-self' and '-webkit-perspective' CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139104

        Reviewed by Anders Carlsson.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueWebkitLocale):
        (WebCore::StyleBuilderFunctions::applyValueWebkitWritingMode):
        (WebCore::StyleBuilderFunctions::applyValueWebkitTextOrientation):
        (WebCore::StyleBuilderFunctions::applyValueWebkitJustifySelf):
        (WebCore::StyleBuilderFunctions::applyValueWebkitPerspective):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Add an EmptyVisitedLinkStore implementation
        https://bugs.webkit.org/show_bug.cgi?id=139102

        Reviewed by Sam Weinig.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):
        * loader/EmptyClients.h:

2014-11-28  Sam Weinig  <sam@webkit.org>

        Move the '-webkit-initial-letter', '-webkit-line-box-contain' and '-webkit-text-stroke-width' CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139053

        Reviewed by Andreas Kling.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertInitialLetter):
        (WebCore::StyleBuilderConverter::convertTextStrokeWidth):
        (WebCore::StyleBuilderConverter::convertLineBoxContain):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-11-26  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] HTTP source element lacks SCHEDULING query support
        https://bugs.webkit.org/show_bug.cgi?id=139064

        Reviewed by Carlos Garcia Campos.

        No new tests, covered by http/tests/media/hls.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQueryWithParent): Make the element handle SCHEDULING
        queries with the BANDWIDTH_LIMITED flag. This helps uridecodebin
        to configure itself for adaptive streaming playback scenarios.

2014-11-27  Ryuan Choi  <ryuan.choi@navercorp.com>

        [EFL] Remove E_Dbus dependency
        https://bugs.webkit.org/show_bug.cgi?id=136355

        Reviewed by Gyuyoung Kim.

        E_Dbus is the simple wrapper of Dbus but it has not been maintained since EFL 1.8.
        Instead, EFL introduced Eldbus, which is almost similar with E_Dbus but provides more dbus like interface.
        This patch replaces E_Dbus implementation to Eldbus.

        * PlatformEfl.cmake:
        * platform/efl/BatteryProviderEfl.cpp:
        (WebCore::BatteryProviderEfl::BatteryProviderEfl):
        (WebCore::BatteryProviderEfl::~BatteryProviderEfl):
        (WebCore::BatteryProviderEfl::stopUpdating):
        (WebCore::batteryProperties):
        (WebCore::batteryPropertiesChanged):
        (WebCore::BatteryProviderEfl::deviceTypeCallback):
        (WebCore::BatteryProviderEfl::enumerateDevices):
        (WebCore::BatteryProviderEfl::startUpdating):
        (WebCore::BatteryProviderEfl::setBatteryStatus):
        (WebCore::BatteryProviderEfl::timerFired): Deleted.
        (WebCore::BatteryProviderEfl::getBatteryStatus): Deleted.
        (WebCore::BatteryProviderEfl::setBatteryClient): Deleted.
        * platform/efl/BatteryProviderEfl.h:
        (WebCore::BatteryProviderEfl::connection):
        (WebCore::BatteryProviderEfl::setSignalHandler):
        (WebCore::BatteryProviderEfl::~BatteryProviderEfl): Deleted.

2014-11-27  Antti Koivisto  <antti@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::HTMLPlugInImageElement::updateSnapshot + 108
        https://bugs.webkit.org/show_bug.cgi?id=139057

        Reviewed by Anders Carlsson.

        No test, don't know how to repro.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Null check the renderer.

2014-11-27  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Meter and Option elements do not expose their id attribute
        https://bugs.webkit.org/show_bug.cgi?id=139017

        Reviewed by Mario Sanchez Prada.

        The options in a collapsed select element lack a node, so get the id
        attribute from the associated action element. In the case of a meter,
        the meter element itself is not exposed; its RenderMeter is instead.
        So associate the meter element's id with the exposed RenderMeter.

        No new tests. Instead, updated existing expectations to reflect the fix.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::element):
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):

2014-11-27  Anders Carlsson  <andersca@apple.com>

        Add a Page::setVisitedLinkStore member function
        https://bugs.webkit.org/show_bug.cgi?id=139065

        Reviewed by Antti Koivisto.

        This will be used in a subsequent commit.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::setVisitedLinkStore):
        * page/Page.h:

2014-11-25  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add parsing for :dir()
        https://bugs.webkit.org/show_bug.cgi?id=138932

        Reviewed by Benjamin Poulain.

        Add support for parsing :dir() pseudo class. The implementation of selector
        matching will be in a follow-up patch.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSSelector.cpp:
        (WebCore::appendPseudoClassFunctionTail):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-11-25  Anders Carlsson  <andersca@apple.com>

        Remove user content handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139051

        Reviewed by Antti Koivisto.

        Remove m_userContentController from PageGroup and the related functions and symbol exports.

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::~PageGroup):
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::removePage):
        (WebCore::PageGroup::addUserScriptToWorld): Deleted.
        (WebCore::PageGroup::addUserStyleSheetToWorld): Deleted.
        (WebCore::PageGroup::removeUserScriptFromWorld): Deleted.
        (WebCore::PageGroup::removeUserStyleSheetFromWorld): Deleted.
        (WebCore::PageGroup::removeUserScriptsFromWorld): Deleted.
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld): Deleted.
        (WebCore::PageGroup::removeAllUserContent): Deleted.
        * page/PageGroup.h:

2014-11-25  Anders Carlsson  <andersca@apple.com>

        Add a user content controller to WebViewGroup and use it for user content
        https://bugs.webkit.org/show_bug.cgi?id=139043

        Reviewed by Antti Koivisto.

        * WebCore.exp.in:
        Export symbols.

        * page/Page.cpp:
        (WebCore::Page::setUserContentController):
        Invalidate the injected style cache when setting a new user content controller.

2014-11-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] gstmpegts is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=139039

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer): Initialize the gstmpegts library.

2014-11-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix unused variable warning in Biquad.cpp
        https://bugs.webkit.org/show_bug.cgi?id=139031

        Reviewed by Andreas Kling.

        No new tests needed.

        * platform/audio/Biquad.cpp:

2014-11-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove Qt cruft related to tap higlighting
        https://bugs.webkit.org/show_bug.cgi?id=139030

        Reviewed by Andreas Kling.

        No new tests needed.

        * CMakeLists.txt:
        * page/GestureTapHighlighter.cpp: Removed.
        * page/GestureTapHighlighter.h: Removed.

2014-11-24  Dhi Aurrahman  <diorahman@rockybars.com>

        Fix the parsing and re-serialization of :lang pseudo class selector when it has multiple arguments with same value
        https://bugs.webkit.org/show_bug.cgi?id=139013

        Reviewed by Benjamin Poulain.

        Fix the parsing and re-serialization of :lang pseudo class selector when 
        it has multiple arguments with same value e.g. :lang(en, en, en). Previously, 
        given :lang(en, en, en) selector, it was parsed and reserialized 
        as :lang(enenen) instead of :lang(en, en, en)

        Related test on parsing and re-serialization of css selectors is updated.

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

2014-11-24  Zalan Bujtas  <zalan@apple.com>

        Fix r176527. Iterate through the text renderers.
        https://bugs.webkit.org/show_bug.cgi?id=139007

        Reviewed by Antti Koivisto.

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

2014-11-24  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Rename TextFragment::mustBreak to TextFragment::isLineBreak
        https://bugs.webkit.org/show_bug.cgi?id=139035

        Reviewed by Antti Koivisto.

        Move new line logic to FlowContents class.
        This is in preparation to support <br>.

        No change in functionality.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::nextFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::isNewline):
        (WebCore::SimpleLineLayout::FlowContents::isNewlineCharacter): Deleted.

2014-11-24  Benjamin Poulain  <benjamin@webkit.org>

        Move :placeholder-shown out of experimental
        https://bugs.webkit.org/show_bug.cgi?id=138998

        Reviewed by Andreas Kling.

        The pseudo class :placeholder-shown is used by the inspector, disabling it breaks
        the sidebar.

        The implementation has been stable for a while, we can move it to stable.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPlaceholderShown):

2014-11-24  Antti Koivisto  <antti@apple.com>

        Avoid String concatenation with line break iterator
        https://bugs.webkit.org/show_bug.cgi?id=139034

        Reviewed by Zalan Bujtas.

        Test: fast/text/simple-lines-multiple-renderers-break.html

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):

            Include String too so it doesn't need to be fetched from the renderer.

        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition):

            Make this iterative instead of recursive.
            Uset setPriorContext to provide previous characters instead of concatenating
            the string from all the previous segments.

        (WebCore::SimpleLineLayout::findNextNonWhitespace):
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition):

            Search using segments instead of the concatenated string.

        (WebCore::SimpleLineLayout::FlowContents::textWidth):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPositionSlow):
        (WebCore::SimpleLineLayout::FlowContents::runWidth):
        (WebCore::SimpleLineLayout::FlowContents::segmentForPositionSlow): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::appendNextRendererContentIfNeeded): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::nextNonWhitespacePosition): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::characterAt):
        (WebCore::SimpleLineLayout::FlowContents::isNewlineCharacter):
        (WebCore::SimpleLineLayout::FlowContents::segmentIndexForPosition):
        (WebCore::SimpleLineLayout::FlowContents::segmentForPosition):

2014-11-24  Zalan Bujtas  <zalan@apple.com>

        SimpleLineLayout::canUseFor() should iterate through RenderTexts to check if their content is eligible for simple line layout.
        https://bugs.webkit.org/show_bug.cgi?id=139007

        Reviewed by Antti Koivisto.

        Tests: fast/text/simple-line-layout-multiple-renderers-non-breaking-space.html
               fast/text/simple-line-layout-multiple-renderers-with-float.html

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

2014-11-22  Sam Weinig  <sam@webkit.org>

        Move the '-webkit-box-reflext' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=139008

        Reviewed by Anders Carlsson.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertReflection):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2014-11-24  Antti Koivisto  <antti@apple.com>

        Remove unused Style struct from SimpleLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=139027

        Reviewed by Sam Weinig.

        It was moved to FlowContents.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Style::Style): Deleted.

2014-11-24  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile error in ResourceHandleManager.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=139026

        Reviewed by Brent Fulgham.

        The parameter types of the constructor of the Timer class has changed.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        * platform/network/curl/ResourceHandleManager.h:

2014-11-24  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Unskip the skipped ATK tests in roles-exposed.html
        https://bugs.webkit.org/show_bug.cgi?id=139016

        Reviewed by Chris Fleizach.

        There was one test that could not be unskipped without making a change
        for that one to pass: mapping DocumentRegionRole to ATK_ROLE_PANEL. The
        rest of the "fix" is just unskipping tests for ATK and updating the test
        expectations.

        No new tests needed.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2014-11-23  Antti Koivisto  <antti@apple.com>

        Use segment vector for FlowContents
        https://bugs.webkit.org/show_bug.cgi?id=139015

        Reviewed by Zalan Bujtas.

        And FlowContents::Segment struct and use it.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary):

            Use segments.
            If there is only one segment there is nothing to do. Bail out.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::initializeSegments):

            Move initialization to a function so m_segments can be const.
            Don't add empty end segment, handle the end case in code.

        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::textWidth):

            Simplify and use segments.

        (WebCore::SimpleLineLayout::FlowContents::segmentForPositionSlow):

            Replace hand-rolled binary search with std::lower_bounds.

        (WebCore::SimpleLineLayout::FlowContents::segmentForRenderer):
        (WebCore::SimpleLineLayout::FlowContents::appendNextRendererContentIfNeeded):
        (WebCore::SimpleLineLayout::FlowContents::renderer): Deleted.
        (WebCore::SimpleLineLayout::FlowContents::resolveRendererPositions): Deleted.
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::hasOneSegment):
        (WebCore::SimpleLineLayout::FlowContents::length):
        (WebCore::SimpleLineLayout::FlowContents::isEnd):
        (WebCore::SimpleLineLayout::FlowContents::isEndOfContent): Deleted.

            Renamed.

        (WebCore::SimpleLineLayout::FlowContents::segmentForPosition):

            Inline the fast path.

        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRenderer):

2014-11-22  Simon Fraser  <simon.fraser@apple.com>

        Extend WKRenderObject and WKRenderLayer with some more useful data
        https://bugs.webkit.org/show_bug.cgi?id=139006

        Reviewed by Sam Weinig.

        Export WebCore::RenderLayerBacking::backingStoreMemoryEstimate() const.

        * WebCore.exp.in:

2014-11-22  Antti Koivisto  <antti@apple.com>

        Make locale part of the SimpleLineLayout::FlowContent::Style
        https://bugs.webkit.org/show_bug.cgi?id=139004

        Reviewed by Zalan Bujtas.

        That's the only part of style not extracted out of RenderStyle in the constructor.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::Style::Style):
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::appendNextRendererContentIfNeeded):
        * rendering/SimpleLineLayoutFlowContents.h:

            Also remove RenderBlockFlow member since it is now unused.

        (WebCore::SimpleLineLayout::FlowContents::Style::Style): Deleted.

            Move to cpp.

2014-11-22  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Accessible names missing for imagemap images and links
        https://bugs.webkit.org/show_bug.cgi?id=127288

        Reviewed by Chris Fleizach.

        Return the alt text, if present, for the accessible name for image maps
        and image map links for ATK. Also expose the accessible element with
        ATK_ROLE_IMAGE_MAP instead of ATK_ROLE_IMAGE.

        Test: accessibility/image-with-alt-and-map.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isImageMap):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetName):
        (atkRole):

2014-11-22  Andreas Kling  <akling@apple.com>

        Remove unused Document::ignoreAutofocus().
        <https://webkit.org/b/139002>

        Reviewed by Antti Koivisto.

        No one ever actually changes this flag, so let's remove it.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::ignoreAutofocus): Deleted.
        (WebCore::Document::setIgnoreAutofocus): Deleted.
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):

2014-11-22  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r176459 to fix GTK build.

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

2014-11-22  Andreas Kling  <akling@apple.com>

        Convert PassRefPtr return types to RefPtr.
        <https://webkit.org/b/138995>

        Reviewed by Anders Carlsson.

        Convert an assortment of DOM and HTML related functions
        to return RefPtr instead of PassRefPtr.

2014-11-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed iOS build fix; move new symbols out of Mac-only exports.

        * WebCore.exp.in:

2014-11-21  Timothy Horton  <timothy_horton@apple.com>

        Remove a file that r176499 presumably did not mean to add.

        * WebCore.exp.in.orig: Removed.

2014-11-21  Jer Noble  <jer.noble@apple.com>

        Support multiple signatures of diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=138690

        Reviewed by Anders Carlsson.

        Pull logDiagnosticMessage() out of ChromeClient and make a new client interface,
        DiagnosticLoggingClient, which supports multiple kinds of diagnostic logging,
        namely: simple logging without a parameter, logging with a success parameter, and
        logging with a generic string value parameter.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Use DiagnosticLoggingClient.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Ditto.
        * loader/SubframeLoader.cpp:
        (WebCore::logPluginRequest): Ditto.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::logDiagnosticMessage): Deleted.
        * page/DiagnosticLoggingClient.h: 
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessage): Added.
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessageWithResult): Added.
        (WebCore::DiagnosticLoggingClient::logDiagnosticMessageWithValue): Added.
        (WebCore::DiagnosticLoggingClient::~DiagnosticLoggingClient): Empty destructor.

        Rename Page::PageClient to PageConfiguration, and pass that configuration from
        Page into MainFrame upon construction.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage): Use PageConfiguration instead of PageClients.
        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients): Ditto.
        * loader/EmptyClients.h:
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame): Pass loaderClientForMainFrame through to the
            Frame constructor.
        (WebCore::MainFrame::create): Takes a PageConfiguration.
        * page/MainFrame.h:
        (WebCore::MainFrame::diagnosticLoggingClient): Simple accessor.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients): Deleted.
        (WebCore::Page::PageClients::~PageClients): Deleted.
        * page/Page.h:
        * page/PageConfiguration.cpp: Added.
        (WebCore::PageConfiguration::PageConfiguration): Renamed from PageClients().
        (WebCore::PageConfiguration::~PageConfiguration): Renamed from ~PageClients().
        * page/PageConfiguration.h: Added.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Use PageConfiguration instead of PageClients.

        Add new files and symbols to the project.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Throttled DOMTimers can prevent their document from being garbage collected
        https://bugs.webkit.org/show_bug.cgi?id=138915

        Reviewed by Andreas Kling.

        Throttled DOMTimers whose interval depend on viewport changes would
        keep a Vector of elements outside viewport causing them to be throttled
        so that we could check later on (upon scroll or layout) if those
        elements are still outside viewport. The issue is that these elements
        could potentially be removed from the document (and destroyed) after
        the timer has fired. To handle this, DOMTimer was ref'ing the
        elements. Unfortunately, this was causing us to leak the document
        as the elements in the Vector would keep the document alive.

        To handle this issue, this patch updates the DOMTimer Vector to use
        weak pointers. The WeakPtrFactory is stored in ElementRareData to
        avoid wasting memory for all kinds of Elements (it is a fair assumption
        that the number of elements whose style is animated via timers is low).

        Test: fast/dom/throttled-timer-running-on-document-destruction.html

        * dom/Element.cpp:
        (WebCore::Element::createWeakPtr):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::weakPtrFactory):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::elementsChangedOutsideViewport):
        (WebCore::DOMTimer::updateThrottlingStateAfterViewportChange):
        * page/DOMTimer.h:

2014-11-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r176459.

        r176459 removed Timer parameter in timer callbacks only for Mac port.
        So this patch applies it to remaining classes for EFL port.

        No new tests, fix build break.

        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::RTCDataChannel):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::Vibration):
        (WebCore::Vibration::timerFired):
        * Modules/vibration/Vibration.h:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        * platform/efl/BatteryProviderEfl.cpp:
        (WebCore::BatteryProviderEfl::BatteryProviderEfl):
        (WebCore::BatteryProviderEfl::timerFired):
        * platform/efl/BatteryProviderEfl.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexturePool::BitmapTexturePool):
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::CompositingCoordinator):
        (WebCore::CompositingCoordinator::releaseInactiveAtlasesTimerFired):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::CoordinatedImageBacking):
        (WebCore::CoordinatedImageBacking::clearContentsTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/mock/DeviceMotionClientMock.cpp:
        (WebCore::DeviceMotionClientMock::DeviceMotionClientMock):
        (WebCore::DeviceMotionClientMock::timerFired):
        * platform/mock/DeviceMotionClientMock.h:
        * platform/mock/TimerEventBasedMock.h:
        (WebCore::TimerEvent::TimerEvent):
        (WebCore::TimerEvent::timerFired):

2014-11-21  Benjamin Poulain  <bpoulain@apple.com>

        Start using the new :not() and :matches() in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=138978

        Reviewed by Joseph Pecoraro.

        There are only minor pending issues on :not() and :matches(). The feedback
        has only been positive so far. It is time to move them out the experimental
        flag.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::simpleSelectorFunctionalPseudoClassStaticSpecificity):
        (WebCore::appendSelectorList):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed, iOS build fix after r176462.

        Export a few extra symbols.

        * WebCore.exp.in:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Properties in CSSPropertyNames.in should use the new StyleBuilder by default
        https://bugs.webkit.org/show_bug.cgi?id=138983

        Reviewed by Andreas Kling.

        This patch makes using the new StyleBuilder the default and drops the
        [NewStyleBuilder] option as a result. A new [LegacyStyleBuilder] option
        is introduced for CSS properties that are not generated in the new
        StyleBuilder yet.

        * css/CSSPropertyNames.in:
        * css/SVGCSSPropertyNames.in:
        * css/makeprop.pl:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        [iOS] Regression(r176202): line-height is wrong on marco.org
        https://bugs.webkit.org/show_bug.cgi?id=138970

        Reviewed by Simon Fraser.

        After r176202, on iOS with IOS_TEXT_AUTOSIZING enabled, we would
        multiply the lineHeight by RenderStyle::textSizeAdjust()::multiplier()
        unconditionally. However, we're only supposed to do so if
        RenderStyle::textSizeAdjust()::isPercentage() returns true. This
        patch reintroduces the textSizeAdjust().isPercentage() check that was
        inadvertently dropped when refactoring the code to be shared between
        iOS and OS X.

        Additionally, the multiplier is only supposed the be applied if the
        input CSSPrimitiveValue is a Length or a Number. However, after
        r176202, we would apply the multiplier if the CSSPrimitiveValue is
        a Percentage or a Number. This patch updates the code to match the
        behavior prior to r176202.

        Test: fast/css/line-height-text-autosizing.html

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::convertLineHeight):
        (WebCore::StyleBuilderFunctions::applyValueLineHeight):

2014-11-21  Chris Fleizach  <cfleizach@apple.com>

        AX: com.apple.WebKit.WebContent crashed at WebCore: WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const
        https://bugs.webkit.org/show_bug.cgi?id=138905

        Reviewed by Mario Sanchez Prada.

        The crash log indicates that m_renderer is null at the time we ask ancestorsOfType(). 
        This is more of a speculative fix, since I am not entirely sure m_renderer is null when we enter the method.

        Unable to determine cause of crash or how to reproduce on demand.

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

2014-11-21  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Check the underlying error if the one returned by AVFoundation is AVErrorUnknown.
        https://bugs.webkit.org/show_bug.cgi?id=138986

        Reviewed by Eric Carlson.

        When we recieve an error with the code AVErrorUnknown, look for an underlying error from CoreMedia (or another
        lower-level framework) with a (presumably) more informative error code, and return that code instead.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::systemCodeForError):
        (WebCore::CDMSessionMediaSourceAVFObjC::layerDidReceiveError):
        (WebCore::CDMSessionMediaSourceAVFObjC::rendererDidReceiveError):

2014-11-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Unclear that user and password are autofilled, no VoiceOver version of the yellow outline.
        https://bugs.webkit.org/show_bug.cgi?id=138904

        Reviewed by Mario Sanchez Prada.

        Add an attribute that marks when a text field is auto-filled.

        Test: accessibility/auto-filled-value.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isValueAutofilled):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-11-21  Andreas Kling  <akling@apple.com>

        RenderElement::removeChild() doesn't need a return value.
        <https://webkit.org/b/138985>

        Reviewed by Pantti Koivisto.

        Nobody uses the return value from RenderElement::removeChild().
        Change it to return void and remove all the unnecessary plumbing.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeChild):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::removeChild):
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChild):
        (WebCore::RenderElement::removeChildInternal):
        * rendering/RenderElement.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::removeChild):
        * rendering/RenderMenuList.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):
        * rendering/RenderRubyRun.h:
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRootWrapper::removeChildWithoutRestructuring):
        (WebCore::RenderMathMLRootWrapper::removeChild):
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::removeChildInternal):
        (WebCore::RenderMathMLScripts::removeChild):
        (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):
        (WebCore::RenderMathMLScriptsWrapper::removeChild):
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::removeChild):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::removeChild):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::removeChild):
        * rendering/svg/RenderSVGText.h:

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        ​https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add some DataDetectors SPI.

2014-11-21  Jer Noble  <jer.noble@apple.com>

        [Mac] Random crashes inside media libraries when creating then destroying media quickly.
        https://bugs.webkit.org/show_bug.cgi?id=138980

        Reviewed by Eric Carlson.

        Speculative fix for random crashes in the layout tests which occur randomly but regularly. The theory is
        that creating-then-destroying our media objects too quickly triggers crashes deep within the media frameworks
        when their initialization threads don't have a chance to complete before the main player object is destroyed.
        Test out this theory by delaying the destruction of the AVPlayer object for 1s after its owner is destroyed.

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

2014-11-21  Jer Noble  <jer.noble@apple.com>

        [Mac] Delay of 1-2s after the first paint of a video frame.
        https://bugs.webkit.org/show_bug.cgi?id=138979

        Reviewed by Eric Carlson.

        Only bother waiting for a signal that a new image is ready when the image isn't ready in the first place.

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

2014-11-21  Glenn Adams  <glenn@skynav.com> and Myles C. Maxfield  <mmaxfield@apple.com>

        Add support to -webkit-line-break property for CSS3 Text line-break property values and semantics.
        https://bugs.webkit.org/show_bug.cgi?id=89235

        Reviewed by Eric Seidel and Dave Hyatt.

        This patch adds semantic support for the CSS3 line-break property (qua -webkit-line-break),
        and enables testing on (apple) mac ports. Follow on patches will enable these tests on
        other ports as they are incrementally verified.

        See also wiki documentation at:
        [1] http://trac.webkit.org/wiki/LineBreaking
        [2] http://trac.webkit.org/wiki/LineBreakingCSS3Mapping

        Tests: css3/line-break/line-break-auto-centered.html
               css3/line-break/line-break-auto-half-kana.html
               css3/line-break/line-break-auto-hyphens.html
               css3/line-break/line-break-auto-inseparables.html
               css3/line-break/line-break-auto-iteration-marks.html
               css3/line-break/line-break-auto-postfixes.html
               css3/line-break/line-break-auto-prefixes.html
               css3/line-break/line-break-auto-sound-marks.html
               css3/line-break/line-break-loose-centered.html
               css3/line-break/line-break-loose-half-kana.html
               css3/line-break/line-break-loose-hyphens.html
               css3/line-break/line-break-loose-inseparables.html
               css3/line-break/line-break-loose-iteration-marks.html
               css3/line-break/line-break-loose-postfixes.html
               css3/line-break/line-break-loose-prefixes.html
               css3/line-break/line-break-loose-sound-marks.html
               css3/line-break/line-break-normal-centered.html
               css3/line-break/line-break-normal-half-kana.html
               css3/line-break/line-break-normal-hyphens.html
               css3/line-break/line-break-normal-inseparables.html
               css3/line-break/line-break-normal-iteration-marks.html
               css3/line-break/line-break-normal-postfixes.html
               css3/line-break/line-break-normal-prefixes.html
               css3/line-break/line-break-normal-sound-marks.html
               css3/line-break/line-break-strict-centered.html
               css3/line-break/line-break-strict-half-kana.html
               css3/line-break/line-break-strict-hyphens.html
               css3/line-break/line-break-strict-inseparables.html
               css3/line-break/line-break-strict-iteration-marks.html
               css3/line-break/line-break-strict-postfixes.html
               css3/line-break/line-break-strict-prefixes.html
               css3/line-break/line-break-strict-sound-marks.html

        These tests were previously added in http://trac.webkit.org/changeset/143378, but skipped
        in generic TestExpectations. In this patch, they are marked as Pass for the (apple) mac ports.

        * platform/text/LineBreakIteratorPoolICU.h:
        (WebCore::LineBreakIteratorPool::makeLocaleWithBreakKeyword):
        Add static function to construct ICU locale argument (also used as pool key) with additional
        break keyword.
        (LineBreakIteratorPool):
        (WebCore::LineBreakIteratorPool::take):
        (WebCore::LineBreakIteratorPool::put):
        Remove direct dependency from ICU library (and types), moving that dependency into
        new {open,close}LineBreakIterator() functions (defined in TextBreakIteratorICU.cpp).
        Update to take line break mode into account.
        Create (and cache) different break iterators depending on line break mode (in addition to locale),
        which entails expanding pool entry key format to optionally append "@break=" +
        "loose"|"normal"|"strict" keyword to locale string.

        * platform/text/TextBreakIterator.h:
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::isLooseCJKMode):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        (LazyLineBreakIterator):
        Define LineBreakIteratorMode enumeration for use in TextBreakIterator et al.
        Add state member to indicate line break mode.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::acquireLineBreakIterator):
        Use new line break mode when making iterator from pool.
        Handle change of return type of LineBreakIteratorPool::take() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore::releaseLineBreakIterator):
        Handle change of parameter type of LineBreakIteratorPool::put() to non-ICU type,
        i.e., TextBreakIterator* instead of ICU's UBreakIterator*.
        (WebCore):
        (WebCore::isCJKLocale):
        New functions for determining if CJK rules apply.
        (WebCore::openLineBreakIterator):
        New function for abstracting opening of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.
        This function also takes into account the line break mode.

        Note that this function only calls ubrk_openRules() when the author has opted-in via
        using the -webkit-line-break CSS property. Eventually, we would like to be able to
        customize the rules that ICU's line breaking algorithm uses (especially for CJK text);
        however, ubrk_openRules() currently parses its input string to create a DFA and is
        therefore very slow. In fact, it's so slow that increasing our cache size in
        LineBreakIteratorPool doesn't actually help enough. Also note that the default value
        for the line-break CSS property is 'auto'.
        (WebCore::closeLineBreakIterator):
        (WebCore::mapLineIteratorModeToRules):
        New function for abstracting closing of ICU style line break iterator. This is now
        used in LineBreakIteratorPoolICU.h rather than having direct ICU API dependency there.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::LineBreaker::nextSegmentBreak):
        Pass line break iterator mode flag when reseting LazyLineBreakIterator.
        Add looseMode local variable to prevent need for computing under isBreakable().

        * rendering/RenderText.cpp:
        (WebCore::mapLineBreakToIteratorMode):
        Add implementation for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.
        (WebCore):
        (WebCore::RenderText::computePreferredLogicalWidths):
        Ensure (lazy line) breakIterator is initialized for line break mode.
        Ensure isBreakable() is passed loose mode flag to match behavior in RenderBlock::LineBreaker::nextLineBreak.

        * rendering/RenderText.h:
        (WebCore):
        Add declaration for mapLineBreakToIteratorMode(), used by both RenderText::computePreferredLogicalWidths
        and RenderBlock::LineBreaker::nextLineBreak.

        * rendering/break_lines.cpp:
        (WebCore):
        Introduce (local) enum NBSPBehavior for expanding template on nextBreakablePosition.
        (WebCore::isBreakableSpace):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation. Use new loose mode flavors off NBP functions.
        (WebCore::needsLineBreakIterator):
        Use enum NBSP behavior template parameter rather than boolean.
        (WebCore::nextBreakablePositionNonLoosely):
        Extend name to distinguish from loose flavor of this function.
        (WebCore::nextBreakablePositionLoosely):
        Add loose flavor of NBP invoked only when loose mode applies, in which case ASCII shortcut
        table cannot be used.
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):
        Use (renamed) non-loose flavor of NBP.
        (WebCore::nextBreakablePositionLoose):
        (WebCore::nextBreakablePositionIgnoringNBSPLoose):
        Introduce loose flavor of NBP template expansions.

        * rendering/break_lines.h:
        (WebCore):
        (WebCore::isBreakable):
        Add externally specified loose mode parameter to prevent need to invoke line break iterator
        accessor method on each invocation.

2014-11-21  Anders Carlsson  <andersca@apple.com>

        More build fixes.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):

2014-11-21  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allocate volume view on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=138971
        rdar://problem/18016958

        Reviewed by Jer Noble.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper allocateVolumeView]): New, dispatch to the main thread if necessary before allocating
            the volume view.
        (-[WebMediaSessionHelper initWithCallback:]): Call allocateVolumeView.

2014-11-21  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r175259) Simple line layout text measuring behavior changed.
        https://bugs.webkit.org/show_bug.cgi?id=138947
        rdar://problem/19050653

        Reviewed by Antti Koivisto.

        In certain cases, when block flow needs to compute the preferred width of a particular text
        renderer, we use the non-simple line layout text measuring.
        However, the same text renderer might end up at simple line layout later.
        Complex line layout measures text including the trailing space and it subtracts
        (the constant value of) space width afterwards, while simple line layout measures
        runs without the extra space.
        In such cases, this may result different word widths and produce unexpected line breaking. (preferred width != final width)
        In long term, any text renderer qualified for simple line layout should go through the simple
        text measuring code path. (https://bugs.webkit.org/show_bug.cgi?id=138973)
        For now, just copy complex line layout behaviour. This also matches the previous simple line layout line breaking implementation.

        Test: fast/text/simple-line-text-measuring-with-trailing-space.html

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::textWidth):

2014-11-21  Anders Carlsson  <andersca@apple.com>

        More Windows build fixes.

        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        (WebCore::LegacyCACFLayerTreeHost::LegacyCACFLayerTreeHost):
        (WebCore::LegacyCACFLayerTreeHost::renderTimerFired):
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::GeolocationClientMock):
        (WebCore::GeolocationClientMock::permissionTimerFired):
        (WebCore::GeolocationClientMock::controllerTimerFired):
        * platform/mock/GeolocationClientMock.h:

2014-11-21  Andreas Kling  <akling@apple.com>

        RenderMathMLScripts isPrescript() helper should take a reference.
        <https://webkit.org/b/138975>

        Reviewed by Antti Koivisto.

        Tidy this up a bit, since it's never called with a null pointer.

        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::isPrescript):
        (WebCore::RenderMathMLScripts::fixAnonymousStyles):
        (WebCore::RenderMathMLScripts::addChildInternal):
        (WebCore::RenderMathMLScripts::removeChildInternal):
        (WebCore::RenderMathMLScripts::layout):
        (WebCore::RenderMathMLScriptsWrapper::addChildInternal):
        (WebCore::RenderMathMLScriptsWrapper::removeChildInternal):

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Windows build fixes.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::freeLibraryTimerFired):
        (WebCore::PluginPackage::PluginPackage):
        * plugins/PluginPackage.h:
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::PluginStream):
        (WebCore::PluginStream::delayDeliveryTimerFired):
        (WebCore::PluginStream::deliverData): Deleted.
        * plugins/PluginStream.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::popPopupsStateTimerFired):
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::invalidateTimerFired):
        (WebCore::PluginView::PluginView):
        (WebCore::PluginView::lifeSupportTimerFired):
        (WebCore::PluginView::performRequest): Deleted.
        (WebCore::PluginView::setValue): Deleted.
        (WebCore::PluginView::setParameters): Deleted.
        (WebCore::PluginView::userAgent): Deleted.
        * plugins/PluginView.h:
        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin):
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        * plugins/win/PluginMessageThrottlerWin.h:

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Beth Dakin.

        * platform/spi/mac/DataDetectorsSPI.h:
        Softlink some SPI.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        Move TextIndicator{Window} to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138954
        <rdar://problem/18992185>

        Some adjustments by Csaba Osztrogonác.
        Reviewed by Anders Carlsson.

        Move TextIndicator and TextIndicatorWindow to WebCore so that both
        WebKits can share the implementation.

        * CMakeLists.txt:
        Build TextIndicator.

        * WebCore.exp.in:
        Export TextIndicator{Window} symbols for the WebKits.

        * WebCore.xcodeproj/project.pbxproj:
        * page/TextIndicator.cpp: Renamed from Source/WebKit2/Shared/TextIndicator.cpp.
        * page/TextIndicator.h: Renamed from Source/WebKit2/Shared/TextIndicator.h.
        Straighforward move of TextIndicator from WebKit2, except:

        Move TextIndicator::Data and TextIndicator::PresentationTransition out directly
        into the WebCore namespace to allow for implementation of WebKit2 argument coders.

        Use Image instead of ShareableBitmap internally.

        Move the TextIndicatorData encode/decode to WebCoreArgumentCoders.
        
        * page/mac/TextIndicatorWindow.h: Renamed from Source/WebKit2/UIProcess/mac/TextIndicatorWindow.h.
        * page/mac/TextIndicatorWindow.mm: Renamed from Source/WebKit2/UIProcess/mac/TextIndicatorWindow.mm.
        Straighforward move of TextIndicatorWindow from WebKit2.

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Remove the Timer parameters from timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=138974

        Reviewed by Antti Koivisto.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::GeoNotifier):
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::resumeTimerFired):
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::removeTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::taskTimerFired):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::NotificationRequestCallback):
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::resumeTimerFired):
        (WebCore::WebSocketChannel::closingTimerFired):
        * Modules/websockets/WebSocketChannel.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::gcTimerFired):
        * bindings/js/GCController.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        * css/StyleResolver.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::visualUpdatesSuppressionTimerFired):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::optimizedStyleSheetUpdateTimerFired):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        (WebCore::Document::domCookieCacheExpiryTimerFired):
        * dom/Document.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        (WebCore::EventSender<T>::EventSender):
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::ScriptRunner):
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptRunner.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        * dom/StyledElement.cpp:
        (WebCore::PresentationAttributeCacheCleaner::PresentationAttributeCacheCleaner):
        (WebCore::PresentationAttributeCacheCleaner::cleanCache):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::AlternativeTextController):
        (WebCore::AlternativeTextController::timerFired):
        * editing/AlternativeTextController.h:
        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        (WebCore::Editor::updateEditorUINowIfScheduled):
        (WebCore::Editor::editorUIUpdateTimerFired):
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Deleted.
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::timerFiredToProcessQueuedRequest):
        * editing/SpellChecker.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::requestAutocompleteTimerFired):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/HTMLTrackElement.h:
        * html/MediaController.cpp:
        (MediaController::MediaController):
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::timeupdateTimerFired):
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaDocument.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        (WebCore::SearchInputType::searchEventTimerFired):
        * html/SearchInputType.h:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::buildBubbleTree):
        (WebCore::ValidationMessage::requestToHideMessage):
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/ValidationMessage.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        * html/parser/HTMLParserScheduler.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::MediaControlPanelElement):
        (WebCore::MediaControlPanelElement::transitionTimerFired):
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls):
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControls.h:
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::repeatingTimerFired):
        * html/shadow/SpinButtonElement.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack):
        (WebCore::LoadableTextTrack::loadTimerFired):
        * html/track/LoadableTextTrack.h:
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::VTTRegion):
        (WebCore::VTTRegion::scrollTimerFired):
        * html/track/VTTRegion.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::ChangeRegionOversetTask::ChangeRegionOversetTask):
        (WebCore::ChangeRegionOversetTask::timerFired):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        * inspector/InspectorOverlay.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon):
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::checkTimerFired):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::LinkLoader):
        (WebCore::LinkLoader::linkLoadTimerFired):
        (WebCore::LinkLoader::linkLoadingErrorTimerFired):
        * loader/LinkLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::NavigationScheduler):
        (WebCore::NavigationScheduler::timerFired):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        * loader/ResourceLoadScheduler.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::TextTrackLoader):
        (WebCore::TextTrackLoader::cueLoadTimerFired):
        * loader/TextTrackLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::Callback::Callback):
        (WebCore::CachedResource::Callback::timerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::syncTimerFired):
        * loader/icon/IconDatabase.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::AutoscrollController):
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::CaptionUserPreferences):
        (WebCore::CaptionUserPreferences::timerFired):
        * page/CaptionUserPreferences.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):
        (WebCore::CaptionUserPreferencesMediaAF::updateTimerFired):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::DeviceController):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        (WebCore::EventHandler::recognizeLongMousePress):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::connectTimerFired):
        * page/EventSource.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::focusRepaintTimerFired):
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::overflowAutoScrollTimerFired):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::delayedScrollEventTimerFired):
        (WebCore::FrameView::speculativeTilingEnableTimerFired):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::updateEmbeddedObjectsTimerFired):
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        (WebCore::FrameView::postLayoutTimerFired):
        * page/FrameView.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::PageOverlay):
        (WebCore::PageOverlay::fadeAnimationTimerFired):
        * page/PageOverlay.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::imageLoadingSettingsTimerFired):
        * page/Settings.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/AnimationControllerPrivate.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::ServicesOverlayController):
        (WebCore::ServicesOverlayController::determineActiveHighlightTimerFired):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeCommitterTimerFired):
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::HysteresisActivity):
        (WebCore::HysteresisActivity::hysteresisTimerFired):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers):
        (WebCore::ScrollAnimator::horizontalScrollSnapTimerFired):
        (WebCore::ScrollAnimator::verticalScrollSnapTimerFired):
        * platform/ScrollAnimator.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::autoscrollTimerFired):
        * platform/Scrollbar.h:
        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        (WebCore::Timer::Timer): Deleted.
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::clientDataBufferingTimerFired):
        * platform/audio/MediaSession.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::reloadTimerFired):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::timerFired):
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC):
        (WebCore::MediaSelectionGroupAVFObjC::selectionTimerFired):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekTimerFired):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::LayerPool):
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tileRevalidationTimerFired):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::TileGrid):
        (WebCore::TileGrid::cohortRemovalTimerFired):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::IOSurfacePool):
        (WebCore::IOSurfacePool::collectionTimerFired):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::SubimageCacheWithTimer):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::LegacyTileCache):
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::connectionDelayTimerFired):
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired):
        * platform/mac/HIDGamepadProvider.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::DeviceOrientationClientMock):
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::PlatformSpeechSynthesizerMock):
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::failureTimerFired):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::ImageQualityController):
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/ImageQualityController.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::RenderMarquee):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::lazyRepaintTimerFired):
        * rendering/RenderView.h:
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::EventLoopInputDispatcher):
        (WebCore::EventLoopInputDispatcher::timerFired):
        * replay/EventLoopInputDispatcher.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::closeDatabaseTimerFired):
        (WebCore::StorageAreaImpl::closeDatabaseIfIdle):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::scheduleSync):
        * storage/StorageAreaSync.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::svgLoadEventTimerFired):
        * svg/SVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::timerFired):
        * svg/animation/SMILTimeContainer.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'transition-delay' CSS property to a calculated value
        https://bugs.webkit.org/show_bug.cgi?id=138784

        Reviewed by Sam Weinig.

        Update CSSPrimitiveValue::computeTime() to use primitiveType() instead
        of m_primitiveUnitType so that it properly handles calculated values.
        Without this, we would hit the ASSERT_NOT_REACHED() assertion in
        computeTime() for calculated values.

        Test: fast/css/transition-delay-calculated-value.html

        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::computeTime):

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Regression(r175381): -webkit-mask-box-image is broken
        https://bugs.webkit.org/show_bug.cgi?id=138969
        <rdar://problem/19054471>

        Reviewed by Simon Fraser.

        After r175381, the StyleBuilder would call NinePieceImage::setMaskDefaults()
        *after* calling CSSToStyleMap::mapNinePieceImage(), instead of *before*, for
        -webkit-mask-box-image CSS property. This was causing the mask defaults to
        overwrite what was set by mapNinePieceImage().

        Test: fast/css/webkit-mask-box-image.html

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBorderMask):

2014-11-21  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'font' CSS property to 'calc(2 * 3)'
        https://bugs.webkit.org/show_bug.cgi?id=138933

        Reviewed by Darin Adler.

        The CSS Parser was not handling calculated values when parsing the font
        weight. This would lead us to hit an assertion when parsing a font
        property whose weight is set to a calculated value.

        This patch updates parseFontWeight() to properly handle calculated
        values.

        Test: fast/css/font-calculated-value.html

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

2014-11-21  Bear Travis  <betravis@gmail.com>

        [CSS Font Loading] Switch to dispatching events asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=138755

        Reviewed by Simon Fraser.

        Moving FontLoader to dispatch events and notify callbacks similarly
        to EventSender or the GenericEventQueue. Several bugs have popped
        up in the past because FontLoader has been sending events during
        layout, and there is no need for that to be the case.

        Covered by existing font loader event tests. Added an additional
        test for the svg case, fontloader-svg-select.

        * css/FontLoader.cpp:
        (WebCore::FontLoader::didLayout):
        (WebCore::FontLoader::timerFired): Adding asynchronous callback.
        (WebCore::FontLoader::scheduleEvent): Add an event to the dispatch
        queue.
        (WebCore::FontLoader::firePendingEvents): Modified to handle the
        loading done event and callbacks.
        (WebCore::FontLoader::loadingDone): Modified to spin up the timer
        rather than immediately dispatching events.
        * css/FontLoader.h:

2014-11-21  Daniel Bates  <dabates@apple.com>

        Attempt to fix the internal Apple Mavericks build after <https://trac.webkit.org/changeset/176448>
        (https://bugs.webkit.org/show_bug.cgi?id=138930)

        Declare NSCachedURLResponse SPI when building without the Apple Internal SDK and with the Apple
        Internal SDK when building for OS X Mavericks or earlier.

        * platform/spi/cf/CFNetworkSPI.h:

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Make memoryCache() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=138939

        Reviewed by Antti Koivisto.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR):
        (WebCore::InspectorResourceAgent::setCacheDisabled):
        (WebCore::InspectorResourceAgent::mainFrameNavigated):
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::addIncrementalDataBuffer):
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedResource.cpp:
        (WebCore::deadDecodedDataDeletionIntervalForResourceType):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::failBeforeStarting):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::destroyDecodedDataIfNeeded):
        (WebCore::CachedResource::setDecodedSize):
        (WebCore::CachedResource::setEncodedSize):
        (WebCore::CachedResource::didAccessDecodedData):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::printPreloadStats):
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        * loader/cache/MemoryCache.h:
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::resourceBecameFileBacked):
        * page/FrameView.cpp:
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::releaseCriticalMemory):
        * testing/Internals.cpp:
        (WebCore::Internals::isLoadingFromMemoryCache):

2014-11-21  Daniel Bates  <dabates@apple.com>

        [iOS] WebKit2 fails to build with public SDK due to missing SPI from CFNetwork, QuartzCore, MediaPlayer, XPC
        https://bugs.webkit.org/show_bug.cgi?id=138930

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj: Rename header MPAVRoutingControllerSPI.h to MediaPlayerSPI.h.
        * loader/cocoa/SubresourceLoaderCocoa.mm: Move NSCachedURLResponse forward declarations to file
        CFNetworkSPI.h and include header CFNetworkSPI.h.
        * loader/mac/ResourceLoaderMac.mm: Ditto.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Substitute MediaPlayerSPI.h for MPAVRoutingControllerSPI.h.
        * platform/spi/cf/CFNetworkSPI.h: Add more SPI.
        * platform/spi/cg/CoreGraphicsSPI.h: Ditto.
        * platform/spi/cocoa/QuartzCoreSPI.h: Ditto.
        * platform/spi/ios/MediaPlayerSPI.h: Renamed from Source/WebCore/platform/spi/ios/MPAVRoutingControllerSPI.h.

2014-11-21  Chris Fleizach  <cfleizach@apple.com>

        AX: MathML expressions are misread by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=138948

        Reviewed by Mario Sanchez Prada.

        The logic for deciding what's the radicand and an index was too tied to children placement.
        We should instead pull directly from the source.

        Test: platform/mac/accessibility/mathml-root.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        * rendering/mathml/RenderMathMLRoot.h:

2014-11-20  Benjamin Poulain  <bpoulain@apple.com>

        Remove the remaining vestiges of minimal-ui
        https://bugs.webkit.org/show_bug.cgi?id=138890

        Reviewed by Sam Weinig.

        In ViewportArguments' setViewportFeature(), I skip the warning for now.

        * WebCore.exp.in:
        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::operator==):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfiguration::viewportArgumentsLength):
        (WebCore::ViewportConfiguration::layoutWidth):
        (WebCore::ViewportConfiguration::layoutHeight):
        (WebCore::ViewportConfigurationTextStream::operator<<):
        (WebCore::ViewportConfiguration::description):
        (WebCore::ViewportConfiguration::setMinimumLayoutSizeForMinimalUI): Deleted.
        (WebCore::ViewportConfiguration::activeMinimumLayoutSizeInScrollViewCoordinates): Deleted.
        (WebCore::ViewportConfiguration::resetMinimalUI): Deleted.
        (WebCore::ViewportConfiguration::didFinishDocumentLoad): Deleted.
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::minimumLayoutSizeForMinimalUI): Deleted.
        (WebCore::ViewportConfiguration::usesMinimalUI): Deleted.

2014-11-20  Benjamin Poulain  <benjamin@webkit.org>

        Web Inspector: do not show invalid specificity for dynamic cases of :matches()
        https://bugs.webkit.org/show_bug.cgi?id=138911

        Reviewed by Joseph Pecoraro.

        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorFunctionalPseudoClassStaticSpecificity):
        (WebCore::functionalPseudoClassStaticSpecificity):
        (WebCore::staticSpecificityInternal):
        (WebCore::CSSSelector::staticSpecificity):
        (WebCore::CSSSelector::specificity): Deleted.
        * css/CSSSelector.h:
        Add an additional computation path for the inspector.

        The regular path ignores everything inside function pseudo classes.
        This new path takes the static specificity of the regular path, then evaluate
        recursively all the selector lists inside any level of :matches().

        If two complex selector of selector list do not have the same specificity,
        we bail out and refuse to compute a static specificity representing the selector.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        Do not add the complexity to the inspector's CSSSelector structure whenever
        it is dynamic.

2014-11-20  Benjamin Poulain  <bpoulain@apple.com>

        Remove InspectorCSSAgent::buildArrayForRuleList()
        https://bugs.webkit.org/show_bug.cgi?id=138907

        Reviewed by Andreas Kling.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForRuleList): Deleted.
        * inspector/InspectorCSSAgent.h:

2014-11-20  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (174986): CSS clip property is ignored when border-radius is present.
        https://bugs.webkit.org/show_bug.cgi?id=138935
        rdar://problem/18965984

        Reviewed by Simon Fraser.

        Revert back to r163382 and fix bug 127729 properly. Save the graphics context when paint and clip rects are
        the same, but the clip rect has radius.
        Each iteration on ::clipRect() from r163382 onwards just introduced yet another regression.

        Test: fast/clip/css-clip-does-not-work-when-border-radius-is-present.html

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

2014-11-20  Geoffrey Garen  <ggaren@apple.com>

        Removed the custom allocator for PODRedBlackTree
        https://bugs.webkit.org/show_bug.cgi?id=138942

        Reviewed by Sam Weinig.

        bmalloc is fast enough.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PODArena.h: Removed.
        * platform/PODFreeListArena.h: Removed. This is the point of the patch.

        * platform/PODIntervalTree.h:
        (WebCore::PODIntervalTree::PODIntervalTree): Deleted. As a side effect
        of removing our custom allocator, we can no longer have a special
        "I'm not initialized yet" state. Instead, the tree either exists or not,
        like an idiomatic C++ object.

        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::PODRedBlackTree): Ditto.

        (WebCore::PODRedBlackTree::~PODRedBlackTree): We need to clear in our
        destructor because we can no longer rely on the arena destructor
        implicitly freeing our tree nodes.

        Side note: This change basically removes the whole reason for having
        a purpose-built tree for POD data. We should probably remove this whole
        data structure in a follow-up patch, and just use a standard tree.

        (WebCore::PODRedBlackTree::clear):
        (WebCore::PODRedBlackTree::add):
        (WebCore::PODRedBlackTree::remove):
        (WebCore::PODRedBlackTree::contains):
        (WebCore::PODRedBlackTree::visitInorder):
        (WebCore::PODRedBlackTree::size):
        (WebCore::PODRedBlackTree::checkInvariants):
        (WebCore::PODRedBlackTree::dump):
        (WebCore::PODRedBlackTree::deleteNode):
        (WebCore::PODRedBlackTree::markFree): Use normal new/delete, and mark
        ourselves as fast allocated so we get the bmalloc goodness.

        (WebCore::PODRedBlackTree::isInitialized): Deleted.
        (WebCore::PODRedBlackTree::initIfNeeded): Deleted.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::FloatingObjects):
        (WebCore::FloatingObjects::clear):
        (WebCore::FloatingObjects::addPlacedObject):
        (WebCore::FloatingObjects::removePlacedObject):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        (WebCore::FloatingObjects::placedFloatsTree):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset): POD tree had a slightly
        weird behavior in which it was valid to use some of its APIs without
        first initializing it, but not others. It's not really possible to model
        that behavior with normal C++ objects that use new/delete, so instead
        I added some explicit NULL checks.

        * rendering/FloatingObjects.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::intervalArena): Deleted.
        * rendering/RenderView.h: Removed custom-allocator-related cruft.

2014-11-20  Dean Jackson  <dino@apple.com>

        Support unprefixed animation event types
        https://bugs.webkit.org/show_bug.cgi?id=138931
        <rdar://problem/18943167>

        Reviewed by Simon Fraser.

        Tests: animations/unprefixed-events-mixed-with-prefixed.html
               animations/unprefixed-events.html

        Support the unprefixed animation event names:
        - animationstart (was webkitAnimationStart)
        - animationiteration (was webkitAnimationIteration)
        - animationend (was webkitAnimationEnd)

        (Yes, event types are case sensitive and yes, this will
        likely cause some head-scratching as people change content)

        The approach here is to follow what transitions does:
        - listener only for old event name -> fire old event name
        - listener for both old and new event name -> fire new event name
        - listener only for new event name -> fire new event name

        That way pages that were trying to anticipate the new event name
        won't get duplicate events.

        * CMakeLists.txt: Add new AnimationEvent* stuff.
        * DerivedSources.make: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSBindingsAllInOne.cpp: New files for all in one builds.
        * dom/DOMAllInOne.cpp:

        * dom/AnimationEvent.cpp: Added. Copied from WebKitAnimationEvent.cpp.
        (WebCore::AnimationEventInit::AnimationEventInit):
        (WebCore::AnimationEvent::AnimationEvent):
        (WebCore::AnimationEvent::~AnimationEvent):
        (WebCore::AnimationEvent::animationName):
        (WebCore::AnimationEvent::elapsedTime):
        (WebCore::AnimationEvent::eventInterface):
        * dom/AnimationEvent.h: Added. Copied from WebKitAnimationEvent.h.
        * dom/AnimationEvent.idl: Added. Copied from WebKitAnimationEvent.idl.

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded): Handle new event types.

        * dom/EventNames.h: New names.
        * dom/EventNames.in:

        * dom/EventTarget.cpp:
        (WebCore::legacyType): Provide a mapping from the new names to the older
        prefixed forms.

        * html/HTMLAttributeNames.in: Support the on* attributes, even though I
        hate them and wish this approach would die.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::populateEventNameForAttributeLocalNameMap):

        * page/DOMWindow.h: New names, and constructors.
        * page/DOMWindow.idl:

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle): Fire new type.

        * page/animation/KeyframeAnimation.cpp: Fire the new types of events.
        (WebCore::KeyframeAnimation::onAnimationStart):
        (WebCore::KeyframeAnimation::onAnimationIteration):
        (WebCore::KeyframeAnimation::onAnimationEnd):
        (WebCore::KeyframeAnimation::sendAnimationEvent):

2014-11-20  Tim Horton  <timothy_horton@apple.com>

        Remove a piece of DataDetectors SPI that we aren't using anymore
        https://bugs.webkit.org/show_bug.cgi?id=138917

        Reviewed by Beth Dakin.

        * platform/spi/mac/DataDetectorsSPI.h:

2014-11-20  Beth Dakin  <bdakin@apple.com>

        Invalid message WebPageProxy.DidPerformDictionaryLookup on Google stocks result
        https://bugs.webkit.org/show_bug.cgi?id=138568
        -and corresponding-
        rdar://problem/18904600

        Reviewed by Tim Horton.

        Add an optional parameter indicating whether or not to include images.
        * WebCore.exp.in:
        * editing/cocoa/HTMLConverter.h:
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange):

2014-11-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the !ENABLE(SVG_FONTS) build after r176276
        https://bugs.webkit.org/show_bug.cgi?id=138924

        Reviewed by Csaba Osztrogonác.

        No new tests because there is no behavior change.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestFont):

2014-11-19  Ada Chan  <adachan@apple.com>

        Add a way to mute an AudioContext.
        https://bugs.webkit.org/show_bug.cgi?id=138104

        Reviewed by Eric Carlson.

        Keep a muted state in AudioDestinationNode. If m_muted is true,
        zero out the audio buffers.

        No new tests, since it's difficult to test whether the audio is indeed muted.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        Call pageMutedStateDidChange() so it'll initialize the destination audio node's muted state accordingly.
        (WebCore::AudioContext::pageMutedStateDidChange):
        Set the destination audio node's muted state to match the page's muted state.

        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        Initialize m_muted.
        (WebCore::AudioDestinationNode::render):
        If m_muted is true, call AudioBus::zero() to zero out the buffers.
        * Modules/webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::setMuted):
        Set m_muted.

2014-11-20  Chris Dumez  <cdumez@apple.com>

        Crash when destroying a Document that has a throttled timer still running
        https://bugs.webkit.org/show_bug.cgi?id=138914

        Reviewed by Benjamin Poulain.

        Upon destruction, a throttled DOMTimer whose interval depends on
        viewport changes will try to unregister itself from the view. It gets
        the view pointer from its Document. However, scriptExecutionContext()
        can return null if the Document is being destroyed (i.e. ~DOMTimer()
        is called from ~ScriptExecutionContext(), as the ScriptExecutionContext
        owns the DOMTimer).

        This patch adds a null check for scriptExecutionContext() in the
        DOMTimer destructor to avoid this issue.

        Test: fast/dom/throttled-timer-running-on-document-destruction.html

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::~DOMTimer):

        (WebCore::DOMTimer::unregisterForViewportChanges):
        Add assertion to make sure scriptExecutionContext() does not return
        null.

        (WebCore::DOMTimerFireState::setChangedStyleOfElementOutsideViewport): Deleted.
        Killed this function as this was dead code.

2014-11-20  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Introduce text fragment continuation.
        https://bugs.webkit.org/show_bug.cgi?id=138274

        This patch extends simple line layout coverage to multiple text renderers.
        When a particular render flow has multiple text renderers (but not any other type)
        then we use simple line layout to process and paint the content. -other, existing requirements still apply
        so that for example if the content requires decoration, we bail out of simple line layout.

        FlowContent now supports multiple renderes. It continuously reads content from sibling renderers
        so that the simple line layout parser sees it as one monolithic block of content. Run positions
        are all relative to the block and they get resolved to renderer's positions on demand.
        (painting, computing bounding rects etc)

        Reviewed by Antti Koivisto.

        Performance test already been added for the multiple rendere use case,
        correctness is covered by existing test cases.
        Test: fast/text/simple-lines-mutliple-renderers.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Check if children are all 8bit RenderTexts.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Move the endofline check right before where we might overflow using end position.
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary): Split runs at renderers' boundary to be in sync with inline text renderering.
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::textWidth): Do not measure text across renderers. It could produce different width value due to
        ligature which later can produce unexpected line breaks and out sync rendering in general.
        (WebCore::SimpleLineLayout::FlowContents::renderer): 
        (WebCore::SimpleLineLayout::FlowContents::resolveRendererPositions):
        (WebCore::SimpleLineLayout::FlowContents::appendNextRendererContentIfNeeded): Read the next renderer content if needed.
        (WebCore::SimpleLineLayout::FlowContents::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::runWidth):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::isNewlineCharacter):
        (WebCore::SimpleLineLayout::FlowContents::isEndOfContent):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2014-11-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176396.
        https://bugs.webkit.org/show_bug.cgi?id=138926

        revealed some WebCore::BidiResolver issue. rollout this for
        now. (Requested by zalan on #webkit).

        Reverted changeset:

        "Simple line layout: Introduce text fragment continuation."
        https://bugs.webkit.org/show_bug.cgi?id=138274
        http://trac.webkit.org/changeset/176396

2014-11-20  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Introduce text fragment continuation.
        https://bugs.webkit.org/show_bug.cgi?id=138274

        This patch extends simple line layout coverage to multiple text renderers.
        When a particular render flow has multiple text renderers (but not any other type)
        then we use simple line layout to process and paint the content. -other, existing requirements still apply
        so that for example if the content requires decoration, we bail out of simple line layout.

        FlowContent now supports multiple renderes. It continuously reads content from sibling renderers
        so that the simple line layout parser sees it as one monolithic block of content. Run positions
        are all relative to the block and they get resolved to renderer's positions on demand.
        (painting, computing bounding rects etc)

        Reviewed by Antti Koivisto.

        Performance test already been added for the multiple rendere use case,
        correctness is covered by existing test cases.
        Test: fast/text/simple-lines-mutliple-renderers.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Check if children are all 8bit RenderTexts.
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Move the endofline check right before where we might overflow using end position.
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::splitRunsAtRendererBoundary): Split runs at renderers' boundary to be in sync with inline text renderering.
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::textWidth): Do not measure text across renderers. It could produce different width value due to
        ligature which later can produce unexpected line breaks and out sync renderering in general.
        (WebCore::SimpleLineLayout::FlowContents::renderer): 
        (WebCore::SimpleLineLayout::FlowContents::resolveRendererPositions):
        (WebCore::SimpleLineLayout::FlowContents::appendNextRendererContentIfNeeded): Read the next renderer content if needed.
        (WebCore::SimpleLineLayout::FlowContents::nextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::runWidth):
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::isNewlineCharacter):
        (WebCore::SimpleLineLayout::FlowContents::isEndOfContent):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2014-11-20  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error when GStreamer is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=138925

        Reviewed by Philippe Normand.

        A guard is missing for an overridden method.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:

2014-11-20  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Provide convenience API in DOM bindings to post messages to user message handlers
        https://bugs.webkit.org/show_bug.cgi?id=138871

        Reviewed by Carlos Garcia Campos.

        Adds a convenience function in the WebKitGTK+ DOM bindings to post
        messages to user message handlers in a way convenient way more
        convenient than using the autogenerated bindings.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_dom_window_webkit_message_handlers_post_message):
        Added new convenience API function to post messages to user message
        handlers.
        * bindings/gobject/WebKitDOMCustom.h: Ditto.
        * bindings/gobject/WebKitDOMCustom.symbols: Ditto.

2014-11-12  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Replace the usage of size_t by unsigned
        https://bugs.webkit.org/show_bug.cgi?id=136218

        Reviewed by Benjamin Poulain.

        In general, size_t should be used for sizes of objects in
        memory. We're using it to represent indexes and spans in the
        grid. Now that the maximum number of tracks is 1 million, it
        should be safe to replace them by unsigned integers.

        No new tests as there is no change in functionality.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        * css/StyleResolver.cpp:
        (WebCore::createImplicitNamedGridLinesFromGridArea):
        (WebCore::createGridTrackList):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        (WebCore::RenderGrid::GridIterator::nextGridItem):
        (WebCore::RenderGrid::GridIterator::isEmptyAreaEnough):
        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea):
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::ensureGridSize):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
        (WebCore::RenderGrid::populateGridPositions):
        * rendering/RenderGrid.h:
        * rendering/style/GridCoordinate.h:
        (WebCore::GridSpan::integerSpan):
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::explicitGridColumnCount):
        (WebCore::GridResolvedPosition::explicitGridRowCount):
        (WebCore::explicitGridSizeForSide):
        (WebCore::GridResolvedPosition::resolveNamedGridLinePositionFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionFromStyle):
        (WebCore::GridResolvedPosition::resolveGridPositionAgainstOppositePosition):
        (WebCore::firstNamedGridLineBeforePosition):
        (WebCore::GridResolvedPosition::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::GridResolvedPosition::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
        * rendering/style/GridResolvedPosition.h:
        (WebCore::GridResolvedPosition::adjustGridPositionForRowEndColumnEndSide):
        (WebCore::GridResolvedPosition::adjustGridPositionForSide):
        (WebCore::GridResolvedPosition::GridResolvedPosition):
        (WebCore::GridResolvedPosition::toInt):
        * rendering/style/StyleGridData.h:

2014-11-20  Andreas Kling  <akling@apple.com>

        Remove "document has no sibling rules" optimization.
        <https://webkit.org/b/138902>

        Reviewed by Antti Koivisto.

        We were keeping a document-level flag to track whether there are any
        sibling rules in any active style sheets.

        This information was used to do.. nothing.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::usesSiblingRules): Deleted.
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::combineCSSFeatureFlags):
        (WebCore::DocumentStyleSheetCollection::resetCSSFeatureFlags):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::usesSiblingRules): Deleted.
        (WebCore::DocumentStyleSheetCollection::setUsesSiblingRulesOverride): Deleted.
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::insertedInto): Deleted.
        * mathml/MathMLMathElement.h:

2014-11-20  Andreas Kling  <akling@apple.com>

        Caret renderer is always a RenderBlock.
        <https://webkit.org/b/138912>

        Reviewed by Chris Dumez.

        Tighten typing in the code that finds and deals with the renderer
        used to paint the caret (it's always a RenderBlock.)

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::updateCaretRect):
        (WebCore::FrameSelection::caretRendererWithoutUpdatingLayout):
        (WebCore::DragCaretController::caretRenderer):
        (WebCore::repaintCaretForLocalRect):
        (WebCore::CaretBase::paintCaret):
        * editing/FrameSelection.h:
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::absoluteCaretBounds):
        * editing/htmlediting.cpp:
        (WebCore::rendererForCaretPainting):
        (WebCore::localCaretRectInRendererForCaretPainting):
        (WebCore::absoluteBoundsForLocalCaretRect):
        * editing/htmlediting.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

2014-11-20  Antti Koivisto  <antti@apple.com>

        REGRESSION (r172854): Web Viewer in FileMaker does not render a Base64 encoded animated-GIF
        https://bugs.webkit.org/show_bug.cgi?id=138807
        <rdar://problem/18829540>

        Reviewed by Simon Fraser.

        Animation gets paused because WebKit thinks the GIF is outside of the view.

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

        We need to convert to window coordinates in paintsEntireContents mode too so these functions are consistent.
        This matters with some WK1 API clients.

2014-11-19  Chris Dumez  <cdumez@apple.com>

        Move 'clip' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138909

        Reviewed by Andreas Kling.

        Move 'clip' CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyClip::convertToLength): Deleted.
        (WebCore::ApplyPropertyClip::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyClip::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyClip::applyValue): Deleted.
        (WebCore::ApplyPropertyClip::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyInitialClip):
        (WebCore::StyleBuilderFunctions::applyInheritClip):
        (WebCore::StyleBuilderFunctions::applyValueClip):

2014-11-19  Ryuan Choi  <ryuan.choi@navercorp.com>

        Remove dead code from TiledBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=138864

        Reviewed by Andreas Kling.

        Since r168151, paint() method, m_commitTileUpdatesOnIdleEventLoop and related code are not used.

        No new tests, no behavior change.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTileSize):
        (WebCore::TiledBackingStore::invalidate):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::paint): Deleted.
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer): Deleted.
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired): Deleted.
        (WebCore::TiledBackingStore::startBackingStoreUpdateTimer): Deleted.
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired): Deleted.
        * platform/graphics/TiledBackingStore.h:
        (WebCore::TiledBackingStore::setCommitTileUpdatesOnIdleEventLoop): Deleted.

2014-11-19  Andreas Kling  <akling@apple.com>

        Remove "document has no ::before and/or ::after rules" optimization.
        <https://webkit.org/b/138897>

        Reviewed by Antti Koivisto.

        This optimization has been dead for a long time, since the default UA
        style contains both ::before and ::after rules.

        * css/RuleFeature.cpp:
        (WebCore::recursivelyCollectFeaturesFromSelector):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        * css/RuleFeature.h:
        (WebCore::RuleFeatureSet::RuleFeatureSet):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::usesBeforeAfterRules): Deleted.
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::DocumentStyleSheetCollection):
        (WebCore::DocumentStyleSheetCollection::combineCSSFeatureFlags):
        (WebCore::DocumentStyleSheetCollection::resetCSSFeatureFlags):
        * dom/DocumentStyleSheetCollection.h:
        (WebCore::DocumentStyleSheetCollection::usesBeforeAfterRules): Deleted.
        (WebCore::DocumentStyleSheetCollection::setUsesBeforeAfterRulesOverride): Deleted.
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::insertedInto): Deleted.
        * html/HTMLQuoteElement.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::needsPseudoElement):

2014-11-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Upright vertical text is completely broken for multi-code-unit codepoints
        https://bugs.webkit.org/show_bug.cgi?id=138891

        Reviewed by Dan Bernstein.

        We were assuming that we can use the string index (in UTF-16) as the glyph
        index. This falls down when a single codepoint (and glyph) contians
        multiple code units.

        Test: platform/mac/fast/text/multiple-codeunit-vertical-upright.html

        * platform/graphics/GlyphPage.h:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):

2014-11-19  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal Mavericks build after <https://trac.webkit.org/changeset/176347>
        (https://bugs.webkit.org/show_bug.cgi?id=136863)

        Define enumerator NSHTTPCookieAcceptPolicyExclusivelyFromMainDocumentDomain when building without
        the Apple Internal SDK or with the Apple Internal SDK on OS X Mavericks or earlier.

        * platform/spi/cf/CFNetworkSPI.h:

2014-11-16  Sam Weinig  <sam@webkit.org>

        Move the 'quotes' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138788

        Reviewed by Chris Dumez.

        Test: fast/css/content/content-quotes-07.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        Fix the parser to only accept none as a valid primitive identifier. Tested in 
        the newly added content-quotes-07.html.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertQuotes):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        Move "quotes" to the new style builder.

        * rendering/style/RenderStyle.h:
        Add an initialQuotes() function for use in the auto-generated style builder.

2014-11-19  Dean Jackson  <dino@apple.com>

        Handle unprefixed @keyframes rule
        https://bugs.webkit.org/show_bug.cgi?id=138899
        <rdar://problem/18943117>

        Reviewed by Simon Fraser.

        Support the parsing of unprefixed @keyframes. In
        CSSParser, assign the same token identifier to
        the prefixed and unprefixed forms. This will
        keep compatibility with older content. If a page
        has both forms, then whatever comes last will
        win (as it does if you had duplicate names of the same
        form).

        Tests: animations/unprefixed-keyframes-rule.html
               animations/unprefixed-keyframes.html

        * css/CSSGrammar.y.in: Rename the WEBKIT_KEYFRAME_RULE_SYM symbol to
        be KEYFRAME_RULE_SYM. Same with KEYFRAMES_SYM.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectAtToken): Look for the @keyframes style
        strings and assign the new token values.

2014-11-19  Andreas Kling  <akling@apple.com>

        Move pseudo-style code from RenderObject to RenderElement.
        <https://webkit.org/b/138880>

        Reviewed by Antti Koivisto.

        Migrate get*PseudoStyle() to RenderElement, and the selection color
        functions along with them. This gets rid of a DOM ancestor walk in
        pseudo style lookup.

        Narrow down some argument types to keep things building.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::styleForFirstLetter):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::getCachedPseudoStyle):
        (WebCore::RenderElement::getUncachedPseudoStyle):
        (WebCore::RenderElement::selectionColor):
        (WebCore::RenderElement::selectionPseudoStyle):
        (WebCore::RenderElement::selectionForegroundColor):
        (WebCore::RenderElement::selectionEmphasisMarkColor):
        (WebCore::RenderElement::selectionBackgroundColor):
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionBackgroundColor): Deleted.
        (WebCore::RenderObject::selectionColor): Deleted.
        (WebCore::RenderObject::selectionPseudoStyle): Deleted.
        (WebCore::RenderObject::selectionForegroundColor): Deleted.
        (WebCore::RenderObject::selectionEmphasisMarkColor): Deleted.
        (WebCore::RenderObject::getCachedPseudoStyle): Deleted.
        (WebCore::RenderObject::getUncachedPseudoStyle): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderText.h:
        (WebCore::RenderText::getCachedPseudoStyle):
        (WebCore::RenderText::selectionBackgroundColor):
        (WebCore::RenderText::selectionForegroundColor):
        (WebCore::RenderText::selectionEmphasisMarkColor):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):

2014-11-19  Tim Horton  <timothy_horton@apple.com>

        Add an optional entry transition (from selection highlight) to TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=138856
        <rdar://problem/18840128>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Add an export.

        * platform/spi/cocoa/QuartzCoreSPI.h:
        Add some SPI.

2014-11-19  Chris Dumez  <cdumez@apple.com>

        Move 'outline-style' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138882

        Reviewed by Sam Weinig.

        Move 'outline-style' CSS property from DeprecatedStyleBuilder to the
        new StyleBuilder by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyDefault::setValue): Deleted.
        (WebCore::ApplyPropertyDefault::applyValue): Deleted.
        (WebCore::ApplyPropertyDefault::createHandler): Deleted.
        (WebCore::ApplyPropertyOutlineStyle::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyOutlineStyle::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyOutlineStyle::applyValue): Deleted.
        (WebCore::ApplyPropertyOutlineStyle::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyInheritOutlineStyle):
        (WebCore::StyleBuilderFunctions::applyInitialOutlineStyle):
        (WebCore::StyleBuilderFunctions::applyValueOutlineStyle):

2014-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection Resource search does not work
        https://bugs.webkit.org/show_bug.cgi?id=131252

        Reviewed by Timothy Hatcher.

        Test: inspector/debugger/search-scripts.html

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResources):
        A little cleanup.

2014-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide $exception in the console for the thrown exception value
        https://bugs.webkit.org/show_bug.cgi?id=138726

        Reviewed by Timothy Hatcher.

        Tests: inspector/debugger/command-line-api-exception-nested-catch.html
               inspector/debugger/command-line-api-exception.html

        * inspector/CommandLineAPIModuleSource.js:
        Expose $exception in the more complete command line API.

2014-11-19  David Hyatt  <hyatt@apple.com>

        Images/replaced elements that are as tall as a page should be on their own page
        https://bugs.webkit.org/show_bug.cgi?id=138886 - <rdar://problem/18296371>

        Reviewed by Dean Jackson.

        Added fast/multicol/tall-image-behavior.html (and RL/LR variants)

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeReplacedAndTextLineTopAndBottom):
        * rendering/InlineFlowBox.h:
        Add a new method that computes the line top and line bottom ignoring all margins,
        overflow and line-height. This allows us to see if a line that is taller than a page
        can be made to fit if we ignored margins and unused descent.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        Call the new helper function, computeReplacedAndTextLineTopAndBottom and push
        to a new page if we see that we can fit on a page by ourselves without blank space
        included.

2014-11-18  Ada Chan  <adachan@apple.com>

        Take Web Audio into account for the Page::isPlayingAudio() API.
        https://bugs.webkit.org/show_bug.cgi?id=137464

        Reviewed by Jer Noble.

        Make AudioContext a subclass of AudioProducer. It figures out whether there's
        audio playing by checking whether its AudioDestinationNode is playing (and not
        silent). It calls Document::updateIsPlayingAudio() whenever its audio playing
        state has changed.

        Test: webaudio/web-audio-is-playing.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lazyInitialize):
        Add itself to the Document's list of AudioProducers if it's not an offline
        audio context.
        (WebCore::AudioContext::uninitialize):
        Remove itself from the Document's list of AudioProducers if it's not an offline
        audio context.
        (WebCore::AudioContext::stop):
        Tell the document to update its audio playing state.
        (WebCore::AudioContext::isPlayingAudio):
        Return true if the audio context hasn't been stopped and its destination node is
        playing audio.
        (WebCore::AudioContext::pageMutedStateDidChange):
        Add a FIXME for now.
        (WebCore::AudioContext::isPlayingAudioDidChange):
        Call Document::updateIsPlayingAudio().
        * Modules/webaudio/AudioContext.h:

        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        Initialize m_isSilent and m_isEffectivelyPlayingAudio.
        (WebCore::AudioDestinationNode::render):
        Call setIsSilent() with the appropriate value after rendering.
        (WebCore::AudioDestinationNode::isPlayingDidChange):
        Call updateIsEffectivelyPlayingAudio().
        (WebCore::AudioDestinationNode::setIsSilent):
        If m_isSilent has changed, call updateIsEffectivelyPlayingAudio().
        (WebCore::AudioDestinationNode::updateIsEffectivelyPlayingAudio):
        If m_isEffectivelyPlayingAudio has changed, call AudioContext::isPlayingAudioDidChange().
        * Modules/webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::isPlaying):
        (WebCore::AudioDestinationNode::isPlayingAudio):

        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::isPlaying):
        Return whether the AudioDestination is playing.
        * Modules/webaudio/DefaultAudioDestinationNode.h:

        * platform/audio/AudioIOCallback.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestinationIOS::start):
        Call setIsPlaying() instead.
        (WebCore::AudioDestinationIOS::stop):
        Ditto.
        (WebCore::AudioDestinationIOS::setIsPlaying):
        If m_isPlaying has changed, call AudioIOCallback::isPlayingDidChange().
        * platform/audio/ios/AudioDestinationIOS.h:

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::start):
        Call setIsPlaying() instead.
        (WebCore::AudioDestinationMac::stop):
        Ditto.
        (WebCore::AudioDestinationMac::setIsPlaying):
        If m_isPlaying has changed, call AudioIOCallback::isPlayingDidChange().
        * platform/audio/mac/AudioDestinationMac.h:

        * testing/Internals.cpp:
        (WebCore::Internals::isPagePlayingAudio):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add internals.isPagePlayingAudio() for testing.

2014-11-19  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal Mountain Lion build after <https://trac.webkit.org/changeset/176347>
        (https://bugs.webkit.org/show_bug.cgi?id=136863)

        Only import header CFNSURLConnection.h when building for iOS or OS X Yosemite.

        * platform/spi/cf/CFNetworkSPI.h:

2014-11-19  Antti Koivisto  <antti@apple.com>

        Fix TilesAdded bitmask
        https://bugs.webkit.org/show_bug.cgi?id=138883

        Reviewed by Simon Fraser.

        Simon spotted this.

        * platform/graphics/ca/GraphicsLayerCA.h:

            Use 1LLU << 29 instead of 1LLU < 29
            This worked before by pure luck as bit 0 is unused.

2014-11-19  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136863

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj: Add private headers CFNetworkSPI.h and
        NS{CalendarDate, String, URLDownload}SPI.h.
        * loader/cocoa/DiskCacheMonitorCocoa.mm: Move forward declaration of
        CFNetwork data types and functions from here to file CFNetworkSPI.h and
        include header CFNetworkSPI.h.
        * platform/network/mac/ResourceHandleMac.mm: Substitute CFNetworkSPI.h for
        CFURLRequestSPI.h as the content of the latter was incorporated into the former.
        * platform/spi/cf/CFNetworkSPI.h: Added.
        * platform/spi/cf/CFURLRequestSPI.h: Removed; incorporated its functionality
        into CFNetworkSPI.h
        * platform/spi/cocoa/NSCalendarDateSPI.h: Added.
        * platform/spi/cocoa/NSStringSPI.h: Added.
        * platform/spi/cocoa/NSURLDownloadSPI.h: Added.

2014-11-19  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of AccessibilityObject::setRoleValue()
        https://bugs.webkit.org/show_bug.cgi?id=138861

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::setRoleValue): Deleted.

2014-11-19  Philippe Normand  <pnormand@igalia.com>

        Missing NULL-check in VideoTrack::setLanguage
        https://bugs.webkit.org/show_bug.cgi?id=138867

        Reviewed by Jer Noble.

        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setLanguage): Prevent change event creation
        on an empty video track list.

2014-11-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Safari fails to load a web page with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=138849

        Reviewed by Mario Sanchez Prada.

        Sometimes an inlineElementContinuation will continue to an inline RenderBlock, so we case this incorrectly and bad things happen.

        Test: accessibility/inline-block-assertion.html

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

2014-11-19  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: RenderTreeAsText should use rangeForRenderer() when dumping simple line text.
        https://bugs.webkit.org/show_bug.cgi?id=138847

        Reviewed by Antti Koivisto.

        This is in preparation to support multiple renderers for simple line layout.
        Use rangeForRenderer() to get runs for a particular renderer as opposed to for the entire flow.

        Not testable.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2014-11-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error when CSS_SELECTORS_LEVEL4 is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=138870

        Reviewed by Alex Christensen.

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

2014-11-19  Chris Fleizach  <cfleizach@apple.com>

        AX: Screen braille input doesn't work on forms.
        https://bugs.webkit.org/show_bug.cgi?id=138804

        Reviewed by Mario Sanchez Prada.

        Allow iOS to set values of text fields through the API.

        Test: platform/ios-sim/accessibility/set-value.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:]):

2014-11-19  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add renderer based rect collecting to RunResolver.
        https://bugs.webkit.org/show_bug.cgi?id=138818

        Reviewed by Antti Koivisto.

        This is in preparation to multiple renderers support.
        RunResolver should be able to collect rects for a particular renderer
        that might overlap multiple runs. (or might just be a subset of a Run)

        Covered by existing tests.

        * rendering/SimpleLineLayoutFlowContents.cpp:
        (WebCore::SimpleLineLayout::FlowContents::renderer): It operates on a single renderer currently.
        (WebCore::SimpleLineLayout::FlowContents::resolveRendererPositions): It operates on a single renderer currently.
        * rendering/SimpleLineLayoutFlowContents.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        (WebCore::SimpleLineLayout::computeTextFirstRunLocation):
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects):
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads):
        (WebCore::SimpleLineLayout::showLineLayoutForFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::baselinePosition):
        (WebCore::SimpleLineLayout::linePosition):
        (WebCore::SimpleLineLayout::lineSize):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::rectForTextRenderer):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Run::computeRect):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        * rendering/SimpleLineLayoutResolver.h:

2014-11-19  Dhi Aurrahman  <diorahman@rockybars.com>

        Add selector checker for :lang pseudo class in Selectors level 4
        https://bugs.webkit.org/show_bug.cgi?id=138281

        Reviewed by Benjamin Poulain.

        Add selector checker for :lang pseudo class in Selectors level 4.

        The language tags matching is specified in [1,2].

        [1] http://www.ietf.org/rfc/rfc4647.txt
        [2] http://dev.w3.org/csswg/selectors4/#the-lang-pseudo

        Tests: fast/selectors/lang-extended-filtering.html
               fast/selectors/lang-multiple.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::containslanguageSubtagMatchingRange):
        (WebCore::matchesLangPseudoClass):
        (WebCore::matchesLangPseudoClassDeprecated):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-11-18  Philippe Normand  <pnormand@igalia.com>

        start/stop method for AudioBufferSourceNodes and OscillatorNodes can take no args
        https://bugs.webkit.org/show_bug.cgi?id=138739

        Reviewed by Darin Adler.

        The patch is inspired by the following Blink revision by
        <rtoy@google.com>:
        <https://src.chromium.org/viewvc/blink?view=rev&revision=160845>

        Test: webaudio/dom-exceptions.html

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::start):
        (WebCore::AudioBufferSourceNode::startPlaying):
        (WebCore::AudioBufferSourceNode::noteGrainOn):
        (WebCore::AudioBufferSourceNode::startGrain): Deleted.
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::start):
        (WebCore::AudioScheduledSourceNode::stop):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/OscillatorNode.idl:

2014-11-18  Benjamin Poulain  <benjamin@webkit.org>

        Add the initial implementation of dynamic specificity for :matches()
        https://bugs.webkit.org/show_bug.cgi?id=138822

        Reviewed by Andreas Kling.

        Previously we completely ignored the selector list of :matches() when computing
        the specificity of the selector.

        The spec (http://dev.w3.org/csswg/selectors4/#specificity) says:
        "The specificity of a :matches() pseudo-class, however, is the specificity
         of the most specific complex selector that matched the given element."

        This patch does just that.

        In the CSS JIT, we only consider specificities that can be computed statically
        for now, this should be extended later.
        When the specificity is dynamic, we fall back to SelectorChecker. In that case,
        we execute every selector of the selector list and we keep the maximum value
        as the specificity for the whole :matches().

        Tests: fast/css/matches-specificity-1.html
               fast/css/matches-specificity-2.html
               fast/css/matches-specificity-3.html
               fast/css/matches-specificity-4.html
               fast/css/matches-specificity-5.html
               fast/css/matches-specificity-6.html
               fast/css/matches-specificity-7.html
               fast/css/matches-specificity-8.html
               fast/css/matches-specificity-9.html
               fast/css/matches-specificity-10.html

        * css/CSSSelector.cpp:
        (WebCore::selectorSpecificity):
        (WebCore::maxSpecificity):
        (WebCore::CSSSelector::specificity):
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::CSSSelector::simpleSelectorSpecificity):
        :matches() itself should not have any specificity. The specificity of its components
        is computed in SelectorChecker.

        Since :matches() is no longer accounted as a class B specificity, I had to finish
        the specificity of :not() or some test breaks.

        * css/CSSSelector.h:
        * css/PageRuleCollector.cpp:
        (WebCore::comparePageRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        We can no longer shortcut the execution when context.pseudoElementEffective is false.
        There is no guarantee that a following selector wouldn't match with a higher specificity.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

2014-11-18  David Kilzer  <ddkilzer@apple.com>

        FeatureDefines.xcconfig: Switch from using PLATFORM_NAME to SDK selectors
        <http://webkit.org/b/138813>

        Reviewed by Mark Rowe.

        * Configurations/FeatureDefines.xcconfig: Switch to using SDK
        selectors.

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'z-index' / 'flex-shrink' CSS properties to a calculated value
        https://bugs.webkit.org/show_bug.cgi?id=138783

        Reviewed by Andreas Kling.

        Update operators converting CSSPrimitiveValue to integer / floating
        point types to properly handle calculated values (e.g. 'calc(2 * 3)').
        Previously, this was not working in release builds and we would hit an
        ASSERT_NOT_REACHED() in debug builds.

        Tests: fast/css/flex-shrink-calculated-value.html
               fast/css/z-index-calculated-value.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator unsigned short):
        (WebCore::CSSPrimitiveValue::operator int):
        (WebCore::CSSPrimitiveValue::operator unsigned):
        (WebCore::CSSPrimitiveValue::operator float):

2014-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176263 and r176273.
        https://bugs.webkit.org/show_bug.cgi?id=138854

        Underlines are hideous. (Requested by litherum on #webkit).

        Reverted changesets:

        "Use underlining metrics from the font file"
        https://bugs.webkit.org/show_bug.cgi?id=138762
        http://trac.webkit.org/changeset/176263

        "iOS build fix."
        http://trac.webkit.org/changeset/176273

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Add a setting to toggle DOMTimer throttling support
        https://bugs.webkit.org/show_bug.cgi?id=138844
        <rdar://problem/19020874>

        Reviewed by Andreas Kling.

        Add a setting to disable DOM timers throttling, in order to help
        developers determine if a specific issue is caused by timer
        throttling.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::contextDocument):
        (WebCore::DOMTimerFireState::scriptMadeUserObservableChanges):
        (WebCore::DOMTimer::isDOMTimersThrottlingEnabled):
        (WebCore::DOMTimer::updateThrottlingStateIfNecessary):
        * page/DOMTimer.h:
        * page/Settings.in:

2014-11-18  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Invoking dictionary lookup on text in some search fields searches for 
        incorrect item
        https://bugs.webkit.org/show_bug.cgi?id=138853
        -and corresponding-
        rdar://problem/18912505

        Reviewed by Tim Horton.

        Get the visible position based on the frame, not just the renderer.
        * editing/mac/DictionaryLookup.mm:
        (WebCore::rangeForDictionaryLookupAtHitTestResult):

2014-11-18  David Hyatt  <hyatt@apple.com>

        REGRESSION (r167210): Invalid cast in WebCore::RenderBlock::blockSelectionGaps
        https://bugs.webkit.org/show_bug.cgi?id=137590

        Reviewed by Dean Jackson.

        Added fast/block/selection-block-gaps-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::blockSelectionGaps):
        Check that we really are a RenderBlock before recurring.

2014-11-18  Andreas Kling  <akling@apple.com>

        Avoid synchronous style recalc in Document.activeElement
        <https://webkit.org/b/138850>

        Reviewed by Ryosuke Niwa.

        This subtly changes the behavior of <input autofocus>, which was caught by
        a layout test. Auto-focus doesn't happen until the render tree is attached,
        although it was possible to force it by accessing document.activeElement.

        Now auto-focus is always lazy. This is consistent with other browser engines.

        ~1% progression on Speedometer locally.

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

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Have Vector::capacity() return an unsigned instead of a size_t
        https://bugs.webkit.org/show_bug.cgi?id=138842

        Reviewed by Andreas Kling.

        Update the code base now that Vector::capacity() returns an unsigned
        type instead of a size_t.

        No new tests, no behavior change.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        (WebCore::SearchBuffer::prependContext):
        (WebCore::SearchBuffer::search):
        (WebCore::SearchBuffer::length):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::duplicateDataBufferIfNecessary):

2014-11-18  Geoffrey Garen  <ggaren@apple.com>

        Removed the custom allocator for ListHashSet nodes
        https://bugs.webkit.org/show_bug.cgi?id=138841

        Reviewed by Andreas Kling.

        Uses of ListHashSet no longer need to declare an inline capacity,
        since that was only used to specify the capacity of the custom allocator.

        * dom/DOMNamedFlowCollection.h:
        * dom/DocumentEventQueue.h:
        * dom/DocumentStyleSheetCollection.h:
        * dom/NamedFlowCollection.h:
        * html/FormController.h:
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:

2014-11-18  David Hyatt  <hyatt@apple.com>

        REGRESSION(r152313): Inline-block element doesn't wrap properly
        https://bugs.webkit.org/show_bug.cgi?id=138846 - <rdar://problem/18838703>

        Reviewed by Simon Fraser.

        Added fast/inline-block/inline-block-empty-spans.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::canBreakAtThisPosition):

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Multicolumn layout with negative line spacing and orphans causes pieces of letters to be shown at the bottom of columns
        https://bugs.webkit.org/show_bug.cgi?id=138204

        Reviewed by Dave Hyatt.

        This code is responsible for pushing block elements to the next column if
        the "orphans" CSS property is triggered. The mechanism by which this is
        achieved is to push the block down such that the origin of the block is
        at the origin of the next column. However, if there is negative line
        spacing, the top portion of the text might actually be on top of the
        origin of the block. Therefore, the block wasn't being pushed down enough
        to entirely contain its text, so the top pieces were being drawn on the
        previous column.

        Test: fast/multicol/orphans-negative-line-spacing.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2014-11-18  Chris Dumez  <cdumez@apple.com>

        DOMTimers sometimes don't get unthrottled on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=138838

        Reviewed by Antti Koivisto.

        DOMTimers sometimes didn't get unthrottled on scrolling. This is
        because we stopped listening for viewport changes every time the
        timer fires, but we didn't listen for those changes again if we
        decided the timer should stay throttled after the timer's action
        was executed.

        We should listen for viewport changes again after executing the
        timer's action, if there are elements outside the viewport causing
        the DOMTimer to be throttled, even if the throttleState hasn't
        changed (i.e the timer stays throttled).

        Test: fast/dom/timer-unthrottle-on-scroll.html

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::updateThrottlingStateIfNecessary):
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
        (WebCore::DOMTimer::updateThrottlingStateAfterViewportChange):

2014-11-18  Daniel Bates  <dbates@webkit.org>

        [iOS] Make WebCore build and link with public SDK
        https://bugs.webkit.org/show_bug.cgi?id=136487

        Reviewed by David Kilzer.

        * bindings/objc/DOMInternal.mm: Include header NSMapTableSPI.h.
        * bindings/objc/WebScriptObject.mm: Ditto; Also fix style nit, substitute
        #import for #include when importing header WTFString.h.
        * bridge/objc/objc_instance.mm: Include header NSMapTableSPI.h and remove
        #import NSMapTable.h as the former will import the latter.
        * platform/ios/PlatformEventFactoryIOS.mm: Include header wtf/CurrentTime.h
        for the declaration of WTF::currentTime().
        * platform/ios/wak/WebCoreThread.mm: Remove unnecessary include of header CoreFoundation/CFPriv.h.
        * platform/spi/ios/AVKitSPI.h: Add more SPI.
        * platform/spi/ios/MPAVRoutingControllerSPI.h: Ditto.

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Subclass CachedFont for SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=138686

        Reviewed by Simon Fraser.

        Re-landing due to flakey bots.

        CachedFont had many #if ENABLE(SVG_FONTS) scattered throughout it.
        Splitting out this SVG-specific code into a subclass of CachedFont
        cleans up the design.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): There are two sections
        in this function; one for SVG fonts and one for regular fonts.
        I've moved these two sections into CachedFont and SVGCachedFont,
        thereby simplifying this function.
        (WebCore::CSSFontFaceSource::ensureFontData): Ditto.
        (WebCore::CSSFontFaceSource::svgFontFaceElement): Moved to header.
        (WebCore::CSSFontFaceSource::setSVGFontFaceElement): Ditto.
        (WebCore::CSSFontFaceSource::isSVGFontFaceSource): Ditto.
        * css/CSSFontFaceSource.h: Put functions that are simple enough to
        be inlined here.
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSVGFontTarget): Convenience
        function.
        (WebCore::CSSFontFaceSrcValue::cachedFont): Pass through a boolean
        from CSSFontSelector to CachedResourceHandle regarding if we should
        be using SVGCachedFont instead of CachedFont.
        * css/CSSFontFaceSrcValue.h: New convenience function.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Pass through a boolean
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceType): Update for new
        CachedResource type
        (WebCore::cachedResourcesForFrame): Ditto.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData): Taken from
        CSSFontFaceSource::getFontData()
        (WebCore::CachedFont::getFontData): Ditto.
        (WebCore::CachedFont::platformDataFromCustomData): Ditto.
        (WebCore::CachedFont::ensureSVGFontData): Moved to SVGCachedFont.
        (WebCore::CachedFont::getSVGFontById): Ditto.
        * loader/cache/CachedFont.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType): Update for new enum
        type.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Takes new boolean.
        (WebCore::CachedResourceLoader::requestFont): Ditto.
        (WebCore::CachedResourceLoader::checkInsecureContent): Update for
        new enum type
        (WebCore::CachedResourceLoader::canRequest): Ditto.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGFont.cpp: Added.
        (WebCore::CachedSVGFont::CachedSVGFont): Moved from
        CSSFontFaceSource::getFontData() and CachedFont
        (WebCore::CachedSVGFont::getFontData): Ditto.
        (WebCore::CachedSVGFont::platformDataFromCustomData): Ditto.
        (WebCore::CachedSVGFont::ensureCustomFontData): Ditto.
        (WebCore::CachedSVGFont::getSVGFontById): Ditto.
        (WebCore::CachedSVGFont::firstFontFace): Ditto.
        * loader/cache/CachedSVGFont.h: Subclass CachedFont.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getStatistics): Update for new enum.
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::isSVGFontTarget): Convenience function.
        (WebCore::SVGFontFaceUriElement::loadFont): Update for new
        boolean.

2014-11-18  Chris Dumez  <cdumez@apple.com>

        Update the Vector API to deal with unsigned types instead of size_t
        https://bugs.webkit.org/show_bug.cgi?id=138824

        Reviewed by Andreas Kling.

        Update code base to fix build errors related to the typing changes
        in the Vector API (size_t -> unsigned).

        No new tests, no behavior change.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsArray):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        * cssjit/SelectorCompiler.cpp:
        * html/HTMLFormElement.cpp:
        (WebCore::removeFromVector):
        * html/parser/HTMLParserIdioms.h:
        * html/parser/XSSAuditor.cpp:

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed iOS build fix

        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::platformInit):

2014-11-18  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::platformInit):

2014-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176264.
        https://bugs.webkit.org/show_bug.cgi?id=138837

        caused many test failures (Requested by litherum on #webkit).

        Reverted changeset:

        "Subclass CachedFont for SVG fonts"
        https://bugs.webkit.org/show_bug.cgi?id=138686
        http://trac.webkit.org/changeset/176264

2014-11-18  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Add SPI wrapper headers {Dispatch, DynamicLinker, IOPMLib, MachVM, NSPointerFunctions, MobileGestalt}SPI.h
        that forward declare applicable libdispatch, dyld, IOKit, mach, Foundation, MobileGestalt SPI
        and use these headers instead of the including private headers corresponding to these libraries/frameworks.

        * WebCore.xcodeproj/project.pbxproj: Add private headers MobileGestaltSPI.h and
        MachVMSPI.h, and project headers DynamicLinkerSPI.h, NSPointerFunctionsSPI.h,
        DispatchSPI.h and IOPMLibSPI.h. Also, sort files in Xcode project.
        * bindings/objc/DOMInternal.mm: Include header NSPointerFunctionsSPI.h.
        * bridge/objc/objc_instance.mm: Ditto; Also, sort #import directives.
        * platform/cocoa/DisplaySleepDisablerCocoa.cpp: Substitute header IOPMLibSPI.h
        for private header IOKit/pwr_mgt/IOPMLib.h.
        * platform/cocoa/MemoryPressureHandlerCocoa.mm: Substitute header DispatchSPI.h
        for private header dispatch/private.h.
        * platform/graphics/ios/FontServicesIOS.mm: Substitute header DynamicLinkerSPI.h
        for private header mach-o/dyld_priv.h.
        * platform/ios/PlatformScreenIOS.mm: Substitute header MobileGestaltSPI.h for
        private header MobileGestalt.h.
        * platform/spi/cocoa/DispatchSPI.h: Added.
        * platform/spi/cocoa/DynamicLinkerSPI.h: Added.
        * platform/spi/cocoa/IOPMLibSPI.h: Added.
        * platform/spi/cocoa/MachVMSPI.h: Added.
        * platform/spi/cocoa/NSPointerFunctionsSPI.h: Added.
        * platform/spi/ios/MobileGestaltSPI.h: Added.

2014-11-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Subclass CachedFont for SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=138686

        Reviewed by Simon Fraser.

        CachedFont had many #if ENABLE(SVG_FONTS) scattered throughout it.
        Splitting out this SVG-specific code into a subclass of CachedFont
        cleans up the design.

        No new tests because there is no behavior change.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): There are two sections
        in this function; one for SVG fonts and one for regular fonts.
        I've moved these two sections into CachedFont and SVGCachedFont,
        thereby simplifying this function.
        (WebCore::CSSFontFaceSource::ensureFontData): Ditto.
        (WebCore::CSSFontFaceSource::svgFontFaceElement): Moved to header.
        (WebCore::CSSFontFaceSource::setSVGFontFaceElement): Ditto.
        (WebCore::CSSFontFaceSource::isSVGFontFaceSource): Ditto.
        * css/CSSFontFaceSource.h: Put functions that are simple enough to
        be inlined here.
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSVGFontTarget): Convenience
        function.
        (WebCore::CSSFontFaceSrcValue::cachedFont): Pass through a boolean
        from CSSFontSelector to CachedResourceHandle regarding if we should
        be using SVGCachedFont instead of CachedFont.
        * css/CSSFontFaceSrcValue.h: New convenience function.
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule): Pass through a boolean
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceType): Update for new
        CachedResource type
        (WebCore::cachedResourcesForFrame): Ditto.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData): Taken from
        CSSFontFaceSource::getFontData()
        (WebCore::CachedFont::getFontData): Ditto.
        (WebCore::CachedFont::platformDataFromCustomData): Ditto.
        (WebCore::CachedFont::ensureSVGFontData): Moved to SVGCachedFont.
        (WebCore::CachedFont::getSVGFontById): Ditto.
        * loader/cache/CachedFont.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType): Update for new enum
        type.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Takes new boolean.
        (WebCore::CachedResourceLoader::requestFont): Ditto.
        (WebCore::CachedResourceLoader::checkInsecureContent): Update for
        new enum type
        (WebCore::CachedResourceLoader::canRequest): Ditto.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGFont.cpp: Added.
        (WebCore::CachedSVGFont::CachedSVGFont): Moved from
        CSSFontFaceSource::getFontData() and CachedFont
        (WebCore::CachedSVGFont::getFontData): Ditto.
        (WebCore::CachedSVGFont::platformDataFromCustomData): Ditto.
        (WebCore::CachedSVGFont::ensureCustomFontData): Ditto.
        (WebCore::CachedSVGFont::getSVGFontById): Ditto.
        (WebCore::CachedSVGFont::firstFontFace): Ditto.
        * loader/cache/CachedSVGFont.h: Subclass CachedFont.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getStatistics): Update for new enum.
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::isSVGFontTarget): Convenience function.
        (WebCore::SVGFontFaceUriElement::loadFont): Update for new
        boolean.

2014-11-18  Myles C. Maxfield  <litherum@gmail.com>

        Use underlining metrics from the font file
        https://bugs.webkit.org/show_bug.cgi?id=138762

        Reviewed by Dave Hyatt.

        Test: platform/mac/fast/css3-text/css3-text-decoration/text-decoration-thickness.html

        * platform/graphics/FontMetrics.h: Adding variables for text decoration thickness and
        underline position.
        (WebCore::FontMetrics::FontMetrics):
        (WebCore::FontMetrics::decorationThickness):
        (WebCore::FontMetrics::setDecorationThickness):
        (WebCore::FontMetrics::underlinePosition):
        (WebCore::FontMetrics::setUnderlinePosition):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Initialize new FontMetrics members.
        * platform/graphics/ios/SimpleFontDataIOS.mm:
        (WebCore::SimpleFontData::platformInit): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): Ditto.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit): Ditto.
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit): Ditto.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration): Use FontMetrics data.
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset): Ditto.
        (WebCore::visualOverflowForDecorations): Ditto.
        * style/InlineTextBoxStyle.h:
        (WebCore::textDecorationStrokeThickness): Deleted.
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData): Initialize new FontMetrics members.

2014-11-17  David Hyatt  <hyatt@apple.com>

        Improve Ruby selection (getting rid of overlap and improving gap filling)
        https://bugs.webkit.org/show_bug.cgi?id=138250

        Reviewed by Dean Jackson.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::blockSelectionGaps):
        Add Ruby text in along with the Ruby base.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        Don't let block gaps get filled in here.

        * rendering/RenderRubyBase.h:
        Expose accessor to the ruby run.

        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::rubyRun):
        * rendering/RenderRubyText.h:
        Add accessor to the ruby run.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionBottom):
        Improve selectionTop and selectionBottom of ruby bases to avoid the
        ruby text. Improve the selectionTop and selectionBottom of ruby texts
        to fill the gap up to the previous/next line as appropriate.

2014-11-18  Shivakumar JM  <shiva.jm@samsung.com>

        crypto: Use sequence<> instead of KeyUsage[] in IDL.
        https://bugs.webkit.org/show_bug.cgi?id=138823

        Reviewed by Darin Adler.

        Use sequence<KeyUsage> instead of KeyUsage[] in crypto IDL as per spec: https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/
        Overview.html#SubtleCrypto-method-generateKey

        No new tests, no behavior change.

        * crypto/SubtleCrypto.idl:

2014-11-18  Philippe Normand  <pnormand@igalia.com>

        HRTFDatabaseLoader is not an absolute condition to run audioContext
        https://bugs.webkit.org/show_bug.cgi?id=138829

        Reviewed by Jer Noble.

        This patch is a port of the following Blink revision by
        <keonho07.kim@samsung.com>:
        <https://src.chromium.org/viewvc/blink?revision=167887&view=revision>

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::isRunnable): Deleted.
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::hrtfDatabaseLoader): Deleted.
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::render):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::initialize):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        * Modules/webaudio/RealtimeAnalyser.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):

2014-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176218.
        https://bugs.webkit.org/show_bug.cgi?id=138827

        seems to have caused regressions on the perf bots (Requested
        by lajava on #webkit).

        Reverted changeset:

        "[CSS Grid Layout] Upgrade align-self and align-items parsing
        to CSS 3"
        https://bugs.webkit.org/show_bug.cgi?id=133359
        http://trac.webkit.org/changeset/176218

2014-11-18  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Crash getting the orientation of a MenuListOption after the MenuList was removed from the document
        https://bugs.webkit.org/show_bug.cgi?id=138727

        Reviewed by Chris Fleizach.

        AccessibilityMenuListOption::elementRect() returns the value of the
        grandparent MenuList, asserting that the grandparent exists with that
        role. But it is possible to have an existing MenuListOption and remove
        the element which had been backing that MenuList from the document.
        Adding null checks prior to the assertions prevents our crashing if the
        parent or grandparent was removed.

        Test: platform/gtk/accessibility/combobox-descendants-orientation-crash.html

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::elementRect):

2014-11-17  Benjamin Poulain  <bpoulain@apple.com>

        Fix a small indentation mistake in SelectorCodeGenerator::generateNthFilterTest

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

2014-11-17  Benjamin Poulain  <benjamin@webkit.org>

        Fix two bad function names of HTMLFormControlElement
        https://bugs.webkit.org/show_bug.cgi?id=138790

        Reviewed by Andreas Kling.

        Darin suggested some name improvements in https://bugs.webkit.org/show_bug.cgi?id=138769

        * dom/CheckedRadioButtons.cpp:
        (WebCore::RadioButtonGroup::add):
        (WebCore::RadioButtonGroup::updateCheckedState):
        (WebCore::RadioButtonGroup::requiredAttributeChanged):
        (WebCore::RadioButtonGroup::remove):
        (WebCore::RadioButtonGroup::updateValidityForAllButtons):
        (WebCore::RadioButtonGroup::setNeedsValidityCheckForAllButtons): Deleted.
        * html/FileInputType.cpp:
        (WebCore::FileInputType::setFiles):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::computeWillValidate):
        (WebCore::HTMLButtonElement::recalcWillValidate): Deleted.
        * html/HTMLButtonElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::requiredAttributeChanged):
        (WebCore::HTMLFormControlElement::computeWillValidate):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        (WebCore::HTMLFormControlElement::updateValidity):
        (WebCore::HTMLFormControlElement::setCustomValidity):
        (WebCore::HTMLFormControlElement::recalcWillValidate): Deleted.
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck): Deleted.
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setValueInternal):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::computeWillValidate):
        (WebCore::HTMLInputElement::parseMaxLengthAttribute):
        (WebCore::HTMLInputElement::recalcWillValidate): Deleted.
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::optionSelectedByUser):
        (WebCore::HTMLSelectElement::listBoxSelectItem):
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::childrenChanged):
        (WebCore::HTMLSelectElement::optionElementChildrenChanged):
        (WebCore::HTMLSelectElement::setLength):
        (WebCore::HTMLSelectElement::selectAll):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        (WebCore::HTMLSelectElement::reset):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseAttribute):
        (WebCore::HTMLTextAreaElement::subtreeHasChanged):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):

2014-11-17  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add parsing for :role()
        https://bugs.webkit.org/show_bug.cgi?id=138310

        Reviewed by Benjamin Poulain.

        Add support for parsing :role() pseudo class. The implementation of selector
        matching will be in a follow-up patch.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSSelector.cpp:
        (WebCore::appendPseudoClassFunctionTail):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-11-17  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK1] Sometimes, missing tiles in -webkit-overflow-scrolling: touch in UIWebViews
        https://bugs.webkit.org/show_bug.cgi?id=138815
        rdar://problem/18746203

        Reviewed by Tim Horton.

        The scroll-velocity-related data members on FrameView, added in r168233, were uninitialized in UIWebViews,
        so FrameView::computeCoverageRect() could return garbage results, leading to too much or too little tile coverage.
        
        We still add additional coverage from the new inclusion of a margin area, but, for simplicity, leave that the same
        between WK1 and WK2 for now.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

2014-11-17  Chris Dumez  <cdumez@apple.com>

        Add initial layout testing coverage for timer throttling
        https://bugs.webkit.org/show_bug.cgi?id=138809

        Reviewed by Simon Fraser.

        Add isTimerThrottled() API to Internals so that we can add layout test
        coverage for timer throttling.

        Tests: fast/dom/nested-timer-invisible-element-throttling.html
               fast/dom/nested-timer-visible-element-throttling.html
               fast/dom/repeating-timer-invisible-element-throttling.html
               fast/dom/repeating-timer-visible-element-throttling.html

        * page/DOMTimer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isTimerThrottled):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-11-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Rename FlowContentIterator and move implementation to SimpleLineLayoutFlowContents.cpp
        https://bugs.webkit.org/show_bug.cgi?id=138799

        Reviewed by Antti Koivisto.

        This is in preparation to support multiple renderers.
        The FlowContents class will be used not just when we create runs, but also when we resolve them at painting time.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::nextFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::FlowContentIterator::FlowContentIterator): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextBreakablePosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextNonWhitespacePosition): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::textWidth): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::isNewlineCharacter): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::isEndOfContent): Deleted.
        (WebCore::SimpleLineLayout::FlowContentIterator::style): Deleted.
        (WebCore::SimpleLineLayout::computeLineLeft): Deleted.
        * rendering/SimpleLineLayoutFlowContents.cpp: Added.
        (WebCore::SimpleLineLayout::FlowContents::FlowContents):
        (WebCore::SimpleLineLayout::FlowContents::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContents::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContents::textWidth):
        * rendering/SimpleLineLayoutFlowContents.h: Added.
        (WebCore::SimpleLineLayout::FlowContents::Style::Style):
        (WebCore::SimpleLineLayout::FlowContents::style):
        (WebCore::SimpleLineLayout::FlowContents::isNewlineCharacter):
        (WebCore::SimpleLineLayout::FlowContents::isEndOfContent):

2014-11-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r176232.

        Broke the Mac build. Will investigate offline.

        Reverted changeset:

        "[iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions,
        MobileGestalt"
        https://bugs.webkit.org/show_bug.cgi?id=138802
        http://trac.webkit.org/changeset/176232

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Add SPI wrapper headers {Dispatch, DynamicLinker, IOPMLib, MachVM, NSPointerFunctions, MobileGestalt}SPI.h
        that forward declare applicable libdispatch, dyld, IOKit, mach, Foundation, MobileGestalt SPI
        and use these headers instead of the including private headers corresponding to these libraries/frameworks.

        * WebCore.xcodeproj/project.pbxproj: Add private headers MobileGestaltSPI.h and
        MachVMSPI.h, and project headers DynamicLinkerSPI.h, NSPointerFunctionsSPI.h,
        DispatchSPI.h and IOPMLibSPI.h. Also, sort files in Xcode project.
        * bindings/objc/DOMInternal.mm: Include header NSPointerFunctionsSPI.h.
        * bridge/objc/objc_instance.mm: Ditto; Also, sort #import directives.
        * platform/cocoa/DisplaySleepDisablerCocoa.cpp: Substitute header IOPMLibSPI.h
        for private header IOKit/pwr_mgt/IOPMLib.h.
        * platform/cocoa/MemoryPressureHandlerCocoa.mm: Substitute header DispatchSPI.h
        for private header dispatch/private.h.
        * platform/graphics/ios/FontServicesIOS.mm: Substitute header DynamicLinkerSPI.h
        for private header mach-o/dyld_priv.h.
        * platform/ios/PlatformScreenIOS.mm: Substitute header MobileGestaltSPI.h for
        private header MobileGestalt.h.
        * platform/spi/cocoa/DispatchSPI.h: Added.
        * platform/spi/cocoa/DynamicLinkerSPI.h: Added.
        * platform/spi/cocoa/IOPMLibSPI.h: Added.
        * platform/spi/cocoa/MachVMSPI.h: Added.
        * platform/spi/cocoa/NSPointerFunctionsSPI.h: Added.
        * platform/spi/ios/MobileGestaltSPI.h: Added.

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] CoreText and CoreUI SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138760

        Reviewed by David Kilzer.

        Add a SPI wrapper header CoreUISPI.h that forward declares CoreUI SPI
        and use this header instead of including private headers of CoreUI directly.

        Additionally, add more forward declarations for CoreText SPI.

        * WebCore.xcodeproj/project.pbxproj: Add project header CoreUISPI.h.
        * platform/graphics/ios/FontCacheIOS.mm: Include header CoreTextSPI.h instead
        of including CoreText headers directly.
        * platform/graphics/mac/FontMac.mm: Include header CoreUISPI.h instead
        of including CoreUI headers directly.
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: Remove unnecessary
        include of CoreText headers. These headers will be included by header
        CoreTextSPI.h (at the top of the file).
        * platform/graphics/mac/SimpleFontDataMac.mm: Remove forward declaration
        of CTFontDescriptorIsSystemUIFont() and include of header CTFontDescriptorPriv.h
        as this duplicates the logic in CoreTextSPI.h, which is included in this file.
        * platform/spi/cocoa/CoreTextSPI.h: Added more forward declarations. Simplified
        #include directives.
        * platform/spi/ios/CoreUISPI.h: Added.
        * rendering/RenderThemeIOS.mm: Move CoreUI externs from this file to file
        CoreUISPI.h and include header CoreUISPI.h.

2014-11-17  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Drop 16bit support temporarily.
        https://bugs.webkit.org/show_bug.cgi?id=138796

        Reviewed by Antti Koivisto.

        This is in preparation to multiple renderers support.
        It requires code refactoring on top of the coming multiple renderers codebase.
        (Not expecting any significant coverage shrinking.)

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContentIterator::textWidth):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::nextFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::create):

2014-11-17  Tim Horton  <timothy_horton@apple.com>

        DataDetectors PageOverlay callbacks can come in to the wrong overlay
        https://bugs.webkit.org/show_bug.cgi?id=138801
        <rdar://problem/18991369>

        Reviewed by Anders Carlsson.

        * page/PageOverlay.cpp:
        (WebCore::generatePageOverlayID):
        (WebCore::PageOverlay::PageOverlay):
        * page/PageOverlay.h:
        Give each PageOverlay a unique ID.

2014-11-17  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Upgrade align-self and align-items parsing to CSS 3
        https://bugs.webkit.org/show_bug.cgi?id=133359

        Reviewed by David Hyatt.

        Broaden justify-self's parsing name as a preparation of migrating
        align-self, align-items and justify-items to the CSS 3 Alignment syntax.

        The current naming was too tied to justify-self and needs to
        be broadened. This will reduce the follow-up implementations'
        patches.

        Upgrade align-self and align-items parsing to CSS 3

        This change migrates the 2 properties to the CSS 3 Alignment
        parsing. The new parsing is identical to how we parse
        'justify-self'. The 2 properties need to be migrated together
        as they are used in tandem in CSSComputedStyleDeclaration.

        This change also removes EAlignItems as it is now unused.

        Tests: css3/parse-align-items.html
               css3/parse-align-self.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForItemPositionWithOverflowAlignment): Added. Builds the CSSValue for the for the alignment properties.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isKeywordPropertyID): Removed align-items and align-self from the list.
        (WebCore::isValidKeywordPropertyAndValue): Removed align-items and align-self from the list.
        (WebCore::CSSParser::parseValue): Added align-items and align-self to the list and call to the generic parsing fuction for the alignment properties.
        (WebCore::isBaselinePositionKeyword): Utility function added to identify Baseline keyword values.
        (WebCore::CSSParser::parseItemPositionOverflowPosition): Generic parsing fuction for the alignment properties.
        (WebCore::CSSParser::parseJustifySelf): Deleted.
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Refactoring some mapping functions.
       (WebCore::CSSPrimitiveValue::operator ItemPosition): Added. Replace the old EAlignItems enumeration.
        (WebCore::CSSPrimitiveValue::operator OverflowAlignment): Added.
        (WebCore::CSSPrimitiveValue::operator EAlignItems): Deleted.
        (WebCore::CSSPrimitiveValue::operator EJustifySelf): Deleted.
        (WebCore::CSSPrimitiveValue::operator EJustifySelfOverflowAlignment): Deleted.
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Added a new adjustment to resolve the "auto" vale on the alignment properties.
        (WebCore::StyleResolver::adjustStyleForAlignment): Added. Function to resolve the "auto" vale on the alignment properties. 
        (WebCore::StyleResolver::applyProperty):
        (WebCore::isDisplayFlexibleBox): Deleted. Moved to the RenderStyle.
        (WebCore::isDisplayGridBox): Deleted. Moved to the RenderStyle.
        (WebCore::isDisplayFlexibleOrGridBox): Deleted. Moved to the RenderStyle.
        * css/StyleResolver.h:
        * rendering/RenderBox.cpp:
        (WebCore::flexItemHasStretchAlignment): Adapted to the new ItemPosition enum.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::firstLineBaseline): Adapted to the new ItemPosition enum.
        (WebCore::resolveAlignment): Consider also that align-items could be "auto", since it's the default now.
        (WebCore::RenderFlexibleBox::styleDidChange): Adapted to the new ItemPosition enum.
        (WebCore::RenderFlexibleBox::alignmentForChild): Adapted to the new ItemPosition enum.
        (WebCore::RenderFlexibleBox::needToStretchChild): Adapted to the new ItemPosition enum.
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren): Adapted to the new ItemPosition enum.
        (WebCore::RenderFlexibleBox::alignChildren): Adapted to the new ItemPosition enum.
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle): Adapted to the new ItemPosition enum.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle): Adapted to the new ItemPosition enum.
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::updateStyle): Adapted to the new ItemPosition enum.
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::fixAnonymousStyleForSubSupPair): Adapted to the new ItemPosition enum.
        (WebCore::RenderMathMLScripts::fixAnonymousStyles): Adapted to the new ItemPosition enum.
        * rendering/style/RenderStyle.h: Adapted to the new ItemPosition enum.
        * rendering/style/RenderStyleConstants.h: Adapted to the new ItemPosition enum.
        * rendering/style/StyleRareNonInheritedData.cpp: Adapted to the new ItemPosition enum.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Adapted to the new ItemPosition enum.
        (WebCore::StyleRareNonInheritedData::operator==): Adapted to the new ItemPosition enum.
        * rendering/style/StyleRareNonInheritedData.h: Adapted to the new ItemPosition enum.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange): Changes in the alignItems property will cause a Detach.

2014-11-17  Shivakumar JM  <shiva.jm@samsung.com>

        Attribute text in HTMLAnchorElement should behave as per specification.
        https://bugs.webkit.org/show_bug.cgi?id=138557

        Reviewed by Darin Adler.

        attribute text in HTMLAnchorElement should not be readonly as per specification
        http://www.w3.org/TR/html/text-level-semantics.html#dom-a-text. It should behave as textContent attribute. 
        Also This matches the behavior of Chrome 38 and FireFox.

        Test: fast/dom/HTMLAnchorElement/anchor-text-attribute.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::text):
        (WebCore::HTMLAnchorElement::setText):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:

2014-11-17  Chris Dumez  <cdumez@apple.com>

        Throttle timers that change the style of elements outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=138292

        Reviewed by Antti Koivisto.

        Throttle timers that change the style of elements outside the viewport
        to 1 second, similarly to what was already done for timers interacting
        with non user observable plugins. To be conservative, we don't throttle
        timers that also cause DOM Tree modifications (e.g. adding/removing
        nodes, modify element attributes).

        On huffingtonpost.com, the CPU usage is at ~17% when the top scrolling
        banner is inside the viewport on my machine. Without this patch, CPU
        usage would stay ~17% when the banner is outside the viewport. Thanks
        to timer throttling, CPU usage now goes down to ~1.5%, without user
        observable side effects. The timers get unthrottled when they are
        inside the viewport again (i.e. due to scrolling or layout).

        On espn.com, the CPU usage goes down from ~7% at the top of the page
        to ~1% when scrolling to the bottom of the page. On ebay.com, CPU
        usage goes down from ~25% at the top of the page to less than 1% when
        scrolling to the bottom of the page.

2014-11-17  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error, CoreGraphics header file included.
        https://bugs.webkit.org/show_bug.cgi?id=138795

        Reviewed by Brent Fulgham.

        CoreGraphics is not available on WinCairo.

        * platform/graphics/win/FontCacheWin.cpp:

2014-11-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176169.
        https://bugs.webkit.org/show_bug.cgi?id=138797

        Appears to have broken svg/custom/anchor-on-use.svg (Requested
        by ap on #webkit).

        Reverted changeset:

        "Attribute text in HTMLAnchorElement should behave as per
        specification."
        https://bugs.webkit.org/show_bug.cgi?id=138557
        http://trac.webkit.org/changeset/176169

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] AVKit and MediaPlayer SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138756

        Reviewed by Eric Carlson.

        Add a SPI wrapper headers {AVKit, MPAVRoutingController}SPI.h that forward declares
        AVKit and MPAVRoutingController SPI, respectively, and use these header instead of
        including private headers of AVKit and MediaPlayer directly.

        * WebCore.xcodeproj/project.pbxproj: Add project and private header AVKitSPI.h
        and MPAVRoutingControllerSPI.h, respectively.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Include header MPAVRoutingControllerSPI.h
        instead of including the private header MPAVRoutingController.h.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Include header AVKitSPI.h
        instead of including AVKit headers directly.

2014-11-17  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mac build after <https://trac.webkit.org/changeset/176204>
        (https://bugs.webkit.org/show_bug.cgi?id=138751)

        Move declaration of CAContext to be before the declaration of CALayer since
        the latter depends on the former.

        * platform/spi/cocoa/QuartzCoreSPI.h:

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] QuartzCore SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138751

        Reviewed by David Kilzer.

        Add a SPI wrapper header called QuartzCoreSPI.h that forward declares
        QuartzCore SPI and use this header instead of including private headers
        of QuartzCore directly.

        * WebCore.xcodeproj/project.pbxproj: Added private header QuartzCoreSPI.h.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.h: Removed; incorporated its
        functionality into QuartzCoreSPI.h.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm: Substitute header
        QuartzCoreSPI.h for PlatformCAFiltersMac.h as the content of the latter
        was incorporated into the former.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Move CALayer and CATiledLayer
        forward declarations from this file to file QuartzCoreSPI.h and include
        header QuartzCoreSPI.h instead of including CATiledLayerPrivate.h directly. Also
        remove header PlatformCAFiltersMac.h as its content is incorporated into QuartzCoreSPI.h
        * platform/ios/LegacyTileCache.mm: Include headers CoreGraphicsSPI.h and QuartzCoreSPI.h
        instead of including QuartzCore headers directly.
        * platform/ios/LegacyTileGrid.mm: Include header QuartzCoreSPI.h instead
        of including QuartzCore headers directly. Also sort the list of #include directives.
        * platform/ios/LegacyTileGridTile.mm: Include header QuartzCoreSPI.h
        instead of including QuartzCore headers directly.
        * platform/spi/cocoa/QuartzCoreSPI.h: Added.

2014-11-17  Chris Dumez  <cdumez@apple.com>

        Move more CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138766

        Reviewed by Darin Adler.

        Move more CSS properties from DeprecatedStyleBuilder to the new
        StyleBuilder:
        line-height
        word-spacing
        -webkit-marquee-repetition
        -webkit-text-underline-position

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::csstoLengthConversionDataWithTextZoomFactor): Deleted.
        (WebCore::ApplyPropertyMarqueeRepetition::applyValue): Deleted.
        (WebCore::ApplyPropertyMarqueeRepetition::createHandler): Deleted.
        (WebCore::ApplyPropertyTextUnderlinePosition::applyValue): Deleted.
        (WebCore::ApplyPropertyTextUnderlinePosition::createHandler): Deleted.
        (WebCore::ApplyPropertyLineHeight::applyValue): Deleted.
        (WebCore::ApplyPropertyLineHeight::createHandler): Deleted.
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue): Deleted.
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::createHandler): Deleted.
        (WebCore::ApplyPropertyWordSpacing::applyValue): Deleted.
        (WebCore::ApplyPropertyWordSpacing::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertMarqueeRepetition):
        (WebCore::StyleBuilderConverter::convertTextUnderlinePosition):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::csstoLengthConversionDataWithTextZoomFactor):
        (WebCore::StyleBuilderFunctions::convertLineHeight):
        (WebCore::StyleBuilderFunctions::applyValueWordSpacing):
        (WebCore::StyleBuilderFunctions::applyInheritLineHeight):
        (WebCore::StyleBuilderFunctions::applyInitialLineHeight):
        (WebCore::StyleBuilderFunctions::applyValueLineHeight):

2014-11-16  Andreas Kling  <akling@apple.com>

        Avoid synchronous style recalc when mutating a Node inside FrameSelection.
        <https://webkit.org/b/138791>

        Reviewed by Antti Koivisto.

        We can safely clear the RenderView's selection without doing a synchronous
        style recalc first.

        This is a small progression on Speedometer locally.

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::nodeWillBeRemoved):
        (WebCore::FrameSelection::respondToNodeModification):
        (WebCore::clearRenderViewSelection): Deleted.

            Merged clearRenderViewSelection() into the call sites and removed
            the now-unnecessary protection of the Document.

2014-11-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow host application to opt-out of alternate fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=138787

        Reviewed by Darin Adler.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::optimizedFullscreenSupported): Check mediaSession().allowsAlternateFullscreen.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreenOptimized): Do nothing if
            mediaSession().allowsAlternateFullscreen says it isn't allowed.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::allowsAlternateFullscreen): New, check settings.
        * html/HTMLMediaSession.h:

        * page/Settings.cpp: Add allowsAlternateFullscreen.
        * page/Settings.in: Ditto.

2014-11-16  Zan Dobersek  <zdobersek@igalia.com>

        Replace RenderSVGResource::cast<T>() with downcast<T>()
        https://bugs.webkit.org/show_bug.cgi?id=138290

        Reviewed by Chris Dumez.

        Add type traits for the RenderSVGResource hierarchy. This enables
        using the typecasting framework in getRenderSVGResourceById() that
        in return renders the RenderSVGResource::cast<>() template and all
        the static s_resourceType member variables in the hierarchy removable.

        * WebCore.order:
        * rendering/svg/RenderSVGResource.h:
        (WebCore::RenderSVGResource::cast): Deleted.
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        (WebCore::getRenderSVGResourceById):
        * rendering/svg/RenderSVGResourceFilter.h:
        (isType):
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:

2014-11-16  Benjamin Poulain  <benjamin@webkit.org>

        Implement :valid and :invalid matching for the fieldset element
        https://bugs.webkit.org/show_bug.cgi?id=138769

        Reviewed by Darin Adler.

        In the latest HTML spec, the pseudo classes :valid and :invalid match
        a fieldset element based on its descendants:
            https://html.spec.whatwg.org/#selector-valid
            https://html.spec.whatwg.org/#selector-invalid

        This patch adds that behavior.

        There are two key problems to solve with these pseudo classes on fieldset:
        -Efficient matching.
        -Style invalidation when any of the descendant changes.

        To implement the style invalidation, I have modified HTMLFormControlElement
        to notify its ancestor when its state changes.

        The first change is making the state fully internal to HTMLFormControlElement,
        we do not want subclass to be able to change the behavior and forget to update
        the ancestors.

        To achieve that encapsulation, the interface was changed a bit:
        -Neither willValidate() nor isValidFormControlElement() inherit from Element.
         Instead, willValidate() is the implementation of FormAssociatedElement's interface
         and it is final. The method isValidFormControlElement() becomes completely internal
         to HTMLFormControlElement.
        -Since willValidate() should no longer be re-implemented by subclass, the elements
         that were depending on it have been migrated to recalcWillValidate() to set
         the initial state as needed.

        With the validity state fully encapsulated in HTMLFormControlElement, all I need
        is a way to communicate that information to HTMLFieldSetElement ancestors.
        This is done in two cases:
        -The validity state changes.
        -The tree changes in a way that would make the input element not a descendant
         of a HTMLFieldSetElement.

        The invalidation is simply done by walking up the ancestors and adding the current
        element to a "validity dependency list" on each HTMLFieldSetElement.

        Tests: fast/css/pseudo-invalid-fieldset-invalidation-optimization.html
               fast/css/pseudo-invalid-fieldset-style-sharing.html
               fast/css/pseudo-invalid-fieldset.html
               fast/css/pseudo-valid-fieldset-invalidation-optimization.html
               fast/css/pseudo-valid-fieldset-style-sharing.html
               fast/css/pseudo-valid-fieldset.html
               fast/selectors/invalid-fieldset-style-update-1.html
               fast/selectors/invalid-fieldset-style-update-2.html
               fast/selectors/invalid-fieldset-style-update-3.html
               fast/selectors/invalid-fieldset-style-update-4.html
               fast/selectors/invalid-fieldset-style-update-5.html
               fast/selectors/valid-fieldset-style-update-1.html
               fast/selectors/valid-fieldset-style-update-2.html
               fast/selectors/valid-fieldset-style-update-3.html
               fast/selectors/valid-fieldset-style-update-4.html
               fast/selectors/valid-fieldset-style-update-5.html

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isInRange):
        (WebCore::isOutOfRange):
        (WebCore::isInvalid):
        (WebCore::isValid):
        The hack "ContainsValidityStyleRules" is in the way of correct styling
        of FieldSet and Form.
        It is not the right way to get stylesheet properties anyway.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithControl):
        Make sure style sharing does not incorrectly share style for fieldset elements.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::containsValidityStyleRules): Deleted.
        (WebCore::Document::setContainsValidityStyleRules): Deleted.
        * dom/Element.h:
        (WebCore::Element::matchesValidPseudoClass):
        (WebCore::Element::matchesInvalidPseudoClass):
        (WebCore::Element::willValidate): Deleted.
        (WebCore::Element::isValidFormControlElement): Deleted.
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::customError):
        * html/FormAssociatedElement.h:

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::matchesValidPseudoClass):
        (WebCore::HTMLFieldSetElement::matchesInvalidPseudoClass):
        (WebCore::HTMLFieldSetElement::addInvalidDescendant):
        (WebCore::HTMLFieldSetElement::removeInvalidDescendant):
        Each HTMLFormControlElement that has constraint validation adds or removes
        itself from its HTMLFieldSetElement ancestors.

        It should be possible to just keep track of a count instead of a HashSet.
        I decided to got with the HashSet to make the code more robust and easier
        to debug. A few assertions ensure that the HashSet is actually used as a counter.

        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::addInvalidElementToAncestorFromInsertionPoint):
        (WebCore::removeInvalidElementToAncestorFromInsertionPoint):

        (WebCore::HTMLFormControlElement::insertedInto):
        (WebCore::HTMLFormControlElement::removedFrom):
        One tricky part of those two functions is that we cannot use
        matchesValidPseudoClass() or matchesInvalidPseudoClass().

        The reason is that HTMLFieldSetElement is a subclass of HTMLFormControlElement
        and it has its own definition of what Valid and Invalid mean when matching selectors.

        In HTMLFormControlElement, we must use the internal state,
        willValidate() and isValidFormControlElement() must be used directly.

        (WebCore::HTMLFormControlElement::matchesValidPseudoClass):
        (WebCore::HTMLFormControlElement::matchesInvalidPseudoClass):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::addInvalidElementToAncestors):
        (WebCore::removeInvalidElementFromAncestors):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
        (WebCore::HTMLFormControlElement::isValidFormControlElement): Deleted.
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOutputElement.h:

2014-11-16  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Add typecasting support for GraphicsLayerTextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=138741

        Reviewed by Martin Robinson.

        Add type traits for the GraphicsLayerTextureMapper class.
        This enables using typecasting functions instead of
        toGraphicsLayerTextureMapper().

        Remove toTextureMapperLayer() casting function which actually
        returned the TextureMapperLayer object that belonged to the
        passed-in GraphicsLayerTextureMapper. Instead, the GraphicsLayer
        object is now downcasted and the TextureMapperLayer is accessed
        by calling the GraphicsLayerTextureMapper::layer() method.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isGraphicsLayerTextureMapper):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::toTextureMapperLayerVector):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::toTextureMapperLayer): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::toGraphicsLayerTextureMapper): Deleted.

2014-11-16  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/loader to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=138646

        Reviewed by Chris Dumez.

        Replace OwnPtr with std::unique_ptr<> and std::make_unique<>.
        However this patch leaves ResourceRequest::adopt() because this need
        to be handled by different patch.

        No new tests, no behavior changes.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        * loader/DocumentThreadableLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::notifyDone):
        * loader/SubresourceLoader.h:
        * loader/TextTrackLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestPreload):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::printPreloadStats):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::deleteAllPreparedStatements):
        (WebCore::readySQLiteStatement):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconRecord.h:

2014-11-16  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'order' CSS property to a calculated value
        https://bugs.webkit.org/show_bug.cgi?id=138780

        Reviewed by Darin Adler.

        CSS Calculated values were not handled by the CSS parser for 'order'
        CSS property. As a result, using calculated values wouldn't work in
        release builds and would hit an assertion in debug builds.

        This patch updates the CSS parser to directly convert the
        CSS Calculated value into a simple integer CSSPrimitiveValue for
        'order' property. We could have marked CSS Calculated values as
        valid in the CSS Parser instead but this would have brought issues:
        - The calculated value needs to be adjusted to INT_MIN + 2 if it is less
          than that. This would force us to calculate the expression anyway.
        - The StyleBuilder would need updating to properly handle CSS Calculated
          values for 'order'.

        Test: fast/css/order-calculated-value.html

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

2014-11-16  Chris Dumez  <cdumez@apple.com>

        Assertion hit when setting a very large value to 'border-width' / 'font-size' CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=138770

        Reviewed by Darin Adler.

        When setting a very large value to a CSS property, it is represented internally as
        infinity. r166114 already tried to deal with this by adding an std::isinf() check
        in CSSValuePool::createValue() and returning an identifier CSSPrimitiveValue with
        CSSValueInvalid value in such case. The issue is that doing leads to the
        StyleBuilder getting a CSSValueInvalid CSSPrimitive value as input, which is not
        handled and leads to assertions.

        This patch updates the CSSParser to detect cases where the double value is
        infinity earlier (in CSSParser::validUnit() and parseSimpleLengthValue()), so
        that we mark the value as invalid and actually drop it. As a result,
        CSSPrimitiveValues with CSSValueInvalid value no longer make their way to the
        StyleBuilder.

        Test: fast/css/style-builder-infinite-value.html
              fast/css/infinite-floating-value.html

        * css/CSSParser.cpp:
        (WebCore::parseSimpleLengthValue):
        (WebCore::CSSParser::validUnit):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createValue):

2014-11-16  Shivakumar JM  <shiva.jm@samsung.com>

        Attribute text in HTMLAnchorElement should behave as per specification.
        https://bugs.webkit.org/show_bug.cgi?id=138557

        Reviewed by Darin Adler.

        attribute text in HTMLAnchorElement should not be readonly as per specification
        http://www.w3.org/TR/html/text-level-semantics.html#dom-a-text. It should behave as textContent attribute. 
        Also This matches the behavior of Chrome 38 and FireFox.

        Test: fast/dom/HTMLAnchorElement/anchor-text-attribute.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::text):
        (WebCore::HTMLAnchorElement::setText):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:

2014-11-16  Chris Dumez  <cdumez@apple.com>

        Move 'vertical-align' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138764

        Reviewed by Darin Adler.

        Move 'vertical-align' CSS property from DeprecatedStyleBuilder to the
        new StyleBuilder by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyVerticalAlign::applyValue): Deleted.
        (WebCore::ApplyPropertyVerticalAlign::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueVerticalAlign):

2014-11-16  Tim Horton  <timothy_horton@apple.com>

        Use TextIndicator instead of the built in Lookup highlight
        https://bugs.webkit.org/show_bug.cgi?id=138775
        <rdar://problem/18953982>

        Follow-up to r176164.

        * platform/spi/mac/LookupSPI.h:
        (WebCore::canDisableLookupIndicator): Deleted.
        Remove canDisableLookupIndicator.

2014-11-16  Chris Dumez  <cdumez@apple.com>

        Crash when setting '-webkit-line-clamp' CSS property to a calculated value
        https://bugs.webkit.org/show_bug.cgi?id=138777

        Reviewed by Benjamin Poulain.

        CSS Calculated values were not handled when converting a CSSPrimitiveValue
        to a LineClampValue. As a result, we would hit an ASSERT_NOT_REACHED()
        assertion. To address this issue, this patch updates the code to use
        primitiveType() / getValue<>() instead of m_primitiveUnitType /
        m_value.num, as those getter function properly handle CSS Calculated
        values.

        Test: fast/css/webkit-line-clamp-calculated-value.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator LineClampValue):

2014-11-16  Tim Horton  <timothy_horton@apple.com>

        Use TextIndicator instead of the built in Lookup highlight
        https://bugs.webkit.org/show_bug.cgi?id=138775
        <rdar://problem/18953982>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Remove a WKSI import/export that we don't need anymore.
        
        * platform/spi/mac/LookupSPI.h: Added.
        (WebCore::canDisableLookupIndicator):
        Add Lookup SPI header.
        Add a 'canDisableLookupIndicator', which must be called in any translation
        unit that wants to use either of the soft-linked constants related to
        that functionality, before calling the get* function.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/mac/DictionaryLookup.mm:
        (WebCore::rangeForDictionaryLookupForSelection):
        (WebCore::rangeForDictionaryLookupAtHitTestResult):
        Adopt the Lookup SPI header.

2014-11-16  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] REGRESSION(r166288): Accessible values are no longer accessible via AT-SPI2
        https://bugs.webkit.org/show_bug.cgi?id=138776

        Reviewed by Chris Fleizach.

        r166288 used #if...#else instead of #if...#endif, thus disabling the old
        AtkValue support. Unfortunately AT-SPI2 doesn't yet have support for the
        new AtkValue API. Thus r166288 broke access to value-holding elements for
        AT-SPI2 assistive technologies. Replacing #else with #endif fixes things.

        No new tests because catching this regression would require AT-SPI2.

        * accessibility/atk/WebKitAccessibleInterfaceValue.cpp:
        (webkitAccessibleValueGetMinimumIncrement):
        (webkitAccessibleValueInterfaceInit):

2014-11-16  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose the blockquote element using ATK_ROLE_BLOCK_QUOTE
        https://bugs.webkit.org/show_bug.cgi?id=138771

        Reviewed by Chris Fleizach.

        Add BlockquoteRole and assigns it to blockquote elements. Make
        corresponding changes to platform role mappings: ATK_ROLE_BLOCK_QUOTE
        for GTK and EFL; AXGroup (which was being used already) for the Mac.

        No new tests are required. Instead, updated the existing expectations
        to reflect the new mapping.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isBlockquote):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2014-11-16  Chris Dumez  <cdumez@apple.com>

        Crash when setting 'alt' CSS property to inherit or initial
        https://bugs.webkit.org/show_bug.cgi?id=138774
        <rdar://problem/18995409>

        Reviewed by Chris Fleizach.

        The StyleResolver was not handling 'inherit' or 'initial' values for
        'alt' CSS property. As a result, the code was assuming the CSSValue
        was a CSSPrimitiveValue (although it could be a CSSInitialValue or
        a CSSInheritValue). In such case, the code would dereference a null
        pointer because primitiveValue is initialized using:
        CSSPrimitiveValue* primitiveValue = is<CSSPrimitiveValue>(*value)
            ? downcast<CSSPrimitiveValue>(value)
            : nullptr;

        Test: fast/css/alt-inherit-initial.html

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

2014-11-15  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Lists with selectable children should have ATK_ROLE_LIST_BOX
        https://bugs.webkit.org/show_bug.cgi?id=127060

        Reviewed by Chris Fleizach.

        Corrected the mapping from ATK_ROLE_LIST to ATK_ROLE_LIST_BOX.

        No new tests. Instead, updated the expectations of roles-exposed.html to
        reflect the corrected mapping.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2014-11-15  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Video and audio elements should be exposed using ATK's video and audio roles.
        https://bugs.webkit.org/show_bug.cgi?id=138767

        Reviewed by Chris Fleizach.

        Map AudioRole and VideoRole to ATK_ROLE_AUDIO and ATK_ROLE_VIDEO
        respectively, falling back on the existing mapping to ATK_ROLE_EMBEDDED
        in environments which have an older version of ATK.

        No new tests are required. Instead, existing expectations were updated
        to reflect the new mapping.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2014-11-15  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Expose the footer element as ATK_ROLE_FOOTER
        https://bugs.webkit.org/show_bug.cgi?id=138773

        Reviewed by Chris Fleizach.

        Map FooterRole to ATK_ROLE_FOOTER.

        No new tests. Unskipped a test that verifies this mapping.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2014-11-14  Dean Jackson  <dino@apple.com>

        Rename WebKitCSSKeyframe(s)Rule into CSSKeyframe(s)Rule
        https://bugs.webkit.org/show_bug.cgi?id=138763
        <rdar://problem/18991569>

        Reviewed by Simon Fraser.

        Globally rename WebKitCSSKeyframeRule and WebKitCSSKeyframesRule to
        CSSKeyframeRule and CSSKeyframesRule respectively.

        This *may* break some existing content, but is compatible with
        what Blink and Firefox are doing. To minimize breakage, I kept an
        alias for the old constant values on CSSRule: WEBKIT_KEYFRAMES_RULE
        and WEBKIT_KEYFRAME_RULE.

        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSGrammar.y.includes:
        * css/CSSKeyframeRule.cpp: Renamed from Source/WebCore/css/WebKitCSSKeyframeRule.cpp.
        (WebCore::StyleKeyframe::StyleKeyframe):
        (WebCore::StyleKeyframe::~StyleKeyframe):
        (WebCore::StyleKeyframe::mutableProperties):
        (WebCore::StyleKeyframe::parseKeyString):
        (WebCore::StyleKeyframe::cssText):
        (WebCore::CSSKeyframeRule::CSSKeyframeRule):
        (WebCore::CSSKeyframeRule::~CSSKeyframeRule):
        (WebCore::CSSKeyframeRule::style):
        (WebCore::CSSKeyframeRule::reattach):
        * css/CSSKeyframeRule.h: Renamed from Source/WebCore/css/WebKitCSSKeyframeRule.h.
        (WebCore::StyleKeyframe::create):
        (WebCore::StyleKeyframe::keyText):
        (WebCore::StyleKeyframe::setKeyText):
        (WebCore::StyleKeyframe::getKeys):
        (WebCore::StyleKeyframe::properties):
        * css/CSSKeyframeRule.idl: Renamed from Source/WebCore/css/WebKitCSSKeyframeRule.idl.
        * css/CSSKeyframesRule.cpp: Renamed from Source/WebCore/css/WebKitCSSKeyframesRule.cpp.
        (WebCore::StyleRuleKeyframes::StyleRuleKeyframes):
        (WebCore::StyleRuleKeyframes::~StyleRuleKeyframes):
        (WebCore::StyleRuleKeyframes::parserAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperAppendKeyframe):
        (WebCore::StyleRuleKeyframes::wrapperRemoveKeyframe):
        (WebCore::StyleRuleKeyframes::findKeyframeIndex):
        (WebCore::CSSKeyframesRule::CSSKeyframesRule):
        (WebCore::CSSKeyframesRule::~CSSKeyframesRule):
        (WebCore::CSSKeyframesRule::setName):
        (WebCore::CSSKeyframesRule::appendRule):
        (WebCore::CSSKeyframesRule::insertRule):
        (WebCore::CSSKeyframesRule::deleteRule):
        (WebCore::CSSKeyframesRule::findRule):
        (WebCore::CSSKeyframesRule::cssText):
        (WebCore::CSSKeyframesRule::length):
        (WebCore::CSSKeyframesRule::item):
        (WebCore::CSSKeyframesRule::cssRules):
        (WebCore::CSSKeyframesRule::reattach):
        * css/CSSKeyframesRule.h: Renamed from Source/WebCore/css/WebKitCSSKeyframesRule.h.
        (WebCore::StyleRuleKeyframes::create):
        (WebCore::StyleRuleKeyframes::keyframes):
        (WebCore::StyleRuleKeyframes::name):
        (WebCore::StyleRuleKeyframes::setName):
        (WebCore::StyleRuleKeyframes::copy):
        * css/CSSKeyframesRule.idl: Renamed from Source/WebCore/css/WebKitCSSKeyframesRule.idl.
        * css/CSSParser.cpp:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSStyleSheet.cpp:
        * css/RuleSet.cpp:
        * css/StyleResolver.cpp:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):

2014-11-15  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r176137): iOS build broke after moving DataDetectors scanning code to WebCore

        This regressed with the following commit:

            Move DataDetectors scanning code to WebCore
            https://bugs.webkit.org/show_bug.cgi?id=138731
            <rdar://problem/18877535>

        This fixes the following build failures:

            In file included from WebCore/editing/mac/DataDetection.mm:29:
            WebCore/platform/spi/mac/DataDetectorsSPI.h:66:11: error: unknown type name 'NSRect'
            @property NSRect highlightFrame;
                      ^
            WebCore/editing/mac/DataDetection.mm:42:28: error: use of undeclared identifier 'DataDetection'
            RetainPtr<DDActionContext> DataDetection::detectItemAroundHitTestResult(const HitTestResult& hitTestResult, FloatRect& detectedDataBoundingBox, RefPtr<Range>& detectedDataRange)
                                       ^
            2 errors generated.

        * WebCore.exp.in:
        (DataDetection::detectItemAroundHitTestResult): Move symbol from
        shared section to Mac-only section.
        * editing/mac/DataDetection.mm: Add PLATFORM(MAC) check around
        the entire implementation since it it unused on iOS.
        * platform/spi/mac/DataDetectorsSPI.h: Expand PLATFORM(MAC)
        check around DDActionContext class declarations.

2014-11-14  Benjamin Poulain  <benjamin@webkit.org>

        Compute the selector specificity as we match simple selectors
        https://bugs.webkit.org/show_bug.cgi?id=138718

        Reviewed by Andreas Kling.

        This is an other tiny step toward dynamic specificity. Instead of computing
        the entire specificity at the end, compute it dynamically as we are matching
        each individual simple selector.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::simpleSelectorSpecificity):
        (WebCore::CSSSelector::addSpecificities):
        (WebCore::CSSSelector::specificityForPage):
        (WebCore::CSSSelector::specificityForOneSelector): Deleted.
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matchSelectorList):
        * css/SelectorChecker.h:

2014-11-14  Andreas Kling  <akling@apple.com>

        [mac] Only images that are actually purgeable should be advertised as such.
        <https://webkit.org/b/138759>
        <rdar://problem/13205438>

        Reviewed by Tim Horton.

        Instead of saying that all images on >=Yosemite are purgeable, have BitmapImage
        forward the question to CGImage for the correct answer.

        The memory may be marked non-volatile by frameworks underneath WebKit at any
        given time, but that's not something we need to worry about.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::decodedDataIsPurgeable):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/spi/cg/CoreGraphicsSPI.h:

2014-11-14  Zalan Bujtas  <zalan@apple.com>

        Remove computeTextPaintStyle's RenderText dependency.
        https://bugs.webkit.org/show_bug.cgi?id=138754

        Reviewed by Simon Fraser.

        So that we can compute text paint style across renderers in simple line layout.

        No change in functionality.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/TextPaintStyle.h:

2014-11-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Get rid of WebFontCache
        https://bugs.webkit.org/show_bug.cgi?id=134752

        Reviewed by Dave Hyatt.

        No new tests because there is no behavior change.

        * Configurations/WebCore.xcconfig:
        * PlatformMac.cmake:
        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::acceptableChoice):
        (WebCore::betterChoice):
        (WebCore::toTraitsMask):
        (WebCore::desiredFamilyToAvailableFamilyDictionary):
        (WebCore::rememberDesiredFamilyToAvailableFamilyMapping):
        (WebCore::fontWithFamily):
        (WebCore::invalidateFontCache):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.h: Removed.
        * platform/mac/WebFontCache.mm: Removed.

2014-11-14  Daniel Bates  <dabates@apple.com>

        [iOS] NSFileManager and QuickLook SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138742

        Reviewed by Pratik Solanki.

        Add a SPI wrapper headers {NSFileManager, QuickLook}SPI.h that forward declares
        NSFileManager and QuickLook SPI, respectively, and use these header instead of
        including private headers of Foundation and QuickLook directly.

        * WebCore.xcodeproj/project.pbxproj: Add project and private header QuickLookSPI.h
        and NSFileManagerSPI.h, respectively.
        * platform/network/ios/QuickLook.mm: Include headers QuickLookSPI.h and NSFileManagerSPI.h
        instead of including headers of QuickLook and Foundation directly. 
        * platform/spi/cocoa/NSFileManagerSPI.h: Added.
        * platform/spi/ios/QuickLookSPI.h: Added.

2014-11-14  Daniel Bates  <dabates@apple.com>

        [iOS] CoreGraphics SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138709

        Reviewed by David Kilzer.

        Add a SPI wrapper header called CoreGraphicsSPI.h that forward declares
        CoreGraphics SPI and use this header instead of including private headers
        of CoreGraphics directly.

        * WebCore.xcodeproj/project.pbxproj: Add WebCore private header CoreGraphicsSPI.h. Also remove header
        CGFontUnicodeSupportSPI.h as its functionality has been incorporated into header CoreGraphicsSPI.h.
        * WebCore.vcxproj/WebCore.vcxproj: Add WebCore private header CoreGraphicsSPI.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Add directories platform/spi and platform/spi/cg.
        * WebCore.vcxproj/WebCoreCG.props: Add include directory platform/spi/cg.
        * WebCore.vcxproj/copyForwardingHeaders.cmd: Copy WebCore headers from directory platform/spi/cg. This
        is necessary because WebCore/platform/graphics/SimpleFontData.h includes CoreGraphicsSPI.h. And
        WebCore/platform/graphics/SimpleFontData.h is compiled for the Apple Windows port.
        * platform/graphics/SimpleFontData.h: Move CGFontRenderingStyle declaration and associated enum
        from this file to file CoreGraphicsSPI.h and include header CoreGraphicsSPI.h. 
        * platform/graphics/cg/BitmapImageCG.cpp: Remove unnecessary #include of header CGContextPrivate.h.
        * platform/graphics/cg/ColorCG.cpp: Include header CoreGraphicsSPI.h instead of including headers
        of CoreGraphics directly.
        * platform/graphics/cg/GraphicsContextCG.cpp: Move forward declarations of CoreGraphics functions
        from this file to file CoreGraphicsSPI.h and include header CoreGraphicsSPI.h. Also sort the list
        of #include directives.
        * platform/graphics/cg/ImageSourceCG.cpp: Include header CoreGraphicsSPI.h instead of including
        headers of CoreGraphics directly.
        * platform/graphics/cg/PDFDocumentImage.cpp: Ditto.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm: Ditto.
        * platform/graphics/ios/FontCacheIOS.mm: Include header CoreGraphicsSPI.h instead of including
        header <CoreGraphics/CGFontUnicodeSupport.h> directly.
        * platform/graphics/ios/FontServicesIOS.mm: Include header CoreGraphicsSPI.h instead of including
        headers of CoreGraphics directly.
        * platform/graphics/ios/SimpleFontDataIOS.mm: Ditto.
        * platform/graphics/mac/FontMac.mm: Move forward declarations of CoreGraphics functions from this
        file to file CoreGraphicsSPI.h and include header CoreGraphicsSPI.h.
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp: Substitute header CoreGraphicsSPI.h for CGFontUnicodeSupportSPI.h
        and remove #include of headers CGFontUnicodeSupport.h (it will be included by CoreGraphicsSPI.h).
        * platform/graphics/mac/SimpleFontDataMac.mm: Move forward declarations of CoreGraphics functions
        from this file to file CoreGraphicsSPI.h and include header CoreGraphicsSPI.h.
        * platform/ios/LegacyTileGrid.mm: Include header CoreGraphicsSPI.h instead of including headers of
        CoreGraphics directly.
        * platform/ios/wak/WKGraphics.h: Remove #include of header CoreGraphicsPrivate.h and forward declare
        CGFontAntialiasingStyle Additionally, declare WKCompositeOperation as an alias of int and use this
        data type instead of CGCompositeOperation (SPI). This approach lets us keep the definition of
        CGCompositeOperation in file CoreGraphicsSPI.h, where all the other definitions/forward declarations
        of CoreGraphics data types reside, as opposed to defining it in this file.
        * platform/ios/wak/WKGraphics.mm:
        (WKRectFillUsingOperation): Cast data type WKCompositeOperation to CGCompositeOperation and added
        compile-time assert to ensure that the size of WKCompositeOperation is identical to the size of CGCompositeOperation.
        * platform/graphics/cg/ImageSourceCG.cpp: Move CGImageCachingFlags declaration, associated enum, and
        forward declaration of CGImageSetCachingFlags() from this file to file CoreGraphicsSPI.h and include
        header CoreGraphicsSPI.h.
        (WebCore::ImageSource::createFrameAtIndex): Fix incorrect comment.
        * platform/spi/cocoa/CGFontUnicodeSupportSPI.h: Removed; moved its functionality into header CoreGraphicsSPI.h.
        * platform/spi/cg/CoreGraphicsSPI.h: Added.
        (CGFloatMin):
        * rendering/RenderThemeIOS.mm: Substitute header CoreGraphics.h for CGPathPrivate.h as we no longer
        make use of any functionality from CGPathPrivate.h in this file. The functionality we used from
        CGPathPrivate.h, including CGPathAddRoundedRect(), has been moved to the public API header, CGPath.h,
        which is included from header CoreGraphics.h.

2014-11-14  Dean Jackson  <dino@apple.com>

        [Media] Timeline scrubber not updating as the video plays
        https://bugs.webkit.org/show_bug.cgi?id=138717
        <rdar://problem/18957509>

        Reviewed by Jer Noble.

        There is some confusing logic that determines
        whether or not the controls are hidden, and a
        slight error caused timelines to not advance unless
        they were explicitly showing.

        The fix was to be a bit more liberal in deciding
        when the controls are showing, but still cautious
        enough to stop up causing repaints when things
        are hidden.

        Test: media/media-controls-timeline-updates.html

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.controlsAreHidden): We only need
        to check if we're an audio element or explicitly
        hidden.
        (Controller.prototype.showControls): Explicitly call
        updateTime.

2014-11-14  Tim Horton  <timothy_horton@apple.com>

        Move DataDetectors scanning code to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138731
        <rdar://problem/18877535>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export our new function.

        * WebCore.xcodeproj/project.pbxproj:
        Add DataDetection.{mm, h}
        Adjust the project so that editing/mac actually points to editing/mac instead of editing/

        * editing/mac/DictionaryLookup.h:
        * editing/mac/DictionaryLookup.mm:
        Swap to PLATFORM(MAC) instead of !PLATFORM(IOS).
        Move DictionaryLookup.{mm, h} to editing/mac, where they were in the project but not on disk.

        * editing/mac/DataDetection.h: Added.
        * editing/mac/DataDetection.mm: Added.
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        Moved from WebKit2.

2014-11-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/18978497> Wrong (off-by-1) navigation snapshots shown after a mix of gesture and button back/forward navigation
        https://bugs.webkit.org/show_bug.cgi?id=138753

        Reviewed by Tim Horton.

        Removed a FrameLoaderClient function that no one overrides anymore.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::willChangeCurrentHistoryItem): Deleted.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::setCurrentItem): Removed call to willChangeCurrentHistoryItem.
        (WebCore::HistoryController::replaceCurrentItem): Ditto.

2014-11-14  Jeremy Jones  <jeremyj@apple.com>

        Do proper teardown for optimized fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=138648

        Reviewed by Eric Carlson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::invalidate): must do corresponding teardown based on mode.

2014-11-11  David Hyatt  <hyatt@apple.com>

        Table rows repaint entire table when their background color changes.
        https://bugs.webkit.org/show_bug.cgi?id=26662

        Reviewed by Simon Fraser.

        Added fast/repaint/table-row-repaint.html

        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):
        Improve table row's function to unite with the cell rects that can possibly
        have the the row's background color painted behind them.

2014-11-14  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Move simple line layout RunResolver and LineResolver implementation to SimpleLineLayoutResolver.cpp
        https://bugs.webkit.org/show_bug.cgi?id=138704

        Reviewed by Antti Koivisto.

        No change in functionality.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SimpleLineLayoutResolver.cpp: Added.
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advance):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::LineResolver):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::Run): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Run::rect): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Run::text): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advance): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::RunResolver): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight): Deleted.
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect): Deleted.
        (WebCore::SimpleLineLayout::LineResolver::Iterator::Iterator): Deleted.
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*): Deleted.
        (WebCore::SimpleLineLayout::LineResolver::LineResolver): Deleted.

2014-11-14  Andrzej Badowski  <a.badowski@samsung.com>

        AX: Improve AccessibilityTableCell isColumnHeaderCell function.
        https://bugs.webkit.org/show_bug.cgi?id=138423

        Reviewed by Chris Fleizach.

        <th> cell in the zero row should be column header.

        New tests are not necessary.

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

2014-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Use GMainLoopSource for request timeout in ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=138695

        Reviewed by Sergio Villar Senin.

        We are currently using soup_timeout_add() that simply creates a
        GSource and attaches it to the given context. Using
        GMainLoopSource we simplify the code and fix any potential problem
        of converting the double value into milliseconds.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::requestTimeoutCallback): Deleted.

2014-11-13  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Reviewed by Simon Fraser.

        No new tests, just an optimization.

        Instead of throwing away decoded image data eagerly, allow the operating
        system to manage the memory via the standard purgeability mechanism,
        where it can.

        This improves the performance on some pathological cases (extremely large
        animated GIFs) by up to 8x.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        Don't prune live resources' decoded data if it is purgeable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Don't eagerly throw away decoded image data if it's purgeable.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decodedDataIsPurgeable):

2014-11-13  Myles C. Maxfield  <litherum@gmail.com>

        Addressing post-review comment
        https://bugs.webkit.org/show_bug.cgi?id=138633

        * platform/spi/cg/CoreGraphicsSPI.h:

2014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Move FontMac and FontCacheMac off of WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138633

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        * WebCore.vcxproj/WebCoreCG.props:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::platformInit):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::isIntegral):
        (WebCore::setCGFontRenderingMode):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/spi/cocoa/CoreGraphicsSPI.h: Copied from Source/WebCore/platform/spi/cocoa/CGFontUnicodeSupportSPI.h.
        * platform/spi/cocoa/CoreTextSPI.h:
        * platform/spi/mac/NSFontSPI.h: Renamed from Source/WebCore/platform/spi/cocoa/CGFontUnicodeSupportSPI.h.

2014-11-13  Chris Dumez  <cdumez@apple.com>

        Move 'image-resolution' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138715

        Reviewed by Andreas Kling.

        Move 'image-resolution' CSS property from DeprecatedStyleBuilder to
        the new StyleBuilder by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyImageResolution::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyImageResolution::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyImageResolution::applyValue): Deleted.
        (WebCore::ApplyPropertyImageResolution::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyInheritImageResolution):
        (WebCore::StyleBuilderFunctions::applyInitialImageResolution):
        (WebCore::StyleBuilderFunctions::applyValueImageResolution):

2014-11-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r176106.
        https://bugs.webkit.org/show_bug.cgi?id=138719

        needs build love (Requested by kling on #webkit).

        Reverted changeset:

        "[mac] Keep around more decoded image data, since it's
        purgeable"
        https://bugs.webkit.org/show_bug.cgi?id=125273
        http://trac.webkit.org/changeset/176106

2014-11-13  Eric Carlson  <eric.carlson@apple.com>

        Context menus should not offer the "Download video" option for videos that cannot 
        be downloaded
        https://bugs.webkit.org/show_bug.cgi?id=138530
        -and corresponding-
        rdar://problem/18919130

        Reviewed by Tim Horton.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::canSaveMediaData):
        (WebCore::MediaPlayer::supportsSave): Deleted.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsFullscreen):
        (WebCore::MediaPlayerPrivateInterface::canSaveMediaData):
        (WebCore::MediaPlayerPrivateInterface::supportsSave): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::resolvedURL):
        (WebCore::MediaPlayerPrivateAVFoundation::canSaveMediaData):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::resolvedURL):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::canSaveMediaData):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::canSaveMediaData):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isDownloadableMedia):

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

        [mac] Keep around more decoded image data, since it's purgeable
        <https://webkit.org/b/125273>
        <rdar://problem/13205438>

        Reviewed by Simon Fraser and Andreas Kling.

        No new tests, just an optimization.

        Instead of throwing away decoded image data eagerly, allow the operating
        system to manage the memory via the standard purgeability mechanism,
        where it can.

        This improves the performance on some pathological cases (extremely large
        animated GIFs) by up to 8x.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        Don't prune live resources' decoded data if it is purgeable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Don't eagerly throw away decoded image data if it's purgeable.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decodedDataIsPurgeable):

2014-11-13  Daniel Bates  <dabates@apple.com>

        [iOS] NSGeometry data types are not available in the public SDK
        https://bugs.webkit.org/show_bug.cgi?id=137536

        Reviewed by David Kilzer.

        Towards building iOS WebKit with the public iOS SDK, define NSGeometry
        data types and functions in terms of CGGeometry data types and functions
        because the former is SPI on iOS.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: Include
        header WAKAppKitStubs.h when building for iOS. Otherwise, include header NSGeometry.h.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Remove import of private header NSGeometry.h.
        We will use the NSGeometry data types defined in WAKAppKitStubs.h, which is implicitly imported
        by header WAKWindow.h.
        * platform/graphics/mac/MediaPlayerProxy.h: Substitute WAKAppKitStubs.h for NSGeometry.h.
        * platform/ios/PlatformEventFactoryIOS.mm: Ditto. Also fix up style issues with #import directives.
        * platform/ios/WebEvent.mm: Ditto.
        * platform/ios/wak/WAKAppKitStubs.h: Define typedefs and macros that map NSGeometry data types
        and functions to the analogous CGGeometry data types and functions. Also, remove #ifdef __OBJC__-
        guard as the existing content in WAKAppKitStubs.h assumes that this file will only be included
        in an Objective-C/Objective-C++ file.
        * platform/ios/wak/WAKView.h: Import header WAKAppKitStubs.h instead of defining macros for some
        NSGeometry data types.

2014-11-13  Simon Fraser  <simon.fraser@apple.com>

        [WK2] Fire a layout milestone on session restore based on render tree size
        https://bugs.webkit.org/show_bug.cgi?id=138711
        rdar://problem/16033854

        Reviewed by Anders Carlsson.

        New layout milestone for session restore based on render tree size. Only used
        in WK2 at present.

        * page/LayoutMilestones.h:

2014-11-13  Dan Bernstein  <mitz@apple.com>

        Policy client not called for navigations through the page cache
        https://bugs.webkit.org/show_bug.cgi?id=138703

        Reviewed by Alexey Proskuryakov.

        Test added to TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadDifferentDocumentItem): When using a cached page, which already
        has a document loader, set the document loader’s triggering action (so that the policy
        client sees that this is a back/forward navigation) and clear its last checked request (so
        that the policy client gets called).

2014-11-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Do not return ATK_ROLE_UNKNOWN for null or otherwise invalid accessible objects
        https://bugs.webkit.org/show_bug.cgi?id=137867

        Reviewed by Chris Fleizach.

        Return ATK_ROLE_INVALID for null or otherwise invalid accessible objects.

        Test: platform/gtk/accessibility/detached-object-role.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetRole):

2014-11-13  Eric Carlson  <eric.carlson@apple.com>

        [iOS] update optimized fullscreen media controls artwork
        https://bugs.webkit.org/show_bug.cgi?id=138705

        Reviewed by Dean Jackson.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaUIImageData): Remove one button.
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.controlsAreHidden): Add parentheses to fix the logic.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton): The big play button should not be
            visible during playback.
        (ControllerIOS.prototype.createControls): No longer necessary to insert style dynamically,
        (ControllerIOS.prototype.setPlaying): Call the base class first so "isPlaying" is set before
            calling updateControls, which calls shouldHaveStartPlaybackButton.

        * platform/ios/WebCoreSystemInterfaceIOS.h: Update constants.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Add button style to the media controls sheet.

2014-11-13  Benjamin Poulain  <bpoulain@apple.com>

        Implement the matching for :nth-last-child(An+B of selector-list)
        https://bugs.webkit.org/show_bug.cgi?id=138650

        Reviewed by Andreas Kling.

        Matching is trivial based on the existing CSS4 infrastructure.

        The tricky part is style invalidation. In the cases of the old :nth-last-child()
        and :nth-last-of-type(), we were using the flag ChildrenAffectedByBackwardPositionalRules.

        The problem with ChildrenAffectedByBackwardPositionalRules is that it only invalidate
        subtrees when nodes are being added or removed. It is a valuable optimization by itself
        since tree updates are less common than property updates.

        For the case of property updates, I have added the new flag "ChildrenAffectedByPropertyBasedBackwardPositionalRules".
        It pretty much work the same way but invalidates subtree on style recalc.

        Tests: fast/css/nth-child-and-nth-last-child.html
               fast/css/nth-last-child-of-classname.html
               fast/css/nth-last-child-of-complex-selector.html
               fast/css/nth-last-child-of-compound-selector.html
               fast/css/nth-last-child-of-style-sharing-1.html
               fast/css/nth-last-child-of-style-sharing-2.html
               fast/css/nth-last-child-of-style-update-optimization.html
               fast/css/nth-last-child-of-tagname.html
               fast/selectors/nth-last-child-of-class-style-update.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules):
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren):
        (WebCore::Element::rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules):
        * dom/Element.h:
        (WebCore::Element::childrenAffectedByPropertyBasedBackwardPositionalRules):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::childrenAffectedByPropertyBasedBackwardPositionalRules):
        (WebCore::ElementRareData::setChildrenAffectedByPropertyBasedBackwardPositionalRules):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetDynamicRestyleObservations):
        * dom/Node.cpp:
        (WebCore::Node::updateAncestorsForStyleRecalc):
        (WebCore::Node::setNeedsStyleRecalc):
        (WebCore::markAncestorsWithChildNeedsStyleRecalc): Deleted.
        * dom/Node.h:
        Unlike the other marking steps, ChildrenAffectedByPropertyBasedBackwardPositionalRules can only really
        affect one level (because we don't have a parent-selectors). It is quite easy to mark large
        trees with ChildrenAffectedByPropertyBasedBackwardPositionalRules by using a selector list that is a bit
        too generic. When that happen, we must be careful not invalidating everything, just the affected subtree.

2014-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION (r172826): Password field placeholder text is missing if
        placeholder attribute precedes type attribute

        <https://bugs.webkit.org/show_bug.cgi?id=138682>
        <rdar://problem/18574213> 

        When the placeholder attribute is encountered, a shadow tree is created
        to include the placeholder element. When the type attribute is
        encountered, the previous shadow tree is destroyed, and a new shadow
        tree is created. TextFieldInputType::createShadowSubtree() did not
        handle creating the placeholder element. 

        This regressed in r172826 because prior to r172826, the placeholder
        element would be recreated when
        HTMLTextFormControlElement::updatePlaceholderVisibility() was called.
        In r172826, updatePlaceholderVisibility() was changed to only show or
        hide the placeholder element if it exists.

        Reviewed by Benjamin Poulain.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        Call updatePlaceholderVisibility() to insert the placeholder element
        (after the inner text element has been inserted, as it appears before
        it in the shadow DOM).

2014-11-13  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] Accessible focus events are emitted when the selection is changed in non-focused combo boxes
        https://bugs.webkit.org/show_bug.cgi?id=137866

        Reviewed by Mario Sanchez Prada.

        Check that the AccessibilityMenuList is really focused before notifying
        the platform that it is focused. Likewise, only notify the platform of
        an AccessibilityMenuListOption focus gain if the AccessibilityMenuList
        containing that option is expanded.

        Test: platform/gtk/accessibility/menu-list-unfocused-notifications.html

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):

2014-11-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Unexpected crashes in layout test after r175953
        https://bugs.webkit.org/show_bug.cgi?id=138652

        Reviewed by Csaba Osztrogonác.

        In r175953, it set reusableNodeIndex value with m_partCache's size(). It causes
        out of bound index crash because the reusableNodeIndex is Vector object.

        No new test. This patch is to fix broken tests related to widgets on EFL port.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::getThemePartFromCache): Need to set reusableNodeIndex with "size() - 1".

2014-11-13  Chris Dumez  <cdumez@apple.com>

        Lazily create HTMLInputElement's inputType and shadow subtree
        https://bugs.webkit.org/show_bug.cgi?id=138524

        Reviewed by Ryosuke Niwa.

        When an HTMLInputElement was created by the parser, we would first call
        HTMLInputElement::create(), then call Element::parserSetAttributes() on
        the constructed input. With the previous implementation, this was a bit
        inefficient because HTMLInputElement::create() would construct a
        TextInputType inputType (as this is the default) as well as its
        corresponding shadow subtree. Then, parserSetAttributes() would often
        set the |type| attribute and would need to destroy this input type as
        well as its subtree if the new |type| is not 'text', to create a new
        inputType / shadow subtree of the right type. The profiler showed that
        this was fairly expensive.

        To improve this, this patch delays the inputType / shadow subtree
        creation when the HTMLInputElement is constructed by the parser, until
        the attributes are actually set by the parser. This way, we directly
        create an inputType / shadow subtree of the right type.

        I see a 1.4% speed up on speedometer (73.95 -> 75.0).

        Test: fast/dom/HTMLInputElement/border-attribute-crash.html

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::parserDidSetAttributes):
        * dom/Element.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::initializeInputType):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::parserDidSetAttributes):
        (WebCore::HTMLInputElement::finishParsingChildren):
        * html/HTMLInputElement.h:

2014-11-12  Chris Dumez  <cdumez@apple.com>

        Have DOMTimer deal with more ScriptExecutionContext references
        https://bugs.webkit.org/show_bug.cgi?id=138679

        Reviewed by Andreas Kling.

        Have DOMTimer deal with more ScriptExecutionContext references instead
        of pointers, to make it clear the script execution context cannot be
        null.

        No new tests, no behavior change.

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScheduledAction.h:
        * dom/DocumentEventQueue.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimerFireState::DOMTimerFireState):
        (WebCore::NestedTimersMap::instanceForContext):
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout):
        (WebCore::DOMWindow::clearTimeout):
        (WebCore::DOMWindow::setInterval):
        (WebCore::DOMWindow::clearInterval):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        * page/SuspendableTimer.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::setTimeout):
        (WebCore::WorkerGlobalScope::clearTimeout):
        (WebCore::WorkerGlobalScope::setInterval):
        (WebCore::WorkerGlobalScope::clearInterval):

2014-11-12  Dean Jackson  <dino@apple.com>

        Support unprefixed animation property names
        https://bugs.webkit.org/show_bug.cgi?id=138678
        <rdar://problem/18943059>

        Reviewed by Simon Fraser.

        Step 1 of 3 in unprefixing CSS animations: handling the
        property names and values.

        Unlike other unprefixing, where we use an alias that
        effectively removes the prefixed values from the code,
        for animations we need to keep the old values around so that
        existing content will not break (e.g. computed style).

        During testing I noticed that we didn't handle the
        (relatively) new animation-direction values of
        "reverse" and "alternate-reverse" when querying
        computed style.

        Tests: animations/unprefixed-properties.html
               animations/unprefixed-shorthand.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Handle the unprefixed
        values, but also get animation direction to produce the correct
        results when "reverse" and "alternate-reverse" is specified.

        * css/CSSParser.cpp: Handle the new values. If necessary, pass a flag
        around indicating whether it is prefixed or unprefixed.
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationShorthand): Use the flag to decide
        which of the forms we're going to check.
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:

        * css/CSSProperty.h:
        (WebCore::prefixingVariantForPropertyId): Add prefixing/unprefixing variants for
        all the animation values, and clean up the code a bit.

        * css/CSSPropertyNames.in: Add new properties.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): We need handlers for the
        unprefixed forms. This should move to the new StyleBuilder soon.

        * css/StyleProperties.cpp: Handle new values.
        (WebCore::StyleProperties::getPropertyValue):
        (WebCore::StyleProperties::asText):

        * css/StylePropertyShorthand.cpp:
        (WebCore::animationShorthand):
        (WebCore::animationShorthandForParsing): Decide which list of properties to use.
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        (WebCore::webkitAnimationShorthandForParsing): Deleted.
        * css/StylePropertyShorthand.h:

        * css/StyleResolver.cpp: Since the new properties come before "background" in
        alphabetical order, they are earlier in the CSSPropertyNames.in file, and thus
        we need to update the call sites that think CSSPropertyBackground is the first
        property.
        (WebCore::StyleResolver::styleForKeyframe): Replace CSSPropertyBackground with CSSPropertyAnimation.
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):

2014-11-12  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebCore.exp.in:

2014-11-12  Timothy Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * platform/spi/mac/DataDetectorsSPI.h:
        It's likely that more of this file should be compiled out on iOS,
        but this is all we need to build.

2014-11-12  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for images
        https://bugs.webkit.org/show_bug.cgi?id=138668
        -and corresponding-
        rdar://problem/18785434

        Reviewed by Tim Horton.

        Symbol needed for copying image.
        * WebCore.exp.in:

2014-11-05  Ada Chan  <adachan@apple.com>

        Implement new plug-in API for muting plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=138105

        Reviewed by Anders Carlsson.

        Add the new NPNVmuteAudioBool NPNVariable.

        Test: platform/mac-wk2/plugins/muted-state.html

        * plugins/npapi.h:

2014-11-12  Tim Horton  <timothy_horton@apple.com>

        Need to show the text indicator when Data Detectors shows a popover
        https://bugs.webkit.org/show_bug.cgi?id=138664
        <rdar://problem/18869900>

        Reviewed by Beth Dakin.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add new DataDetectors SPI.

2014-11-12  Chris Dumez  <cdumez@apple.com>

        Minor improvements to RenderListItem
        https://bugs.webkit.org/show_bug.cgi?id=138601

        Reviewed by Darin Adler.

        Make several minor improvements to RenderListItem and clean up the
        code a bit.

        No new tests, no behavior change.

        * rendering/RenderListItem.cpp:
        (WebCore::isHTMLListElement):
        - Rename isList to isHTMLListElement() for clarity as it checks
          for HTMLOListElement and HTMLUListElement types
        - Inline the function as it is short.
        - Use is<HTML*Element>() for type checking
        - Update the argument to take a Node& instead of an Element*. This
          is because the argument is expected to the non-null. Also using
          looser typing here allows us to use this utility function is one
          more place, without impacting performance as
          hasTagName(HTMLQualifiedName) is defined on Node.

        (WebCore::enclosingList):
        - Pass the argument as a reference instead of a pointer as it is
          expected to be non-null.
        - Initialize firstNode before the loop to avoid the if (!firstNode)
          check for every iteration.

        (WebCore::nextListItem):
        - Take an Element as second argument instead of a RenderListItem*
          and provide convenience overloads so that we don't need to do
          null checks just because some calls sites call this function
          with 2 arguments and others with 1 argument. This way, we avoid
          unnecessary null checks as most call sites already do such
          checks (or have references).
        - Transform the while loop into a for loop for clarity.
        - Don't traverse an Element's subtree if the Element does not have
          a renderer as it is impossible of any of its descendant to have
          a renderer (and we are looking for a specific type of renderer).

        (WebCore::previousListItem):
        - Pass the item argument as a reference instead of a pointer as it
          is expected to be non-null.
        - Reduce the scope of the |current| so that it is now declared
          inside the loop.

        (WebCore::RenderListItem::updateItemValuesForOrderedList):
        (WebCore::RenderListItem::itemCountForOrderedList):
        - Pass argument as a reference instead of a pointer as it was expected
          to be non-null (There was an assertion in place to make sure of it).

        (WebCore::RenderListItem::calcValue):
        - Use is<HTMLOListElement>() instead of hasTagName().

        (WebCore::getParentOfFirstLineBox):
        - Rename variables to stop using abbreviations.
        - Pass arguments as references instead of pointers as they are expected
          to be non-null.
        - Remove the firstChild null check before the loop as it does not
          change behavior. The loop will abort early if firstChild is null
          and we will end up returning nullptr as well.
        - Use is<>() more for type checking.
        - Reuse the isHTMLListElement() utility function instead of duplicating
          its code inside this function.

        (WebCore::firstNonMarkerChild):
        - Pass argument as a reference as it is expected to be non-null.
        - Rename variable from result to child for clarity, as we are traversing
          the children.

        (WebCore::RenderListItem::markerTextWithSuffix):
        - Use String appending instead of StringBuilder as it simplifies the
          code a lot and should not impact performance in this case.

        (WebCore::RenderListItem::explicitValueChanged):
        - Restructure the code a bit to do the |listNode| null check before the
          loop, now that nextListItem() takes a reference in argument. This is
          the only call site where we didn't already know that listNode is
          non-null.

        (WebCore::previousOrNextItem):
        - Mark this function as inline as it is short and called repeatedly.

2014-11-12  Chris Dumez  <cdumez@apple.com>

        Speed up HTMLTextFormControlElement::setInnerTextValue() a bit
        https://bugs.webkit.org/show_bug.cgi?id=138619

        Reviewed by Darin Adler.

        Speed up HTMLTextFormControlElement::setInnerTextValue() a bit by:
        - Not doing a virtual isTextFormControl() call. Relying on innerTextElement()
          not returning null is sufficient.
        - Caching the result of innerTextElement() instead of repeatedly calling that
          virtual function.
        - De-virtualizing setFormControlValueMatchesRenderer() /
          formControlValueMatchesRenderer() as these are never overridden.
        - Moving the code constructing the innerTextValue from a
          TextControlInnerTextElement from innerTextValue() to a new
          innerTextValueFrom(TextControlInnerTextElement&) function and call this new
          function from setInnerTextValue() to avoid calling innerTextElement() again
          and making sure it is non-null
        - Do the tree traversal from innerTextElement's firstChild instead of from
          innerTextElement. The innerTextElement is a TextControlInnerTextElement.
          Therefore, it cannot be an HTMLBRElement or a Text node.

        No new tests, no behavior change.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::formControlValueMatchesRenderer):
        (WebCore::HTMLFormControlElement::setFormControlValueMatchesRenderer):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::stripTrailingNewline):
        (WebCore::innerTextValueFrom):
        (WebCore::HTMLTextFormControlElement::setInnerTextValue):
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        (WebCore::finishText): Deleted.

2014-11-12  Jer Noble  <jer.noble@apple.com>

        [Mac] media/track/audio-track.html is flakey
        https://bugs.webkit.org/show_bug.cgi?id=138394

        Reviewed by Alexey Proskuryakov.

        The above test fails if the HTMLMediaElement's "canplaythrough" event fires before the AudioTrackList's
        "addtrack" event fires. This can happen because each object keeps its own GenericEventQueue, which
        empties when that individual queue's timer fires. So events can be enqueued in the following order:
        1, A, 2, B, 3, C; but fired in a different order: 1, 2, 3, A, B, C.

        Make events enqueued in GenericEventQueues globally ordered, so that events are fired in the order
        which they are enqueued, regardless of which object owns the queue. Use a static queue of
        GenericEventQueues to manage which GenericEventQueue fires and in what order.

        GenericEventQueues will use a WeakPtrFactory to cancel pending events. Revoking a GenericEventQueue's
        weak pointers means those queue's entries will be skipped the next time the meta-queue is processed.

        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::GenericEventQueue): Create a WeakPtrFactory instead of a Timer.
        (WebCore::GenericEventQueue::enqueueEvent): Enqueue this queue with the MetaQueue.
        (WebCore::GenericEventQueue::sharedTimer): Lazily-initializing accessor.
        (WebCore::GenericEventQueue::sharedTimerFired):  Ask each queue to dispatch one event.
        (WebCore::GenericEventQueue::pendingQueues): Lazily-initializing accessor.
        (WebCore::GenericEventQueue::dispatchOneEvent): Renamed from timerFired.
        (WebCore::GenericEventQueue::close): Revoke all WeakPtrs.
        (WebCore::GenericEventQueue::cancelAllEvents): Ditto.
        (WebCore::GenericEventQueue::hasPendingEvents): Use !isEmpty().
        (WebCore::GenericEventQueue::timerFired): Deleted.
        * dom/GenericEventQueue.h:

2014-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose user script messages to GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=138411

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add WebKitDOMCustomUnstable.h to the list of
        installed headers and make a symlink for it in the DerivedSources dir.
        * bindings/gobject/WebKitDOMCustomUnstable.h: Added.
        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_dom_window_get_webkit_namespace):
        (webkit_dom_user_message_handlers_namespace_get_handler):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (HasUnstableCustomAPI): Helper function to check if the given
        class has custom unstable API.
        (WriteData): Include WebKitDOMCustomUnstable.h header if the class
        has API defined there.

2014-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix how SerializedScriptValue is exposed to GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=138409

        Reviewed by Philippe Normand.

        It's currently exposed as a WebKitDOMSerializedScriptValue class
        that doesn't really exist. It should be handled as a string, that
        is used to create a SerializedScriptValue when coming from the
        API, and converted to a string again when returned to the API.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetGlibTypeName): Return gchar* as glib type of SerializedScriptValue.
        (IsGDOMClassType): Don't consider SerializedScriptValue as a GDOM class.
        (GenerateFunction): Handle SerializedScriptValue parameters and
        return values specially.
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_serialized_script_value_param):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_serialized_value):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_get_value):
        (webkit_dom_test_serialized_script_value_interface_set_value):
        (webkit_dom_test_serialized_script_value_interface_get_readonly_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_value):
        (webkit_dom_test_serialized_script_value_interface_set_cached_value):
        (webkit_dom_test_serialized_script_value_interface_get_cached_readonly_value):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (webkit_dom_test_typedefs_class_init):
        (webkit_dom_test_typedefs_get_immutable_serialized_script_value):
        (webkit_dom_test_typedefs_set_immutable_serialized_script_value):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:

2014-11-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move RedirectedXCompositeWindow from platform to WebKit2 layer
        https://bugs.webkit.org/show_bug.cgi?id=138093

        Reviewed by Martin Robinson.

        Remove RedirectedXCompositeWindow.

        * PlatformGTK.cmake:

2014-09-01  Philippe Normand  <pnormand@igalia.com>

        [WK2] UserMediaClient support
        https://bugs.webkit.org/show_bug.cgi?id=123158

        Reviewed by Benjamin Poulain.

        Added document and frame accessors, needed by the
        UserMediaRequestManager of the WebProcess. Also added two methods
        used by the permission request manager to know if access to audio
        or video devices is requested.

        Tests: fast/mediastream/error.html
               fast/mediastream/success.html
               fast/mediastream/delayed-permission-allowed.html
               fast/mediastream/delayed-permission-denied.html
               http/tests/media/media-stream/disconnected-frame-already.html
               http/tests/media/media-stream/disconnected-frame-permission-denied.html
               http/tests/media/media-stream/disconnected-frame.html

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::document):
        (WebCore::UserMediaRequest::frame):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::requiresAudio):
        (WebCore::UserMediaRequest::requiresVideo):

2014-11-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Clean up OwnPtr in RenderThemeEfl
        https://bugs.webkit.org/show_bug.cgi?id=138642

        Reviewed by Zoltan Herczeg.

        No new tests, no behavior change.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeRTLState): Clean up all remaining OwnPtr. 

2014-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move Modules/websockets to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=138649

        Reviewed by Chris Dumez.

        Remove create() factory function and use std::make_unique<>, std::unique_ptr<>
        instead of OwnPtr, PassOwnPtr.
        However didReceiveBinaryData() is still using PassOwnPtr. It should be replaced
        with std::unique_ptr<>

        No new tests, no behavior.

        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::processFrame):
        (WebCore::WebSocketChannel::enqueueTextFrame):
        (WebCore::WebSocketChannel::enqueueRawFrame):
        (WebCore::WebSocketChannel::enqueueBlobFrame):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        (WebCore::WebSocketChannel::sendFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::inflate):
        (WebCore::WebSocketExtensionDeflateFrame::create): Deleted.
        * Modules/websockets/WebSocketDeflateFramer.h:
        (WebCore::DeflateResultHolder::create): Deleted.
        (WebCore::InflateResultHolder::create): Deleted.
        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketDeflater::WebSocketDeflater):
        (WebCore::WebSocketInflater::WebSocketInflater):
        (WebCore::WebSocketDeflater::create): Deleted.
        (WebCore::WebSocketInflater::create): Deleted.
        * Modules/websockets/WebSocketDeflater.h:
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::addProcessor):
        * Modules/websockets/WebSocketExtensionDispatcher.h:
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::addExtensionProcessor):
        * Modules/websockets/WebSocketHandshake.h:

2014-11-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r176001.

        Export an additional symbol.

        * WebCore.exp.in:

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

        [Mac] Add diagnostic logging for per-media-engine load failures
        https://bugs.webkit.org/show_bug.cgi?id=138647

        Reviewed by Eric Carlson.

        Add diagnostic logging fired whenever a media engine fails to load media,
        even if another engine subsequentially succeeds. Add a mechanism for retrieving
        the platform-specific error code from a given engine.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::engineFailedToLoadKey):
        * page/DiagnosticLoggingKeys.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::MediaPlayer::platformErrorCode):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerEngineFailedToLoad):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::platformErrorCode):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::platformErrorCode):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::assetErrorCode):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetErrorCode):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::platformErrorCode):

2014-11-11  Chris Dumez  <cdumez@apple.com>

        Mark more virtual functions in HTMLInputElement as final
        https://bugs.webkit.org/show_bug.cgi?id=138644

        Reviewed by Andreas Kling.

        Mark more virtual functions in HTMLInputElement as final to help the
        compiler optimize better.

        No new tests, no behavior change.

        * html/HTMLInputElement.h:

2014-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove IncrementalSweeper::create()
        https://bugs.webkit.org/show_bug.cgi?id=138243

        Reviewed by Filip Pizlo.

        As a step to use std::unique_ptr<> and std::make_unique<>, this patch removes
        IncrementalSweeper::create(), then set constructor of IncrementalSweeper to public.
        Now we begins to use std::make_unique<> to create IncrementalSweeper instance.

        No new tests, no behavior changes.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::commonVM):
        * platform/ios/WebSafeIncrementalSweeperIOS.h:

2014-11-11  Chris Dumez  <cdumez@apple.com>

        Move 'border-image-*' / '-webkit-mask-box-image-*' CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138594

        Reviewed by Antti Koivisto.

        Move 'border-image-*' / '-webkit-mask-box-image-*' CSS properties from
        DeprecatedStyleBuilder to the new StyleBuilder using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyBorderImageModifier::getValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::setValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::applyValue): Deleted.
        (WebCore::ApplyPropertyBorderImageModifier::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::ApplyPropertyBorderImageModifier::applyInheritValue):
        (WebCore::StyleBuilderFunctions::ApplyPropertyBorderImageModifier::applyInitialValue):
        (WebCore::StyleBuilderFunctions::ApplyPropertyBorderImageModifier::applyValue):
        (WebCore::StyleBuilderFunctions::ApplyPropertyBorderImageModifier::getValue):
        (WebCore::StyleBuilderFunctions::ApplyPropertyBorderImageModifier::setValue):

2014-11-11  David Kilzer  <ddkilzer@apple.com>

        Modernize $buildingForIPhone in CodeGeneratorObjC.pm
        <http://webkit.org/b/138640>

        Reviewed by Daniel Bates.

        Mac OS X is the only platform that supports NSColor, so rename
        $buildingForIPhone to $shouldUseCGColor (which is actually what
        the variable represents) and define it in terms of the "macosx"
        platform name.

        * bindings/scripts/CodeGeneratorObjC.pm:
        ($buildingForIPhone): Rename to $shouldUseCGColor.
        ($shouldUseCGColor): False if PLATFORM_NAME is not defined,
        which is the case on older Xcodes when building for Mac OS X, or
        if PLATFORM_NAME is equal to "macosx".  True otherwise.
        (GetClassName): Switch to use new variable name.
        (AddIncludesForType): Ditto.
        (GenerateHeader): Remove dead code.  The
        $buildingForTigerOrEarlier variable was accidentally
        re-introduced in r161638, but was originally removed in r127032!
        (GenerateImplementation): Switch to use new variable name.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Add support for mailto: link action menus
        https://bugs.webkit.org/show_bug.cgi?id=138641
        <rdar://problem/18741567>

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        Add an export.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add some DataDetectors SPI.

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

        [iOS] video is sometimes allowed to play from the background
        https://bugs.webkit.org/show_bug.cgi?id=138522

        Rubber-stamped by Jer Noble.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::updateClientDataBuffering): Call MediaSessionManager::sessionCanLoadMedia.

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

        [iOS] a page with video in optimized fullscreen is visible
        https://bugs.webkit.org/show_bug.cgi?id=138632

        Reviewed by Anders Carlsson.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        (WebCore::WebVideoFullscreenInterfaceAVKit::mode): Expose fullscreen mode.

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

        Mountain Lion build fix
        https://bugs.webkit.org/show_bug.cgi?id=138631

        Reviewed by Simon Fraser.

        * platform/spi/cocoa/CoreTextSPI.h:

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

        [iOS] cleanup wireless route monitoring
        https://bugs.webkit.org/show_bug.cgi?id=138614

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaPlayer): Add logging.
        (WebCore::HTMLMediaElement::removeEventListener): Ditto.
        (WebCore::HTMLMediaElement::createMediaPlayer): Ditto.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Add logging.
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring): Ditto.
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Ditto.
        (-[WebMediaSessionHelper initWithCallback:]): Ditto.
        (-[WebMediaSessionHelper dealloc]): Always deallocate volume view and routing controller
            on the main thread.
        (-[WebMediaSessionHelper clearCallback]): Add logging.
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]): Ditto.
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]): Always call routing controller on
            the main thread.
        (-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]): Ditto.
        (-[WebMediaSessionHelper interruption:]): Add logging.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): Ditto.
        (-[WebMediaSessionHelper applicationDidBecomeActive:]): Ditto.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.
        (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): Ditto.

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

        Unreviewd iOS build fix

        * platform/spi/cocoa/CoreTextSPI.h:

2014-11-11  David Kilzer  <ddkilzer@apple.com>

        Protect Document in ProcessingInstruction::setXSLStyleSheet()
        <http://webkit.org/b/138621>

        Reviewed by Andreas Kling.

        The patch is inspired by the following Blink revision by
        <tasak@google.com>:
        <https://src.chromium.org/viewvc/blink?view=rev&revision=182309>

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setXSLStyleSheet):

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

        Finish moving CTFontGetVerticalGlyphsForCharacters and CTLineCreateWithUniCharProvider out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138623

        Reviewed by Geoff Garen.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/spi/cocoa/CoreTextSPI.h:

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

        Unreviewed Mountain Lion build fix

        * platform/spi/cocoa/CoreTextSPI.h:

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

        Unreviewed, rolling out r175852.
        https://bugs.webkit.org/show_bug.cgi?id=138626

        Broke PLT by introducing a crash. (Requested by rniwa on
        #webkit).

        Reverted changeset:

        "Lazily create HTMLInputElement's inputType and shadow
        subtree"
        https://bugs.webkit.org/show_bug.cgi?id=138524
        http://trac.webkit.org/changeset/175852

2014-11-11  Chris Dumez  <cdumez@apple.com>

        Regression(r175947): Caused assertions in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=138620

        Reviewed by Benjamin Poulain.

        In HTMLCollection::traverseForward(), traversedCount was incremented 1
        time too many when hitting the end of the collection (i.e. element
        becomes null). Doing a partial revert.

        No new tests, already covered by existing tests.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::traverseForward):

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        DataDetectors' menu items aren't presented in the telephone number menu
        https://bugs.webkit.org/show_bug.cgi?id=138602
        <rdar://problem/18866308>

        Reviewed by Beth Dakin.

        * English.lproj/Localizable.strings:
        Remove a now-unused localized string.

2014-11-11  Daniel Bates  <dabates@apple.com>

        [Frame Flattening] ASSERT(transaction->view == &view()) fails in RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction()
        https://bugs.webkit.org/show_bug.cgi?id=138615
        <rdar://problem/18928487>

        Reviewed by David Hyatt.

        Fixes an issue where we always expected that the RenderView associated with the RenderBlock called in
        RenderBlock::removeFromUpdateScrollInfoAfterLayoutTransaction() is the same as the RenderView associated with
        the top transaction in the UpdateScrollInfoAfterLayoutTransaction stack regardless of frame flattening. This
        expectation is only true when frame flattening is disabled.

        Test: fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html

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

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Adopt DDActionContext menu type SPI
        https://bugs.webkit.org/show_bug.cgi?id=138603
        <rdar://problem/18867627>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add the new SPI.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Data Detectors popovers should be dismissed upon scrolling
        https://bugs.webkit.org/show_bug.cgi?id=138600
        <rdar://problem/18932770>

        Reviewed by Beth Dakin.

        * platform/spi/mac/DataDetectorsSPI.h:
        Adjust the SPI header.

2014-11-11  Tim Horton  <timothy_horton@apple.com>

        Localize strings for action menus
        https://bugs.webkit.org/show_bug.cgi?id=138591
        <rdar://problem/18815343>

        Reviewed by Dan Bates.

        * English.lproj/Localizable.strings:
        Add a bunch of localizable strings.

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

        Cleanup from r175379
        https://bugs.webkit.org/show_bug.cgi?id=138616

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        Move CTFontTransformGlyphs out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138599

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.exp.in:
        * WebCore.order:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::applyTransforms):
        * platform/graphics/SimpleFontData.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/spi/cocoa/CoreTextSPI.h:

2014-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr<>|std::make_unique_ptr in RenderThemeEfl::ThemePartCacheEntry::create()
        https://bugs.webkit.org/show_bug.cgi?id=138558

        Reviewed by Anders Carlsson.

        This patch removes PassOwnPtr and OwnPtr in RenderThemeEfl::ThemePartCacheEntry::create().
        It would be good if we also remove create() factory function though, in this case, it is
        a little hard to remove it since the create() factory function does many works to create
        a ThemePartCacheEntry instance. Thus this patch just replaces PassOwnPtr|OwnPtr with
        std::unique_ptr<> and std::make_unique<> in RenderThemeEfl::ThemePartCacheEntry::create().

        Besides the theme entries have been maintained by Eina_List*. Unfortunately it doesn't support
        std::unique_ptr<> yet. Thus the Eina_List* should be replaced with Vector<std::unique_ptr<>>
        so that m_partCache has ownship of all EFL theme entries. This patch tries to keep original
        cache algorithm based on Vector class.

        No new tests, no behavior changes.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::ThemePartCacheEntry::create):
        (WebCore::RenderThemeEfl::getThemePartFromCache):
        * platform/efl/RenderThemeEfl.h:

2014-11-09  Darin Adler  <darin@apple.com>

        Minor tweaks to HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=138556

        Reviewed by Chris Dumez.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        Update for namedElements function that now returns a Vector; also use
        a new style for loop to iterate it.

        * bindings/js/JSHTMLAllCollectionCustom.cpp: Removed some unneeded includes.
        (WebCore::namedItems): Updated name to match WebKit coding style, and also
        updated to use the return value from namedItems, which now returns a Vector.
        (WebCore::callHTMLAllCollection): Updated for namedItems name change.
        Also removed explicit Node* type from result of namedItemWithIndex, since that
        function now returns a more specific type.
        (WebCore::JSHTMLAllCollection::nameGetter): Update for namedItems name change.
        (WebCore::JSHTMLAllCollection::item): Ditto.
        (WebCore::JSHTMLAllCollection::namedItem): Ditto.

        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp: Removed some unneeded includes.
        (WebCore::namedItems): Updated name to match WebKit coding style, and also
        updated to use the return value from namedItems, which now returns a Vector.
        (WebCore::JSHTMLFormControlsCollection::nameGetter): Update for namedItems name change.
        (WebCore::JSHTMLFormControlsCollection::namedItem): Ditto.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Updated to use the return value from
        namedItems, which now returns a Vector.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection): Marked the constructor inline,
        since it's only used in one place, the create function.
        (WebCore::HTMLAllCollection::~HTMLAllCollection): Deleted. No need to have an
        explicit destructor since there's nothing special to implement, and includers of
        the header file have everything they ened to compile the compiler-generated one.
        (WebCore::HTMLAllCollection::namedItemWithIndex): Changed return type to Element.

        * html/HTMLAllCollection.h: Removed unneeded explicit declaration of destructor.
        Chagned return type of namedItemWithIndex to Element.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::rootTypeFromCollectionType): Marked this inline. Also
        changed this to be a static member function so it can use the RootType enum, which
        is now private to the class.
        (WebCore::isMatchingHTMLElement): Marked this function static so it will get
        internal linkage.
        (WebCore::isMatchingElement): Ditto.
        (WebCore::previousElement): Marked this function inline since it's called in only
        one place. Changed argument type to a reference since it can never be null.
        (WebCore::HTMLCollection::iterateForPreviousElement): Changed argument name and
        also updated for above changes.
        (WebCore::firstMatchingElement): Marked this function static so it will get
        internal linkage.
        (WebCore::nextMatchingElement): Ditto. Changed argument type to a reference
        since it can never be null.
        (WebCore::HTMLCollection::item): Changed return type to Element.
        (WebCore::nameShouldBeVisibleInDocumentAll): Added an overload that takes an
        Element. This streamlines the code below that calls it so it fits on one line.
        (WebCore::firstMatchingChildElement): Marked this function static so it will get
        internal linkage.
        (WebCore::nextMatchingSiblingElement): Ditto. Changed argument type to a reference
        since it can never be null.
        (WebCore::HTMLCollection::usesCustomForwardOnlyTraversal): Moved here from the
        header since, although it's marked inline, it's only used inside this file.
        (WebCore::HTMLCollection::traverseForward): Restructured the code a little bit
        to make the function smaller and possibly easier to read. This does add one
        redundant null check, but it seems OK to do that.
        (WebCore::HTMLCollection::collectionTraverseBackward): Tweaked foramtting a bit.
        (WebCore::HTMLCollection::namedItem): Changed return type to Element. Tightened
        the code that calls nameShouldBeVisibleInDocumentAll so it fits better on one line.
        Changed code that handles m_shouldOnlyIncludeDirectChildren to use a nested if
        instead of an && since it makes the code a little easier to read.
        (WebCore::HTMLCollection::updateNamedElementCache): Tweaked code a little bit,
        using shorter variable names, and using references instead of pointers. Also removed
        the call to didPopulate, since setNamedItemCache now takes care of that.
        (WebCore::HTMLCollection::namedItems): Changed to return a Vector instead of
        appending to an existing one. Also use reserveInitialCapacity and uncheckedAppend
        for better performance. Added a FIXME, because there seems to be something wrong
        here about this being non-virtual. Made other small tweaks to streamline the code.
        (WebCore::HTMLCollection::customElementAfter): Moved this here from the header.
        There is no reason to need to inline this.

        * html/HTMLCollection.h: Removed unneeded includes. Moved function bodies out
        of the class definitions so the class definitions are easier to read. Made some
        functions that were formerly public or protected be private instead. Added a call
        to didPopulate to setNamedItemCache so the callers don't have to do it.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::namedItem): Changed return value to Element.
        Tweaked coding style a little bit.
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache): Rearranged to
        simplify a bit. Don't build the foundInputElements set when the owner is not a
        form element, since we don't use the set in that case. Use shorter variable names,
        and modern for loops. Also removed the call to didPopulate, since setNamedItemCache
        now takes care of that.

        * html/HTMLFormControlsCollection.h: Removed some uneeded forward declarations.
        Updated return type for namedItem, and also made the override private.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::namedElements): Changed to return a Vector and updated
        function name accordingly.
        * html/HTMLFormElement.h: Ditto.

        * html/HTMLNameCollection.h: Removed a stray blank line.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::namedItem): Changed return value to Element.
        (WebCore::HTMLSelectElement::item): Ditto.
        * html/HTMLSelectElement.h: Ditto.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::appendChildSnapOffsets): Rewrote loop as a for loop rather than a while
        loop. Removed unwanted use of children()->collectionBegin() to get the first element
        child of an HTMLElement. This function uses a mix of DOM and rendering functions that
        is probably incorrect, but I did not tackle fixing that at this time.

2014-11-11  Dan Bernstein  <mitz@apple.com>

        [Mac] WebCore includes unused cursor image resources
        https://bugs.webkit.org/show_bug.cgi?id=138605

        Reviewed by Anders Carlsson.

        * Resources/aliasCursor.png: Removed.
        * Resources/cellCursor.png: Removed.
        * Resources/contextMenuCursor.png: Removed.
        * Resources/copyCursor.png: Removed.
        * Resources/eastResizeCursor.png: Removed.
        * Resources/eastWestResizeCursor.png: Removed.
        * Resources/helpCursor.png: Removed.
        * Resources/linkCursor.png: Removed.
        * Resources/moveCursor.png: Removed.
        * Resources/noDropCursor.png: Removed.
        * Resources/noneCursor.png: Removed.
        * Resources/northEastResizeCursor.png: Removed.
        * Resources/northEastSouthWestResizeCursor.png: Removed.
        * Resources/northResizeCursor.png: Removed.
        * Resources/northSouthResizeCursor.png: Removed.
        * Resources/northWestResizeCursor.png: Removed.
        * Resources/northWestSouthEastResizeCursor.png: Removed.
        * Resources/progressCursor.png: Removed.
        * Resources/southEastResizeCursor.png: Removed.
        * Resources/southResizeCursor.png: Removed.
        * Resources/southWestResizeCursor.png: Removed.
        * Resources/verticalTextCursor.png: Removed.
        * Resources/waitCursor.png: Removed.
        * Resources/westResizeCursor.png: Removed.
        * Resources/zoomInCursor.png: Removed.
        * Resources/zoomOutCursor.png: Removed.

        * WebCore.xcodeproj/project.pbxproj: Removed references to the above files.

        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::ensurePlatformCursor): For Help, Cell, ZoomIn and ZoomOut, don’t check
        for a nil return value from wkCursor(), which can’t occur in any supported configuration.
        For None, create a cursor with an empty NSImage instead of loading a transparent image from
        the file system.
        (WebCore::createNamedCursor): Deleted.

2014-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r175844.

        Win debug build has broken since r175844.

        Reverted changeset:

        "Use std::unique_ptr<> and std::make_unique<> in WebCore"
        https://bugs.webkit.org/show_bug.cgi?id=138560
        http://trac.webkit.org/changeset/175844

2014-11-11  Philippe Normand  <pnormand@igalia.com>

        Qt/Chromium remnants in MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=138611

        Reviewed by Jer Noble.

        * platform/graphics/MediaPlayer.h: Remove unused Qt/Chromium stuff.

2014-11-11  Chris Dumez  <cdumez@apple.com>

        Move '-webkit-marquee-speed' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138595

        Reviewed by Antti Koivisto.

        Move '-webkit-marquee-speed' CSS property from DeprecatedStyleBuilder
        to the new StyleBuilder by adding a new MarqueeSpeed Converter.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyMarqueeSpeed::applyValue): Deleted.
        (WebCore::ApplyPropertyMarqueeSpeed::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertMarqueeSpeed):

2014-10-07  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Limit the size of explicit/implicit grid
        https://bugs.webkit.org/show_bug.cgi?id=136217

        Reviewed by Andreas Kling.

        A recent change in the specs allow us to set a limit (maximum
        size) for both the explicit and implicit grids so we can protect
        ourselves from absurdly huge grid specifications. It was decided
        to use the recommended limit which is 1 million.

        This means that we can remove the old limitation for the number of
        repetitions in repeat(). Instead we now clamp the number of
        repetitions to the maximum value that allow us to have the maximum
        number of whole repetitions without exceeding the track number
        limit.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackRepeatFunction): Replaced the
        old limit by the new one.
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeItemsOnGrid): Use the amount of tracks
        provided by GridResolvedPosition.
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator): Ditto.
        * rendering/style/GridCoordinate.h:
        (WebCore::GridSpan::GridSpan):
        * rendering/style/GridResolvedPosition.cpp:
        (WebCore::GridResolvedPosition::explicitGridColumnCount): Bring
        the static function back to life.
        (WebCore::GridResolvedPosition::explicitGridRowCount): Ditto.
        (WebCore::explicitGridSizeForSide):
        * rendering/style/GridResolvedPosition.h:

2014-11-11  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS4 Selectors: Add multiple pseudo elements support to :matches
        https://bugs.webkit.org/show_bug.cgi?id=138214

        Reviewed by Benjamin Poulain.

        In this patch, we implement (multiple) pseudo elements support to :matches.
        Currently, we implemented it in css/SelectorChecker and there's no CSS JIT implementation.

        And we change the semantics of pseudo element selector behavior.
        Previously when pseudo element selector appeared in the non-rightmost
        fragment, it was ignored. This patch changes it to unmatched.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::CheckingContextWithStatus::CheckingContextWithStatus):
        (WebCore::SelectorChecker::match):
        (WebCore::hasScrollbarPseudoElement):
        (WebCore::SelectorChecker::matchRecursively):
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matchSelectorList):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::MatchResult::matches):
        (WebCore::SelectorChecker::MatchResult::updateWithMatchType):
        (WebCore::SelectorChecker::MatchResult::fails):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPseudoElement):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setHasPseudoStyles):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::PseudoIdSet::PseudoIdSet):
        (WebCore::PseudoIdSet::fromMask):
        (WebCore::PseudoIdSet::has):
        (WebCore::PseudoIdSet::add):
        (WebCore::PseudoIdSet::merge):
        (WebCore::PseudoIdSet::operator &):
        (WebCore::PseudoIdSet::operator |):
        (WebCore::PseudoIdSet::operator bool):
        (WebCore::PseudoIdSet::data):

2014-11-10  Chris Dumez  <cdumez@apple.com>

        Lazily create HTMLInputElement's inputType and shadow subtree
        https://bugs.webkit.org/show_bug.cgi?id=138524

        Reviewed by Ryosuke Niwa.

        When an HTMLInputElement was created by the parser, we would first call
        HTMLInputElement::create(), then call Element::parserSetAttributes() on
        the constructed input. With the previous implementation, this was a bit
        inefficient because HTMLInputElement::create() would construct a
        TextInputType inputType (as this is the default) as well as its
        corresponding shadow subtree. Then, parserSetAttributes() would often
        set the |type| attribute and would need to destroy this input type as
        well as its subtree if the new |type| is not 'text', to create a new
        inputType / shadow subtree of the right type. The profiler showed that
        this was fairly expensive.

        To improve this, this patch delays the inputType / shadow subtree
        creation when the HTMLInputElement is constructed by the parser, until
        the attributes are actually set by the parser. This way, we directly
        create an inputType / shadow subtree of the right type.

        I see a 1.4% speed up on speedometer (73.95 -> 75.0).

        No new tests, no behavior change.

        * dom/Element.cpp:
        (WebCore::Element::parserSetAttributes):
        (WebCore::Element::parserDidFinishParsingAttributes):
        * dom/Element.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::runPostTypeUpdateTasks):
        (WebCore::HTMLInputElement::ensureInputType):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::parserDidFinishParsingAttributes):
        * html/HTMLInputElement.h:

2014-11-10  Benjamin Poulain  <bpoulain@apple.com>

        Add parsing support for the extended :nth-last-child(An+B of selector-list) defined
        https://bugs.webkit.org/show_bug.cgi?id=138520

        Reviewed by Andreas Kling.

        Add parsing for :nth-last-child(An+B of selector-list). The selector is defined
        in CSS Selectors Level 4: http://dev.w3.org/csswg/selectors4/#the-nth-last-child-pseudo

        Tests: fast/css/parsing-css-nth-last-child-of-1.html
               fast/css/parsing-css-nth-last-child-of-2.html
               fast/css/parsing-css-nth-last-child-of-3.html
               fast/css/parsing-css-nth-last-child-of-4.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):

2014-11-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG foreign objects do not inherit the container coordinates system if they are repainted.
        https://bugs.webkit.org/show_bug.cgi?id=138481.

        Reviewed by Simon Fraser.

        If a foreign object is included in an SVG, it should inherit the coordinates system
        of the container if it is repainted. The foreign object is actually redrawn in the
        CSS coordinates system regardless of the transformation that may be applied to the
        container.

        The bug is RenderSVG* classes use computeFloatRectForRepaint(), but the rest of the
        render classes use computeRectForRepaint(). RenderSVGForeignObject::computeRectForRepaint()
        was not defined, so we end up hitting RenderObject::computeRectForRepaint() for 
        a RenderSVGTransformableContainer and completely miss the transform.

        Tests: svg/transforms/svg-transform-foreign-object-repaint.html

        Implement RenderSVGForeignObject::computeRectForRepaint() so we can apply the
        container transformation on the SVG foreign object repaint rectangle.
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeRectForRepaint):
        * rendering/svg/RenderSVGForeignObject.h:

2014-11-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr<> and std::make_unique<> in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138560

        Reviewed by Chris Dumez.

        Clean up unused OwnPtr.h and PassOwnPtr.h and use std::unique_ptr.

        No new tests, no behavior changes.

        * Modules/encryptedmedia/CDMPrivateMediaPlayer.h:
        * dom/ContainerNode.h:
        * dom/ElementIteratorAssertions.h:
        (WebCore::ElementIteratorAssertions::ElementIteratorAssertions):
        * dom/ElementRareData.h:
        * page/DragController.h:
        * rendering/RenderView.h:

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

        WK1: Support default actions for editable text with misspelled word
        https://bugs.webkit.org/show_bug.cgi?id=138590
        -and corresponding-
        rdar://problem/18877506

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-11-10  Chris Dumez  <cdumez@apple.com>

        Remove unnecessary null check in FrameSelection::nodeWillBeRemoved()
        https://bugs.webkit.org/show_bug.cgi?id=138578

        Reviewed by Andreas Kling.

        Remove unnecessary null check in FrameSelection::nodeWillBeRemoved()
        and turn the argument into a reference to make it clear it cannot be
        null.

        No new tests, no behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemoveChild):
        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        * dom/Document.h:
        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::nodeWillBeRemoved):
        (WebCore::NodeIterator::updateForNodeRemoval):
        * dom/NodeIterator.h:
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::boundaryNodeWillBeRemoved):
        (WebCore::Range::nodeWillBeRemoved):
        * dom/Range.h:
        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::setToBeforeChild):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::updatePositionForNodeRemovalPreservingChildren):
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        (WebCore::DeleteSelectionCommand::removeRedundantBlocks):
        * editing/FrameSelection.cpp:
        (WebCore::removingNodeRemovesPosition):
        (WebCore::DragCaretController::nodeWillBeRemoved):
        (WebCore::FrameSelection::nodeWillBeRemoved):
        (WebCore::FrameSelection::respondToNodeModification):
        * editing/FrameSelection.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):
        * editing/htmlediting.cpp:
        (WebCore::updatePositionForNodeRemoval):
        * editing/htmlediting.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::nodeWillBeRemoved):
        * page/EventHandler.h:

2014-11-10  Benjamin Poulain  <bpoulain@apple.com>

        Fix the build when CSS Selectors Level 4 is disabled
        https://bugs.webkit.org/show_bug.cgi?id=138533

        * css/CSSSelector.cpp:
        (WebCore::appendArgumentList):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementLinkMatching):

2014-11-10  Chris Dumez  <cdumez@apple.com>

        Support throttling of DOMTimers using nested setTimeout() calls
        https://bugs.webkit.org/show_bug.cgi?id=138262

        Reviewed by Gavin Barraclough.

        Extend DOMTimers throttling support to timers that are using nested
        setTimeout() calls instead of a setInterval(). To achieve this, this
        patch introduces a NestedTimersMap singleton class where nested timers
        are added, and for which we potentially update the next firing time,
        after the parent timer is done executing.

        I have verified this helps on ebay.com for example, which has timers
        interacting with non-visible plugins that are scheduled using nested
        setTimeout() calls with a frequency of 150 / 200 ms.

        This is a second take on r175441, which caused intermittent crashes.
        This time, nested timers are removed from the NestedTimersMap when
        DOMTimer::removeById() is called. It would be unsafe to use the nested
        timer afterwards because we don't hold a strong reference to it and
        the ScriptExecutionContext is unref'ing the DOMTimer when
        ScriptExecutionContext::removeTimeout() is called from
        DOMTimer::removeById().

        * page/DOMTimer.cpp:
        (WebCore::NestedTimersMap::NestedTimersMap):
        (WebCore::NestedTimersMap::~NestedTimersMap):
        (WebCore::NestedTimersMap::add):
        (WebCore::NestedTimersMap::remove):
        (WebCore::NestedTimersMap::begin):
        (WebCore::NestedTimersMap::end):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):

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

        [EME][Mac] Add a systemCode to distinguish when no expired sessions were found in response to a "keyrelease" message.
        https://bugs.webkit.org/show_bug.cgi?id=138199

        Reviewed by Eric Carlson.

        Clients may want to be able to distinguish between cases where expired session data is not supported, and when
        those data are supported, but none are found.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::generateKeyReleaseMessage):

2014-11-04  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r174823): Several tests fail due to canplaythrough firing before tracks are available
        https://bugs.webkit.org/show_bug.cgi?id=137882

        Reviewed by Eric Carlson.

        For HLS streams with only one video, audio, or text track, there will be no media selection group
        for that media characteristic. When culling out AVPlayerItemTracks in tracksDidChange(), do not skip
        tracks for which there is no matching AVMediaSelectionGroup.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasLoadedMediaSelectionGroups): Refactored.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForLegibleMedia): Call above.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):

2014-11-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175813.
        https://bugs.webkit.org/show_bug.cgi?id=138573

        Breaks complex text layout spacing (Requested by litherum on
        #webkit).

        Reverted changeset:

        "[OSX] Some words are placed on top of each other in complex
        text layout"
        https://bugs.webkit.org/show_bug.cgi?id=138348
        http://trac.webkit.org/changeset/175813

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

        Rolling out failed build fix 
        http://trac.webkit.org/changeset/175819

        * WebCore.exp.in:

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

        Speculative build fix.

        * WebCore.exp.in:

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

        Speculative build fix.

        * WebCore.exp.in:

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

        [iOS WK2] Layers with negative z position disapear behind the page tiles
        https://bugs.webkit.org/show_bug.cgi?id=138571
        rdar://problem/18873480

        Reviewed by Dean Jackson.

        Some crufty iOS-only code in RenderLayerBacking::parentForSublayers() caused us to fail
        to use the m_childContainmentLayer as the ancestor for descendants, so layers with
        negative z position would get depth-sorted behind the tiles.
        
        Fix by removing that code.
        
        This should have been detected by compositing/tile-cache-must-flatten.html, but
        testing infrastructure suck prevented us from doing so.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::parentForSublayers):
        * rendering/RenderLayerBacking.h: Just some nullptr cleanup.

2014-11-10  Chris Dumez  <cdumez@apple.com>

        Move 'resize' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138550

        Reviewed by Andreas Kling.

        No new tests, no behavior change.

        Move 'resize' CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder by adding a new 'Resize' Converter function.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyResize::applyValue): Deleted.
        (WebCore::ApplyPropertyResize::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertResize):

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

        Speculative build fix.

        * editing/DictionaryLookup.h:
        * editing/DictionaryLookup.mm:

2014-11-10  Chris Dumez  <cdumez@apple.com>

        Move 'text-indent' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138547

        Reviewed by Andreas Kling.

        Move 'text-indent' CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder, by using custom code.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyTextIndent::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyTextIndent::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyTextIndent::applyValue): Deleted.
        (WebCore::ApplyPropertyTextIndent::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyInheritTextIndent):
        (WebCore::StyleBuilderFunctions::applyInitialTextIndent):
        (WebCore::StyleBuilderFunctions::applyValueTextIndent):

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

        WK1: Support default actions for read-only text
        https://bugs.webkit.org/show_bug.cgi?id=138552
        -and corresponding-
        rdar://problem/18877483

        Reviewed by Tim Horton.

        WK1 now needs to do a lot of dictionary lookup operations that it did not 
        previously have to handle. So this patch takes a lot of that functionality, which 
        was implemented as static functions in WebPageMac for WK2 and moves it into 
        WebCore.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/DictionaryLookup.h: Added.
        * editing/DictionaryLookup.mm: Added.
        (WebCore::isPositionInRange):
        (WebCore::shouldUseSelection):
        (WebCore::rangeExpandedAroundPositionByCharacters):
        (WebCore::rangeForDictionaryLookupForSelection):
        (WebCore::rangeForDictionaryLookupAtHitTestResult):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2014-11-10  Myles C. Maxfield  <mmaxfield@apple.com>

        [OSX] Some words are placed on top of each other in complex text layout
        https://bugs.webkit.org/show_bug.cgi?id=138348

        Reviewed by Simon Fraser.

        Some complex text layouts have lots of diacritics being placed all over the place.
        CoreText sometimes compensates for this by adjusting the advances of the glyphs
        throughout the string to make glyphs appear in the correct place. This means that
        we can't naively cache the width of a space character; instead, we must obey
        CoreText when it gives us an advance for a space.

        Test: fast/text/large-space-width-complex.html

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

2014-11-10  Eric Carlson  <eric.carlson@apple.com>

        [iOS] wireless playback placeholder UI doesn't always draw
        https://bugs.webkit.org/show_bug.cgi?id=138548

        While it is important to only listen for the 'webkitplaybacktargetavailabilitychanged' event
        when we are displaying inline controls because listening for it increases power consumption,
        we should always listen for the 'webkitcurrentplaybacktargetiswirelesschanged' event because
        it controls whether or not we draw the placeholder UI which is always visible during wireless
        playback.

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.addVideoListeners): Always listen for the
            'webkitcurrentplaybacktargetiswirelesschanged' event.
        (ControllerIOS.prototype.removeVideoListeners): Always stop listening for the 
            'webkitcurrentplaybacktargetiswirelesschanged' event.
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): Call updateControls so we update 
            the type of controls rendered and start listening for wireless target changes immediately.
        (ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): Don't start and stop 
            listening for 'webkitcurrentplaybacktargetiswirelesschanged', we should always listen for it.

2014-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Crash in WebCore::Node::getFlag
        https://bugs.webkit.org/show_bug.cgi?id=137961

        Reviewed by Antti Koivisto.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Null pointer check added.

2014-11-10  Mihnea Ovidenie  <mihnea@adobe.com>

        ASSERTION FAILED: !object || !object->parent()->isRuby() || is<RenderRubyRun>(*object) || (object->isInline() && (object->isBeforeContent() || object->isAfterContent())) || (object->isAnonymous() && ... ) in WebCore::isAnonymousRubyInlineBlock
        https://bugs.webkit.org/show_bug.cgi?id=137958

        Reviewed by Chris Dumez.

        When a ruby element, with block behavior, dynamically changes its style
        from multicol to without multicol, we have to remove its special children,
        RenderMultiColumnFlowThread and RenderMultiColumnSet, the normal way using
        the method in RenderBlockFlow base class. This patch adds both
        RenderMultiColumnFlowThread and RenderMultiColumnSet to the list of RenderRuby
        children removed normally and adds a new function - isRubyChildForNormalRemove -
        to test the condition and use it in the assertion in RenderRuby*::removeChild
        method.

        Test: fast/multicol/newmulticol/ruby-from-multicol-to-auto.html

        * rendering/RenderRuby.cpp:
        (WebCore::isRubyChildForNormalRemove):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::removeChild):

2014-11-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Remove GamepadDeviceEfl::create()
        https://bugs.webkit.org/show_bug.cgi?id=138553

        Reviewed by Darin Adler.

        As a step to use std::unique_ptr<> and std::make_unique<>, this patch removes GamepadDeviceEfl::create().
        Instead we use std::make_unique<>.

        No new tests, no behavior changes.

        * platform/efl/GamepadsEfl.cpp:
        (WebCore::GamepadsEfl::registerDevice):
        (WebCore::GamepadDeviceEfl::create): Deleted.
        (WebCore::GamepadsEfl::unregisterDevice): Deleted.

2014-11-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove create() factory function in FooAnimationValue classes
        https://bugs.webkit.org/show_bug.cgi?id=138206

        Reviewed by Darin Adler.

        As a step to use std::unique_ptr and std::make_unique, this patch removes create()
        factory function in FooAnimationValue classes. As this changes, FooAnimationValue::create()
        are changed to std::make_unique<>.

        No new tests, no behavior changes.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::KeyframeValueList::insert):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::FloatAnimationValue::FloatAnimationValue):
        (WebCore::TransformAnimationValue::TransformAnimationValue):
        (WebCore::FilterAnimationValue::FilterAnimationValue):
        (WebCore::FloatAnimationValue::create): Deleted.
        (WebCore::TransformAnimationValue::create): Deleted.
        (WebCore::FilterAnimationValue::create): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):

2014-11-09  Chris Dumez  <cdumez@apple.com>

        Add a more correct way to compare floating point numbers and use it
        https://bugs.webkit.org/show_bug.cgi?id=138527

        Reviewed by Darin Adler.

        Use the new WTF::areEssentuallyEqual() utility function from MathExtras.h
        to compare floating-point numbers.

        No new tests, no behavior change.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
        * platform/graphics/FloatQuad.cpp:
        (WebCore::FloatQuad::isRectilinear):
        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::Radii::isUniformCornerRadius):
        * platform/graphics/FloatSize.h:
        (WebCore::areEssentiallyEqual):
        (WebCore::withinEpsilon): Deleted.

2014-11-08  Simon Fraser  <simon.fraser@apple.com>

        Implement round-rect clipping on video elements
        https://bugs.webkit.org/show_bug.cgi?id=138537
        rdar://problem/9534399

        Reviewed by Darin Adler.
        
        Support border-radius on video and other layers with composited contents,
        by pushing a FloatRoundedRect onto the GraphicsLayer as the contentsClippingRect,
        and, on Mac, using layer corner-radius or a CAShapeLayer mask.

        Test: compositing/video/video-border-radius.html

        * WebCore.exp.in:
        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::Radii::isUniformCornerRadius): Returns true if all
        corner radii are the same, and have equal widths and heights.
        * platform/graphics/FloatRoundedRect.h: Allow construction without an explicit
        rect.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer): nullptr goodness.
        (showGraphicsLayerTree): Print contents layers when debugging.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsClippingRect): Make this take a FloatRoundedRect.
        (WebCore::GraphicsLayer::setContentsClippingRect):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsClippingRect):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::setContentsToPlatformLayer):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateClippingStrategy): Determines whether we can simply
        use corner-radius on the existing contentsClippingLayer, or whether we have to
        create a shape layer to use as a mask.
        (WebCore::GraphicsLayerCA::updateContentsRects): We have to add/remove the shape layer
        based on the rounded rect radii. Calls updateClippingStrategy() on the clipping layer,
        and also updates clones accordingly.
        (WebCore::dumpInnerLayer):
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties): Dump all the inner layers
        (requiring on test rebaseline), including the new shape and backdrop layers.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h: Add a new shape layer type.
        * platform/graphics/ca/mac/PlatformCALayerMac.h: Support for corner radius and
        a rounded rect shape mask.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::setMask):
        (PlatformCALayerMac::cornerRadius):
        (PlatformCALayerMac::setCornerRadius):
        (PlatformCALayerMac::shapeRoundedRect):
        (PlatformCALayerMac::setShapeRoundedRect):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::cornerRadius):
        (PlatformCALayerWin::setCornerRadius):
        (PlatformCALayerWin::shapeRoundedRect):
        (PlatformCALayerWin::setShapeRoundedRect):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::resetContentsRect): Use getRoundedInnerBorderFor() to get
        the rounded rect used to clip contents.
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers): Push a FloatRoundedRect for the contents clip,
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor): Ditto.
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage): Ditto.
        (WebCore::RenderLayerBacking::updateImageContents): Get the rounded rect clip.
        * rendering/RenderLayerBacking.h: nullptr.

2014-11-09  Darin Adler  <darin@apple.com>

        Fix various cases of incorrect cross-thread capture of non-thread-safe RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=138539

        Reviewed by Alexey Proskuryakov.

        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect): Use StringCapture
        instead of isolatedCopy, to avoid a problem where the original thread does its deref
        after passing the string to the other thread.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail): Ditto.

        * dom/Document.cpp:
        (WebCore::Document::addConsoleMessage): Pass a StringCapture when creating
        AddConsoleMessageTask. Same reason as above, but in a different context.
        (WebCore::Document::addMessage): Ditto.

        * dom/ScriptExecutionContext.h: Changed AddConsoleMessageTask to take and
        capture a StringCapture rather than a String, for the same reason as above.

        * fileapi/AsyncFileStream.cpp:
        (WebCore::AsyncFileStream::write): Use URLCapture instead of trying to use
        StringCapture on a URL, since that doesn't preserve the validity flag.

        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Use StringCapture.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck): Ditto.

        * platform/URL.h: Added URLCapture.

        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved): Remove incorrect pointless code that creates a new URL
        from an existing URL with the ParsedURLString constructor.

        * workers/DefaultSharedWorkerRepository.cpp: Fixed code that was trying to copy a URL
        by copying a string to instead just use URL::copy. The comment claimed that URL::copy
        is not thread safe, but that claim is incorrect.
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject): Use StringCapture.
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject): Ditto.
        (WebCore::DefaultSharedWorkerRepository::getProxy): Use URL::copy.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addConsoleMessage): Use StringCapture.
        (WebCore::WorkerGlobalScope::addMessage): Ditto.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject): Ditto.
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject): Ditto.
        (WebCore::WorkerMessagingProxy::sendMessageToInspector): Ditto.
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector): Ditto.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::postTaskAndTerminate): Make a Task with make_unique
        rather than with Task::create. Removed an extra isolatedCopy, unneeded because
        the Task constructor already does an isolatedCopy.
        (WebCore::WorkerRunLoop::postTaskForMode): Ditto.
        (WebCore::WorkerRunLoop::Task::create): Deleted.

        * workers/WorkerRunLoop.h: Removed unneeded create function and explicit
        public empty destructor.

2014-11-09  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for HTMLCollection subclasses
        https://bugs.webkit.org/show_bug.cgi?id=138541

        Reviewed by Sam Weinig.

        Use is<>() / downcast<>() for HTMLCollection subclasses for
        safety and consistency with the rest of the code base.

        No new tests, no behavior change.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * html/HTMLAllCollection.h:
        * html/HTMLCollection.cpp:
        (WebCore::isMatchingHTMLElement):
        (WebCore::isMatchingElement):
        * html/HTMLCollection.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::options):
        * html/HTMLTableRowsCollection.h:

2014-11-08  Chris Dumez  <cdumez@apple.com>

        Call faster HTMLElement::hasTagName() in HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=138529

        Reviewed by Darin Adler.

        Call faster HTMLElement::hasTagName() in HTMLCollection instead of
        slower Node::hasTagName() by restructuring the code a bit to
        distinguish collection that deal only with HTMLElements from others.

        No new tests, no behavior change.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingHTMLElement):
        (WebCore::isMatchingElement):

2014-11-08  Chris Dumez  <cdumez@apple.com>

        Move isEmptyValue() logic from HTMLInputElement to TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=138538

        Reviewed by Darin Adler.

        Move isEmptyValue() logic from HTMLInputElement to TextFieldInputType
        as this only makes sense for text field input types.

        No new tests, no behavior change.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isEmptyValue):
        * html/InputType.cpp:
        (WebCore::InputType::isEmptyValue):
        * html/InputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isEmptyValue):
        * html/TextFieldInputType.h:

2014-11-08  Darin Adler  <darin@apple.com>

        Replace FileThread class with a single function
        https://bugs.webkit.org/show_bug.cgi?id=138282

        Reviewed by Alexey Proskuryakov.

        * CMakeLists.txt: Removed FileThread.cpp.

        * WebCore.vcxproj/WebCore.vcxproj: Removed FileThread.cpp/.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/generic/ActiveDOMCallback.cpp: Removed unneeded includes.
        * dom/ActiveDOMObject.cpp: Ditto.

        * fileapi/AsyncFileStream.cpp:
        (WebCore::callOnFileThread): Added. Implements the file thread.
        (WebCore::AsyncFileStream::AsyncFileStream): Take a reference to the client.
        Make m_internals. Use the destroyed flag instead of trickier techniques to
        handle stopping. Once the stream is destroyed, there will be no further callbacks.
        (WebCore::AsyncFileStream::~AsyncFileStream): Added assertions and merged in the
        stop behavior here. This class no longer requires an explicit stop function.
        (WebCore::AsyncFileStream::perform): Added. Helper used for all the operations
        below. Takes a function that performs an operation and then returns a client
        callback function. Respects the m_stopped boolean on the file thread (so we
        don't do extra operations) and on the client thread (so we are guaranteed not
        to get any client callbacks even if the file thread was partway through an
        operation).
        (WebCore::AsyncFileStream::getSize): Changed to use the perform function.
        (WebCore::AsyncFileStream::openForRead): Ditto. Also fixed reference count
        thread safety issue by capturing a StringCapture rather than a String.
        (WebCore::AsyncFileStream::openForWrite): Ditto.
        (WebCore::AsyncFileStream::close): Changed to use callOnFileThread.
        (WebCore::AsyncFileStream::read): Changed to use the perform function.
        (WebCore::AsyncFileStream::write): Ditto. Also fixed reference count
        thread safety issue by capturing a StringCapture rather than a URL.
        (WebCore::AsyncFileStream::truncate): Ditto.

        * fileapi/AsyncFileStream.h: Removed use of RefCounted since we only need
        single ownership. Removed the stop function, since we can now stop when
        the stream is destroyed since we have single ownership. Made a new Internals
        object to handle destruction while operations are still going on the file thread.

        * fileapi/FileThread.cpp: Removed.
        * fileapi/FileThread.h: Removed.

        * loader/ResourceLoader.cpp: Removed unneeded include.

        * platform/FileStream.cpp:
        (WebCore::FileStream::~FileStream): Merged the stop function in here.

        * platform/FileStream.h: Removed use of RefCounted since we only need
        single ownership. Removed the empty start function. Removed the stop function,
        since we can now stop when the stream is destroyed since we have single ownership.

        * platform/FileStreamClient.h: Removed unneeded didStart and didStop.

        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle): Use make_unique to make the
        stream objects instead of custom create functions.
        (WebCore::BlobResourceHandle::~BlobResourceHandle): Removed now-unneeded code
        to call stop functions. Destroying the objects now takes care of the this, and
        that's done by the unique_ptrs.
        (WebCore::BlobResourceHandle::cancel): Removed the rest of the code to stop the
        m_asyncStream, keeping only the code that sets it to null. That now stops the
        stream by destroying it.

        * platform/network/BlobResourceHandle.h: Use std::unique_ptr rather than
        RefPtr for the file stream objects.

        * storage/StorageThread.h: Tweaked formatting of std::function<void()> to
        match the format used elsewhere in WebKit.

2014-11-08  Simon Fraser  <simon.fraser@apple.com>

        Don't try to schedule a GraphicsLayer flush when propagating changes to replicas inside a flush
        https://bugs.webkit.org/show_bug.cgi?id=138532

        Reviewed by Dan Bernstein.

        When changing masks on replica layers with certain layer configurations, 
        it was possible to hit an assertion that a flush was being scheduled when already
        flushing, via propagateLayerChangeToReplicas(). Fix by passing the scheduleFlush
        flag along.
        
        Not testable with current GraphicsLayer configurations.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/GraphicsLayerCA.h:

2014-11-08  Beth Dakin  <bdakin@apple.com>

        Implement action menu support for videos
        https://bugs.webkit.org/show_bug.cgi?id=138534
        -and corresponding-
        rdar://problem/18742164

        Reviewed by Tim Horton.

        Export needed symbols and added not-yet-implemented 
        HitTestResult::isMediaThatCanBeDownloaded() so that action menus will work as 
        expected once it is implemented.
        * WebCore.exp.in:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isMediaThatCanBeDownloaded):
        * rendering/HitTestResult.h:

2014-11-08  Chris Dumez  <cdumez@apple.com>

        Speed up HTMLInputElement::isEmptyValue()
        https://bugs.webkit.org/show_bug.cgi?id=138515

        Reviewed by Geoffrey Garen.

        HTMLInputElement::isEmptyValue() was calling
        HTMLTextFormControlElement::innerTextValue() which causes a full
        subtree traversal to construct a string representation of that subtree
        using a StringBuilder. In the case of HTMLInputElement::isEmptyValue(),
        we don't have to do all this: We don't need to construct a String
        and we can return false as soon as we find a non-empty descendant.

        No new tests, no behavior change.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isEmptyValue):
        * html/HTMLInputElement.h:

2014-11-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] video is sometimes allowed to play from the background
        https://bugs.webkit.org/show_bug.cgi?id=138522

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::displayType): New.
        * html/HTMLMediaElement.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::isHidden): New, client passthrough.
        (WebCore::MediaSession::displayType): Ditto.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::displayType):

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionCanLoadMedia): New, default implementation returns
            true if client is visible or playing.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionCanLoadMedia): iOS override, also allows buffering
            when displaying optimized fullscreen.

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

        Fix the build after r175772

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):

2014-11-07  Benjamin Poulain  <benjamin@webkit.org>

        Make the Selector's specificity part of Selector matching
        https://bugs.webkit.org/show_bug.cgi?id=138486

        Reviewed by Andreas Kling.

        In CSS Selectors Level 4, the specificity of selectors is computed dynamically
        based on which element is being matched.

        For example, a selector:
            :matches(#foo, .bar, baz)
        has a specificity of
            (1, 0, 0) on <baz id=foo class=bar>
            (0, 1, 0) on <baz class=bar>
            (0, 0, 1) on <baz>

        Previously, the specificity of each selector was computed statically when populating
        RuleSet. With more recent CSS, this gives us the wrong specificity because we do not know
        how the selectors applies to the target.

        This patch moves one tiny step in the direction of dynamic specificity. The specificity
        is removed from RuleSet and is moved inside Selector Matching.

        There is one bit worth keeping static: matching based on rule hash. This path is important
        to avoid spending time compiling trivial selectors.
        In order to keep rule hash matching working, the RuleData store which specificity class
        the rule has in addition to the information about matching/not-matching. When going through
        the fast path in ElementCollector, we compute the right specificity based on the type
        of rule-hash matching.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        * css/CSSSelector.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::compareRules):
        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:
        (WebCore::computeMatchBasedOnRuleHash):
        (WebCore::RuleData::RuleData):
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash): Deleted.
        * css/RuleSet.h:
        (WebCore::RuleData::matchBasedOnRuleHash):
        (WebCore::RuleData::hasRightmostSelectorMatchingHTMLBasedOnRuleHash): Deleted.
        (WebCore::RuleData::specificity): Deleted.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        * css/SelectorChecker.h:
        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext):
        (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext):
        (WebCore::SelectorCompiler::simpleSelectorCheckerFunction): Deleted.
        (WebCore::SelectorCompiler::selectorCheckerFunctionWithCheckingContext): Deleted.
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):
        (WebCore::SelectorDataList::selectorClosest):
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithCheckingContext):
        (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

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

        CSP is enforced for eval in report-only mode on first page load
        https://bugs.webkit.org/show_bug.cgi?id=138492
        rdar://problem/15782525

        Reviewed by Daniel Bates.

        This is covered by existing tests when running as one test per process invocation.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirectiveList::allowEval): Allow when in report only mode. The allowEval
        function itself needs to return false, because it's used in checkEvalAndReportViolation().
        (WebCore::CSPDirectiveList::allowJavaScriptURLs): Apply the same fix, although it's
        not changing the behavior - this function is never called with ContentSecurityPolicy::SuppressReport.
        (WebCore::CSPDirectiveList::allowInlineEventHandlers): Ditto.
        (WebCore::CSPDirectiveList::allowInlineScript): Ditto.
        (WebCore::CSPDirectiveList::allowInlineStyle): Ditto.
        (WebCore::CSPDirectiveList::allowPluginType): Ditto.
        (WebCore::CSPDirectiveList::allowScriptFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowObjectFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowChildFrameFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowImageFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowStyleFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowFontFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowMediaFromSource): Ditto.
        (WebCore::CSPDirectiveList::allowConnectToSource): Ditto.
        (WebCore::CSPDirectiveList::allowFormAction): Ditto.
        (WebCore::CSPDirectiveList::allowBaseURI): Ditto.
        (WebCore::ContentSecurityPolicy::didReceiveHeader): Remove isReportOnly() check,
        which is now inside allowEval().

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

        [Mac] Avoid repainting scrollbar track when the scrollbar track is transparent.
        <https://webkit.org/b/138521>
        <rdar://problem/18892090>

        Reviewed by Simon Fraser.

        Don't bother invalidating the entire WebCore scrollbar when we've opted into
        AppKit's special mode to use individual layers for scrollbar components.
        NSScrollerImp will invalidate what's necessary below e.g setKnobAlpha.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation setCurrentProgress:]):

2014-11-07  Chris Dumez  <cdumez@apple.com>

        Rename HTMLInputElement::imageLoader() to ensureImageLoader()
        https://bugs.webkit.org/show_bug.cgi?id=138508

        Reviewed by Andreas Kling.

        Rename HTMLInputElement::imageLoader() to ensureImageLoader() and have
        it return a reference to make it clear that it constructs an
        ImageLoader if missing.
        Also introduce a lightweight imageLoader() getter which just returns
        the imageLoader or null if missing.

        No new tests, no behavior change.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::ensureImageLoader):
        (WebCore::HTMLInputElement::didMoveToNewDocument):
        (WebCore::HTMLInputElement::imageLoader): Deleted.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::imageLoader):
        (WebCore::HTMLInputElement::hasImageLoader): Deleted.
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::srcAttributeChanged):
        (WebCore::ImageInputType::attach):
        (WebCore::ImageInputType::height):
        (WebCore::ImageInputType::width):

2014-11-07  Chris Dumez  <cdumez@apple.com>

        Move 'webkit-clip-path' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138452

        Reviewed by Andreas Kling.

        Move 'webkit-clip-path' CSS property from DeprecatedStyleBuilder to the
        new StyleBuilder so that it is now generated from CSSPropertyNames.in.

        A ClipPath converter was added to support this. Custom code was avoided
        by replacing if checks by assertions, relying on the CSSParser to make
        sure the input is valid.

        Test: fast/masking/clip-path-bad-value.html

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyClipPath::setValue): Deleted.
        (WebCore::ApplyPropertyClipPath::applyValue): Deleted.
        (WebCore::ApplyPropertyClipPath::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertClipPath):

2014-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pseudo element matchedCSSRules do not include matching selector info
        https://bugs.webkit.org/show_bug.cgi?id=138438

        Reviewed by Benjamin Poulain.

        Test: inspector/css/psuedo-element-matches.html

        Element::matches is not the correct API to use to check selectors with pseudo-elements.
        Instead we should use the CSS Selector checking machinary which understands them.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        Some RefPtr release improvements.

        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        Use a SelectorChecker to check each Selector against the element.
        This matches the SelectorChecker used when we collected the rules
        for this element.

2014-11-07  Chris Dumez  <cdumez@apple.com>

        Drop useless HTMLElement::isURLAttribute() override
        https://bugs.webkit.org/show_bug.cgi?id=138479

        Reviewed by Mark Lam.

        Drop useless HTMLElement::isURLAttribute() override as it is doing
        nothing but calling the parent class' isURLAttribute().

        No new tests, no behavior change.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isURLAttribute): Deleted.
        * html/HTMLElement.h:

2014-11-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Update optimized fullscreen media controls
        https://bugs.webkit.org/show_bug.cgi?id=138493

        Reviewed by Brent Fulgham.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::fullscreenMode): New.
        (WebCore::MediaControlsHost::mediaUIImageData): New.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:

        * Modules/mediacontrols/mediaControlsiOS.css:
        Renamed -webkit-media-controls-wireless-playback-status to -webkit-media-controls-inline-playback-placeholder
            because it is now used for other inline playback status display. Add z-index:0 so the placeholder
            renders above captions. Remove the background-image, it is now set from script.
        (audio::-webkit-media-controls-inline-playback-placeholder): 
        (audio::-webkit-media-controls-inline-playback-placeholder.hidden):
        (video::-webkit-media-controls-optimized-fullscreen-button):
        (audio::-webkit-media-controls-wireless-playback-status): Deleted.
        (audio::-webkit-media-controls-wireless-playback-status.hidden): Deleted.
        (video::-webkit-media-controls-optimized-fullscreen-button:active): Deleted.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS): Set doingSetup to true around setup so we don't draw the inline controls
            briefly when an element is created as a result of a user gesture.
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton): Don't allow inline controls during 
            initial setup to prevent inline controls from begin drawn briefly when a media element
            is created and inserted by a script called from a user gesture.
        (ControllerIOS.prototype.updateWirelessPlaybackStatus): wirelessPlaybackStatus -> inlinePlaybackPlaceholder.
        (ControllerIOS.prototype.createControls): Ditto. Add style rules for optimized fullscreen button.
        (ControllerIOS.prototype.configureInlineControls): Add the inlinePlaybackPlaceholder as a peer of
            the inline controls compositing child instead of as a child so it renders correctly.
        (ControllerIOS.prototype.addControls):
        (ControllerIOS.prototype.updateControls): wirelessPlaybackStatus -> inlinePlaybackPlaceholder.
        (ControllerIOS.prototype.handleWrapperTouchStart):
        (ControllerIOS.prototype.get pageScaleFactor): Cleanup.
        (ControllerIOS.prototype.set pageScaleFactor): Ditto.
        (ControllerIOS.prototype.handleFullscreenChange): Show the placeholder.

        * WebCore.exp.in: Export _wkGetMediaUIImageData.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::fullscreenMode): Expose fullscreen mode.

        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-11-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Try to fix GTK build after r175719.

        Rename the Timer fired function as requestAnimationTimerFired() to
        avoid ambiguity.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::ScrollAnimatorNone):
        (WebCore::ScrollAnimatorNone::requestAnimationTimerFired):
        (WebCore::ScrollAnimatorNone::animationTimerFired): Deleted.
        * platform/ScrollAnimatorNone.h:

2014-11-06  Chris Dumez  <cdumez@apple.com>

        Remove useless if check in HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=138485

        Reviewed by Daniel Bates.

        Remove useless if check in HTMLInputElement::setValue(). It was
        inadvertently left in as part of r94836.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue):

2014-11-06  Simon Fraser  <simon.fraser@apple.com>

        Put names on a couple of video-related CALayers
        https://bugs.webkit.org/show_bug.cgi?id=138491

        Reviewed by Eric Carlson.

        In debug, set layer names on a couple of video-related layers to make
        debugging easier.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):

2014-11-06  Darin Adler  <darin@apple.com>

        REGRESSION (r175549): http/tests/multipart/stop-crash.html failing (assertion failure in CachedResource::setEncodedSize)
        https://bugs.webkit.org/show_bug.cgi?id=138358

        Reviewed by Alexey Proskuryakov.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setEncodedSize): Removed the incorrect assertion here.
        The code asserts that resources only get bigger, never smaller. This is incorrect
        for a multipart/mixed-replace image, where a later image that is smaller can replace
        an earlier one. I don't fully understand why this assertion was not firing before,
        but the relevant websites are working fine and the test otherwise passes.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresourceLoaderFinishedLoadingOnePart): Fix another
        incorrect assertion that can fire for any parts after the first one. I ran into
        this while testing various websites that use multipart/mixed-replace.

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

        Fix typo in optimized fullscreen activation.
        https://bugs.webkit.org/show_bug.cgi?id=138480

        Reviewed by Jer Noble.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleWrapperTouchStart): fix typo doubleTouchIntervalThresholdms
        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): fix typo isFullScreen

2014-11-06  Chris Dumez  <cdumez@apple.com>

        Stop special-casing wbr elements in HTMLElement::createElementRenderer()
        https://bugs.webkit.org/show_bug.cgi?id=138474

        Reviewed by Ryosuke Niwa.

        Stop special-casing wbr elements in HTMLElement::createElementRenderer()
        and move the code to a HTMLWBRElement subclass instead, that is
        overriding createElementRenderer(). This function is already virtual.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createElementRenderer):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * html/HTMLWBRElement.cpp: Added.
        (WebCore::HTMLWBRElement::create):
        (WebCore::HTMLWBRElement::HTMLWBRElement):
        (WebCore::HTMLWBRElement::createElementRenderer):
        * html/HTMLWBRElement.h: Added.
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::RenderLineBreak):

2014-11-05  Jer Noble  <jer.noble@apple.com>

        De-templatize Timer
        https://bugs.webkit.org/show_bug.cgi?id=138450

        Reviewed by Anders Carlsson.

        Timer does not need to be a templated class; only it's constructors need to be templated.
        Remove the template specifier from Timer and add same to its two class method
        constructors. Replace the function pointer typedefs with using statements. Add a
        helper typedef which allows invalid combinations of TimerFiredClass and
        TimerFiredFunction to be caught early by the compiler, while still allowing
        valid combinations (such as when the caller specifies a function on a subclass of
        TimerFiredClass).

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::resumeTimerFired):
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::removeTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::taskTimerFired):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        * Modules/vibration/Vibration.cpp:
        (WebCore::Vibration::timerFired):
        * Modules/vibration/Vibration.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::resumeTimerFired):
        (WebCore::WebSocketChannel::closingTimerFired):
        * Modules/websockets/WebSocketChannel.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::gcTimerFired):
        * bindings/js/GCController.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        * css/StyleResolver.h:
        * dom/Document.cpp:
        (WebCore::Document::visualUpdatesSuppressionTimerFired):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::optimizedStyleSheetUpdateTimerFired):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        (WebCore::Document::domCookieCacheExpiryTimerFired):
        * dom/Document.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::timerFired):
        * dom/GenericEventQueue.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptRunner.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        * dom/StyledElement.cpp:
        (WebCore::PresentationAttributeCacheCleaner::cleanCache):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/AlternativeTextController.h:
        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        (WebCore::Editor::editorUIUpdateTimerFired):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::timerFiredToProcessQueuedRequest):
        * editing/SpellChecker.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::requestAutocompleteTimerFired):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/HTMLTrackElement.h:
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::timeupdateTimerFired):
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaDocument.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::searchEventTimerFired):
        * html/SearchInputType.h:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::buildBubbleTree):
        (WebCore::ValidationMessage::requestToHideMessage):
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/ValidationMessage.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContext::maybeRestoreContext):
        * html/canvas/WebGLRenderingContext.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        * html/parser/HTMLParserScheduler.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::transitionTimerFired):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControls.h:
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::repeatingTimerFired):
        * html/shadow/SpinButtonElement.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * html/track/LoadableTextTrack.h:
        * html/track/VTTRegion.cpp:
        (WebCore::VTTRegion::scrollTimerFired):
        * html/track/VTTRegion.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::ChangeRegionOversetTask::timerFired):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::updatePaintRectsTimerFired):
        * inspector/InspectorOverlay.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkTimerFired):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::linkLoadTimerFired):
        (WebCore::LinkLoader::linkLoadingErrorTimerFired):
        * loader/LinkLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::NavigationScheduler::timerFired):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        * loader/ResourceLoadScheduler.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::cueLoadTimerFired):
        * loader/TextTrackLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::Callback::timerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncTimerFired):
        * loader/icon/IconDatabase.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::timerFired):
        * page/CaptionUserPreferences.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::updateTimerFired):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        (WebCore::EventHandler::recognizeLongMousePress):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connectTimerFired):
        * page/EventSource.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::focusRepaintTimerFired):
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::overflowAutoScrollTimerFired):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::delayedScrollEventTimerFired):
        (WebCore::FrameView::speculativeTilingEnableTimerFired):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::updateEmbeddedObjectsTimerFired):
        (WebCore::FrameView::postLayoutTimerFired):
        * page/FrameView.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::fadeAnimationTimerFired):
        * page/PageOverlay.h:
        * page/Settings.cpp:
        (WebCore::Settings::imageLoadingSettingsTimerFired):
        * page/Settings.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/AnimationControllerPrivate.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::determineActiveHighlightTimerFired):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeCommitterTimerFired):
        * platform/HysteresisActivity.h:
        (WebCore::HysteresisActivity::hysteresisTimerFired):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::updateScrollAnimatorsAndTimers):
        (WebCore::ScrollAnimator::startScrollSnapTimer):
        (WebCore::ScrollAnimator::stopScrollSnapTimer):
        (WebCore::ScrollAnimator::horizontalScrollSnapTimerFired):
        (WebCore::ScrollAnimator::verticalScrollSnapTimerFired):
        * platform/ScrollAnimator.h:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::animationTimerFired):
        * platform/ScrollAnimatorNone.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        * platform/Scrollbar.h:
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::clientDataBufferingTimerFired):
        * platform/audio/MediaSession.h:
        * platform/efl/BatteryProviderEfl.cpp:
        (WebCore::BatteryProviderEfl::timerFired):
        * platform/efl/BatteryProviderEfl.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::reloadTimerFired):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::timerFired):
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::backingStoreUpdateTimerFired):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::selectionTimerFired):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekTimerFired):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileRevalidationTimerFired):
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::cohortRemovalTimerFired):
        * platform/graphics/ca/TileGrid.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        (WebCore::LegacyCACFLayerTreeHost::renderTimerFired):
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/cg/IOSurfacePool.cpp:
        (WebCore::IOSurfacePool::collectionTimerFired):
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::releaseInactiveAtlasesTimerFired):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::clearContentsTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::tileCreationTimerFired):
        * platform/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::connectionDelayTimerFired):
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired):
        * platform/mac/HIDGamepadProvider.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * platform/mock/DeviceMotionClientMock.cpp:
        (WebCore::DeviceMotionClientMock::timerFired):
        * platform/mock/DeviceMotionClientMock.h:
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::permissionTimerFired):
        (WebCore::GeolocationClientMock::controllerTimerFired):
        * platform/mock/GeolocationClientMock.h:
        * platform/mock/PlatformSpeechSynthesizerMock.cpp:
        (WebCore::PlatformSpeechSynthesizerMock::speakingFinished):
        * platform/mock/PlatformSpeechSynthesizerMock.h:
        * platform/mock/TimerEventBasedMock.h:
        (WebCore::TimerEvent::timerFired):
        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::failureTimerFired):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        * platform/network/curl/ResourceHandleManager.h:
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::fileLoadTimer):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::freeLibraryTimerFired):
        * plugins/PluginPackage.h:
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::delayDeliveryTimerFired):
        * plugins/PluginStream.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::popPopupsStateTimerFired):
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::invalidateTimerFired):
        (WebCore::PluginView::lifeSupportTimerFired):
        * plugins/PluginView.h:
        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        * plugins/win/PluginMessageThrottlerWin.h:
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/ImageQualityController.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::lazyRepaintTimerFired):
        * rendering/RenderView.h:
        * replay/EventLoopInputDispatcher.cpp:
        (WebCore::EventLoopInputDispatcher::timerFired):
        * replay/EventLoopInputDispatcher.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::closeDatabaseTimerFired):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageAreaSync.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::svgLoadEventTimerFired):
        (WebCore::SVGElement::svgLoadEventTimer):
        * svg/SVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGUseElement.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::timerFired):
        * svg/animation/SMILTimeContainer.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:

2014-11-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        Don't send identifierForInitialRequest callback method for request with DoNotSendCallbacks option.
        https://bugs.webkit.org/show_bug.cgi?id=138473

        The iOS specific code that sets up a valid m_identifier is not needed any more, since this
        will be done later in ResourceLoader::willSendRequest. This also matches the behavior that
        we don't call assignIdentifierToInitialRequest callback method if the reqeust has
        DoNotSendCallbacks option.

        Reviewed by Pratik Solanki.

        * loader/ResourceLoader.cpp: 
        (WebCore::ResourceLoader::willSendRequest): Remove iOS specific block for setting up a valid
            m_identifier. In iOS, also make sure we still bail out if the resource loader was stopped
            in assignIdentifierToInitialRequest callback by a client.

2014-11-06  Dean Jackson  <dino@apple.com>

        [filters2] Support for backdrop-filter
        https://bugs.webkit.org/show_bug.cgi?id=138384
        <rdar://problem/18874494>

        Reviewed by Simon Fraser.

        Take 2!! Previous patch was rolled out.

        Add prototype support for backdrop-filter
        http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty

        This adds support for parsing the new CSS property, adding
        the value to RenderStyle, noticing that on the layer tree,
        and the platform code in GraphicsLayer to render a backdrop
        and apply an effect to the result.

        Some things are missing:
        - animation of the backdrop-filter is not yet supported
        - backdrops will not work in cloned layers yet (e.g. reflections)

        Tests: css3/filters/backdrop/backdropfilter-property-computed-style.html
               css3/filters/backdrop/backdropfilter-property-parsing-invalid.html
               css3/filters/backdrop/backdropfilter-property-parsing.html
               css3/filters/backdrop/backdropfilter-property.html
               css3/filters/backdrop/effect-hw.html

        * WebCore.exp.in: Export the setBackdropFilters method so it can
        be used from WebKit.

        * css/CSSComputedStyleDeclaration.cpp: New property name.
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue): Use the existing valueForFilter method.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Piggyback on the filter parser.

        * css/CSSPropertyNames.in: Add -webkit-backdrop-filter.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Add test for backdrop.
        (WebCore::StyleResolver::applyProperty): Support new property.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::needsBackdrop): New method to test for existence of values.
        (WebCore::GraphicsLayer::backdropFilters): Keeps the list of filters.
        (WebCore::GraphicsLayer::setBackdropFilters):
        (WebCore::GraphicsLayer::clearBackdropFilters):

        * platform/graphics/ca/GraphicsLayerCA.cpp: This adds a new m_backdropLayer CALayer
        that will sit behind the contents layer and provide the element's backdrop.
        (WebCore::GraphicsLayerCA::willBeDestroyed):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::setBackdropFilters): Set a custom appearance so
        remote layer hosts will notice the special layer. Also set the actual
        layer properties.
        (WebCore::GraphicsLayerCA::addAnimation): Remove whitespace.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Update backdrop if necessary.
        (WebCore::GraphicsLayerCA::updateLayerNames): Give the new layer a name.
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::updateGeometry): Make the backdrop layer match the contents
        layer geometry.
        (WebCore::GraphicsLayerCA::updateBackdropFilters): Create the backdrop layer if necessary,
        and copy the filter values to any clones.
        (WebCore::GraphicsLayerCA::ensureStructuralLayer): We need a structural layer if we
        have backdrop filters.
        (WebCore::GraphicsLayerCA::structuralLayerPurpose):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h: New StructuralLayerPurpose, new LayerChangeFlag.

        * platform/graphics/ca/PlatformCALayer.h: New LayerType.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Define CABackdropLayer.
        (PlatformCALayerMac::PlatformCALayerMac): Create the correct CALayer type.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::createsGroup):
        (WebCore::RenderElement::hasBackdropFilter): This method is always around, but
        only can return true when FILTERS_LEVEL_2 is enabled.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithFilters): Remove an unnecessary comment.
        (WebCore::RenderLayer::calculateClipRects):

        * rendering/RenderLayer.h: Add hasBackdropFilter.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Update the backdrop filters.
        (WebCore::RenderLayerBacking::updateBackdropFilters): Set the filters on the GraphicsLayer.
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Needs backingstore if it has a backdrop filter.
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForFilters): Return early if we have
        a backdrop filter, because currently we absolutely require compositing.

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleWillChange): Add hasBackdropFilter().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Check backdrops for change.

        * rendering/style/RenderStyle.h: Add the backdropFilter style stuff.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::hasBackdropFilters):
        * rendering/style/StyleRareNonInheritedData.h:

2014-11-06  Benjamin Poulain  <bpoulain@apple.com>

        Give pseudo elements the correct specificity
        https://bugs.webkit.org/show_bug.cgi?id=138378

        Reviewed by Dean Jackson.

        WebKit had an old silly bug where pseudo elements were given specificity in the class B
        instead of the class C.

        Now that the inspector shows the specificity, this bug is much more visible which is why
        I fix it now.

        Test: fast/css/pseudo-element-specificity.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        Give pseudo-elements the right specificity.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb:active::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline:active::-webkit-slider-thumb,):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider::-webkit-slider-thumb):
        * Modules/mediacontrols/mediaControlsBase.css:
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb):
        (audio::-webkit-media-controls-volume-slider::-webkit-slider-thumb:active::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline::-webkit-slider-thumb):
        (audio::-webkit-media-controls-timeline:active::-webkit-slider-thumb,):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider):
        (video:-webkit-full-screen::-webkit-media-controls-volume-slider::-webkit-slider-thumb):
        * css/mediaControls.css:
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-timeline[disabled], video::-webkit-media-controls-timeline[disabled]):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        The media controls were relying on the bug to override the style of input[type=range].

        Ideally we should either:
        -Implement some kind of high level style isolation (e.g. CSS Scoping).
        -Fix the media control tree to use regular CSS scoped by a shadow pseudo ID.

        Until we have one of those, I just fixed the styling by forcing the properties with lower
        specificity with !important. 

2014-11-06  Beth Dakin  <bdakin@apple.com>

        Preview views often misplaced inside popover
        https://bugs.webkit.org/show_bug.cgi?id=138472

        Reviewed by Tim Horton.

        * WebCore.exp.in:

2014-11-06  Michael Saboff  <msaboff@apple.com>

        REGRESSION (r174985-174986): Site display disappears 
        https://bugs.webkit.org/show_bug.cgi?id=138082

        Reviewed by Geoffrey Garen.

        This effectively reverts to the behavior before r174985 by using the 
        lexical global object of the caller's frame to find the active document.
        Before r174985, native functions are invoked with the ScopeShain of their
        caller.  The lexical global object is accessed from the ScopeChain.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):
        (WebCore::findOwningDocument):
        (WebCore::documentWrite):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * html/HTMLDocument.idl:

2014-11-05  Sam Weinig  <sam@webkit.org>

        Use std::unique_ptr for TileController
        https://bugs.webkit.org/show_bug.cgi?id=138429

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::create): Deleted.
        * platform/graphics/ca/TileController.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::createTileController):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:

2014-11-06  Chris Dumez  <cdumez@apple.com>

        Use lambda functions in DocumentOrderedMap
        https://bugs.webkit.org/show_bug.cgi?id=138376

        Reviewed by Darin Adler.

        Use lambda functions in DocumentOrderedMap instead of separate named
        functions.

        No new tests, no behavior change.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementById):
        (WebCore::DocumentOrderedMap::getElementByName):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedUsemap):
        (WebCore::DocumentOrderedMap::getElementByLabelForAttribute):
        (WebCore::DocumentOrderedMap::getElementByWindowNamedItem):
        (WebCore::DocumentOrderedMap::getElementByDocumentNamedItem):
        (WebCore::DocumentOrderedMap::getAllElementsById):
        (WebCore::keyMatchesId): Deleted.
        (WebCore::keyMatchesName): Deleted.
        (WebCore::keyMatchesMapName): Deleted.
        (WebCore::keyMatchesLowercasedMapName): Deleted.
        (WebCore::keyMatchesLowercasedUsemap): Deleted.
        (WebCore::keyMatchesLabelForAttribute): Deleted.
        (WebCore::keyMatchesWindowNamedItem): Deleted.
        (WebCore::keyMatchesDocumentNamedItem): Deleted.
        * dom/DocumentOrderedMap.h:

2014-11-05  Shivakumar JM  <shiva.jm@samsung.com>

        splitText API does not match DOM specification.
        https://bugs.webkit.org/show_bug.cgi?id=138405

        Reviewed by Chris Dumez.
 
        Make the offset argument for splitText API as mandatory (and thus throw if it is omitted) and stop throwing if the offset argument is
        negative (and wraps to a valid index) as per specification: https://w3c.github.io/dom/#interface-text. Also This matches the behavior
        of both Firefox 33 and Chrome 38.

        Test: fast/dom/Text/splitText.html

        * dom/Text.idl:

2014-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175672.
        https://bugs.webkit.org/show_bug.cgi?id=138455

        Tries to make backdrop layers on every layer, asserts on
        Mavericks (Requested by smfr on #webkit).

        Reverted changeset:

        "[filters2] Support for backdrop-filter"
        https://bugs.webkit.org/show_bug.cgi?id=138384
        http://trac.webkit.org/changeset/175672

2014-11-04  Ada Chan  <adachan@apple.com>

        Figure out whether a plug-in is playing audio.
        https://bugs.webkit.org/show_bug.cgi?id=137219

        Reviewed by Anders Carlsson.

        Add NPPVpluginIsPlayingAudio. Export some WebCore methods that will be used in WebKit2.

        No new tests, but manually tested with an example plugin.

        * WebCore.exp.in:
        * plugins/npapi.h:

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

        Fix crash introduced in r175656
        https://bugs.webkit.org/show_bug.cgi?id=138453

        Reviewed by Dan Bernstein.

        repaintContainer can be null sometimes.
        
        Covered by existing tests.

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

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Windows build after removing the deletion UI.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * editing/EditingAllInOne.cpp:

2014-11-04  Dean Jackson  <dino@apple.com>

        [filters2] Support for backdrop-filter
        https://bugs.webkit.org/show_bug.cgi?id=138384
        <rdar://problem/18874494>

        Reviewed by Simon Fraser.

        Add prototype support for backdrop-filter
        http://dev.w3.org/fxtf/filters-2/#BackdropFilterProperty

        This adds support for parsing the new CSS property, adding
        the value to RenderStyle, noticing that on the layer tree,
        and the platform code in GraphicsLayer to render a backdrop
        and apply an effect to the result.

        Some things are missing:
        - animation of the backdrop-filter is not yet supported
        - backdrops will not work in cloned layers yet (e.g. reflections)

        Tests: css3/filters/backdrop/backdropfilter-property-computed-style.html
               css3/filters/backdrop/backdropfilter-property-parsing-invalid.html
               css3/filters/backdrop/backdropfilter-property-parsing.html
               css3/filters/backdrop/backdropfilter-property.html
               css3/filters/backdrop/effect-hw.html

        * WebCore.exp.in: Export the setBackdropFilters method so it can
        be used from WebKit.

        * css/CSSComputedStyleDeclaration.cpp: New property name.
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue): Use the existing valueForFilter method.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Piggyback on the filter parser.

        * css/CSSPropertyNames.in: Add -webkit-backdrop-filter.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle): Add test for backdrop.
        (WebCore::StyleResolver::applyProperty): Support new property.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::needsBackdrop): New method to test for existence of values.
        (WebCore::GraphicsLayer::backdropFilters): Keeps the list of filters.
        (WebCore::GraphicsLayer::setBackdropFilters):
        (WebCore::GraphicsLayer::clearBackdropFilters):

        * platform/graphics/ca/GraphicsLayerCA.cpp: This adds a new m_backdropLayer CALayer
        that will sit behind the contents layer and provide the element's backdrop.
        (WebCore::GraphicsLayerCA::willBeDestroyed):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::setBackdropFilters): Set a custom appearance so
        remote layer hosts will notice the special layer. Also set the actual
        layer properties.
        (WebCore::GraphicsLayerCA::addAnimation): Remove whitespace.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Update backdrop if necessary.
        (WebCore::GraphicsLayerCA::updateLayerNames): Give the new layer a name.
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::updateGeometry): Make the backdrop layer match the contents
        layer geometry.
        (WebCore::GraphicsLayerCA::updateBackdropFilters): Create the backdrop layer if necessary,
        and copy the filter values to any clones.
        (WebCore::GraphicsLayerCA::ensureStructuralLayer): We need a structural layer if we
        have backdrop filters.
        (WebCore::GraphicsLayerCA::structuralLayerPurpose):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        * platform/graphics/ca/GraphicsLayerCA.h: New StructuralLayerPurpose, new LayerChangeFlag.

        * platform/graphics/ca/PlatformCALayer.h: New LayerType.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Define CABackdropLayer.
        (PlatformCALayerMac::PlatformCALayerMac): Create the correct CALayer type.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::createsGroup):
        (WebCore::RenderElement::hasBackdropFilter): This method is always around, but
        only can return true when FILTERS_LEVEL_2 is enabled.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithFilters): Remove an unnecessary comment.
        (WebCore::RenderLayer::calculateClipRects):

        * rendering/RenderLayer.h: Add hasBackdropFilter.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Update the backdrop filters.
        (WebCore::RenderLayerBacking::updateBackdropFilters): Set the filters on the GraphicsLayer.
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Needs backingstore if it has a backdrop filter.
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForFilters): Return early if we have
        a backdrop filter, because currently we absolutely require compositing.

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleWillChange): Add hasBackdropFilter().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout): Check backdrops for change.

        * rendering/style/RenderStyle.h: Add the backdropFilter style stuff.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        (WebCore::StyleRareNonInheritedData::hasBackdropFilters):
        * rendering/style/StyleRareNonInheritedData.h:

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Move 'size' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138337

        Reviewed by Andreas Kling.

        Move 'size' CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder by using custom code as it requires special handling.

        No new tests, new behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyPageSize::mmLength): Deleted.
        (WebCore::ApplyPropertyPageSize::inchLength): Deleted.
        (WebCore::ApplyPropertyPageSize::getPageSizeFromName): Deleted.
        (WebCore::ApplyPropertyPageSize::applyInheritValue): Deleted.
        (WebCore::ApplyPropertyPageSize::applyInitialValue): Deleted.
        (WebCore::ApplyPropertyPageSize::applyValue): Deleted.
        (WebCore::ApplyPropertyPageSize::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::mmLength):
        (WebCore::StyleBuilderFunctions::inchLength):
        (WebCore::StyleBuilderFunctions::getPageSizeFromName):
        (WebCore::StyleBuilderFunctions::applyInheritSize):
        (WebCore::StyleBuilderFunctions::applyInitialSize):
        (WebCore::StyleBuilderFunctions::applyValueSize):

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Revert r175441 as it seems to be causing intermittent crashes in DOMTimer
        https://bugs.webkit.org/show_bug.cgi?id=138449

        Unreviewed roll out.

        Revert r175441 as it seems to be causing intermittent crashes in DOMTimer due
        to the scriptExecutionContext going away. See <rdar://problem/18883681>.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):
        (WebCore::NestedTimersVector::NestedTimersVector): Deleted.
        (WebCore::NestedTimersVector::~NestedTimersVector): Deleted.
        (WebCore::NestedTimersVector::registerTimer): Deleted.
        (WebCore::NestedTimersVector::begin): Deleted.
        (WebCore::NestedTimersVector::end): Deleted.

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

        Avoid backing store for opacity:0 descendant layers
        https://bugs.webkit.org/show_bug.cgi?id=138448

        Reviewed by Dean Jackson.
        
        If a composited layer has no rendered content but a painting zero-opacity descendant
        layer, than we can avoid making backing store.
        
        When the opacity on such a child changes, we need to trigger a tree rebuild
        to force the backing store to come back (this could be optimized later).

        Tests: compositing/backing/no-backing-for-opacity-0-child.html
               compositing/backing/toggle-opacity-0-child.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::styleChangeRequiresLayerRebuild):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Assertion hit DOMTimer::updateTimerIntervalIfNecessary()
        https://bugs.webkit.org/show_bug.cgi?id=138440

        Reviewed by Geoffrey Garen.

        We sometimes hit the ASSERT(repeatInterval() == previousInterval)
        assertion in DOMTimer::updateTimerIntervalIfNecessary() when visiting
        the following pages:
        http://lifehacker.com/the-healthiest-foods-for-one-handed-snacking-while-gami-1654728164
        http://longform.org/posts/like-something-the-lord-made

        After debugging, the issue turned out to be that we are comparing
        floating point numbers using ==, and the check sometimes fails even
        though the values really close to each other. This patch updates the
        DOMTimer code to use WTF::withinEpsilon() instead of operator==()
        to compare the floating point intervals.

        I confirmed manually that the assertion is no longer hit.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::updateTimerIntervalIfNecessary):
        * platform/graphics/FloatQuad.cpp:
        (WebCore::FloatQuad::isRectilinear):
        (WebCore::withinEpsilon): Deleted.

2014-11-05  Chris Fleizach  <cfleizach@apple.com>

        AX: add "alt" as an overriding synonym of "-webkit-alt" (now in the CSS4 spec)
        https://bugs.webkit.org/show_bug.cgi?id=138393

        Reviewed by Dean Jackson.

        Add official "alt" CSS keyword and map -webkit-alt to that.

        Test: platform/mac/accessibility/alt-for-css-content.html

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

2014-11-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r175647

        * CMakeLists.txt: Remove DeleteButton.cpp and DeleteButtonController.cpp.

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Allow constructing a PassRef from a Ref
        https://bugs.webkit.org/show_bug.cgi?id=138389

        Reviewed by Andreas Kling.

        Remove calls to Ref::get() now that a PassRef can be directly
        constructed from a Ref.

        No new tests, no behavior change.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createColorValue):
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createInheritedValue):
        (WebCore::CSSValuePool::createImplicitInitialValue):
        (WebCore::CSSValuePool::createExplicitInitialValue):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Remove the unused deletion UI feature
        https://bugs.webkit.org/show_bug.cgi?id=138442

        Rubber-stamped by Alexey Proskuryakov.

        * Resources/deleteButton.png: Removed.
        * Resources/deleteButton@2x.png: Removed.
        * Resources/deleteButtonPressed.png: Removed.
        * Resources/deleteButtonPressed@2x.png: Removed.

        * WebCore.xcodeproj/project.pbxproj: Removed references to removed files.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes): Folded the below helper function into this member
        function, after removing the deleteButtonContainerElement parameter.
        (WebCore::cloneChildNodesAvoidingDeleteButton): Deleted.

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply): Removed use of
        DeleteButtonControllerDisableScope.
        (WebCore::EditCommandComposition::reapply): Ditto.
        (WebCore::CompositeEditCommand::apply): Ditto.

        * editing/DeleteButton.cpp: Removed.
        * editing/DeleteButton.h: Removed.
        * editing/DeleteButtonController.cpp: Removed.
        * editing/DeleteButtonController.h: Removed.

        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand): Removed use of
        Editor::avoidIntersectionWithDeleteButtonController.

        * editing/Editor.cpp:
        (WebCore::Editor::Editor): Removed initialization of m_deleteButtonController.
        (WebCore::Editor::rangeForPoint): Removed use of avoidIntersectionWithDeleteButtonController.
        (WebCore::Editor::editorUIUpdateTimerFired): Removed call to DeleteButtonController function.
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController): Deleted.
        (WebCore::Editor::deviceScaleFactorChanged): Deleted.

        * editing/Editor.h:
        (WebCore::Editor::deleteButtonController): Deleted.
        (WebCore::Editor::avoidIntersectionWithDeleteButtonController): Deleted.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodes): Removed nodeToSkip parameter.
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): Ditto.

        * editing/MarkupAccumulator.h:

        * editing/markup.cpp:
        (WebCore::createMarkupInternal): Removed updateRange parameter, which had become identical
        to the range parameter, and changed to use the latter everywhere instead.
        (WebCore::createMarkup): Don’t compute and pass separate updateRanage parameter.

        * loader/EmptyClients.h: Removed shouldShowDeleteInterface override.
        * page/EditorClient.h: Removed shouldShowDeleteInterface.

        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor): Removed call to Editor::deviceScaleFactorChanged.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame): Updated for MarkupAccumulator::serializeNodes change.

        * testing/Internals.cpp:
        (WebCore::Internals::findEditingDeleteButton): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-11-04  David Hyatt  <hyatt@apple.com>

        Descendant ends up in wrong flow thread with nested columns and spans.
        https://bugs.webkit.org/show_bug.cgi?id=137273

        Reviewed by Simon Fraser.

        Unskipped the two problematic span tests.

        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::isValidColumnSpanner):
        Remove the guard and comment and added the assertion back in.

        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        Changed to no longer use handleSpannerRemoval. Because the spanner was removed from the flow thread's map,
        handleSpannerRemoval was a no-op. So instead I just removed the placeholder by hand.

        The second fix was to stop destroying the placeholder. Since the placeholder can just have been inserted, you
        can't delete it, since otherwise code further up the stack will access the deleted object. For now, we just
        leak the placeholder.

        The third fix is to make sure the subtreeRoot is properly updated to be the new placeholder.

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

        RenderBlock shouldn't need a pre-destructor hook.
        <https://webkit.org/b/138430>

        Reviewed by Antti Koivisto.

        All that was interesting in RenderBlock::willBeDestroyed() has migrated
        to RenderBlockFlow. removeFromUpdateScrollInfoAfterLayoutTransaction()
        can be called from the plain destructor, so just move it there.

        We don't have to worry about destroyLeftoverChildren(), since RenderElement
        will take care of that for us.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed): Deleted.
        * rendering/RenderBlock.h:

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Remove 2 unnecessary virtual functions on InputType
        https://bugs.webkit.org/show_bug.cgi?id=138433

        Reviewed by Andreas Kling.

        Remove 2 unused virtual functions on InputType:
        - valueAttributeChanged()
        - updateClearButtonVisibility()

        No new tests, no behavior change.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::updateClearButtonVisibility): Deleted.
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::valueAttributeChanged): Deleted.
        (WebCore::InputType::updateClearButtonVisibility): Deleted.
        * html/InputType.h:

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Re-evaluate if a repetitive timer should be throttled upon firing
        https://bugs.webkit.org/show_bug.cgi?id=138339

        Reviewed by Gavin Barraclough.

        Re-evaluate if a repetitive timer should be throttled upon firing in
        case the plugin observability state has changed:
        - It used to be visible but now isn't and thus the timer can be throttled
        - It used to play audio but now doesn't and thus the timer can be throttled

        We already stopped throttling if the plugin became observable. However,
        we didn't start throttling if the plugin became non-observable.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::updateThrottlingStateIfNecessary):

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

        Add ENABLE_FILTERS_LEVEL_2 feature guard.
        https://bugs.webkit.org/show_bug.cgi?id=138362

        Reviewed by Tim Horton.

        Add a new feature define for Level 2 of CSS Filters.
        http://dev.w3.org/fxtf/filters-2/

        * Configurations/FeatureDefines.xcconfig:

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Move text-align CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138398

        Reviewed by Antti Koivisto.

        Move text-align CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder so that it is now generated from CSSPropertyNames.in.
        This patch adds a TextAlign Converter to support this.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyTextAlign::applyValue): Deleted.
        (WebCore::ApplyPropertyTextAlign::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextAlign):

2014-11-05  Sanghyup Lee  <sh53.lee@samsung.com>

        Fix build warning in SVGMarkerElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=138407

        Reviewed by Darin Adler.

        Build warning in debug cause 'comparison of unsigned expression >= 0 is always true [-Wtype-limits]'

        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientType): Removed useless condition in ASSERT.

2014-11-05  Chris Dumez  <cdumez@apple.com>

        Stop special-casing the empty string in HTMLInputElement.type setter
        https://bugs.webkit.org/show_bug.cgi?id=138403

        Reviewed by Ryosuke Niwa.

        Stop special-casing the empty string in HTMLInputElement.type setter.
        Previously, if input.type is set to "", we would remove the type
        attribute. This is inconsistent with the specification and the behavior
        of other browsers (tested Firefox 33 and Chrome 38). Instead, we should
        set the attribute to the empty string.

        Also stop treating null as a null string to align with the
        specification and other browsers (tested Firefox 33 and Chrome 38).

        Finally, update HTMLInputElement::setType() to take an AtomicString in
        argument instead of a String as it ends up calling setAttribute(), and
        thus needing an AtomicString.


        Test: fast/dom/HTMLInputElement/input-type-attribute.html

        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::UploadButtonElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setType):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2014-11-05  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error, missing guard.
        https://bugs.webkit.org/show_bug.cgi?id=138421

        Reviewed by Brent Fulgham.

        There is missing a guard for CSS_SELECTORS_LEVEL4 in CSSParserValues.cpp.

        * css/CSSParserValues.cpp:

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

        REGRESSION(r175601): Assertion failures in SimpleLineLayout
        https://bugs.webkit.org/show_bug.cgi?id=138422

        Check for end.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::FlowContentIterator::isNewlineCharacter):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):

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

        Simple line layout: support text-transform: lowercase|uppercase|capitalize
        <https://webkit.org/b/138406>

        Reviewed by Antti Koivisto.

        Expand the simple line layout coverage to include all text-transform values.
        Since the property works on the text string level, it's really only a matter
        of removing the short-circuit.

        Test: fast/text/simple-lines-text-transform.html

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

2014-11-05  Jer Noble  <jer.noble@apple.com>

        [EME][Mac] Allow the client to specify FPS protocol versions in the keySystem type field.
        https://bugs.webkit.org/show_bug.cgi?id=138380

        Reviewed by Eric Carlson.

        Parse out the requested FPS protocol version of the keySystem type string and pass it to
        AVStreamDataParser as an options dictionary.

        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::validKeySystemRE): Added, match comma-separated version suffixes.
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystem): Call above.
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession): Parse out the version numbers
            and pass into the session as a vector.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC): Take a vector of
            protocol version numbers.
        (WebCore::CDMSessionMediaSourceAVFObjC::update): Create an NSArray and pass into
            the key request creation method in an options dictionary.

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

        Move HTTPHeaderMap encoding to the class
        https://bugs.webkit.org/show_bug.cgi?id=138412

        Reviewed by Andreas Kling.

        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::encode):
        (WebCore::HTTPHeaderMap::decode):

            Use generic encoding for the uncommon header map. Common headers still require custom code due to the enum class.

2014-11-04  Beth Dakin  <bdakin@apple.com>

        Un-anchor data detector popovers on scroll
        https://bugs.webkit.org/show_bug.cgi?id=138385
        -and corresponding-
        rdar://problem/18869345

        Reviewed by Tim Horton.

        * platform/spi/mac/DataDetectorsSPI.h:

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Avoid double hash table lookup in SpaceSplitStringData::create()
        https://bugs.webkit.org/show_bug.cgi?id=138396

        Reviewed by Ryosuke Niwa.

        Avoid double hash table lookup in SpaceSplitStringData::create() by
        calling HashMap::add() and using the AddResult, instead of calling
        HashMap::get() then HashMap::add().

        No new tests, no behavior change.

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::create):

2014-11-04  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Abstract out content iteration and text handling in general.
        https://bugs.webkit.org/show_bug.cgi?id=138346

        Reviewed by Antti Koivisto.

        Add a class that can act as the primary iterator/fragment handling interface to the line parser.
        This helps adding support multiple renderer elements without changing the parser logic.
        Currently it operates strictly on the first child of the RenderBlockFlow.  

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::FlowContentIterator::FlowContentIterator):
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextBreakablePosition):
        (WebCore::SimpleLineLayout::FlowContentIterator::findNextNonWhitespacePosition):
        (WebCore::SimpleLineLayout::FlowContentIterator::textWidth):
        (WebCore::SimpleLineLayout::FlowContentIterator::isNewlineCharacter):
        (WebCore::SimpleLineLayout::FlowContentIterator::isEndOfContent):
        (WebCore::SimpleLineLayout::FlowContentIterator::style):
        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::initializeNewLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine):
        (WebCore::SimpleLineLayout::nextFragment):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::skipWhitespace): Deleted.
        (WebCore::SimpleLineLayout::textWidth): Deleted.
        * rendering/SimpleLineLayout.h:

2014-11-04  Jeremy Jones  <jeremyj@apple.com>

        Fix build after r138351
        https://bugs.webkit.org/show_bug.cgi?id=138401

        Ureviewed. Make return type match.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:

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

        Add bundle SPI allowing PageOverlay to customize the action menu
        https://bugs.webkit.org/show_bug.cgi?id=138388
        <rdar://problem/18875579>

        Reviewed by Anders Carlsson.

        * page/PageOverlayController.h:
        Expose the list of all overlays.

2014-11-03  Jeremy Jones  <jeremyj@apple.com>

        Add button and enable optimized fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=138351

        Reviewed by Eric Carlson.

        Added optimizedFullscreenButton to js media element controls. Remove #if conditional 
        and use optimizedFullscreenSupported to enable feature at runtime

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::enterFullscreenOptimized): enable
        (WebCore::MediaControlsHost::optimizedFullscreenSupported): added
        * Modules/mediacontrols/MediaControlsHost.h: add optimizedFullscreenSupported
        * Modules/mediacontrols/MediaControlsHost.idl: ditto
        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-optimized-fullscreen-button): added
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): add button
        (Controller.prototype.handleReadyStateChange): update button
        (Controller.prototype.updateOptimizedFullscreenButton): added
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-optimized-fullscreen-button): added
        (video::-webkit-media-controls-optimized-fullscreen-button): added
        (video::-webkit-media-controls-optimized-fullscreen-button:active): added
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): listen for events from optimizedFullscreenButton
        (ControllerIOS.prototype.configureInlineControls): add button for non-audio when supported.
        (ControllerIOS.prototype.handleBaseGestureChange): 2-finger double-tap gesture for optimized fullscreen
        (ControllerIOS.prototype.handleWrapperTouchStart): ditto
        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): added
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchStart): added 
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd): added
        (ControllerIOS.prototype.handleOptimizedFullscreenTouchCancel): added
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchStart): fix typo
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): fix typo
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchCancel): fix typo
        * WebCore.exp.in:
        * platform/ios/WebCoreSystemInterfaceIOS.h: added wkIsOptimizedFullscreenSupported
        * platform/ios/WebCoreSystemInterfaceIOS.mm: added wkIsOptimizedFullscreenSupported
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): enable feature
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): enable feature
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): only request exit when entered and not requested exit
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto

2014-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pause on exceptions should show the actual exception
        https://bugs.webkit.org/show_bug.cgi?id=63096

        Reviewed by Timothy Hatcher.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        Pass assertion message on.

2014-11-04  Reza Abbasian  <rabbasian@apple.com>

        [iOS] Fix incorrect interface orientation that can be caused by fullscreen video dismissal.
        https://bugs.webkit.org/show_bug.cgi?id=137930.

        Reviewed by Jer Noble.

        When a fullscreen video gets dismissed programmatically, for instance for removing
        a webview from the view hierarchy, it can put the device in an incorrect orientation.
        Make sure we retain the window of parentView when we attempt to go to fullscreen and use
        the retained window for putting the device in correct orientation after dismissal.

        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (WebVideoFullscreenInterfaceAVKit::invalidate):

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

        Remove two unused ScrollingCoordinator methods.
        <https://webkit.org/b/138377>

        Reviewed by Chris Dumez.

        These appear to be leftovers from the now-defunct chromium port.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea): Deleted.
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea): Deleted.
        * page/scrolling/ScrollingCoordinator.h:

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Add ptr() method to Ref class
        https://bugs.webkit.org/show_bug.cgi?id=138361

        Reviewed by Darin Adler.

        Use the new Ref::ptr() method.

        No new tests, no behavior change.

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::item):
        (WebCore::CSSValueList::itemWithoutBoundsCheck):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::~ChildListMutationAccumulator):
        (WebCore::ChildListMutationAccumulator::childAdded):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::namedItem):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild):
        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        (WebCore::CurrentScriptIncrementer::~CurrentScriptIncrementer):
        * dom/MutationRecord.cpp:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        * dom/Range.cpp:
        (WebCore::Range::setDocument):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::executeScript):
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::item):
        (WebCore::StaticElementList::item):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveRemainingSiblingsToNewParent):
        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::insertText):
        * editing/DictationCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * editing/markup.cpp:
        (WebCore::hasOneChild):
        (WebCore::hasOneTextChild):
        (WebCore::replaceChildrenWithFragment):
        (WebCore::replaceChildrenWithText):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getNamedElements):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::shouldLoadLink):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedElement):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForRule):
        * page/PageSerializer.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::platformCALayerPaintContents):
        * rendering/ClipPathOperation.h:
        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter):
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/style/DataRef.h:
        (WebCore::DataRef::get):
        (WebCore::DataRef::access):
        (WebCore::DataRef::operator==):
        (WebCore::DataRef::operator!=):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresPositionedLayoutOnly):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRepaint):
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::diffRequiresLayerRepaint):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::cssValue):
        * rendering/style/StyleGeneratedImage.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::determineChange):
        (WebCore::Style::resolveLocal):
        (WebCore::Style::resolveTree):
        * style/StyleResolveTree.h:

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Move -webkit-text-emphasis-position to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138359

        Reviewed by Andreas Kling.

        Move -webkit-text-emphasis-position from DeprecatedStyleBilder to the
        new StyleBuilder so that it is now generated from CSSPropertyNames.in.
        A new TextEmphasisPosition Converter was added to support this.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::valueToEmphasisPosition): Deleted.
        (WebCore::ApplyPropertyTextEmphasisPosition::applyValue): Deleted.
        (WebCore::ApplyPropertyTextEmphasisPosition::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::valueToEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextEmphasisPosition):

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

        RenderBox shouldn't need a pre-destructor hook.
        <https://webkit.org/b/138367>

        Reviewed by Antti Koivisto.

        Move teardown logic from willBeDestroyed() to the regular ~RenderBox()
        destructor since none of it depends on being in-tree or having a fully
        constructed vtable.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::~RenderBox):
        (WebCore::RenderBox::willBeDestroyed): Deleted.
        * rendering/RenderBox.h:

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

        [OSX] CJK characters styled with font-family: cursive are italicized
        https://bugs.webkit.org/show_bug.cgi?id=138328
        rdar://problem/18801907

        Reviewed by Simon Fraser.

        FontCache::createFontPlatformData doesn’t set the oblique flag if
        the requested font isn’t oblique, but
        FontCache::systemFallbackForCharacters() does. This patch simply
        adopts this behavior in both places.

        Test: fast/text/font-cursive-italic-cjk.html

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::systemFallbackForCharacters):

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

        When computing the specificity of selectors, use saturated arithmetic per component
        https://bugs.webkit.org/show_bug.cgi?id=138336

        Reviewed by Andreas Kling.

        The code handling overflow in CSSSelector::specificity() was assuming that the value
        returned by specificityForOneSelector() can only overflow one field at a time.

        That assumption is no longer correct with the extended :not(). It is now possible to have
        a complex selector saturating multiple fields inside a single :not().

        This patch solves the problem by considering each field independently.

        Test: fast/selectors/specificity-overflow-2.html

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

2014-11-04  Zalan Bujtas  <zalan@apple.com>

        Windows build fix after r175565.

        MSVC requires default c'tor even if it's never called. -0 length array.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):

2014-11-04  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Cleanup line initialization and line closing.
        https://bugs.webkit.org/show_bug.cgi?id=138273

        Reviewed by Antti Koivisto.

        This is in preparation to support multiple render elements.

        Move line start and line end activities to dedicated functions.

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::LineState): Add lineStartRunIndex to be more explicit
        about whether a line advanced with new runs. Rename a few members. Introduce LineState::oveflowedFragment
        so that line closing can handled separately.
        (WebCore::SimpleLineLayout::LineState::commitAndCreateRun):
        (WebCore::SimpleLineLayout::LineState::addUncommitted):
        (WebCore::SimpleLineLayout::LineState::jumpTo):
        (WebCore::SimpleLineLayout::LineState::addUncommittedWhitespace): Deleted. : Remove redundant function.  
        (WebCore::SimpleLineLayout::LineState::removeCommittedTrailingWhitespace):
        (WebCore::SimpleLineLayout::LineState::resetTrailingWhitespace):
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Add resetTrailingWhitespace()
        so that all trailing whitespace handling is in one function.
        (WebCore::SimpleLineLayout::initializeNewLine): Separate line start and line end initialization/reset.
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns): This function manages all line ending activities.
        (WebCore::SimpleLineLayout::createTextRuns):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::initializeLine): Deleted.
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run): Deleted.

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

        Implement yellow highlight over data detected items
        https://bugs.webkit.org/show_bug.cgi?id=138340
        <rdar://problem/18840102>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/DataDetectorsSPI.h:
        Add completionHandler SPI.

2014-11-04  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        Refactoring, with test coverage across many existing tests.

        * CMakeLists.txt: Deleted ResourceBuffer.cpp.

        * WebCore.exp.in: Removed ResourceBuffer-related symbols, and updated symbol
        for one function that used to take a PassRefPtr but now takes a reference instead.

        * WebCore.vcxproj/WebCore.vcxproj: Deleted ResourceBuffer.cpp/.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Deleted ResourceBuffer.mm/.cpp/.h.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMHTMLImageElement dataRepresentation:]): Use SharedBuffer directly.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::updateDuringParsing): Use SharedBuffer directly, and
        also pass a reference only if non-null rather than passing a pointer.
        (WebCore::ImageDocument::finishedParsing): Ditto. Added a missing null check.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent): Use SharedBuffer directly.
        (WebCore::InspectorPageAgent::mainResourceContent): Ditto.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading): Ditto.
        (WebCore::InspectorResourceAgent::didFailLoading): Ditto.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceData): Use SharedBuffer directly,
        and use the copy function rather than a hand-written alternative.
        (WebCore::DocumentLoader::maybeCreateArchive): Ditto.
        (WebCore::DocumentLoader::mainResource): Ditto.
        (WebCore::DocumentLoader::subresource): Ditto.
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent): Ditto.

        * loader/DocumentLoader.h: Changed mainResourceData to return a
        PassRefPtr<SharedBuffer>. Would be better if it returned a SharedBuffer&,
        but it currently returns a newly created buffer when there is substitute
        data and can also return null, even though many callers assume it will not!

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::dataReceived): Removed call to unused client
        function bufferReceived.
        (WebCore::MediaResourceLoader::notifyFinished): Removed unused buffer
        argument to client function loadFinished.

        * loader/ResourceBuffer.cpp: Removed.
        * loader/ResourceBuffer.h: Removed.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer): Use SharedBuffer directly.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::resourceData): Use SharedBuffer.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Use SharedBuffer.
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer): Ditto.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData): Use SharedBuffer.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Ditto.

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::finishLoading): Use SharedBuffer.
        * loader/cache/CachedCSSStyleSheet.h: Ditto.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::finishLoading): Ditto.
        (WebCore::CachedFont::ensureCustomFontData): Ditto.
        * loader/cache/CachedFont.h: Ditto.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient): Use SharedBuffer.
        (WebCore::CachedImage::didRemoveClient): Ditto.
        (WebCore::CachedImage::addIncrementalDataBuffer): Ditto. Changed to take
        a reference rather than a pointer.
        (WebCore::CachedImage::addDataBuffer): Ditto. Also added call through
        to base class and changed to take a reference rather than a pointer.
        (WebCore::CachedImage::addData): Ditto. Also added call through to base class.
        (WebCore::CachedImage::finishLoading): Ditto.
        * loader/cache/CachedImage.h: Ditto. Also changed the type of some bit fields
        to be unsigned instead of unsigend char.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::calculateIncrementalDataChunk): Use SharedBuffer.
        (WebCore::CachedRawResource::addDataBuffer): Ditto. Changed to take
        a reference rather than a pointer.
        (WebCore::CachedRawResource::addData): Ditto.
        (WebCore::CachedRawResource::finishLoading): Ditto.
        (WebCore::CachedRawResource::canReuse): Ditto.
        * loader/cache/CachedRawResource.h: Ditto.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Reordered data members due to change
        in header.
        (WebCore::CachedResource::addDataBuffer): Changed argument type.
        (WebCore::CachedResource::finishLoading): Ditto.
        (WebCore::CachedResource::didAddClient): Refactored to eliminate one extra hash
        table lookup by using the return value from the remove function.
        (WebCore::CachedResource::addClientToSet): Use std::make_unique directly instead
        of using a function named "schedule" to allocate the callback object.
        (WebCore::CachedResource::Callback::Callback): Changed function and data member
        name.
        (WebCore::CachedResource::Callback::cancel): Ditto.
        (WebCore::CachedResource::Callback::timerFired): Ditto.
        (WebCore::CachedResource::tryReplaceEncodedData): Changed to take a SharedBuffer&.

        * loader/cache/CachedResource.h: Changed types to use SharedBuffer. Also made most
        data members and one function member private instead of protected. Also renamed the
        CachedResource::CachedResourceCallback function CachedResource::Callback and moved
        its definition out of the CachedResource class definition.

        * loader/cache/CachedResourceClient.h: Removed unneeded include.

        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading): Use SharedBuffer.

        * loader/cache/CachedSVGDocument.h: Ditto. Made data members private.

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::finishLoading): Use SharedBuffer.
        * loader/cache/CachedScript.h: Ditto. Also fixed indenting and removed unneeded
        forward declaration.

        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::updateData): Added, so that finishLoading does not
        call addDataBuffer.
        (WebCore::CachedTextTrack::addDataBuffer): Take SharedBuffer, call updateData.
        (WebCore::CachedTextTrack::finishLoading): Ditto.
        * loader/cache/CachedTextTrack.h: Take out unneeded explicit override of the
        destructor. Updated for above changes.

        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading): Updated to use SharedBuffer.
        * loader/cache/CachedXSLStyleSheet.h: Took out unneeded includes, made everything
        private rather than protected. Added an explicit virtual constructor so we can
        compile without knowing how to ref/deref TextResourceDecoder.

        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray): Updated to use SharedBuffer
        and to call addDataBuffer only if there is a new data buffer.

        * loader/cocoa/DiskCacheMonitorCocoa.h: Use SharedBuffer& instead of PassRefPtr.
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::DiskCacheMonitor): Ditto.
        (WebCore::DiskCacheMonitor::resourceBecameFileBacked): Ditto.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished): Use SharedBuffer* instead of
        RefPtr<ResourceBuffer>.

        * loader/mac/ResourceBuffer.mm: Removed.

        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray): Use SharedBuffer.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear): Use a modern for loop.
        (WebCore::SharedBuffer::copy): Return a PassRef instead of a PassRefPtr, since
        this never returns null. Use modern for loops.
        (WebCore::SharedBuffer::copyBufferAndClear): Use a modern for loop.

        * platform/SharedBuffer.h: Changed copy to return PassRef instead of PassRefPtr.
        Changed tryReplaceContentsWithPlatformBuffer to take a reference rather than
        a pointer.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Take a reference
        instead of a pointer.

        * platform/graphics/PlatformMediaResourceLoader.h: Removed unused function
        bufferReceived and unneeded buffer argument from loadFinished. Also marked the
        constructor explicit.

        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        Removed include of ResourceBuffer.h.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource): Use
        SharedBuffer directly.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::loadFinished): Updated for change to
        PlatformMediaResourceLoaderClient.

        * platform/mac/PasteboardMac.mm: Removed include of ResourceBuffer.h.

        * platform/soup/SharedBufferSoup.cpp: Removed unused, unneeded
        tryReplaceContentsWithPlatformBuffer function.

2014-11-04  Chris Dumez  <cdumez@apple.com>

        Use SPECIALIZE_TYPE_TRAITS_*() macro for StyleRuleGroup subclasses
        https://bugs.webkit.org/show_bug.cgi?id=138345

        Reviewed by Andreas Kling.

        Use SPECIALIZE_TYPE_TRAITS_*() macro for StyleRuleGroup subclasses
        instead of old-fashion toXXX() functions.

        No new tests, no behavior change.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::mediaQueries):
        * css/CSSSupportsRule.cpp:
        (WebCore::CSSSupportsRule::conditionText):
        * css/StyleRule.h:
        (isType):
        (WebCore::toStyleRuleMedia): Deleted.
        (WebCore::toStyleRuleSupports): Deleted.
        (WebCore::toStyleRuleRegion): Deleted.
        * css/WebKitCSSRegionRule.cpp:
        (WebCore::WebKitCSSRegionRule::cssText):

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

        RenderQuote shouldn't need a pre-destructor hook.
        <https://webkit.org/b/138352>

        Reviewed by Antti Koivisto.

        The willBeDestroyed() hook in RenderQuote came from the time when it was
        potential unsafe to access the RenderView from a renderer destructor.

        Move the code to the plain ol' destructor instead.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::willBeDestroyed): Deleted.
        * rendering/RenderQuote.h:

2014-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r175380
        https://bugs.webkit.org/show_bug.cgi?id=138322

        Reviewed by Benjamin Poulain.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):

2014-11-03  Philippe Normand  <pnormand@igalia.com>

        [LEAK] [GStreamer] Removing video element will not free assigned memory
        https://bugs.webkit.org/show_bug.cgi?id=46560

        Reviewed by Eric Carlson.

        Moved the ::extraMemoryCost() implementation to the
        MediaPlayerPivateInterface base class. This default implementation
        is now shared between the various MediaPlayerPrivate backends,
        excepted the AVF MediaSource player which still reports no extra
        memory cost.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::totalBytes): Make
        totalBytes() part of the MediaPlayerPrivate interface.
        (WebCore::MediaPlayerPrivateInterface::extraMemoryCost): Default
        implementation.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2014-11-04  Nikos Andronikos  <nikos.andronikos-webkit@cisra.canon.com.au>

        Fix animation of orient attribute on marker element
        https://bugs.webkit.org/show_bug.cgi?id=137942

        Reviewed by Dirk Schulze.

        Fixed implementation of SVG animated angles and the SVG
        marker element orient attribute.
        SVG animated angle was missing the logic to support animation
        from auto to a numeric angle value - this is now added.
        The SVG marker element getter for orientType was not returning
        the animated value for orientType so in some cases (i.e. when
        the initial value and the animated values were of different types)
        the animation was not being rendered - although it was running.

        Tests: svg/animations/animate-marker-orienttype-1.html
               svg/animations/animate-marker-orienttype-2.html
               svg/animations/animate-marker-orienttype-3.html

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        Added logic to support auto to angle animation.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientType):
        This method now returns the animated value if an animation is
        running.
        * svg/SVGMarkerElement.h:

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Allow implicit conversion from Ref<T> to T&
        https://bugs.webkit.org/show_bug.cgi?id=138331

        Reviewed by Andreas Kling.

        Remove unnecessary calls to Ref<T>::get() now that a Ref<T> can be
        converted implicitly to a T&.

        No new tests, no behavior change.

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Non-fast scrollable region overlay offsets the overlay by topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=138344

        Reviewed Tim Horton.
        
        Offset the region by topContentInset, and make it not green.

        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::updateRegion):

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

        Clarify RenderListMarker ownership model.
        <https://webkit.org/b/138329>

        Reviewed by Antti Koivisto.

        A RenderListMarker is either in-tree and owned by the tree, or out-of-tree
        and owned by a RenderListItem.

        This patch changes RenderListItem::m_marker to be a raw pointer, and removes
        the special handling of list markers in RenderElement child teardown.

        We also remove the willBeDestroyed() hook. It was used to clear out the
        m_marker pointer, but this is now done in the regular ~RenderListItem()
        destructor with an assertion for marker sanity. m_marker is automatically
        nulled out by a didDestroyListMarker() callback on RenderListItem.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::destroyLeftoverChildren):

            Removed special handling of list marker renderers when deleting a
            RenderElement's children.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem):
        (WebCore::RenderListItem::~RenderListItem):
        (WebCore::RenderListItem::styleDidChange):
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):
        (WebCore::RenderListItem::positionListMarker):

            Made m_marker a raw pointer instead of a RenderPtr since the ownership
            really switches between weak and strong reference.

        (WebCore::RenderListItem::willBeDestroyed):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::~RenderListMarker):

            Added a regular destructor to replace the willBeDestroyed() hook.

        * rendering/RenderListItem.h:
        (WebCore::RenderListItem::didDestroyListMarker):

            Added. Called by ~RenderListMarker to null out RenderListItem::m_marker.

2014-11-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move WebCore/bridge to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=138280

        Reviewed by Anders Carlsson.

        Clean up OwnPtr in WebCore/bridge.

        No new tests, no behavior changes.

        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/c/c_class.h: Use std::unique_ptr instead of OwnPtr.
        * bridge/objc/objc_class.h: ditto.
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.h:

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

        Client certificate credentials with session persistence don’t work
        https://bugs.webkit.org/show_bug.cgi?id=138330

        Reviewed by Alexey Proskuryakov.

        I think this is not testable with our test HTTP server.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set): Don’t require a valid URL for client certificate
        credentials, since they don’t apply to a specific path. Don’t save such credentials to
        CFNetwork’s persistent storage (we only do that as a workaround for sharing credentials
        with the media framework, and we don’t want to expand the scope of the workaround).
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential): Changed to use the Credential consturctor
        that takes a Credential and a new persistence, so that this code works not only with
        user+password credentials.

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Add page overlays that show regions with mouseWheel event handlers, and the non-fast-scrollable region, and code to toggle them in MiniBrowser WK2
        https://bugs.webkit.org/show_bug.cgi?id=138257

        Reviewed by Tim Horton.

        Add code for debugging page overlays that show the non-fast scrollable region,
        and the region with wheel event handlers. The list of region types is intended
        to be easily extensible.
        
        A singleton DebugPageOverlays maintains a map of Frame -> vector of overlays.
        A purely inline code path is provided so that DebugPageOverlays::didLayout() is
        fast.
        
        For each region type, a PageOverlay::Client subclass knows how to generate
        the region, which is painted into a document-level page overlay.
        
        Add a set of bitflags to Settings to control region visibility.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DebugPageOverlays.cpp: Added.
        (WebCore::RegionOverlay::overlay):
        (WebCore::MouseWheelRegionOverlay::updateRegion):
        (WebCore::NonFastScrollableRegionOverlay::updateRegion):
        (WebCore::RegionOverlay::create):
        (WebCore::RegionOverlay::RegionOverlay):
        (WebCore::RegionOverlay::~RegionOverlay):
        (WebCore::RegionOverlay::pageOverlayDestroyed):
        (WebCore::RegionOverlay::willMoveToPage):
        (WebCore::RegionOverlay::didMoveToPage):
        (WebCore::RegionOverlay::drawRect):
        (WebCore::RegionOverlay::mouseEvent):
        (WebCore::RegionOverlay::didScrollFrame):
        (WebCore::RegionOverlay::recomputeRegion):
        (WebCore::DebugPageOverlays::shared):
        (WebCore::indexOf):
        (WebCore::DebugPageOverlays::ensureRegionOverlayForFrame):
        (WebCore::DebugPageOverlays::showRegionOverlay):
        (WebCore::DebugPageOverlays::hideRegionOverlay):
        (WebCore::DebugPageOverlays::regionChanged):
        (WebCore::DebugPageOverlays::regionOverlayForFrame):
        (WebCore::DebugPageOverlays::updateOverlayRegionVisibility):
        (WebCore::DebugPageOverlays::settingsChanged):
        * page/DebugPageOverlays.h: Added.
        (WebCore::DebugPageOverlays::hasOverlaysForFrame):
        (WebCore::DebugPageOverlays::hasOverlays):
        (WebCore::DebugPageOverlays::didLayout):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Settings.h:
        * page/Settings.in:

2014-11-03  Simon Fraser  <simon.fraser@apple.com>

        Video controls have lots of compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=138294

        Reviewed by Eric Carlson.

        After r175268 we get lots of separate small layers in the video
        controls (but they pop into a single layer when opacity animates).
        
        Fix this by putting an explicit z-index on -webkit-media-controls-panel
        which is the element that animates opacity.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel):

2014-11-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175406, r175413, and r175423.
        https://bugs.webkit.org/show_bug.cgi?id=138327

        Multipart tests are still broken (Requested by ap on #webkit).

        Reverted changesets:

        "Eliminate ResourceBuffer and use SharedBuffer directly
        instead"
        https://bugs.webkit.org/show_bug.cgi?id=138174
        http://trac.webkit.org/changeset/175406

        "Unreviewed, iOS build fix since 175406."
        http://trac.webkit.org/changeset/175413

        "Fix assertion in CachedResource::addDataBuffer"
        http://trac.webkit.org/changeset/175423

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix bad assertion in r175487.

        I mistakenly used it != values.end() instead of it == values.end()
        so the debug bots are crashing.

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

2014-11-03  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r175279
        https://bugs.webkit.org/show_bug.cgi?id=138320

        Reviewed by Jer Noble.

        * page/ChromeClient.h:

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Support modern range loops over CSSValueList
        https://bugs.webkit.org/show_bug.cgi?id=138285

        Reviewed by Andreas Kling.

        Add support for modern range loops over CSSValueList objects.
        Port the code base to using range loops for CSSValueList objects and
        drop the CSSValueListInspector / CSSValueListIterator classes as they
        are no longer needed.

        No new tests, no behavior change.

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

        RenderCounter shouldn't need a pre-destructor hook.
        <https://webkit.org/b/138316>

        Reviewed by Antti Koivisto.

        RenderCounter will automatically register/unregister itself with
        the RenderView when constructed/destroyed.

        It was using a willBeDestroyed() hook because it used to be that you
        couldn't get to the RenderView in the destructor. That's no longer
        an issue as Document promises that RenderView is the last render tree
        node to go away.

        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::~RenderCounter):
        (WebCore::RenderCounter::willBeDestroyed): Deleted.
        * rendering/RenderCounter.h:

2014-11-03  Tim Horton  <timothy_horton@apple.com>

        Use FrameSnapshotting functions in FindController::getFindIndicatorBitmap
        https://bugs.webkit.org/show_bug.cgi?id=138300
        <rdar://problem/18855863>

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotSelection):
        Move knowledge that selectionBounds can be empty down to WebCore.

2014-11-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show Selector's Specificity
        https://bugs.webkit.org/show_bug.cgi?id=138189

        Reviewed by Timothy Hatcher.

        Test: inspector/css/selector-specificity.html

        * css/CSSSelector.h:
        Remove very stale comment. '*' is a starAtom now instead of a special -1 tag.
        Made the specificity masks public class constants.

        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        Drive by use release() in some cases to reduce ref count churn.

        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        Build CSSSelector objects for SelectorLists.

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Move -webkit-shape-outside to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138296

        Reviewed by Zoltan Horvath.

        Move -webkit-shape-outside to the new StyleBuilder, using custom
        code as it does not always call setShapeOutside().

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyShape::setValue): Deleted.
        (WebCore::ApplyPropertyShape::applyValue): Deleted.
        (WebCore::ApplyPropertyShape::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueWebkitShapeOutside):

2014-11-03  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Using a media element changes window.name
        https://bugs.webkit.org/show_bug.cgi?id=138278
        rdar://problem/18704134

        Apply the same fix to mediaControlsBase.js. I do not know who uses this file, but
        there is no reason to have the bug there.

        * Modules/mediacontrols/mediaControlsBase.js:
        (Controller.prototype.addVideoListeners):
        (Controller.prototype.removeVideoListeners):
        (Controller.prototype.disconnectControls):

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

        RenderLayerModelObject shouldn't need a pre-destructor hook.
        <https://webkit.org/b/138314>

        Reviewed by Antti Koivisto.

        Move code from the willBeDestroyed() pre-destructor hook to the regular
        ~RenderLayerModelObject() destructor.

        We just need to unregister the renderer from the FrameView's set of
        viewport-constrained objects. That doesn't require being able to walk
        the render tree or call virtuals, which is the main reason you'd use
        willBeDestroyed().

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::~RenderLayerModelObject):
        (WebCore::RenderLayerModelObject::willBeDestroyed): Deleted.
        * rendering/RenderLayerModelObject.h:

2014-11-03  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        [EFL] Fix the build if LOG_DISABLED=0 in release mode
        https://bugs.webkit.org/show_bug.cgi?id=138309

        Reviewed by Chris Dumez.

        * platform/efl/LoggingEfl.cpp:

2014-11-03  Chris Dumez  <cdumez@apple.com>

        Move 'zoom' CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138297

        Reviewed by Antti Koivisto.

        Move 'zoom' CSS property from DeprecatedStyleBuilder to the new
        StyleBuilder by using custom code as it requires special handling.

        No new tests, no behavior change.

        * css/makeprop.pl:
        Add support for Custom=All StyleBuilder option to indicate
        that the property requires custom code to set the initial,
        inherit and current values.

2014-11-03  Sungmann Cho  <sungmann.cho@navercorp.com>

        AX: Fix some minor typos related to the word "accessibility".
        https://bugs.webkit.org/show_bug.cgi?id=138299

        Reviewed by Chris Fleizach.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::shouldUseAccessibilityObjectInnerText):
        (WebCore::AccessibilityNodeObject::textUnderElement):
        (WebCore::shouldUseAccessiblityObjectInnerText): Deleted.
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getRunAttributesFromAccessibilityObject):
        (webkitAccessibleTextGetRunAttributes):
        (getRunAttributesFromAccesibilityObject): Deleted.
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::textTrackSelectionScore):

2014-11-02  Chris Dumez  <cdumez@apple.com>

        Move string-typed properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138295

        Reviewed by Antti Koivisto.

        Move string-typed properties to the new StyleBuilder:
        -webkit-hyphenate-character
        -webkit-line-grid
        -webkit-flow-into
        -webkit-flow-from

        No new tests, no behavior change.

2014-11-02  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rebaseline bindings tests after r175462.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterPrototypeFunctionAnotherFunction):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        (WebCore::jsTestEventTargetPrototypeFunctionDispatchEvent):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructJSTestInterface):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::constructJSTestNamedConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::constructJSTestObj):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestObjPrototypeFunctionMethodReturningSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionClassMethod2):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence2):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        (WebCore::jsTestObjPrototypeFunctionStrictFunction):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithSequence):
        (WebCore::jsTestObjPrototypeFunctionStrictFunctionWithArray):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionAny):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors2):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors3):
        (WebCore::JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors4):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::constructJSTestTypedefs):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableArrayArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringArrayFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):

2014-11-02  Chris Dumez  <cdumez@apple.com>

        Reduce the cost of argumentCount checks in the JS bindings
        https://bugs.webkit.org/show_bug.cgi?id=138289

        Reviewed by Sam Weinig.

        Slightly reduce the cost of argumentCount checks in the JS bindings by
        hinting to the compiler that it is UNLIKELY that those methods are
        called with too few arguments.

        I see a 3% progression on PerformanceTests/DOM/DOMDivWalk.html
        performance test.

        No new tests, no behavior change.

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

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

        REGRESSION: Using a media element changes window.name
        https://bugs.webkit.org/show_bug.cgi?id=138278
        rdar://problem/18704134

        Reviewed by Jer Noble.

        Test: fast/media/window-name.html

        Use an actual variable for name (and while at it, for "item" as well).

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.addVideoListeners):
        (Controller.prototype.removeVideoListeners):
        (Controller.prototype.disconnectControls):

2014-11-01  Chris Dumez  <cdumez@apple.com>

        Move "direction" CSS property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138288

        Reviewed by Sam Weinig.

        Move "direction" CSS property to the new StyleBuilder by using custom
        code as it requires special handling to call
        Document::setDirectionSetOnDocumentElement() when necessary.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyDirection::applyValue): Deleted.
        (WebCore::ApplyPropertyDirection::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueDirection):

2014-11-01  Sam Weinig  <sam@webkit.org>

        Move the -webkit-transform property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138283

        Reviewed by Chris Dumez.

        Move the -webkit-transform property from StyleResolver to the new
        generated StyleBuilder. Adds a converter for TransformOperations.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTransform):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/TransformFunctions.cpp:
        (WebCore::transformsForValue):
        * css/TransformFunctions.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):

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

        Fix the specificity of the extended :not() selector
        https://bugs.webkit.org/show_bug.cgi?id=138275

        Reviewed by Andreas Kling.

        The current draft says "The specificity of a :not() pseudo-class
        is the specificity of the most specifc complex selector in its selector list."

        It is still unclear how :not() plays with other new selectors. Until that is clarified,
        this only handle the simple cases.

        Tests: fast/css/not-self-specificity.html
               fast/css/not-specificity-1.html
               fast/css/not-specificity-2.html
               fast/css/not-specificity-3.html
               fast/css/not-specificity-4.html
               fast/css/not-specificity-5.html
               fast/css/not-specificity-6.html

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

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

        Fix the Debug builds after r175446

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

2014-10-31  Dhi Aurrahman  <diorahman@rockybars.com>

        Add initial parsing functionality of :lang pseudo class in Selectors Level 4.
        https://bugs.webkit.org/show_bug.cgi?id=138170

        Reviewed by Benjamin Poulain.

        Add initial parsing functionality of :lang pseudo class in Selectors Level 4,
        as specified in [1].

        It parses comma-separated list of string arguments. Currently, it throws error
        on arguments with "*" (e.g. :lang(zh, *-hant)).

        Add additional test file fast/selectors/lang-invalid.html along side the 
        fast/css/css-selector-text.html.

        [1] http://dev.w3.org/csswg/selectors4/#the-lang-pseudo

        Test: fast/selectors/lang-invalid.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectFunctionTypeToken):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::setArgumentList):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::appendArgumentList):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setArgumentList):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::argumentList):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2014-10-31  Chris Dumez  <cdumez@apple.com>

        StyleBuilder: Stop using custom code for -webkit-hyphenate-limit-lines
        https://bugs.webkit.org/show_bug.cgi?id=138270

        Reviewed by Antti Koivisto.

        Stop using custom code for -webkit-hyphenate-limit-lines in the new
        StyleBuilder. We don't really need to, we can just have a Converter
        specific to this property.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertWebkitHyphenateLimitLines):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueWebkitHyphenateLimitLines): Deleted.

2014-10-31  Chris Dumez  <cdumez@apple.com>

        Support throttling of DOMTimers using nested setTimeout() calls
        https://bugs.webkit.org/show_bug.cgi?id=138262

        Reviewed by Gavin Barraclough.

        Extend DOMTimers throttling support to timers that are using nested
        setTimeout() calls instead of a setInterval(). To achieve this, this
        patch introduces a NestedTimersVector singleton class where nested
        timers are appended, and for which we potentially update the next
        firing time, after the parent timer is done executing.

        I have verified this helps on cnn.com for example, which has timers
        interacting with non-visible plugins that are scheduled using nested
        setTimeout() calls with a frequency of 150 / 200 ms.

        * page/DOMTimer.cpp:
        (WebCore::NestedTimersVector::NestedTimersVector):
        (WebCore::NestedTimersVector::~NestedTimersVector):
        (WebCore::NestedTimersVector::registerTimer):
        (WebCore::NestedTimersVector::begin):
        (WebCore::NestedTimersVector::end):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::updateThrottlingStateIfNecessary):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:

2014-10-31  Chris Dumez  <cdumez@apple.com>

        Move -webkit-marquee-increment property to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138208

        Reviewed by Andreas Kling.

        Move -webkit-marquee-increment property from DeprecatedStyleBuilder to
        the new StyleBuilder so that it is generated from CSSPropertyNames.in.
        Custom code is used to set the value due to the !length.isUndefined()
        check before calling setMarqueeIncrement().

        Test: fast/css/webkit-marquee-increment-bad-value.html

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyLength::setValue): Deleted.
        (WebCore::ApplyPropertyLength::applyValue): Deleted.
        (WebCore::ApplyPropertyLength::createHandler): Deleted.
        (WebCore::ApplyPropertyMarqueeIncrement::applyValue): Deleted.
        (WebCore::ApplyPropertyMarqueeIncrement::createHandler): Deleted.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderFunctions::applyValueWebkitMarqueeIncrement):

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

        Brace cleanup in StyleResolver::adjustRenderStyle()
        https://bugs.webkit.org/show_bug.cgi?id=138267

        Reviewed by Chris Dumez.

        No braces for single-line clauses.

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

2014-10-31  Chris Dumez  <cdumez@apple.com>

        Fix several warnings reported by clang static analyzer in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=138258

        Reviewed by Joseph Pecoraro.

        Fix several warnings reported by clang static analyzer in WebCore
        related to variable unnecessary assignments and scope.

        No new tests, no behavior change.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::replaceProperty):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):

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

        Whitespace cleanup in Screen.h
        https://bugs.webkit.org/show_bug.cgi?id=138265

        Reviewed by Chris Dumez.

        No indent for namespaces. Mark 'final'. Fix * placement.

        * page/Screen.h:
        (WebCore::Screen::create):

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

        Change the ScrollingThread code to use RunLoop::main().dispatch() rather than callOnMainThread(), which has Obj-C overhead
        https://bugs.webkit.org/show_bug.cgi?id=138263

        Reviewed by Geoffrey Garen.

        callOnMainThread() uses -performSelector:onMainThread:withObject:waitUntilDone:, so
        it's slightly more efficient to use RunLoop::main().dispatch().

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):

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

        Pseudo classes with an escaped parenthesis generate invalid rules
        https://bugs.webkit.org/show_bug.cgi?id=138266

        Reviewed by Antti Koivisto.

        Since the functional pseudo classes are part of the list of PseudoClassAndCompatibilityElement,
        they could be created by the rule
             pseudo:
                 ':' IDENT
        if the parenthesis is escaped. For example, with ":not\\(", the IDENT would be
        "not(", CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector would
        find a pseudo class type of PseudoClassNot, and the action would create an invalid
        CSSSelector for a :not() without nested selector.

        This patch fixes the issue by detecting the function case in
        CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector().

        An other solution would be to split PseudoClassAndCompatibilityElement into simple pseudo class
        and functional pseudo classes. We may do that some day but at the moment it is a lot of work with
        a little benefit.

        Tests: fast/css/crash-on-incomplete-webkit-any.html
               fast/css/pseudo-escaped-parenthesis.html
               fast/selectors/invalid-functional-pseudo-class.html

        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::parsePseudoClassAndCompatibilityElementSelector):

2014-10-31  Chris Dumez  <cdumez@apple.com>

        Make CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement() faster
        https://bugs.webkit.org/show_bug.cgi?id=138227

        Reviewed by Benjamin Poulain.

        Restructure CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement()
        a bit to do less if checks. The previous implementation was doing 7 if
        checks no matter the input value. The new implementation does less
        if checks depending on the input type.

        Also, the isImageControlsRootElement() was showing in the profiles so
        I updated the condition to only do this virtual function call if the
        input is an HTMLDivElement (which we can check more efficiently).

        With the change, I see that we're spending about ~26% less time in
        this method when running speedometer. However, the impact on the
        overall score is within noise.

        No new tests, no behavior change.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):

2014-10-31  Antti Koivisto  <antti@apple.com>

        Fix assertion in CachedResource::addDataBuffer

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

            Don't call to base class if buffering mode changed (happens with some special top level document types).

2014-10-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Remove webkit prefix from CSS columns.
        https://bugs.webkit.org/show_bug.cgi?id=137132.

        Reviewed by Dean Jackson.

        CSS columns properties are ready for un-prefixing. There are still a couple
        that we haven't implemented, such as the ones starting with "break-", so we're
        just going to do the ones starting with "column-".  The list of column un-
        prefixed properties in this change set is:
            - column-count
            - column-fill
            - column-gap
            - column-progression
            - column-rule
            - column-rule-color
            - column-rule-style
            - column-rule-width
            - column-span
            - column-width
            - columns

        Tests: fast/multicol/column-box-alignment-rtl.html
               fast/multicol/multicol-aliases.html
               imported/w3c/css/multicol/multicol-basic-001.html
               imported/w3c/css/multicol/multicol-basic-002.html
               imported/w3c/css/multicol/multicol-basic-003.html
               imported/w3c/css/multicol/multicol-basic-004.html

        Add new un-prefixed column properties and make the -webkit* ones be aliases
        to the new ones.
        * css/CSSPropertyNames.in:

        Use the new enums CSSPropertyColumn* instead of the prefixed ones.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitColumnsShorthand):
        (WebCore::webkitColumnRuleShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback):

2014-10-31  Tim Horton  <timothy_horton@apple.com>

        Remove "Add to iPhoto" from the action menu's sharing menu
        https://bugs.webkit.org/show_bug.cgi?id=138251
        <rdar://problem/18837197>

        Reviewed by Anders Carlsson.

        * platform/spi/mac/NSSharingServiceSPI.h:
        Add 'name' to the NSSharingService SPI header.

2014-10-31  Akos Kiss  <akiss@inf.u-szeged.hu>

        Fix type clash warning in supports_error rule of CSSGrammar.
        https://bugs.webkit.org/show_bug.cgi?id=138248

        Reviewed by Antti Koivisto.

        Added explicit actions to supports_error rule in CSSGrammar.y.in since
        the default actions caused bison to emit type clash warnings.

        No new tests because there is no behavior change.

        * css/CSSGrammar.y.in:

2014-10-31  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Support script message handlers WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=133730

        Reviewed by Carlos Garcia Campos.

        Support user script message handlers in WebKitUserContentManager.
        This needs building with ENABLE_USER_MESSAGE_HANDLERS, for which
        an option is added to the CMake build files. The option is disabled
        globally by default, and the WebKitGTK port enables it. On the API
        level, two new methods to register and unregister names are provided
        in the "window.webkit" namespace, and on message reception the
        "WebKitUserContentManager::script-message-received" signal is
        emitted, using the registered names as signal detail.

        * CMakeLists.txt: Conditionally add the needed files to the build
        when the ENABLE_USER_MESSAGE_HANDLERS feature is enabled.

2014-10-31  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Improve AccessibilityTableCell's determineAccessibilityRole function.
        https://bugs.webkit.org/show_bug.cgi?id=137737

        Reviewed by Chris Fleizach.

        Use of new functions isRowHeaderCell and isColumnHeaderCell (bug 136818)
        to more accurately determine accessibility role of the table cell.

        Test: accessibility/table-cells-roles.html

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        Change to const.
        * accessibility/AccessibilityARIAGridCell.h:
        Change rowIndexRange function to const.
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        Use of isRowHeaderCell and isColumnHeaderCell to more accurately determine accessibility role (ATK).
        (WebCore::AccessibilityTableCell::isColumnHeaderCell):
        Add a case of direct placement a row in the table.
        (WebCore::AccessibilityTableCell::isRowHeaderCell):
        Add a case of direct placement a row in the table.
        (WebCore::AccessibilityTableCell::rowIndexRange):
        Change to const.
        * accessibility/AccessibilityTableCell.h:
        Change rowIndexRange function to const.

2014-10-30  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        Refactoring, with test coverage across many existing tests.

        * CMakeLists.txt: Deleted ResourceBuffer.cpp.

        * WebCore.exp.in: Removed ResourceBuffer-related symbols, and updated symbol
        for one function that used to take a PassRefPtr but now takes a reference instead.

        * WebCore.vcxproj/WebCore.vcxproj: Deleted ResourceBuffer.cpp/.h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Deleted ResourceBuffer.mm/.cpp/.h.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMHTMLImageElement dataRepresentation:]): Use SharedBuffer directly.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::updateDuringParsing): Use SharedBuffer directly, and
        also pass a reference only if non-null rather than passing a pointer.
        (WebCore::ImageDocument::finishedParsing): Ditto. Added a missing null check.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent): Use SharedBuffer directly.
        (WebCore::InspectorPageAgent::mainResourceContent): Ditto.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading): Ditto.
        (WebCore::InspectorResourceAgent::didFailLoading): Ditto.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceData): Use SharedBuffer directly,
        and use the copy function rather than a hand-written alternative.
        (WebCore::DocumentLoader::maybeCreateArchive): Ditto.
        (WebCore::DocumentLoader::mainResource): Ditto.
        (WebCore::DocumentLoader::subresource): Ditto.
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent): Ditto.

        * loader/DocumentLoader.h: Changed mainResourceData to return a
        PassRefPtr<SharedBuffer>. Would be better if it returned a SharedBuffer&,
        but it currently returns a newly created buffer when there is substitute
        data and can also return null, even though many callers assume it will not!

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::dataReceived): Removed call to unused client
        function bufferReceived.
        (WebCore::MediaResourceLoader::notifyFinished): Removed unused buffer
        argument to client function loadFinished.

        * loader/ResourceBuffer.cpp: Removed.
        * loader/ResourceBuffer.h: Removed.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer): Use SharedBuffer directly.

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::resourceData): Use SharedBuffer.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Use SharedBuffer.
        (WebCore::SubresourceLoader::didReceiveDataOrBuffer): Ditto.

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData): Use SharedBuffer.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource): Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Ditto.

        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::finishLoading): Use SharedBuffer.
        * loader/cache/CachedCSSStyleSheet.h: Ditto.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::finishLoading): Ditto.
        (WebCore::CachedFont::ensureCustomFontData): Ditto.
        * loader/cache/CachedFont.h: Ditto.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient): Use SharedBuffer.
        (WebCore::CachedImage::didRemoveClient): Ditto.
        (WebCore::CachedImage::addIncrementalDataBuffer): Ditto. Changed to take
        a reference rather than a pointer.
        (WebCore::CachedImage::addDataBuffer): Ditto. Also added call through
        to base class and changed to take a reference rather than a pointer.
        (WebCore::CachedImage::addData): Ditto. Also added call through to base class.
        (WebCore::CachedImage::finishLoading): Ditto.
        * loader/cache/CachedImage.h: Ditto. Also changed the type of some bit fields
        to be unsigned instead of unsigend char.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::calculateIncrementalDataChunk): Use SharedBuffer.
        (WebCore::CachedRawResource::addDataBuffer): Ditto. Changed to take
        a reference rather than a pointer.
        (WebCore::CachedRawResource::addData): Ditto.
        (WebCore::CachedRawResource::finishLoading): Ditto.
        (WebCore::CachedRawResource::canReuse): Ditto.
        * loader/cache/CachedRawResource.h: Ditto.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource): Reordered data members due to change
        in header.
        (WebCore::CachedResource::addDataBuffer): Changed argument type.
        (WebCore::CachedResource::finishLoading): Ditto.
        (WebCore::CachedResource::didAddClient): Refactored to eliminate one extra hash
        table lookup by using the return value from the remove function.
        (WebCore::CachedResource::addClientToSet): Use std::make_unique directly instead
        of using a function named "schedule" to allocate the callback object.
        (WebCore::CachedResource::Callback::Callback): Changed function and data member
        name.
        (WebCore::CachedResource::Callback::cancel): Ditto.
        (WebCore::CachedResource::Callback::timerFired): Ditto.
        (WebCore::CachedResource::tryReplaceEncodedData): Changed to take a SharedBuffer&.

        * loader/cache/CachedResource.h: Changed types to use SharedBuffer. Also made most
        data members and one function member private instead of protected. Also renamed the
        CachedResource::CachedResourceCallback function CachedResource::Callback and moved
        its definition out of the CachedResource class definition.

        * loader/cache/CachedResourceClient.h: Removed unneeded include.

        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading): Use SharedBuffer.

        * loader/cache/CachedSVGDocument.h: Ditto. Made data members private.

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::finishLoading): Use SharedBuffer.
        * loader/cache/CachedScript.h: Ditto. Also fixed indenting and removed unneeded
        forward declaration.

        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::updateData): Added, so that finishLoading does not
        call addDataBuffer.
        (WebCore::CachedTextTrack::addDataBuffer): Take SharedBuffer, call updateData.
        (WebCore::CachedTextTrack::finishLoading): Ditto.
        * loader/cache/CachedTextTrack.h: Take out unneeded explicit override of the
        destructor. Updated for above changes.

        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading): Updated to use SharedBuffer.
        * loader/cache/CachedXSLStyleSheet.h: Took out unneeded includes, made everything
        private rather than protected. Added an explicit virtual constructor so we can
        compile without knowing how to ref/deref TextResourceDecoder.

        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray): Updated to use SharedBuffer
        and to call addDataBuffer only if there is a new data buffer.

        * loader/cocoa/DiskCacheMonitorCocoa.h: Use SharedBuffer& instead of PassRefPtr.
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        (WebCore::DiskCacheMonitor::DiskCacheMonitor): Ditto.
        (WebCore::DiskCacheMonitor::resourceBecameFileBacked): Ditto.

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished): Use SharedBuffer* instead of
        RefPtr<ResourceBuffer>.

        * loader/mac/ResourceBuffer.mm: Removed.

        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray): Use SharedBuffer.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear): Use a modern for loop.
        (WebCore::SharedBuffer::copy): Return a PassRef instead of a PassRefPtr, since
        this never returns null. Use modern for loops.
        (WebCore::SharedBuffer::copyBufferAndClear): Use a modern for loop.

        * platform/SharedBuffer.h: Changed copy to return PassRef instead of PassRefPtr.
        Changed tryReplaceContentsWithPlatformBuffer to take a reference rather than
        a pointer.

        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::tryReplaceContentsWithPlatformBuffer): Take a reference
        instead of a pointer.

        * platform/graphics/PlatformMediaResourceLoader.h: Removed unused function
        bufferReceived and unneeded buffer argument from loadFinished. Also marked the
        constructor explicit.

        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
        Removed include of ResourceBuffer.h.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::fulfillRequestWithResource): Use
        SharedBuffer directly.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::loadFinished): Updated for change to
        PlatformMediaResourceLoaderClient.

        * platform/mac/PasteboardMac.mm: Removed include of ResourceBuffer.h.

        * platform/soup/SharedBufferSoup.cpp: Removed unused, unneeded
        tryReplaceContentsWithPlatformBuffer function.

2014-10-30  Chris Dumez  <cdumez@apple.com>

        Move border-image-source / -webkit-mask-box-image-source to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138209

        Reviewed by Andreas Kling.

        Move border-image-source / -webkit-mask-box-image-source CSS properties
        from DeprecatedStyleBuilder to the new StyleBuilder so that they are
        now generated from CSSPropertyNames.in.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyBorderImageSource::applyValue): Deleted.
        (WebCore::ApplyPropertyBorderImageSource::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBorderImageSource):

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

        [EME] Add Setting for accessing storage location for MediaKeys data
        https://bugs.webkit.org/show_bug.cgi?id=138147

        Reviewed by Brady Eidson.

        Allow MediaPlayerPrivateAVFoundationObjC to query for the MediaKeys storage directory
        by piping that request down from WebKit and WebKit2 into Settings.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaKeysStorageDirectory): Get the location from Settings and
            append the current origin.
        * html/HTMLMediaElement.h:
        * page/Settings.h:
        (WebCore::Settings::setMediaKeysStorageDirectory): Simple setter.
        (WebCore::Settings::mediaKeysStorageDirectory): Simple accessor.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::mediaKeysStorageDirectory): Pass through to m_client.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerMediaKeysStorageDirectory): Default implementation.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession): Fetch the location from MediaPlayer.
        (WebCore::sessionStorageDirectory): Deleted.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

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

        Short-circuit repaints with empty rects
        https://bugs.webkit.org/show_bug.cgi?id=138234

        Reviewed by Zalan Bujtas.
        
        Repaints with an empty rectangle are common enough that it's worth
        short-circuiting them.

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

2014-10-30  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in css/
        https://bugs.webkit.org/show_bug.cgi?id=138230

        Reviewed by Benjamin Poulain.

        Clean up virtual functions in css/ by:
        - Making virtual functions final when possible
        - Making classes final when possible
        - Using 'override' when appropriate
        - Explicitly marking functions / destructors as virtual when they are
          inherently virtual
        - Making isXXX() virtual functions private on XXX classes to avoid
          unnecessary type checks

        No new tests, no behavior change.

        * WebCore.exp.in:
        * css/CSSBasicShapes.h:
        * css/CSSCharsetRule.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceLoadEvent.h:
        * css/CSSFontFaceRule.h:
        * css/CSSFontFaceSource.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSRuleList.h:
        (WebCore::StaticCSSRuleList::ref): Deleted.
        (WebCore::StaticCSSRuleList::styleSheet): Deleted.
        (WebCore::StaticCSSRuleList::length): Deleted.
        (WebCore::StaticCSSRuleList::item): Deleted.
        (WebCore::LiveCSSRuleList::ref): Deleted.
        (WebCore::LiveCSSRuleList::deref): Deleted.
        (WebCore::LiveCSSRuleList::length): Deleted.
        (WebCore::LiveCSSRuleList::item): Deleted.
        (WebCore::LiveCSSRuleList::styleSheet): Deleted.
        * css/CSSStyleRule.h:
        * css/CSSSupportsRule.h:
        * css/CSSUnknownRule.h:
        * css/FontLoader.h:
        * css/PropertySetCSSStyleDeclaration.h:
        (WebCore::PropertySetCSSStyleDeclaration::parentElement):
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSViewportRule.h:

2014-10-30  Tim Horton  <timothy_horton@apple.com>

        Long spins under rangeExpandedAroundPosition on Yahoo Mail
        https://bugs.webkit.org/show_bug.cgi?id=138223
        <rdar://problem/18819547>

        Reviewed by Enrica Casucci.

        * WebCore.exp.in:
        Export some things.

2014-10-30  Ada Chan  <adachan@apple.com>

        The Page's muted setting should not affect the HTMLMediaElement's 'muted' IDL attribute.
        https://bugs.webkit.org/show_bug.cgi?id=138215

        Reviewed by Eric Carlson.

        Add m_muted in Page to keep track of the Page's muted state. Change AudioProducer::setMuted()
        to pageMutedStateDidChange(). When that method is called, the AudioProducer is supposed to
        update its muted state again taking the Page's muted state into account.

        Add HTMLMediaElement::effectiveMuted(), which returns the effective muted state of the
        HTMLMediaElement, taking the Page's muted state into account.

        Test: media/video-muted-after-setting-page-muted-state.html

        * dom/Document.cpp:
        (WebCore::Document::pageMutedStateDidChange):
        (WebCore::Document::setMuted): Deleted.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        Set the MediaPlayer's muted state to the result of effectiveMuted() rather than m_muted.
        (WebCore::HTMLMediaElement::updateVolume):
        Ditto, and also make sure the MediaController's muted state does not override the Page's
        muted state.
        (WebCore::HTMLMediaElement::updatePlayState):
        Set the MediaPlayer's muted state to the result of effectiveMuted() rather than muted().
        (WebCore::HTMLMediaElement::pageMutedStateDidChange):
        Call updateVolume(), which will update the MediaPlayer's muted state.
        (WebCore::HTMLMediaElement::effectiveMuted):
        Figure out the muted value taking Page's muted state into account.
        * html/HTMLMediaElement.h:
        * page/AudioProducer.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setMuted):
        Update m_muted, and only iterate through the frames' documents to call pageMutedStateDidChange()
        if m_muted changes.
        * page/Page.h:
        (WebCore::Page::isMuted):
        * testing/Internals.cpp:
        (WebCore::Internals::setPageMuted):
        Expose a way to set the Page's muted state in Internals for testing.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references in calculateMinimumPageHeight() for non-optional arguments
        https://bugs.webkit.org/show_bug.cgi?id=138231

        Reviewed by Dean Jackson.

        No new tests because there is no behavior change.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::calculateMinimumPageHeight):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2014-10-30  Chris Dumez  <cdumez@apple.com>

        Move -webkit-border-image / -webkit-mask-box-image to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138207

        Reviewed by Andreas Kling.

        Move -webkit-border-image / -webkit-mask-box-image CSS properties to
        the new StyleBuilder so that they are now generated from
        CSSPropertyNames.in.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyBorderImage::applyValue): Deleted.
        (WebCore::ApplyPropertyBorderImage::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBorderImage):
        (WebCore::StyleBuilderConverter::convertBorderMask):

2014-10-30  Chris Dumez  <cdumez@apple.com>

        Optimize HTMLVideoElement / HTMLAudioElement type checks a bit
        https://bugs.webkit.org/show_bug.cgi?id=138202

        Reviewed by Benjamin Poulain.

        Optimize HTMLVideoElement / HTMLAudioElement type checks a bit by:
        1. Using is<HTMLMediaElement>() instead of
           (is<HTMLVideoElement>() || is<HTMLAudioElement>()) if the caller is
           interested in both video and audio elements. This is faster because
           it ends up doing:
               - virtual call to Element::isMediaElement()
           instead of
               - Node::isHTMLElement() +
                 virtual call to HTMLElement::isHTMLUnknownElement() +
                 2 * HTMLElement::hasTagName()
        2. Updating HTMLVideoElement / HTMLAudioElement type traits
           specializations to:
           - Avoid doing any virtual function call if the input type is an
             HTMLMediaElement (which is common in the code base).
           - Speed up check if the input is an Element by doing:
               - virtual call to Element::isMediaElement() +
                 HTMLElement::hasTagName()
             instead of
               - Node::isHTMLElement() +
                 virtual call to !HTMLElement::isHTMLUnknownElement() +
                 HTMLElement::hasTagName()
             The speed stays the same if the input is a Node or an HTMLElement.

        No new tests, no behavior change.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * dom/make_names.pl:
        (defaultTagPropertyHash):
        (printTypeHelpers):
        * html/HTMLAudioElement.h:
        (isType):
        * html/HTMLImageLoader.cpp:
        * html/HTMLTagNames.in:
        * html/HTMLVideoElement.h:
        (isType):
        * page/ChromeClient.h:

2014-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate ComplexTextControllerCoreText to use SPI instead of WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138228

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/spi/cocoa/CoreTextSPI.h: Added.

2014-10-30  Eric Carlson  <eric.carlson@apple.com>

        Add diagnostic logging to track page loads.
        https://bugs.webkit.org/show_bug.cgi?id=138205
        <rdar://problem/18173017>

        Reviewed by Jer Noble.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Log page load success or failure.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::pageLoadedKey): New.
        * page/DiagnosticLoggingKeys.h:

2014-10-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Video resolution changes trigger a crash in the TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=137065

        Reviewed by Gustavo Noronha Silva.

        Switch to GstSample for buffer+caps communication between the
        video sink and the player. Using a single object type for this
        avoid issues where the caps might not correctly describe the
        buffer contents anymore, for example when the video resolution is
        changed.

        * platform/graphics/gstreamer/ImageGStreamer.h: Use GstSample
        instead of GstBuffer+GstCaps.
        (WebCore::ImageGStreamer::createImage):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Ditto.
        (ImageGStreamer::ImageGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::mediaPlayerPrivateRepaintCallback): The repaint signal
        now uses a GstSample instead of a GstBuffer.
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        Store the current sample instead of a buffer. Also renamed the
        mutex protecting access to the sample.
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase): Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize): Return
        early if no sample is available. The caps used to get the video
        size are store in the sample.
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): Use
        GstSample instead of GstBuffer.
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint): Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp: Now store a
        GstSample internally. Also removed the now useless current-caps property.
        (_WebKitVideoSinkPrivate::_WebKitVideoSinkPrivate): Renamed the
        mutex protecting access to the sample.
        (_WebKitVideoSinkPrivate::~_WebKitVideoSinkPrivate): Ditto.
        (webkit_video_sink_init): Disable last-sample in basesink since we
        already store one in our sink anyway.
        (webkitVideoSinkTimeoutCallback): Switch to GstSample.
        (webkitVideoSinkRender): Ditto.
        (unlockSampleMutex): Ditto.
        (webkitVideoSinkUnlock): Ditto.
        (webkitVideoSinkUnlockStop): Ditto.
        (webkitVideoSinkStop): Ditto!
        (webkitVideoSinkStart): Ditto.
        (webkit_video_sink_class_init): Drop current-caps property.
        (webkitVideoSinkGetProperty): Deleted.
        (unlockBufferMutex): Deleted.

2014-10-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        FormDataBuilder should not use Document
        https://bugs.webkit.org/show_bug.cgi?id=138172

        Reviewed by Alexey Proskuryakov.

        It's only used by encodingFromAcceptCharset() to fallback to
        document input encoding. That method is only used by
        FormSubmission::create(), so it could be moved as a static
        function to FormSubmission.cpp.

        * loader/FormSubmission.cpp:
        (WebCore::encodingFromAcceptCharset):
        (WebCore::FormSubmission::create):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodingFromAcceptCharset): Deleted.
        * platform/network/FormDataBuilder.h:

2014-10-29  Said Abou-Hallawa  <sabouhallawa@apple.com>

        ASSERTION NOT REACHED because RenderStyle::setWordSpacing() does not handle a Length value of type 'Calculated'.
        https://bugs.webkit.org/show_bug.cgi?id=138054.

        Reviewed by Zalan Bujtas.

        A Length of type 'Calculated' can be generated from blending two lengths of
        different types. Setting the wordSpacing of the render style should be handled
        correctly when the type of the new value is 'Calculated'.

        Tests: css3/calculated-word-spacing.html.

        Add a case for setting the render style wordSpacing to a <length> of type 'Calculated'.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):

2014-10-29  Hunseop Jeong  <hs85.jeong@samsung.com>

        [CoordinatedGraphics] Use modern for-loops
        https://bugs.webkit.org/show_bug.cgi?id=138168

        Reviewed by Andreas Kling.

        No new tests as there is no change in functionality.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp: Use a modern for loop.
        (WebCore::CompositingCoordinator::renderNextFrame):
        (WebCore::CompositingCoordinator::paintToSurface):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp: Use a modern for loop.
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::findFirstDescendantWithContentsRecursively):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffersIncludingSubLayers):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp: Use a modern for loop.
        (WebCore::CoordinatedImageBacking::updateVisibilityIfNeeded):

2014-10-29  Chris Dumez  <cdumez@apple.com>

        Final-ize more of TextFieldInputType's virtual functions
        https://bugs.webkit.org/show_bug.cgi?id=138194

        Reviewed by Andreas Kling.

        Final-ize more of TextFieldInputType's virtual functions for
        performance.

        No new tests, no behavior change.

        * html/TextFieldInputType.h:

2014-10-29  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in inspector/
        https://bugs.webkit.org/show_bug.cgi?id=138190

        Reviewed by Andreas Kling.

        Clean up virtual functions in inspector/ by:
        - Making virtual functions final when possible
        - Making classes final when possible
        - Explicitly marking functions / destructors as virtual when they are
          inherently virtual
        - Making isXXX() virtual functions private on XXX classes to avoid
          unnecessary type checks

        No new tests, no behavior change.

        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent): Deleted.
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/WorkerInspectorController.h:

2014-10-29  Andreas Kling  <akling@apple.com>

        Generalize dirtying of parent's line boxes when taking a renderer out of tree.
        <https://webkit.org/b/138152>

        Reviewed by Antti Koivisto.

        Instead of calling dirtyLinesFromChangedChild() when certain types of renderers
        are about to be destroyed, always do this in RenderElement::willBeRemovedFromTree().

        This is part of an effort to make render tree teardown less incomprehensible.

        We still don't bother at all if we're in the process of tearing down the entire
        render tree, since that would be a waste of time.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeRemovedFromTree):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed): Deleted.
        * rendering/RenderReplaced.h:

2014-10-28  Ada Chan  <adachan@apple.com>

        Implement WKPageSetMuted(bool).
        https://bugs.webkit.org/show_bug.cgi?id=138158

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * page/Page.h:

2014-10-29  Alexey Proskuryakov  <ap@apple.com>

        Notify Settings object when its Page object goes away.
        https://bugs.webkit.org/show_bug.cgi?id=138183
        rdar://problem/18786900

        Reviewed by Andreas Kling.

        I could not make a test for this issue.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        * page/Settings.cpp:
        (WebCore::setImageLoadingSettings):
        (WebCore::Settings::Settings):
        (WebCore::Settings::setTextAutosizingEnabled):
        (WebCore::Settings::setTextAutosizingWindowSizeOverride):
        (WebCore::Settings::setTextAutosizingFontScaleFactor):
        (WebCore::Settings::setMediaTypeOverride):
        (WebCore::Settings::setScriptEnabled):
        (WebCore::Settings::setUserStyleSheetLocation):
        (WebCore::Settings::setMinDOMTimerInterval):
        (WebCore::Settings::minDOMTimerInterval):
        (WebCore::Settings::domTimerAlignmentInterval):
        (WebCore::Settings::setUsesPageCache):
        (WebCore::Settings::setScreenFontSubstitutionEnabled):
        (WebCore::Settings::setFontRenderingMode):
        (WebCore::Settings::setDNSPrefetchingEnabled):
        (WebCore::Settings::setStorageBlockingPolicy):
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        (WebCore::Settings::setScrollingPerformanceLoggingEnabled):
        (WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled):
        (WebCore::Settings::setHiddenPageCSSAnimationSuspensionEnabled):
        (WebCore::Settings::setFontFallbackPrefersPictographs):
        * page/Settings.h:
        (WebCore::Settings::pageDestroyed):

2014-10-29  Zalan Bujtas  <zalan@apple.com>

        Remove invalid float from RootInlineBox.
        https://bugs.webkit.org/show_bug.cgi?id=137707

        Reviewed by Antti Koivisto.

        In certain cases, floating boxes get attached to the last (root) inline box.
        When this particular floating box gets destroyed, it also needs to be detached
        from the last inline box.
        1. Introduce RootInlineBox::removeFloat() (vs. RootInlineBox::appendFloat())
        2. Ensure that it is called when the floating box is being destroyed.

        Test: fast/inline/crash-when-inline-box-has-invalid-float.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout): During style recalc, while
        tearing down the render tree, we can get to a state where a block element has both inline and block children.
        It happens when the style change on an element makes sibling anonymous block wrappers detached.
        In that case the markAllDescendantsWithFloatsForLayout() call does not get propagated down on the
        block child elements as we return early at the childrenInline() check.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::removeFloat):

2014-10-29  Antti Koivisto  <antti@apple.com>

        Factor cache validity computation functions out of CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=138156

        Reviewed by Andreas Kling.

        These can be used to implement cache logic on WebKit level.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CacheValidation.cpp: Added.
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        (WebCore::updateRedirectChainStatus):
        (WebCore::redirectChainAllowsReuse):
        * loader/CacheValidation.h: Added.
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * loader/cache/CachedResource.cpp:
        (WebCore::updateResponseHeadersAfterRevalidation):
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::freshnessLifetime):
        (WebCore::CachedResource::willSendRequest):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        (WebCore::CachedResource::redirectChainAllowsReuse):
        (WebCore::currentAge): Deleted.
        * loader/cache/CachedResource.h:

2014-10-29  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r175342.

        a file ended up in a wrong directory

        Reverted changeset:

        "Factor cache validity computation functions out of
        CachedResource"
        https://bugs.webkit.org/show_bug.cgi?id=138156
        http://trac.webkit.org/changeset/175342

2014-10-29  Antti Koivisto  <antti@apple.com>

        Factor cache validity computation functions out of CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=138156

        Reviewed by Andreas Kling.

        These can be used to implement cache logic on WebKit level.

        * CMakeLists.txt:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CacheValidation.cpp: Added.
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        (WebCore::updateRedirectChainStatus):
        (WebCore::redirectChainAllowsReuse):
        * loader/CacheValidation.h: Added.
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * loader/cache/CachedResource.cpp:
        (WebCore::updateResponseHeadersAfterRevalidation):
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::isExpired):
        (WebCore::CachedResource::freshnessLifetime):
        (WebCore::CachedResource::willSendRequest):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        (WebCore::CachedResource::redirectChainAllowsReuse):
        (WebCore::currentAge): Deleted.
        * loader/cache/CachedResource.h:

2014-10-28  Ada Chan  <adachan@apple.com>

        Add API to mute/unmute a page.
        https://bugs.webkit.org/show_bug.cgi?id=138150

        Reviewed by Eric Carlson.

        No new tests, since it's difficult to test whether the Page has indeed been muted.

        * dom/Document.cpp:
        (WebCore::Document::setMuted):
        Go through each AudioProducer and call setMuted() on it.
        * dom/Document.h:
        * page/AudioProducer.h:
        Add setMuted(bool). HTMLMediaElement, the only derived class of AudioProducer so far,
        has already implemented setMuted().
        * page/Page.cpp:
        (WebCore::Page::setMuted):
        Go through all its frames and call setMuted() on each frame's Document.
        * page/Page.h:

2014-10-29  Tim Horton  <timothy_horton@apple.com>

        Implement action menus for data detected items
        https://bugs.webkit.org/show_bug.cgi?id=138178
        <rdar://problem/18709436>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export a symbol from Position that we need.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac/DataDetectorsSPI.h:
        Add a combined SPI header for all of the random bits of DataDetectors that we use.

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

        [EME] NULL-dereference crash in MediaKeys::setMediaElement().
        https://bugs.webkit.org/show_bug.cgi?id=138177

        Reviewed by Eric Carlson.

        NULL-check m_mediaElement->player() before using. It may have been cleared if the HTMLMediaElement
        has previously had stop() called.

        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::setMediaElement):

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

        [EME] MediaKeySession resources persist across page reloads
        https://bugs.webkit.org/show_bug.cgi?id=138176

        Reviewed by Eric Carlson.

        MediaKeySession is an ActiveDOMObject, so when told to stop() by our execution context,
        close() the session, releasing all our resources.

        * Modules/encryptedmedia/MediaKeySession.h:

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

        [EME][Mac] MediaKeySession type "keyrelease" is ignored.
        https://bugs.webkit.org/show_bug.cgi?id=138175

        Reviewed by Eric Carlson.

        To indicate that they would like to recevie expired session confirmation messages, clients
        will create a MediaKeySession with a type parameter of "keyrelease". The code which validates
        this type needs to be updated to recognize "keyrelease" as a valid type.

        Also, the code which validates update() requests needs to allow updates containing the string
        "acknowledged", so that clients can request the confirmation messages be discarded.

        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::supportsMIMEType):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (WebCore::CDMSessionMediaSourceAVFObjC::update):

2014-10-28  Ada Chan  <adachan@apple.com>

        Remove MediaSessionClient::hasMediaCharacteristics() and MediaSessionClient::mediaStateDidChange().
        https://bugs.webkit.org/show_bug.cgi?id=138153

        Reviewed by Jer Noble.

        After http://trac.webkit.org/changeset/175273, Document no longer keeps a set of MediaSessions
        and it doesn't need to query each MediaSession for its characteristics and play state.
        MediaSessionClient::hasMediaCharacteristics() is no longer needed and MediaSessionClient::mediaStateDidChange()
        can be removed if HTMLMediaElement calls Document::updateIsPlayingAudio() after m_playing has changed.

        No new tests, no behavior change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        Call setPlaying() rather than setting m_playing directly.
        (WebCore::HTMLMediaElement::setPlaying):
        Update m_playing. If it has changed, call Document::updateIsPlayingAudio().
        (WebCore::HTMLMediaElement::setPausedInternal):
        Call setPlaying() rather than setting m_playing directly.
        (WebCore::HTMLMediaElement::isPlayingAudio):
        Call isPlaying() directly rather than checking the MediaSession's state.
        * html/HTMLMediaElement.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::setState):
        MediaSessionClient::mediaStateDidChange() has been removed.
        (WebCore::MediaSession::hasMediaCharacteristics): Deleted.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSessionClient::mediaStateDidChange): Deleted.
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/mac/AudioDestinationMac.h:

2014-10-29  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in html/
        https://bugs.webkit.org/show_bug.cgi?id=138166

        Reviewed by Andreas Kling.

        Clean up virtual functions in html/ by:
        - Making virtual functions final when possible
        - Making classes final when possible
        - Using 'override' when appropriate
        - Explicitly marking functions / destructors as virtual when they are
          inherently virtual
        - Dropping virtual destructors when the class does not have subclasses
          and mark the class as final, to get rid of unnecessary vtables
        - Making isXXX() virtual functions private on XXX classes to avoid
          unnecessary type checks
        - De-virtualizing some functions that do not need to be virtual
        - Dropping final for virtual functions in classes already marked as
          final

        No new tests, no behavior change.

        * html/ButtonInputType.h:
        * html/CheckboxInputType.h:
        * html/ColorInputType.h:
        * html/DOMSettableTokenList.h:
        * html/DateInputType.h:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.h:
        * html/EmailInputType.h:
        * html/FTPDirectoryDocument.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.h:
        (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): Deleted.
        * html/HTMLMeterElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLSpanElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLSummaryElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HiddenInputType.h:
        * html/ImageInputType.h:
        * html/MediaKeyEvent.h:
        * html/MonthInputType.h:
        * html/NumberInputType.h:
        * html/PasswordInputType.h:
        * html/PublicURLManager.h:
        * html/RadioInputType.h:
        * html/ResetInputType.h:
        * html/SubmitInputType.h:
        * html/TelephoneInputType.h:
        * html/TextInputType.h:
        * html/TimeInputType.h:
        * html/URLInputType.h:
        * html/WeekInputType.h:
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/DOMPath.h:
        * html/canvas/EXTShaderTextureLOD.h:
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextAttributes.h:
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLDrawBuffers.h:
        * html/canvas/WebGLFramebuffer.h:
        (WebCore::WebGLFramebuffer::isFramebuffer): Deleted.
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.h:
        (WebCore::WebGLSharedObject::isFramebuffer): Deleted.
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        (WebCore::WebGLVertexArrayObjectOES::isVertexArray): Deleted.
        * html/shadow/ImageControlsRootElement.h:
        * html/shadow/InsertionPoint.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/SpinButtonElement.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrackList.h:
        * html/track/DataCue.h:
        (WebCore::DataCue::cueType): Deleted.
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrackList.h:
        * html/track/TrackEvent.h:
        * html/track/VTTCue.h:
        (WebCore::VTTCueBox::setFontSizeFromCaptionUserPrefs):
        * html/track/VTTRegion.h:
        * html/track/VideoTrack.h:
        * html/track/VideoTrackList.h:
        * html/track/WebVTTParser.h:
        (WebCore::WebVTTCueData::~WebVTTCueData): Deleted.

2014-10-17  Sergio Villar Senin  <svillar@igalia.com>

        ASSERTION FAILED: growthShare > 0 in WebCore::RenderGrid::distributeSpaceToTracks
        https://bugs.webkit.org/show_bug.cgi?id=137772

        Reviewed by Andreas Kling.

        We're hitting the ASSERTION because if the number of tracks an
        item spans does greatly exceed the available logical space, then
        the result of the division availableLogicalSpace/numberOfTracks is
        truncated to 0. So the ASSERTION was theoretically right because
        the result has to be always >0 (as the dividend > 0) but the fact
        that the result is a LayoutUnit forces us to accept 0 as a valid
        outcome of the operation.

        Test: fast/css-grid-layout/tracks-number-greatly-exceeding-available-size-crash.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::distributeSpaceToTracks):

2014-10-29  Chris Dumez  <cdumez@apple.com>

        Crash in CachedRawResource::canReuse() when reloading http://dnd.wizards.com/dungeons-and-dragons/story
        https://bugs.webkit.org/show_bug.cgi?id=138164

        Reviewed by Andreas Kling.

        This patch fixes a crash when reloading the following URL:
        http://dnd.wizards.com/dungeons-and-dragons/story

        We were crashing in CachedRawResource::canReuse() because header.key
        would sometimes be a null String and we would call
        HashMap::get(nullString).

        The real issue was that header.key was null in the first place, which
        means that even though the HTTPHeaderMap iterator is valid, it->key
        is a null String, which should never happen. There was a bug in the
        HTTPHeaderMapConstIterator() constructor that would cause the
        iterator key/value pair to not get initialized if the HTTPHeaderMap
        contained *only* uncommon HTTP headers. This patch updates the
        constructor so that we fall back to updating the key/value from the
        uncommon header map, if we failed to initialized from the common
        header map (because it was empty).

        Test: http/tests/cache/xhr-uncommon-header.html

        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::HTTPHeaderMapConstIterator::HTTPHeaderMapConstIterator):

2014-10-28  Benjamin Poulain  <benjamin@webkit.org>

        CSS4 Selectors: Add the pseudo class :any-link
        https://bugs.webkit.org/show_bug.cgi?id=138128

        Reviewed by Andreas Kling.

        Defined here: http://dev.w3.org/csswg/selectors4/#the-any-link-pseudo

        After :link and :-webkit-any-link were fixed, :any-link behaves
        exactly like :-webkit-any-link. All I had left to do here was
        make them synonyms when evaluating selectors.

        Defined here: http://dev.w3.org/csswg/selectors4/#the-any-link-pseudo

        After :link and :-webkit-any-link were fixed, :any-link behaves
        exactly like :-webkit-any-link. All I had left to do here was
        make them synonyms when evaluating selectors.

        Tests: fast/selectors/any-link-basics-2.html
               fast/selectors/any-link-basics.html
               fast/selectors/any-link-styling.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::isCommonPseudoClassSelector):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementLinkMatching):

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

        [EME][Mac] Adopt new AVStreamSession API: pass storageDirectoryAtURL at creation-time
        https://bugs.webkit.org/show_bug.cgi?id=138149

        Reviewed by Brent Fulgham.

        AVStreamSession now requires its storage location at creation-time, rather than post-creation. This requires
        us to move storage location code from CDMSessionMediaSourceAVFObjC to MediaPlayerPrivateMediaSourceAVFObjC.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]): Renamed.
        (WebCore::CDMSessionMediaSourceAVFObjC::update):
        (WebCore::sessionStorageDirectory): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::sessionStorageDirectory):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession):

2014-10-28  Geoffrey Garen  <ggaren@apple.com>

        All networking crashes on Mac 32bit
        https://bugs.webkit.org/show_bug.cgi?id=138157

        Reviewed by Andy Estes.

        NEFilterSource content filtering is not available on 32bit, so
        soft-linking fails at runtime. The simplest solution is just to disable
        it at compile time.

        * platform/ContentFilter.h:

2014-10-28  Jeremy Jones  <jeremyj@apple.com>

        Add optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=138044

        Reviewed by Jer Noble.

        Enable different types of fullscreen video behavior.
        Add an enum parameter to enterVideoFullscreenForVideoElement for alternate types of fullscreen.
        Add gesture for alternate fullscreen.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::enterFullscreenOptimized): added
        * Modules/mediacontrols/MediaControlsHost.h: added enterFullscreenOptimized
        * Modules/mediacontrols/MediaControlsHost.idl: added enterFullscreenOptimized
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.handleBaseGestureChange): recognize alternate gesture
        * WebCore.exp.in: added parameter to setupFullscreen
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFrom) : replace m_isInVideoFullscreen with m_videoFullscreenType
        (WebCore::HTMLMediaElement::stop) : ditto
        (WebCore::HTMLMediaElement::isFullscreen) : ditto
        (WebCore::HTMLMediaElement::enterFullscreen): add parameter to enterVideoFullscreenForVideoElement
        (WebCore::HTMLMediaElement::exitFullscreen): replace m_isInVideoFullscreen with m_videoFullscreenType
        (WebCore::HTMLMediaElement::enterFullscreenOptimized): added
        * html/HTMLMediaElement.h: added enterFullscreenOptimized
        * page/ChromeClient.h:
        (WebCore::ChromeClient::enterVideoFullscreenForVideoElement): added parameter
        * platform/ios/WebVideoFullscreenControllerAVKit.h: add parameter
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController enterFullscreen:type:]): add parameter
        (-[WebVideoFullscreenController enterFullscreen:]): Deleted.
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: reorder protected to after public
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerController player]): this stub is now required
        (-[WebAVPlayerController layoutSublayersOfLayer:]): this is a better way to update video frames
        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): implement optimized fullscreen interface 
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): ditto
        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto

2014-10-28  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in accessibility/
        https://bugs.webkit.org/show_bug.cgi?id=138148

        Reviewed by Chris Fleizach.

        Clean up virtual functions in accessibility/ by:
        - Marking classes as final when suitable
        - Marking virtual functions as final when suitable
        - Dropping final on virtual functions in classes that are already final
        - Make isXXX() virtual type checking functions in XXX classes to avoid
          useless type checks

        No new tests, no behavior change.

        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityMockObject.h:
        (WebCore::AccessibilityMockObject::setParent):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.h:

2014-10-24  Jeffrey Pfau  <jpfau@apple.com>

        FrameProgressTracker expects Page to not have detached
        https://bugs.webkit.org/show_bug.cgi?id=138061

        Reviewed by Alexey Proskuryakov.

        In some cases, a Page may be detached from a Frame before its
        FrameLoader is torn down, causing FrameProgressTracker's destructor
        to hit a null pointer.

        No new tests; it is impossible to reliably simulate the null pointer
        case without intrusive code changes.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):

2014-10-27  Ada Chan  <adachan@apple.com>

        Introduce a new abstract class called AudioProducer and keep a set of AudioProducers
        rather than the active MediaSessions in Document
        https://bugs.webkit.org/show_bug.cgi?id=138107

        Reviewed by Eric Carlson.

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        Add AudioProducer.h to the project.
        * dom/Document.cpp:
        (WebCore::Document::addAudioProducer):
        (WebCore::Document::removeAudioProducer):
        (WebCore::Document::updateIsPlayingAudio):
        Go through the set of AudioProducers and see if any is playing audio.
        Now that this method no longer refers to MediaSessions directly, this code
        does not need to be guarded by #if ENABLE(VIDEO).
        (WebCore::Document::registerMediaSession): Deleted.
        (WebCore::Document::unregisterMediaSession): Deleted.
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::isPlayingAudio):
        Return whether this element is playing audio.
        * html/HTMLMediaElement.h:
        * page/AudioProducer.h: Added.
        (WebCore::AudioProducer::~AudioProducer):
        * page/Page.cpp:
        (WebCore::Page::updateIsPlayingAudio):
        This is no longer guarded with #if ENABLE(VIDEO) since the Document methods it calls
        are no longer guarded.
        * page/Page.h:

2014-10-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed comment fix from r175267.

        Fix namespace name in comment.

        * css/StyleBuilderCustom.h:

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

        REGRESSION(r171593) [Mac] Media controls create a large (and unnecessary) backing store
        https://bugs.webkit.org/show_bug.cgi?id=137757

        Reviewed by Eric Carlson.

        In r171593, a <div> was added to the media controls which is only ever used on iOS. Instead
        of creating and adding this <div> in mediaControlsApple.js (which is used on OS X), this 
        <div> should be created and added in mediaControlsiOS.js, which requires overloading
        Controller.addControls.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel.hidden): Drive-by fix: allow the panel itself to be hidden.
        (video::-webkit-media-controls-panel-composited-parent): Deleted.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Remove the composited parent.
        (Controller.prototype.addControls): Ditto.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Create the composited parent.
        (ControllerIOS.prototype.addControls): Copied from (previous) apple.js.

2014-10-28  Chris Dumez  <cdumez@apple.com>

        Move "Number" CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138125

        Reviewed by Antti Koivisto.

        Move "Number" CSS properties from DeprecatedStyleBuilder to the new
        StyleBuilder:
        -webkit-hyphenate-limit-after
        -webkit-hyphenate-limit-before
        -webkit-shape-image-threshold
        -webkit-hyphenate-limit-lines

        They are now generated from CSSPropertyNames.in

        For -webkit-hyphenate-limit-lines, I used custom code instead of
        the Number converter as it required special handling for the id
        value. This patch thus adds support for [Custom=Value] to
        CSSPropertyNames.in and the custom code goes into
        css/StyleBuilderCustom.h.

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyNumber::setValue): Deleted.
        (WebCore::ApplyPropertyNumber::applyValue): Deleted.
        (WebCore::ApplyPropertyNumber::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertNumber):
        * css/StyleBuilderCustom.h: Added.
        (WebCore::StyleBuilderFunctions::applyValueWebkitHyphenateLimitLines):
        * css/makeprop.pl:

2014-10-28  Zan Dobersek  <zdobersek@igalia.com>

        [WebCore] Remove uses of WTF::bind() in the Media Stream module
        https://bugs.webkit.org/show_bug.cgi?id=138016

        Reviewed by Eric Carlson.

        Replace uses of WTF::bind() in the Media Stream module with C++11 lambdas.
        Internal helper methods are removed in favor of inlining the code directly
        into the lambdas. Range-based for-loops are deployed where appropriate.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::scheduleEventDispatch):
        (WebCore::MediaStreamTrack::dispatchQueuedEvents): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrackSourcesRequest.cpp:
        (WebCore::MediaStreamTrackSourcesRequest::didCompleteRequest):
        (WebCore::MediaStreamTrackSourcesRequest::callCompletionHandler): Deleted.
        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::constraintsValidated):
        (WebCore::UserMediaRequest::userMediaAccessGranted):
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::failedToCreateStreamWithConstraintsError):
        (WebCore::UserMediaRequest::failedToCreateStreamWithPermissionError):
        (WebCore::UserMediaRequest::requestPermission): Deleted.
        (WebCore::UserMediaRequest::createMediaStream): Deleted.
        (WebCore::UserMediaRequest::callSuccessHandler): Deleted.
        (WebCore::UserMediaRequest::callErrorHandler): Deleted.
        * Modules/mediastream/UserMediaRequest.h:

2014-10-28  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Abandoned select option is reselected when shift selecting new options
        https://bugs.webkit.org/show_bug.cgi?id=137553

        Reviewed by Ryosuke Niwa.

        Previous active selection is wrongly recorded by HTMLSelectElement after selecting a new item using
        typeAhead. Fixed by clearing previously selected options before starting a new active selection.

        Test: fast/forms/listbox-selection-after-typeahead.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::selectOption): Code re-ordering

2014-10-28  Milan Crha  <mcrha@redhat.com>

        Use constants from wtf/MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=137967

        Reviewed by Darin Adler.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::rotateCairoMatrixForVerticalOrientation):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::updateLogicalHeight):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::getDisplayStyleLargeOperator):

2014-10-28  David Hyatt  <hyatt@apple.com>

        Selection gap painting is ugly for ruby bases.
        https://bugs.webkit.org/show_bug.cgi?id=138136

        Reviewed by Dean Jackson.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGaps):
        For ruby bases don't fill to the end of the block (in the block direction),
        since ideographic baselines push that end below the text baseline.

        (WebCore::RenderBlock::blockSelectionGaps):
        * rendering/RenderBlockFlow.cpp:
        Skip ruby bases for block selection gap filling.

2014-10-28  Zalan Bujtas  <zalan@apple.com>

        Speed up line parsing for simple line layout.
        https://bugs.webkit.org/show_bug.cgi?id=137275

        Reviewed by Antti Koivisto.
        
        This patch speeds up the line parsing for simple line layout by
        reducing the number of text measurement calls.
        The parsing logic hasn't changed. We simply walk over
        the whitespace/non-whitespace fragments and measure them to
        figure out whether they fit.
        The performance gain mainly comes from the more efficient line wrapping
        so that we don't re-measure the fragment when it is pushed to
        the next line.

        No change in behaviour. (except the empty line-break run removal.)

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::skipWhitespace): 
        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::TextFragment::TextFragment):
        (WebCore::SimpleLineLayout::TextFragment::isEmpty):
        (WebCore::SimpleLineLayout::LineState::LineState):
        (WebCore::SimpleLineLayout::LineState::commitAndCreateRun): adds uncommitted text to the line and creates a run out of it. 
        (WebCore::SimpleLineLayout::LineState::addUncommitted): appends fragment to the uncommitted text. 
        (WebCore::SimpleLineLayout::LineState::addUncommittedWhitespace): appends whitespace to the uncommitted text.
        (WebCore::SimpleLineLayout::LineState::jumpTo): moves line's current position without committing text. 
        (WebCore::SimpleLineLayout::LineState::width): current width of the line including committed and uncommitted text.
        (WebCore::SimpleLineLayout::LineState::fits): checks if committed + uncommitted text fits the line. 
        (WebCore::SimpleLineLayout::LineState::removeCommittedTrailingWhitespace): 
        (WebCore::SimpleLineLayout::removeTrailingWhitespace): post processing the trailing whitespace.
        (WebCore::SimpleLineLayout::initializeLine):
        (WebCore::SimpleLineLayout::splitFragmentToFitLine): breaks the fragments into 2 so that the first (sub)fragment fits the line.
        (WebCore::SimpleLineLayout::nextFragment): returns the next valid fragment of the text.
        (WebCore::SimpleLineLayout::createLineRuns): creates runs for the current line and returns when we can't fit more text on the line.
        (WebCore::SimpleLineLayout::updateLineConstrains): updates left/right constrains for the current line.
        (WebCore::SimpleLineLayout::createTextRuns): creates runs for the whole text.
        (WebCore::SimpleLineLayout::isWhitespace): Deleted.
        (WebCore::SimpleLineLayout::skipWhitespaces): Deleted.
        (WebCore::SimpleLineLayout::measureWord): Deleted.
        (WebCore::SimpleLineLayout::adjustRunOffsets): Deleted.
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):

2014-10-28  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Use a WTF function
        for getting current process ID instead of getpid().

2014-10-28  Mihnea Ovidenie  <mihnea@adobe.com>

        Clean up subtrees selection code
        https://bugs.webkit.org/show_bug.cgi?id=137740

        Reviewed by David Hyatt.

        Clean up subtrees selection code. Add a new class SelectionSubtreeData
        that keeps only the selection data. Have SelectionSubtreeRoot class embed
        a SelectionSubtreeData member and keep the business logic methods.
        No functionality changed therefore no new layout tests.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionStartEnd):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::subtreeSelectionBounds):
        (WebCore::RenderView::repaintSubtreeSelection):
        (WebCore::RenderView::setSelection):
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees):
        (WebCore::RenderView::clearSubtreeSelection):
        (WebCore::RenderView::applySubtreeSelection):
        * rendering/RenderView.h:
        * rendering/SelectionSubtreeRoot.cpp:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeRoot):
        (WebCore::SelectionSubtreeRoot::adjustForVisibleSelection):
        * rendering/SelectionSubtreeRoot.h:
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::SelectionSubtreeData):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStart):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStartPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEnd):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionEndPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionClear):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::selectionStartEndPositions):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionStart):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionStartPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionEnd):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::setSelectionEndPos):
        (WebCore::SelectionSubtreeRoot::SelectionSubtreeData::clearSelection):
        (WebCore::SelectionSubtreeRoot::selectionData):
        (WebCore::SelectionSubtreeRoot::setSelectionData):
        (WebCore::SelectionSubtreeRoot::selectionStart): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionStartPos): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionEnd): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionEndPos): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionStartEndPositions): Deleted.
        (WebCore::SelectionSubtreeRoot::selectionClear): Deleted.
        (WebCore::SelectionSubtreeRoot::setSelectionStart): Deleted.
        (WebCore::SelectionSubtreeRoot::setSelectionStartPos): Deleted.
        (WebCore::SelectionSubtreeRoot::setSelectionEnd): Deleted.
        (WebCore::SelectionSubtreeRoot::setSelectionEndPos): Deleted.

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

        [Mac] The first software paint of a <video> element takes up to 2.5s.
        https://bugs.webkit.org/show_bug.cgi?id=137754

        Reviewed by Brent Fulgham.

        It turns out that, if you pass nil to -[AVPlayerItemVideoOutput initWithPixelBufferAttributes:]
        the video output will not attempt to conform the resulting pixel buffers into a particular format.
        This means that adding such a video output to a AVPlayerItem should have almost no performance
        penalty, since the video output does not even copy the resulting buffers, but rather just retains
        and returns the ones from the AVPlayerLayer.

        Create and attach an AVPlayerItemVideoOutput after creating the AVPlayerItem, but before attaching
        the player item to the AVPlayer. This eliminates the reconfigure step which occurs after attaching
        a video output to an already attached AVPlayerItem.

        When creating the AVPlayerItemVideoOutput, pass in `nil` for the pixelBufferAttributes parameter.

        Instead of blocking waiting for output from the AVPlayerItemVideoOutput during creating, block and
        whait when asked to paint with the video output.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):

2014-10-28  Chris Dumez  <cdumez@apple.com>

        Move text decoration CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138121

        Reviewed by Antti Koivisto.

        Move text decoration CSS properties from DeprecatedStyleBuilder to the
        new StyleBuilder so that they are generated from CSSPropertyNames.in.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyTextDecoration::applyValue): Deleted.
        (WebCore::ApplyPropertyTextDecoration::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextDecoration):

2014-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove GDK dependency from SharedTimerGtk
        https://bugs.webkit.org/show_bug.cgi?id=138092

        Reviewed by Martin Robinson.

        It depends on GDK just to use GDK_PRIORITY_REDRAW constant, we can
        use its value directly instead.

        * PlatformGTK.cmake:
        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireInterval):

2014-10-27  Andreas Kling  <akling@apple.com>

        Move RenderBlock::beingDestroyed() to RenderObject.
        <https://webkit.org/b/138116>

        Reviewed by Antti Koivisto.

        Make "is being destroyed" a RenderObject concept instead of restricting
        it to RenderBlocks. I'm guessing that this was specific to blocks due to
        lack of bitfield space in RenderObject, and that's no longer an issue.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::beingDestroyed): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::beingDestroyed):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):

2014-10-27  Chris Fleizach  <cfleizach@apple.com>

        AX: input type=hidden is being exposed when aria-hidden=false
        https://bugs.webkit.org/show_bug.cgi?id=138106

        Reviewed by Benjamin Poulain.

        If an input type=hidden was inside an aria-hidden=false, it would appear because
        the lack of a RenderObject behind that object was not blocking its adoption into the AX tree.
        We should explicity check for whether the type is hidden and then return an appropriate role. 

        Test: accessibility/input-type-hidden-in-aria-hidden-false.html

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

2014-10-27  Alexey Proskuryakov  <ap@apple.com>

        https://trac.webkit.org/changeset/175233 broke many tests, fixing an incorrect '!'.

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

2014-10-24  David Hyatt  <hyatt@apple.com>

        text-combine needs to center text within the vertical space using glyph bounds
        https://bugs.webkit.org/show_bug.cgi?id=138056
        <rdar://problem/15403667>

        Reviewed by Dean Jackson.

        Added fast/text/tatechuyoko.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::RenderCombineText):
        (WebCore::RenderCombineText::adjustTextOrigin):
        (WebCore::RenderCombineText::combineText):
        * rendering/RenderCombineText.h:

2014-10-27  Benjamin Poulain  <benjamin@webkit.org>

        Cleanup after r175213: fastGetAttribute().isNull() should be fastHasAttribute()

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Darin spotted this mistake.

2014-10-27  Alexey Proskuryakov  <ap@apple.com>

        http/tests/cookies/third-party-cookie-relaxing.html is flaky on bots
        https://bugs.webkit.org/show_bug.cgi?id=138098

        Reviewed by Anders Carlsson.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        Create a separate session for each WKTR/DRT process when testing.

2014-10-27  Chris Dumez  <cdumez@apple.com>

        Use separate HashMaps for common and uncommon headers in HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=138079

        Reviewed by Anders Carlsson.

        Use separate HashMaps for common and uncommon headers in HTTPHeaderMap:
        - a (faster) HashMap<HTTPHeaderMap, String> for common HTTP headers
        - a HashMap<String, String, CaseFoldingHash> for uncommon ones

        This avoids having to construct Strings from HTTPHeaderMap values for
        storing. This also means we have less isolated String copies to do when
        creating cross-thread data. The common headers HashMap should also be
        a bit more efficient due to faster hashing and faster key comparison in
        case of collision.

        Some calls sites can also benefit from having direct access to common
        headers of the request in HTTPHeaderName type.

        This patch adds a new HTTPHeaderMapConstIterator iterator type for
        HTTPHeaderMap so that call sites that do not need / want to distinguish
        common / uncommon headers still do not need to. They can keep using
        modern C++ loops over HTTPHeaderMap objects and get <String, String>
        key/value pairs.

        No new tests, no behavior change.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlSimpleRequestHeaderWhitelist):
        Have isOnAccessControlSimpleRequestHeaderWhitelist() take a
        HTTPHeaderName in argument instead of a String as only common headers
        are in the whitelist.

        (WebCore::isSimpleCrossOriginAccessRequest):
        Call isOnAccessControlSimpleRequestHeaderWhitelist() only for common
        HTTP headers.

        * loader/CrossOriginAccessControl.h:
        Have isOnAccessControlSimpleRequestHeaderWhitelist() take a
        HTTPHeaderName in argument instead of a String as only common headers
        are in the whitelist.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        Call isOnAccessControlSimpleRequestHeaderWhitelist() only for common
        HTTP headers.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        Call httpHeaderFields().commonHeaders().find() instead of
        httpHeaderFields().find() as we are looking for a common header.
        HTTPHeaderMap::find(HTTPHeaderName) was removed now that we have a
        HashMap dedicated to common headers.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::shouldIgnoreHeaderForCacheReuse):
        Update argument type to be a HTTPHeaderName instead of a String as
        only common HTTP headers can be ignored for cache reuse. The
        implementation already dealt with HTTPHeaderName type and had to
        call findHTTPHeaderName(). This is no longer needed now that the
        call site now has direct access to common headers in HTTPHeaderName
        type.

        (WebCore::CachedRawResource::canReuse):
        - Only call shouldIgnoreHeaderForCacheReuse() for common HTTP headers.
        - Slightly optimize the second loop (the one over oldHeaderMap) to only
          check that the key is present in newHeaderMap, without actually
          comparing the String values. If the String values were different, the
          first loop would have seen it already and we would have returned
          early.

2014-10-27  Andreas Kling  <akling@apple.com>

        Devirtualize RenderDeprecatedFlexibleBox::isStretchingChildren().
        <https://webkit.org/b/138096>

        Reviewed by Chris Dumez.

        This function is only ever called on a renderer after we've checked
        that it's a RenderDeprecatedFlexibleBox, so make it non-virtual.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderObject.h:

2014-10-27  Chris Dumez  <cdumez@apple.com>

        Reintroduce null check removed in r175222
        https://bugs.webkit.org/show_bug.cgi?id=138087

        Reviewed by Andreas Kling.

        Reintroduce null check removed in r175222 as several layout tests are
        crashing on the bots without them. At least the Pair pointer can be
        null according to the assertion hits on the bots.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertRadius):

2014-10-27  Chris Dumez  <cdumez@apple.com>

        Move radius CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138087

        Reviewed by Andreas Kling.

        Move radius CSS properties from DeprecatedStyleBuilder to the new
        StyleBuilder so that they are now generated from CSSPropertyNames.in.

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyBorderRadius::setValue): Deleted.
        (WebCore::ApplyPropertyBorderRadius::applyValue): Deleted.
        (WebCore::ApplyPropertyBorderRadius::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertRadius):

2014-10-27  Zan Dobersek  <zdobersek@igalia.com>

        Shrink MathMLOperatorDictionary::dictionary table
        https://bugs.webkit.org/show_bug.cgi?id=137914

        Reviewed by Darin Adler.

        Improve packing of the Entry structure that's used for elements
        of the MathMLOperatorDictionary::dictionary table. This drops the
        size of the struct from 16 bytes to just 4 bytes, and shrinks the
        size of the dictionary table from rougly 16 kB down to 4 kB.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::MathMLOperatorDictionary::ExtractKey):
        (WebCore::RenderMathMLOperator::setOperatorProperties):
        * rendering/mathml/RenderMathMLOperator.h:

2014-10-27  Andreas Kling  <akling@apple.com>

        Move canContainFixedPositionObjects() to RenderElement.
        <https://webkit.org/b/138088>

        Reviewed by Mihnea Ovidenie.

        Only RenderElement can contain other renderers, so it's not really
        natural to answer this question on RenderObject anyway.

        Moving it to RenderElement lets it access more efficient getters
        that don't have to handle the RenderText case.

        * rendering/RenderElement.h:
        (WebCore::RenderElement::canContainFixedPositionObjects):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canContainFixedPositionObjects): Deleted.

2014-10-26  Benjamin Poulain  <benjamin@webkit.org>

        Images with usemap should not have a link state
        https://bugs.webkit.org/show_bug.cgi?id=138071

        Reviewed by Andreas Kling.

        Image tags were incorrectly getting a link state if a usemap is defined.
        The <area> of the usemap is supposed to get the link state, but never the image.

        Unfortunately, the Accessibility code was relying on the wrong behavior
        to set the ImageMapRole, most of the patch is updating that code to get
        the correct role without the link state.

        Test: fast/selectors/images-with-usemap-should-not-match-link.html

        The accessibility code is covered by a few tests in accessibility/.
        The test accessibility/aria-used-on-image-maps.html ensure the <area>
        elements also get the correct role.

        * dom/Node.h:
        (WebCore::Node::setIsLink):
        (WebCore::Node::clearIsLink): Deleted.
        Unused code.

        (WebCore::Node::isLink):
        Move with its setter for clarity.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        This is the bug.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Here the branches for the role ImageMap where behind isLink() which would
        never be valid after the fix.

        My fix here was to use the same definition previously set by HTMLImageElement::parseAttribute(),
        any usemap attribute qualifies the node for ImageMapRole.

        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::linkedUIElements):
        (WebCore::AccessibilityRenderObject::url):

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAnchor): Deleted.
        Something funny I discovered is the Accessibility code worked around the bug
        by defining isAnchor() that exclude images from isLink().

        Since isLink() will no longer be true for images, the hack can be removed.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::anchorElement):
        (WebCore::AccessibilityNodeObject::isAnchor): Deleted.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2014-10-26  Benjamin Poulain  <benjamin@webkit.org>

        Replace Element::didAffectSelector() by setNeedsStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=138080

        Reviewed by Andreas Kling.

        Element::didAffectSelector() was probably an optimization at some point,
        with the current code is does nothing more than setNeedsStyleRecalc().

        * dom/Document.cpp:
        (WebCore::Document::setCSSTarget):
        * dom/Element.cpp:
        (WebCore::Element::didAffectSelector): Deleted.
        * dom/Element.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::disabledStateChanged):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::parseAttribute):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::parseAttribute):
        (WebCore::HTMLOptionElement::setSelectedState):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::didElementStateChange):

2014-10-26  Andreas Kling  <akling@apple.com>

        Move some RenderObject member functions to RenderElement.
        <https://webkit.org/b/138085>

        Reviewed by Chris Dumez.

        Move these two functions to RenderElement:

            - handleDynamicFloatPositionChange()
            - removeAnonymousWrappersForInlinesIfNecessary()

        Also make childBecameNonInline() take a RenderElement& since
        that's all we ever pass to it.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::childBecameNonInline):
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::childBecameNonInline):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::handleDynamicFloatPositionChange):
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary):
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::childBecameNonInline):
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::handleDynamicFloatPositionChange): Deleted.
        (WebCore::RenderObject::removeAnonymousWrappersForInlinesIfNecessary): Deleted.
        * rendering/RenderObject.h:

2014-10-26  Andreas Kling  <akling@apple.com>

        Move continuation teardown from subclasses to RenderBoxModelObject.
        <https://webkit.org/b/138081>

        Reviewed by Antti Koivisto.

        Let RenderBoxModelObject::willBeDestroyed() tear down any continuation
        instead of having every subclass do this themselves.

        Also added a RenderElement bit tracking whether the renderer has a
        continuation. This avoids a hash lookup every time we destroy a
        RenderBoxModelObject that didn't have a continuation.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::continuationMap):
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::continuation):
        (WebCore::RenderBoxModelObject::setContinuation):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setHasContinuation):
        (WebCore::RenderElement::hasContinuation):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):

2014-10-25  Benjamin Poulain  <benjamin@webkit.org>

        Remove a useless variable from SelectorCodeGenerator::generateElementMatchesSelectorList()
        https://bugs.webkit.org/show_bug.cgi?id=138076

        Reviewed by Alexey Proskuryakov.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesSelectorList):
        The variable elementAddressRegisterIndex was just needed for debugging, it is useless now.

2014-10-18  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: timelines should not count time elapsed while paused in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=136351

        Reviewed by Timothy Hatcher.

        To avoid counting time elapsed while the debugger is paused, timeline records should
        keep track of time elapsed since the start of timeline capturing, rather than wall clock
        timestamps. We can easily compute elapsed time by sharing a Stopwatch instance through the
        inspector environment. The stopwatch runs with timelines and is paused with the debugger,
        so subsequent time measurements will not include time elapsed while the debugger is paused.

        This refactoring is safe because start and end times are only used to graph records; the
        timestamp's actual value is irrelevant and is not displayed in the user interface. Date
        timestamps are still included with network-related records as part of their header data.

        No new tests, because we cannot reliably test timing changes induced by debugger pauses.
        It is possible for records to accrue time before the debugger pauses or after it resumes.

        * inspector/InspectorCSSAgent.cpp: Remove unnecessary include.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::executionStopwatch): Add a shared stopwatch.
        * inspector/InspectorController.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::timestamp): Redirect to the shared stopwatch.
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::timestamp): Redirect to the shared stopwatch.
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStart): Start and stop the stopwatch with timelines.
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::timestamp): Redirect to the shared stopwatch.
        (WebCore::startProfiling):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::TimelineTimeConverter::reset): Deleted.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::TimelineTimeConverter::TimelineTimeConverter): Deleted.
        (WebCore::TimelineTimeConverter::fromMonotonicallyIncreasingTime): Deleted.
        (WebCore::InspectorTimelineAgent::timeConverter): Deleted.
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::executionStopwatch): Add a shared stopwatch.
        * inspector/WorkerInspectorController.h:

2014-10-25  Dan Bernstein  <mitz@apple.com>

        Fix builds using the public SDK.

        * platform/spi/cocoa/NSExtensionSPI.h:

2014-10-24  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Clamp wordSpacing percentage value.
        https://bugs.webkit.org/show_bug.cgi?id=129350.

        Reviewed by Zalan Bujtas.

        When the CSS wordSpacing property is percentage, its value has to be within the
        pre-defined min/max values for the CSS length type. This is done the same way
        the wordSpacing of type <length> is handled.

        Tests: css3/infinite-word-spacing.html.

        Move the definitions of minValueForCssLength and maxValueForCssLength from the
        .cpp file to the .h file.
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:

        Clamp the wordSpacing value to minValueForCssLength and maxValueForCssLength when
        its type is percentage.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyWordSpacing::applyValue):

2014-10-24  Chris Dumez  <cdumez@apple.com>

        [Mac] Use modern loops in ResourceRequestCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=138052

        Reviewed by Darin Adler.

        Use modern loops in ResourceRequestCocoa.mm and leverage Objective-C's
        fast enumeration.

        No new tests, no behavior change.

        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        - Use NSDictionary's block-based enumeration as we enumerate both keys
          and values and this is faster than using fast enumeration of the keys
          then calling [NSDictionary objectForKey:]
        - Use Objective C's fast enumeration for
          contentDispositionEncodingFallbackArray as this is faster and shorter
          than index based access. Also use reserveCapacity() /
          uncheckedAppend() for m_responseContentDispositionEncodingFallbackArray
          as we know how many elements were are going to append in the common
          case.

        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        - Use fast enumeration for [nsRequest allHTTPHeaderFields] dictionary
          keys instead of calling [NSDictionary allKeys] and then doing
          index-based iteration, to avoid copying the keys to a new array.
          Also do a forward enumeration instead of a reverse one. I don't see
          why a backward enumeration would be necessary here. We are not
          modifying the NSDictionary we are iterating over as
          [nsRequest allHTTPHeaderFields] makes a copy.
        - Use a modern C++ loop for
          m_responseContentDispositionEncodingFallbackArray.

2014-10-24  Zalan Bujtas  <zalan@apple.com>

        Replace INT_MIN/MAX / kFixedPointDenominator with intMin/MaxForLayoutUnit.
        https://bugs.webkit.org/show_bug.cgi?id=138047

        Reviewed by Andreas Kling.

        No change in functionality.

        * css/CSSPrimitiveValue.cpp:

2014-10-24  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION(r174877): WebProcess sends an empty Cookies HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=138053

        Reviewed by Chris Dumez.

        Fixes existing tests.

        * platform/network/mac/CookieJarMac.mm: (WebCore::cookiesForSession): Restore the 
        behavior of returning a null string when there are no cookies.

2014-10-24  Chris Dumez  <cdumez@apple.com>

        [Mac] Use NSString API in QuickLookMac::computeNeedsQuickLookResourceCachingQuirks()
        https://bugs.webkit.org/show_bug.cgi?id=138039

        Reviewed by Darin Adler.

        Use NSString API in QuickLookMac::computeNeedsQuickLookResourceCachingQuirks()
        for case-insensitive string comparison instead of converting to UTF-8 and then
        using strcasecmp().

        No new tests, no behavior change.

        * platform/mac/QuickLookMac.mm:
        (WebCore::QuickLookMac::computeNeedsQuickLookResourceCachingQuirks):

2014-10-24  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest() / doUpdatePlatformHTTPBody()
        https://bugs.webkit.org/show_bug.cgi?id=138049

        Reviewed by Alexey Proskuryakov.

        Avoid unnecessary NSURLRequest copies in ResourceRequest::doUpdatePlatformRequest()
        / doUpdatePlatformHTTPBody(). It turns out that about half the time, the
        m_nsRequest member is already mutable so it is unnecessary to call
        [NSURLRequest mutableCopy], we can just cast it to an NSMutableURLRequest* and
        avoid copying.

        This patch also moves the code to a new ensureMutableNSURLRequest() method to
        avoid duplicating the logic.

        I see that we spend ~21% less time in these 2 functions when loading
        http://flickr.com/explore/ (39.6ms -> 31.2ms).

        No new tests, no behavior change.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::ensureMutableNSURLRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):

2014-10-24  Chris Dumez  <cdumez@apple.com>

        Move ComputeLength CSS properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138036

        Reviewed by Andreas Kling.

        Move ComputeLength CSS properties from DeprecatedStyleBuilder to the
        new StyleBuilder so that they are now generated. 3 Converters are
        provided for these properties: ComputedLength / LineWidth / Spacing.

        This is inspired by the following Blink revision by
        <timloh@chromium.org>:
        https://src.chromium.org/viewvc/blink?view=rev&revision=154012

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        (WebCore::ApplyPropertyComputeLength::setValue): Deleted.
        (WebCore::ApplyPropertyComputeLength::applyValue): Deleted.
        (WebCore::ApplyPropertyComputeLength::createHandler): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertComputedLength):
        (WebCore::StyleBuilderConverter::convertLineWidth):
        (WebCore::StyleBuilderConverter::convertSpacing):

2014-10-24  Chris Dumez  <cdumez@apple.com>

        Make ScriptWrappable's destructor protected instead of public
        https://bugs.webkit.org/show_bug.cgi?id=138037

        Reviewed by Andreas Kling.

        Make ScriptWrappable's destructor protected instead of public as it is
        not virtual and this class is subclassed a lot.

        No new tests, no behavior change.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::~ScriptWrappable):

2014-10-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Cairo] Remove GTK dependency of WidgetBackingStoreGtkX11
        https://bugs.webkit.org/show_bug.cgi?id=138004

        Reviewed by Gustavo Noronha Silva.

        Rename all WidgetBackingStore* classes as
        BackingStoreBackendCairo* since all of them are actually
        BackingStore backends based on cairo, and move them from
        platform/cairo and platform/gtk to platform/graphics/cairo.
        BackingStoreBackendCairo is the base class that contains common
        members like the surface and size. BackingStoreBackendCairoImpl is
        the implementation using only cairo, and BackingStoreBackendCairoX11
        using xlib. BackingStoreBackendCairoX11 receives all the X11
        information it needs as constructor parameters, instead of using a
        GtkWidget and GTK+ X11 API. BackingStoreBackendCairoImpl receives
        the surface already created as constructor parameter, so that it
        doesn't have any platform specific code now.

        * PlatformEfl.cmake: Update compilation files.
        * PlatformGTK.cmake: Ditto.
        * platform/cairo/WidgetBackingStoreCairo.cpp: Removed.
        * platform/graphics/cairo/BackingStoreBackendCairo.h: Renamed from Source/WebCore/platform/cairo/WidgetBackingStore.h.
        (WebCore::BackingStoreBackendCairo::~BackingStoreBackendCairo):
        (WebCore::BackingStoreBackendCairo::surface):
        (WebCore::BackingStoreBackendCairo::size):
        (WebCore::BackingStoreBackendCairo::BackingStoreBackendCairo):
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.cpp: Added.
        (WebCore::BackingStoreBackendCairoImpl::BackingStoreBackendCairoImpl):
        (WebCore::BackingStoreBackendCairoImpl::~BackingStoreBackendCairoImpl):
        (WebCore::BackingStoreBackendCairoImpl::scroll):
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.h: Renamed from Source/WebCore/platform/cairo/WidgetBackingStoreCairo.h.
        * platform/graphics/cairo/BackingStoreBackendCairoX11.cpp: Renamed from Source/WebCore/platform/gtk/WidgetBackingStoreGtkX11.cpp.
        (WebCore::BackingStoreBackendCairoX11::BackingStoreBackendCairoX11):
        (WebCore::BackingStoreBackendCairoX11::~BackingStoreBackendCairoX11):
        (WebCore::BackingStoreBackendCairoX11::scroll):
        * platform/graphics/cairo/BackingStoreBackendCairoX11.h: Renamed from Source/WebCore/platform/gtk/WidgetBackingStoreGtkX11.h.
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::cairoSurfaceGetDeviceScale):
        * platform/graphics/cairo/CairoUtilities.h:

2014-10-23  Zalan Bujtas  <zalan@apple.com>

        WebContent crash at WebCore::RenderTextControl::textFormControlElement const.
        https://bugs.webkit.org/show_bug.cgi?id=138035

        Reviewed by Antti Koivisto.

        NULL-check element().renderer() before using it.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::didSetValueByUserEdit):

2014-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove HarfBuzzRun::create() factory function
        https://bugs.webkit.org/show_bug.cgi?id=137945

        Reviewed by Ryosuke Niwa.

        As a step to use std::unique_ptr<>, this patch applies std::unique_ptr<> and std::make_unique<>.
        Thus HarfBuzzRun::create() is needed no longer.

        No new tests, no behavior changes.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::collectHarfBuzzRuns):
        * platform/graphics/harfbuzz/HarfBuzzShaper.h:
        (WebCore::HarfBuzzShaper::HarfBuzzRun::create): Deleted.

2014-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed iOS build fix

        * editing/FrameSelection.cpp:

2014-10-23  Chris Dumez  <cdumez@apple.com>

        [Mac] Optimize URL::createCFURL() for the common case
        https://bugs.webkit.org/show_bug.cgi?id=138030

        Reviewed by Alexey Proskuryakov.

        Optimize URL::createCFURL() for the common case by adding a fast path
        for when the URL String is already 8-bit (common case).
        When the string is 8-bit, we don't need to copy the bytes into a
        temporary buffer and we can construct the CFURLRef directly from it.

        This makes URL::createCFURL() ~34% faster on my machine.

        No new tests, no behavior change.

        * platform/mac/URLMac.mm:
        (WebCore::URL::createCFURL):

2014-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Carets in GMail and iCloud compositions are the foreground text color
        https://bugs.webkit.org/show_bug.cgi?id=138029

        Reviewed by Simon Fraser.

        Previously, we were only checking whether the background colors of the foreground and background
        elements were the same, rather than taking validity and opacity into consideration.

        Test: editing/caret/color-span-inside-editable-background.html

        * editing/FrameSelection.cpp:
        (WebCore::disappearsIntoBackground):
        (WebCore::CaretBase::paintCaret):

2014-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to have alternate inspector agents
        https://bugs.webkit.org/show_bug.cgi?id=137901

        Reviewed by Brian Burg.

        * Configurations/FeatureDefines.xcconfig:

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

        Don't assume that style.overflowX() == style.overflowY()
        https://bugs.webkit.org/show_bug.cgi?id=138028

        Reviewed by Zalan Bujtas.

        WebKit doesn't support independent overflow scroll/hidden on different axes,
        but the RenderStyle does report the correct values. So check both overflowX()
        and overflowY() in a couple of places where we need to.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::styleHasTouchScrolling):
        (WebCore::styleChangeRequiresLayerRebuild):

2014-10-23  Chris Dumez  <cdumez@apple.com>

        Get rid of unnecessary vtables in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=138024

        Reviewed by Benjamin Poulain.

        Get rid of unnecessary vtables in WebKit by de-virtualizing destructors
        when possible and marking the class as final to make sure people don't
        subclass it.

        No new tests, no behavior change.

        * WebCore.exp.in:
        * css/WebKitCSSMatrix.h:
        * css/WebKitCSSMatrix.idl:
        * html/canvas/WebGLContextGroup.h:
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLUniformLocation.h:
        (WebCore::WebGLUniformLocation::~WebGLUniformLocation): Deleted.
        * html/canvas/WebGLUniformLocation.idl:
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorHistory.h:
        * inspector/InspectorStyleSheet.h:
        * page/WheelEventDeltaTracker.h:
        * page/scrolling/ScrollLatchingState.h:
        * platform/audio/Biquad.h:
        * platform/graphics/Pattern.h:

2014-10-23  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in dom/
        https://bugs.webkit.org/show_bug.cgi?id=138019

        Reviewed by Benjamin Poulain.

        Clean up virtual functions in dom/ by:
        - Making virtual functions final when possible
        - Making classes final when possible
        - Using 'override' when appropriate
        - Explicitly marking functions / destructors as virtual when they are
          inherently virtual
        - Making isXXX() virtual functions private on XXX classes to avoid
          unnecessary type checks
        - Dropping final for virtual functions in classes already marked as
          final

        No new tests, no behavior change.

        * WebCore.exp.in:
        * dom/AutocompleteErrorEvent.h:
        * dom/BeforeLoadEvent.h:
        (WebCore::BeforeLoadEventInit::BeforeLoadEventInit):
        * dom/BeforeTextInsertedEvent.h:
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.h:
        * dom/CustomEvent.h:
        * dom/DeviceMotionController.h:
        (WebCore::DeviceMotionController::~DeviceMotionController): Deleted.
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationController.h:
        (WebCore::DeviceOrientationController::~DeviceOrientationController): Deleted.
        * dom/DeviceOrientationEvent.h:
        * dom/Document.h:
        * dom/DocumentFragment.h:
        * dom/ErrorEvent.h:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/KeyboardEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessageEvent.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.h:
        * dom/NamedFlowCollection.h:
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.h:
        * dom/PendingScript.h:
        * dom/PopStateEvent.h:
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finish): Deleted.
        (WebCore::RawDataDocumentParser::flush): Deleted.
        (WebCore::RawDataDocumentParser::insert): Deleted.
        (WebCore::RawDataDocumentParser::append): Deleted.
        * dom/ScriptableDocumentParser.h:
        * dom/SecurityPolicyViolationEvent.h:
        * dom/TextEvent.h:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.h:
        * dom/UIEvent.h:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitTransitionEvent.h:
        * dom/WheelEvent.h:
        * page/DeviceController.h:
        (WebCore::DeviceController::~DeviceController):

2014-10-23  Tim Horton  <timothy_horton@apple.com>

        Add some SPI headers for NSExtension and NSSharingService{Picker}
        https://bugs.webkit.org/show_bug.cgi?id=138027

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/cocoa/NSExtensionSPI.h: Added.
        * platform/spi/mac/NSSharingServicePickerSPI.h: Added.
        * platform/spi/mac/NSSharingServiceSPI.h: Added.
        Add modern SPI headers for NSExtension, and NSSharingService{Picker}.

        * rendering/RenderThemeMac.mm:
        Replace redefinitions with an SPI header #import.

2014-10-23  Eric Carlson  <eric.carlson@apple.com>

        [Mac] don't update caption user style sheet during parsing
        https://bugs.webkit.org/show_bug.cgi?id=137983
        rdar://problem/18735366

        Reviewed by Jer Noble.

        No new tests, existing tests cover the changes.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF): Initialize m_updateStyleSheetTimer.
        (WebCore::CaptionUserPreferencesMediaAF::updateTimerFired): Call updateCaptionStyleSheetOveride.
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges): Prime a timer to update 
            the captions style sheet after a slight delay.

2014-10-23  Chris Dumez  <cdumez@apple.com>

        Move remaining Length-type properties to the new StyleBuilder
        https://bugs.webkit.org/show_bug.cgi?id=138012

        Reviewed by Antti Koivisto.

        Move remaining Length-type properties from DeprecatedStyleBuilder to
        the new StyleBuilder so that they are now generated from
        CSSPropertyNames.in as well. The patch introduces a couple of type
        converters for those: "LengthSizing / LengthMaxSizing".

        No new tests, no behavior change.

        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLengthSizing):
        (WebCore::StyleBuilderConverter::convertLengthMaxSizing):

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

        [Mac] Safari cannot play 'audio/amr' content.
        https://bugs.webkit.org/show_bug.cgi?id=137894

        Reviewed by Eric Carlson.

        Test: media/media-can-play-case-insensitive.html

        Sites are returning 'video/amr' for AMR audio content, but the IANA spec says 'audio/AMR', which is also what
        AVFoundation claims to support.  However, MIME types are supposed to be case-insensitive. When creating our
        mime type cache, case-fold to lower all MIME types given to us by our media frameworks.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::mimeTypeCache):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::addFileTypesToCache):

2014-10-23  Chris Dumez  <cdumez@apple.com>

        Move Length-type CSS properties from DeprecatedStyleBuilder to the new Style Builder
        https://bugs.webkit.org/show_bug.cgi?id=138000

        Reviewed by Andreas Kling.

        Move most Length-type CSS properties from DeprecatedStyleBuilder to the
        new Style Builder so that they are now generated. This patch adds
        support for a "Converter" option in CSSPropertyNames.in that can be
        used to specify a type converter function in
        css/StyleBuilderConverter.h. This patch adds support for Length and
        LengthOrAuto converters so that most Length-type properties can now be
        generated.

        Another converter (likely called "LengthSizing") will be needed to
        generate the remaining Length-type properties. This will be taken care
        of in a follow-up patch.

        This patch is inspired by the following Blink revision by
        <timloh@chromium.org>:
        https://src.chromium.org/viewvc/blink?view=rev&revision=150500

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/SVGCSSPropertyNames.in:
        * css/StyleBuilder.h:
        * css/StyleBuilderConverter.h: Added.
        (WebCore::StyleBuilderConverter::convertLength):
        (WebCore::StyleBuilderConverter::convertLengthOrAuto):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * css/makeprop.pl:

2014-10-23  Zan Dobersek  <zdobersek@igalia.com>

        Const-ify static s_resourceType members in RenderSVGResource* classes
        https://bugs.webkit.org/show_bug.cgi?id=137911

        Reviewed by Andreas Kling.

        Make s_resourceType static members in RenderSVGResource* classes const.
        Also update the resourceType() methods, where necessary, so that they
        return the s_resourceType constant.

        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:

2014-10-23  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Clean up virtual method declarations in GraphicsLayerTextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=137957

        Reviewed by Martin Robinson.

        Added override notation to the GraphicsLayerTextureMapper methods that are
        overriding the base methods from the GraphicsLayer class and don't have it yet.
        Also reordered these methods to follow the order of declaration in the
        GraphicsLayer class.

        Removed ::setName() and ::willBeDestroyed() methods since they just called
        the base class' methods.

        Also removed the ::solidColor() and ::changeMask() methods. The first one was
        only called in one place which can reference the m_solidColor member directly,
        and the second one wasn't used at all.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::setName): Deleted.
        (WebCore::GraphicsLayerTextureMapper::willBeDestroyed): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::solidColor): Deleted.
        (WebCore::GraphicsLayerTextureMapper::usesContentsLayer): Deleted.
        (WebCore::GraphicsLayerTextureMapper::platformLayer): Deleted.
        (WebCore::GraphicsLayerTextureMapper::changeMask): Deleted.

2014-10-23  Krzysztof Czech  <k.czech@samsung.com>

        AX: Do the early return when role is different than UnknownRole
        https://bugs.webkit.org/show_bug.cgi?id=137880

        Reviewed by Chris Fleizach.

        We do not need to call ariaRoleAttribute() to check whether m_ariaRole is different than UnknownRole.
        Just check m_ariaRole instead.

        No new tests, no behavior change, just some cleanup

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::determineAccessibilityRole):

2014-10-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Implement :matches
        https://bugs.webkit.org/show_bug.cgi?id=137947

        Reviewed by Benjamin Poulain.

        Initial patch for supporting :matches in CSS JIT.
        In this patch, we implement :matches
        by leveraging the generalized nested backtracking implementation.

        Tests: fast/selectors/matches-backtracking.html
               fast/selectors/matches-complex.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::hasAnyCombinators):
        (WebCore::SelectorCompiler::computeBacktrackingMemoryRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesMatchesPseudoClass):

2014-10-23  Milan Crha  <mcrha@redhat.com>

        RenderThemeGtk::mediaControlsScript() is not defined when VIDEO is disabled.
        <https://webkit.org/b/137970>.

        Reviewed by Carlos Garcia Campos.

        * rendering/RenderThemeGtk.cpp:

2014-10-22  Milan Crha  <mcrha@redhat.com>

        Do not include GraphicsContext3D.h when 3D_GRAPHICS is not used.
        <https://webkit.org/b/137969>.

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:

2014-10-22  Milan Crha  <mcrha@redhat.com>

        Do not build WidgetBackingStoreGtkX11 when not used.
        <https://webkit.org/b/137972>.

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/WidgetBackingStoreGtkX11.cpp:
        * platform/gtk/WidgetBackingStoreGtkX11.h:

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

        [iOS] Toggling overflow:scroll to hidden on element with -webkit-overflow-scrolling:touch can cause children to disappear
        https://bugs.webkit.org/show_bug.cgi?id=137999
        rdar://problem/18425550

        Reviewed by Zalan Bujtas.
        
        When toggling overflow from scroll to hidden on an element with -webkit-overflow-scrolling:touch,
        we'd fail to do a compositing layer rebuild, which caused various issues like unparented
        descendants, and misplaced and unrepainted content.
        
        This happened because we'd get to RenderLayerBacking::updateConfiguration() via styleChanged
        with the view needing layout, so never hit the updateScrollingLayers() code, and the subsequent
        updateCompositingLayers() would be a no-op.
        
        Fix by explicitly triggering a layer rebuild when style changes such that the touch-scrollability
        of an element changes, as we do for changes in clip.

        Test: compositing/scrolling/touch-scroll-to-clip.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::isScrollableOverflow):
        (WebCore::styleHasTouchScrolling):
        (WebCore::styleChangeRequiresLayerRebuild):

2014-10-22  Chris Dumez  <cdumez@apple.com>

        Clean up virtual functions in rendering/
        https://bugs.webkit.org/show_bug.cgi?id=137984

        Reviewed by Darin Adler.

        Clean up virtual functions in rendering/ by:
        - Making virtual functions final when possible
        - Making classes final when possible
        - Using 'override' when appropriate
        - Explicitly marking functions / destructors as virtual when they are
          inherently virtual
        - Dropping virtual destructors when the class does not have subclasses
          and mark the class as final, to get rid of unnecessary vtables
        - Making isXXX() virtual functions private on XXX classes to avoid
          unnecessary type checks
        - De-virtualizing some functions that do not need to be virtual
        - Dropping final for virtual functions in classes already marked as
          final

        No new tests, no behavior change.

        * html/shadow/SliderThumbElement.cpp:
        * rendering/AutoTableLayout.h:
        * rendering/ClipPathOperation.h:
        (WebCore::ClipPathOperation::type):
        (WebCore::ClipPathOperation::isSameType):
        * rendering/EllipsisBox.h:
        * rendering/FixedTableLayout.h:
        * rendering/InlineElementBox.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderMarquee.h:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::renderName): Deleted.
        * rendering/RenderReplica.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.h:
        (WebCore::RenderScrollbarTheme::~RenderScrollbarTheme): Deleted.
        (WebCore::RenderScrollbarTheme::scrollbarThickness): Deleted.
        (WebCore::RenderScrollbarTheme::buttonsPlacement): Deleted.
        (WebCore::RenderScrollbarTheme::supportsControlTints): Deleted.
        (WebCore::RenderScrollbarTheme::shouldCenterOnThumb): Deleted.
        (WebCore::RenderScrollbarTheme::initialAutoscrollTimerDelay): Deleted.
        (WebCore::RenderScrollbarTheme::autoscrollTimerDelay): Deleted.
        (WebCore::RenderScrollbarTheme::registerScrollbar): Deleted.
        (WebCore::RenderScrollbarTheme::unregisterScrollbar): Deleted.
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeWin.h:
        * rendering/RenderVideo.h:
        * rendering/TextAutosizer.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLMenclose.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRadicalOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLToken.h:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::computeIntrinsicDimensions): Deleted.
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:

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

        REGRESSION(r175000): Crash in SourceBufferPrivateAVFObjC::destroyParser()
        https://bugs.webkit.org/show_bug.cgi?id=137990

        Reviewed by Alexey Proskuryakov.

        NULL-check m_mediaSource before using.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser):

2014-10-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG loaded through html <img> can't request to load any external resources.
        https://bugs.webkit.org/show_bug.cgi?id=137762.

        Reviewed by Daniel Bates.

        SVG images have unique security rules that prevent them from loading any external
        resources. This patch enforces these rules in CachedResourceLoader::canRequest for
        all non-data-uri resources.

        The fix and the tests are ported but modified a little from the chromium fix:
        http://src.chromium.org/viewvc/blink?view=rev&rev=176084

        Test: http/tests/security/svg-image-with-cached-remote-image.html
              http/tests/security/svg-image-with-css-cross-domain.html

        For the SVG image, prevent loading any external sub-resource except for data urls.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2014-10-21  Ada Chan  <adachan@apple.com>

        MediaPlayerPrivateAVFoundation::hasAudio() returns false even when there is an audible AVMediaSelectionOption selected
        https://bugs.webkit.org/show_bug.cgi?id=137935

        Reviewed by Eric Carlson.

        Set hasAudio to true if there's a selected audible AVMediaSelectionOption
        after the call to updateAudioTracks(). Ditto for video.

        Test: http/tests/media/hls/hls-audio-tracks-has-audio.html

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

        * testing/Internals.cpp:
        (WebCore::Internals::mediaElementHasCharacteristic):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add internals.mediaElementHasCharacteristic for the new test.

2014-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove WidgetBackingStoreCairo::create() factory function
        https://bugs.webkit.org/show_bug.cgi?id=137943

        Reviewed by Darin Adler.

        WidgetBackingStoreCairo::create() can be replaced by std::make_unique<>.
        Thus this patch removes it, then use std::make_unique<>|std::unique_ptr<>.

        No new tests, no behavior changes.

        * platform/cairo/WidgetBackingStoreCairo.cpp:
        (WebCore::WidgetBackingStoreCairo::create): Deleted.
        * platform/cairo/WidgetBackingStoreCairo.h:
        * platform/gtk/WidgetBackingStoreGtkX11.cpp:
        (WebCore::WidgetBackingStoreGtkX11::create): Deleted.
        * platform/gtk/WidgetBackingStoreGtkX11.h:

2014-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove TextCheckerEnchant::create() factory function
        https://bugs.webkit.org/show_bug.cgi?id=137944

        Reviewed by Darin Adler.

        TextCheckerEnchant::create() can be replaced by std::make_unique<> and std::unique_ptr<>.

        No new tests, no behavior change.

        * platform/text/enchant/TextCheckerEnchant.h:
        (WebCore::TextCheckerEnchant::create): Deleted.

2014-10-22  Chris Dumez  <cdumez@apple.com>

        Avoid confusion between AccessibilityObject::isTable() / isAccessibilityTable()
        https://bugs.webkit.org/show_bug.cgi?id=137899

        Reviewed by Darin Adler.

        Avoid confusion between AccessibilityObject::isTable() and
        isAccessibilityTable(). isTable() is equivalent to
        is<AccessibilityTable>(), while isAccessibilityTable() is an
        AccessibilityTable that is exposed as an AccessibilityTable to the
        platform.

        This patch is renaming isAccessibilityTable() to
        isExposableThroughAccessibility(), makes it non-virtual and defines it
        on AccessibilityTable only, for clarity.

        This patch also renames isTableExposableThroughAccessibility() to
        computeIisTableExposableThroughAccessibility() as it is called only
        once to initialize the m_isExposableThroughAccessibility data member.

        No new tests, no behavior change.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable):
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::shouldUseAccessiblityObjectInnerText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityObjectSearchMatchAtIndex):
        (WebCore::appendChildrenToArray):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAccessibilityTable): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::AccessibilityTable):
        (WebCore::AccessibilityTable::init):
        (WebCore::AccessibilityTable::isExposableThroughAccessibility):
        (WebCore::AccessibilityTable::computeIsTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::tableLevel):
        (WebCore::AccessibilityTable::roleValue):
        (WebCore::AccessibilityTable::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityTable::title):
        (WebCore::AccessibilityTable::isAccessibilityTable): Deleted.
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility): Deleted.
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::isTableCell):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::isTableRow):
        (WebCore::AccessibilityTableRow::parentTable):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetNChildren):
        (webkitAccessibleRefChild):
        (webkitAccessibleGetAttributes):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2014-10-22  Chris Dumez  <cdumez@apple.com>

        Avoid repeated is<MutableStyleProperties>() checks in StyleProperties
        https://bugs.webkit.org/show_bug.cgi?id=137978

        Reviewed by Andreas Kling.

        Reduce the amount of is<MutableStyleProperties>() checks in
        StyleProperties by:
        - Removing the checks in each method of StyleProperties::PropertyReference,
          and replace them by a single check in StyleProperties::propertyAt().
        - Providing faster propertyCount() / propertyAt() / isEmpty() methods on
          MutableStyleProperties / ImmutableStyleProperties as a lot of callers use
          tight typing.
        - Using tighter typing at call sites whenever possible.

        Ideally, we could be able to use iterators instead of propertyCount() /
        propertyAt() but this is not trivial to do efficiently as the
        representation in memory is fundamentally different for MutableStyleProperties
        / ImmutableStyleProperties. We may be able to do better longer term, but
        this is already more efficient short term at least.

        No new tests, no behavior change.

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::MutableStyleProperties):
        (WebCore::StyleProperties::PropertyReference::cssText):
        * css/StyleProperties.h:
        (WebCore::StyleProperties::PropertyReference::PropertyReference):
        (WebCore::StyleProperties::PropertyReference::id):
        (WebCore::StyleProperties::PropertyReference::shorthandID):
        (WebCore::StyleProperties::PropertyReference::isImportant):
        (WebCore::StyleProperties::PropertyReference::isInherited):
        (WebCore::StyleProperties::PropertyReference::isImplicit):
        (WebCore::StyleProperties::PropertyReference::value):
        (WebCore::StyleProperties::PropertyReference::toCSSProperty):
        (WebCore::StyleProperties::isEmpty):
        (WebCore::ImmutableStyleProperties::isEmpty):
        (WebCore::MutableStyleProperties::isEmpty):
        (WebCore::ImmutableStyleProperties::propertyAt):
        (WebCore::MutableStyleProperties::propertyAt):
        (WebCore::StyleProperties::propertyAt):
        (WebCore::StyleProperties::propertyCount):
        (WebCore::StyleProperties::PropertyReference::propertyMetadata): Deleted.
        (WebCore::StyleProperties::PropertyReference::propertyValue): Deleted.
        * editing/EditingStyle.cpp:
        (WebCore::removePropertiesInStyle):
        (WebCore::EditingStyle::removePropertiesInElementDefaultStyle):

2014-10-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac][MediaStream] clean up bit rot
        https://bugs.webkit.org/show_bug.cgi?id=137976

        Reviewed by Jer Noble.

        No new tests, this just gets the Mac port compiling again.

        * Modules/mediastream/MediaStream.h: Add a virtual destructor to Observer since it has 
            a virtual method.

        * WebCore.exp.in: Export RTCPeerConnectionHandler::create and RTCPeerConnectionHandlerMock::create(WebCore::RTCPeerConnectionHandlerClient*),
            they are both use by Internals for testing.

        * WebCore.xcodeproj/project.pbxproj: Add RTC and MediaStream files.

        * html/HTMLMediaElement.h: Forward declare MediaStream instead of including MediaStream.h.

        * platform/mediastream/RTCPeerConnectionHandler.h: EXPORT the create method.

        * platform/mock/MediaConstraintsMock.cpp:
        (WebCore::isSupported): Make static.
        (WebCore::isValid): Ditto.

        * platform/mock/RTCPeerConnectionHandlerMock.h: EXPORT the create method.

2014-10-22  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Fix applicationIsSafari() detection
        https://bugs.webkit.org/show_bug.cgi?id=137893

        Reviewed by Alexey Proskuryakov.

        I noticed when profiling Safari on Mac that we were exercising a code
        path we shouldn't because it is meant for other applications that
        Safari.

        The detection relies on the applicationIsSafari() function in
        RuntimeApplicationChecks.cpp. This was in some cases returning false on
        my machine even though I was running Safari so I investigated a bit and
        noticed that the check relies on the main bundle identifier string and
        is doing:
        isSafari = mainBundleIsEqualTo("com.apple.Safari")
            || mainBundleIsEqualTo("com.apple.WebProcess");

        This WebProcess detection is very unreliable because:
        - It matches other apps than Safari's WebProcesses
        - The bundle name for the WebProcess is sometimes
        "com.apple.WebKit.WebContent" or
        "com.apple.WebKit.WebContent.Development".

        The solution used in this patch is to move the applicationIsSafari()
        check to the UIProcess so that the check actually succeeds reliably.
        The call site for applicationIsSafari() was in
        ResourceRequest::useQuickLookResourceCachingQuirks(). This match
        removes that logic from ResourceRequest and move it to
        FrameLoaderClient as only the FrameLoader is interested in this
        information. The logic to determine if we should use QuickLook
        resource caching quirks is moved to a new QuickLook class under
        platform/ as the code needs to be shared between WebKit and WebKit2.
        On WebKit2, we make use that code on the UIProcess side and pass
        the flag as a parameter when constructing the WebProcess. The flag
        is then stored on the WebProcess and queried by WebFrameLoaderClient.

        Previously, we would spend ~1% of the WebProcess cpu time (when loading
        apple.com) trying to detect if we should use QuickLook resource caching
        quirks even though that check was supposed to be disabled and return
        early when running Safari.

        No new tests, not easily testable.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        * loader/FrameLoaderClient.h:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::applicationIsSafari):
        Remove "com.apple.WebProcess" bundle name matching as this causes false
        positives (matches other applications than Safari's WebProcesses) and
        it is no longer needed now that applicationIsSafari() is always called
        from the UIProcess.

        * platform/mac/QuickLookMac.h: Added.
        * platform/mac/QuickLookMac.mm: Copied from Source/WebCore/platform/network/mac/ResourceRequestMac.mm.
        (WebCore::QuickLookMac::computeNeedsQuickLookResourceCachingQuirks):
        * platform/network/cf/ResourceRequest.h:
        * platform/network/ios/ResourceRequestIOS.mm:
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks): Deleted.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::initQuickLookResourceCachingQuirks): Deleted.
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks): Deleted.

2014-10-22  Shivakumar JM  <shiva.jm@samsung.com>

        XMLHttpRequest should support attribute responseURL as per latest XHR spec.
        https://bugs.webkit.org/show_bug.cgi?id=136938

        Reviewed by Alexey Proskuryakov.

        Tests: http/tests/xmlhttprequest/basic-auth-responseURL.html
               http/tests/xmlhttprequest/cross-origin-redirect-responseURL.html
               http/tests/xmlhttprequest/redirect-credentials-responseURL.html
               http/tests/xmlhttprequest/xmlhttprequest-responseURL.html

        XMLHttpRequest should support attribute responseURL

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseURL):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2014-10-22  Chris Dumez  <cdumez@apple.com>

        Add initial support for generating the StyleBuilder from CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=137910

        Reviewed by Andreas Kling.

        Add initial support for generating the StyleBuilder from
        CSSPropertyNames.in. This is a first step towards getting rid of the
        legacy DeprecatedStyleBuilder class and having everything defined in one
        place (CSSPropertyNames.in).

        This patch updates makeprop.pl script to generate a StyleBuilder.cpp
        file that generate a the StyleBuilder::applyProperty() method
        implementation using a huge switch statement for all the CSS
        properties. With this patch, we are now generating the new StyleBuilder
        code for all the "simple" CSS properties (i.e. those that were using
        ApplyPropertyDefault<> in DeprecatedStyleBuilder.cpp). I am using a
        "NewStyleBuilder" option in CSSPropertyNames.in for properties that
        we generate to help with improving incrementally the generator. Once
        we are able to generate all properties, this transition option will
        do away and become the default.

        By default, the generator will make an educated guess for the type
        name, the getter, the setter and the initial function of each property.
        For example, for the border-collapse property, it will use:
        - TypeName: EBorderCollapse (i.e. 'E' + PropertyId)
        - Getter: borderCollapse() (i.e. PropertyId with first letter lowercased)
        - Setter: setBorderCollapse() (i.e. 'set' + PropertyId)
        - Initial: initialBorderCollapse() (i.e. 'initial' + PropertyId)

        This works for most properties. For properties that need
        special-casing, developers can use the following options in
        CSSPropertyNames.in:
        - TypeName: Overrides the type name
        - Getter: Overrides the getter name
        - Setter: Overrides the setter name
        - Initial: Overrides the initial function name
        - NameForMethods: Overrides the Getter / Setter / Initial function
          names. For e.g. "NameForMethods=OverflowWrap" will use
          "overflowWrap() / setOverflowWrap() / initialOverflowWrap()".

        The patch is inspired by the following Blink revision by
        <timloh@chromium.org>:
        https://src.chromium.org/viewvc/blink?view=rev&revision=150424

        No new tests, no behavior change.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyVerticalAlign::createHandler):
        (WebCore::ApplyPropertyDisplay::applyInitialValue):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleBuilder.h: Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::applyProperty):
        * css/makeprop.pl:
        * rendering/style/RenderStyle.h:
        Move the initialXXX() methods that were in NonInheritedFlags to
        RenderStyle class, with the other initialXXX() methods to facilitate
        code generation.

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

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GStreamer debug build after r175050.

        Explicitly include wtf/MainThread.h.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] Do not use CachedResourceLoader, SecurityOrigin, ResourceBuffer and other WebCore types
        https://bugs.webkit.org/show_bug.cgi?id=137064

        Reviewed by Philippe Normand.

        Move the media resource loader to a new class in WebCore/loader
        that inherits from a PlatformMediaResourceLoader class defined in
        the platform layer. The platform specific behaviour is implemented
        using a client also defined in the platform layer, implemented by
        every media backend, and used by the WebCore MediaResourceLoader.

        * CMakeLists.txt: Add new files to compilation.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        Create a MediaResourceLoader.
        (WebCore::HTMLMediaElement::mediaPlayerCORSMode): Deleted. This is
        no longer used.
        * html/HTMLMediaElement.h:
        * loader/MediaResourceLoader.cpp: Added.
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        (WebCore::MediaResourceLoader::~MediaResourceLoader):
        (WebCore::MediaResourceLoader::start): Start a new load for the
        given request and load options.
        (WebCore::MediaResourceLoader::stop): Stop the load if needed.
        (WebCore::MediaResourceLoader::setDefersLoading):
        (WebCore::MediaResourceLoader::responseReceived): Handle CORS
        access check and notify the client about the response.
        (WebCore::MediaResourceLoader::dataReceived): Notify the client.
        (WebCore::MediaResourceLoader::notifyFinished): Ditto.
        (WebCore::MediaResourceLoader::getOrCreateReadBuffer): Ask the
        client to create the read buffer.
        * loader/MediaResourceLoader.h: Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::createResourceLoader): Call
        mediaPlayerCreateResourceLoader() if there's a client.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCreateResourceLoader):
        (WebCore::MediaPlayerClient::mediaPlayerCORSMode): Deleted.
        * platform/graphics/PlatformMediaResourceLoader.h: Added.
        (WebCore::PlatformMediaResourceLoaderClient::responseReceived):
        (WebCore::PlatformMediaResourceLoaderClient::dataReceived):
        (WebCore::PlatformMediaResourceLoaderClient::bufferReceived):
        (WebCore::PlatformMediaResourceLoaderClient::accessControlCheckFailed):
        (WebCore::PlatformMediaResourceLoaderClient::loadFailed):
        (WebCore::PlatformMediaResourceLoaderClient::loadFinished):
        (WebCore::PlatformMediaResourceLoaderClient::getOrCreateReadBuffer):
        (WebCore::PlatformMediaResourceLoader::~PlatformMediaResourceLoader):
        (WebCore::PlatformMediaResourceLoader::stop):
        (WebCore::PlatformMediaResourceLoader::setDefersLoading):
        (WebCore::PlatformMediaResourceLoader::didPassAccessControlCheck):
        (WebCore::PlatformMediaResourceLoader::PlatformMediaResourceLoader):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop): Also delete the PlatformMediaResourceLoader.
        (webKitWebSrcStart): Create a new resource loader using
        MediaPlayer::createResourceLoader() with a new
        CachedResourceStreamingClient as client.
        (webKitWebSrcNeedDataMainCb): Call setDefersLoading() for the
        resource loader if there's one.
        (webKitWebSrcEnoughDataMainCb): Ditto.
        (webKitSrcPassedCORSAccessCheck): Return didPassAccessControlCheck.
        (StreamingClient::handleResponseReceived): Remove the CORS check
        result parameter since that's now handled by MediaResourceLoader.
        (CachedResourceStreamingClient::CachedResourceStreamingClient):
        (CachedResourceStreamingClient::~CachedResourceStreamingClient):
        (CachedResourceStreamingClient::getOrCreateReadBuffer):
        (CachedResourceStreamingClient::responseReceived): Update didPassAccessControlCheck.
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed): Log the
        error and stop the load.
        (CachedResourceStreamingClient::loadFailed): Log the error if it
        was not a cancellation.
        (CachedResourceStreamingClient::loadFinished):
        (ResourceHandleStreamingClient::didReceiveResponse):
        (CachedResourceStreamingClient::setDefersLoading): Deleted.
        (CachedResourceStreamingClient::notifyFinished): Deleted.

2014-10-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkInputMethodFilter from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137884

        Reviewed by Gustavo Noronha Silva.

        Remove GtkInputMethodFilter.

        * PlatformGTK.cmake:
        * platform/gtk/GtkInputMethodFilter.cpp: Removed.
        * platform/gtk/GtkInputMethodFilter.h: Removed.

2014-10-22  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Match spec for font-weight: bolder|lighter
        https://bugs.webkit.org/show_bug.cgi?id=137919

        Reviewed by Andreas Kling.

        This patch is a merge of Blink's
        https://chromiumcodereview.appspot.com/15994009
        
        Currently, bolder and lighter change font-weight in a non-compliant way.
        The spec (http://www.w3.org/TR/css3-fonts/#bolderlighter) defines
        exactly what the computed values should be given the inherited weight values,
        so we should match those.
        
        The removed FIXME's for selecting the next lightest/heaviest weight from
        the used font family seems to refer to behaviour from
        CSS1 (http://www.w3.org/TR/CSS1/#font-weight), while this is replaced
        with a simpler procedure for resolving bolder and lighter in font weights
        in CSS2 (http://www.w3.org/TR/CSS2/fonts.html#propdef-font-weight) and CSS3 (link above).
        
        and https://codereview.chromium.org/137813004
        
        According to http://dev.w3.org/csswg/css-fonts/#font-weight-prop, the computed
        weight of 'lighter' and 'bolder' are based on the inherited 'font-weight', so set
        that inherited weight before calculating 'lighter' and 'bolder'.

        Tests: css3/font-weight-multiple-selectors.html
               css3/font-weight.html

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontWeight::applyValue):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontDescription::lighterWeight):
        (WebCore::FontDescription::bolderWeight):

2014-10-22  Rohit Kumar  <kumar.rohit@samsung.com>

        [GTK]: Fix unused parameter build warnings in WebCore/platform module
        https://bugs.webkit.org/show_bug.cgi?id=137921

        Reviewed by Carlos Garcia Campos.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::PerAxisData::PerAxisData):
        (WebCore::ScrollAnimatorNone::animationTimerFired):

2014-10-22  Dhi Aurrahman  <diorahman@rockybars.com>

        Add relList to the anchor, area and link elements
        https://bugs.webkit.org/show_bug.cgi?id=137860

        Reviewed by Darin Adler and Chris Dumez.

        Add relList to reflect the rel content attribute for anchor[1],
        area[2] and link[3] elements.

        [1] https://html.spec.whatwg.org/multipage/semantics.html#dom-a-rellist 
        [2] https://html.spec.whatwg.org/multipage/embedded-content.html#dom-area-rellist
        [3] https://html.spec.whatwg.org/multipage/semantics.html#dom-link-rellist

        Tests: fast/dom/rel-list-gc.html
               fast/dom/rel-list.html
               perf/rel-list-remove.html

        * CMakeLists.txt:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitString::set):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        (WebCore::HTMLAnchorElement::relList):
        (WebCore::HTMLAnchorElement::setRel): Deleted.
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseAttribute):
        (WebCore::HTMLLinkElement::relList):
        * html/HTMLLinkElement.h:
        * html/HTMLLinkElement.idl:
        * html/RelList.cpp: Added.
        (WebCore::RelList::RelList):
        (WebCore::RelList::ref):
        (WebCore::RelList::deref):
        (WebCore::RelList::length):
        (WebCore::RelList::item):
        (WebCore::RelList::element):
        (WebCore::RelList::updateRelAttribute):
        (WebCore::RelList::containsInternal):
        (WebCore::RelList::value):
        (WebCore::RelList::setValue):
        * html/RelList.h: Added.

2014-10-21  Andy Estes  <aestes@apple.com>

        One more iOS build fix after r175013.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::createFontPlatformData):

2014-10-21  Benjamin Poulain  <bpoulain@apple.com>

        CSS Rule features are ignored for nested CSS Selector lists
        https://bugs.webkit.org/show_bug.cgi?id=137908

        Reviewed by Andreas Kling.

        When Rule feature sets were collected, any selector list nested inside an other
        selector list was ignored when collecting properties of the CSS Selector.

        As a result, style was not invalidated properly when any property listed in
        the nested selectors.

        This patch fixes the issue by make RuleFeatureSet::collectFeaturesFromSelector()
        recursive, evaluating every chain of every selector lists.

        Tests: fast/css/class-style-invalidation-optimization.html
               fast/css/direct-adjacent-style-sharing-1.html
               fast/css/direct-adjacent-style-sharing-2.html
               fast/css/direct-adjacent-style-sharing-3.html
               fast/css/id-style-invalidation-optimization.html
               fast/selectors/class-style-update-with-not.html
               fast/selectors/class-style-update-with-nth-child-of.html
               fast/selectors/class-style-update.html

        * css/RuleFeature.cpp:
        (WebCore::recursivelyCollectFeaturesFromSelector):
        (WebCore::RuleFeatureSet::collectFeaturesFromSelector):
        * css/RuleFeature.h:
        * css/RuleSet.cpp:
        (WebCore::collectFeaturesFromRuleData):

2014-10-21  Tim Horton  <timothy_horton@apple.com>

        Try to fix the iOS build after r175013.

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::createFontPlatformData):

2014-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr | std::make_unique in FontCacheFoo
        https://bugs.webkit.org/show_bug.cgi?id=137905

        Reviewed by Darin Adler.

        Clean up PassOwnPtr|OwnPtr using std::unique_ptr|std::make_unique.

        No new tests, no behavior changes.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontCache.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):

2014-10-21  Ada Chan  <adachan@apple.com>

        Calling WebCore::Page::setMediaVolume(0) does not mute videos as expected.
        https://bugs.webkit.org/show_bug.cgi?id=137305

        Reviewed by Darin Adler.

        This was broken in http://trac.webkit.org/changeset/154970. To fix this (but not break
        GStreamer), remove the "if (m_volumeInitialized)" check before updating the MediaPlayer's
        volume to the value multiplied with the Page's mediaVolume. This should not affect GStreamer's
        behavior because MediaPlayerPrivateGStreamerBase::setStreamVolumeElement does nothing unless
        m_volumeInitialized is true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateVolume):

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

        [EME][Mac] Update to match new AVStreamSession API and requirements.
        https://bugs.webkit.org/show_bug.cgi?id=137923

        Reviewed by Eric Carlson.

        The session identifier has moved from AVStreamDataParser to -[AVStreamSession contentProtectionSessionIdentifier]
        and the property is no longer KVObservable. A new notification key has been added in place of KVO.

        Additionally, the requirements for using AVStreamDataParser with AVStreamSession have changed. It is now
        required that AVStreamDataParsers be added to an AVStreamSession before the 
        -streamSession:didProvideContentKeyRequestInitializationData:forTrackID delegate method is called. A
        -streamParserWillProvideContentKeyRequestInitializationData:forTrackID delegate has been added, and
        an AVStreamSession must be created and the AVStreamDataParser added to it during the scope of that delegate
        method.

        To facilitate this, the MediaPlayerPrivateMediaSourceAVFObjC object will lazily create and own a AVStreamSession
        object when requested. The SourceBufferPrivateAVFObjC object will listen for the -willProvide delegate call
        and will add its AVStreamDataParser to that AVStreamSession when called.

        The CDMSessionMediaSourceAVFObjC object is no longer responsible for creating the AVStreamSession, and because
        the session identifier has moved from many AVStreamDataParsers to a single AVStreamSession, the
        CDMSessionMediaSourceAVFObjCObserver class can become much simpler, as it only has to observe a single object.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (-[CDMSessionMediaSourceAVFObjCObserver dealloc]): Deleted.
        (-[CDMSessionMediaSourceAVFObjCObserver beginObserving:]): Deleted.
        (-[CDMSessionMediaSourceAVFObjCObserver stopObserving:]): Deleted.
        (-[CDMSessionMediaSourceAVFObjCObserver invalidate]): Deleted.
        (-[CDMSessionMediaSourceAVFObjCObserver observeValueForKeyPath:ofObject:change:context:]): Deleted.
        (-[CDMSessionMediaSourceAVFObjCObserver contentProtectionSessionIdentifierChanged:]): Added.
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC): Call setStreamSession(nullptr).
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys): The sessionId is now a value in the dictionary, not the key.
        (WebCore::CDMSessionMediaSourceAVFObjC::update): No longer create an AVStreamSession.
        (WebCore::CDMSessionMediaSourceAVFObjC::setStreamSession): Add and remove observers as appropriate.
        (WebCore::CDMSessionMediaSourceAVFObjC::addSourceBuffer): No longer add or remove parsers from AVStreamSessions.
        (WebCore::CDMSessionMediaSourceAVFObjC::removeSourceBuffer): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasStreamSession): Simple getter.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::streamSession): Lazy initializing getter.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession): Call setStreamSession().
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamParserWillProvideContentKeyRequestInitializationData:forTrackID:]): Synchronously pass to SourceBufferPrivateAVFObjC.
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID): Add the parser to an AVStreamSession.
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID): Check the trackId.
        * platform/mac/SoftLinking.h:

2014-10-21  Jaehun Lim  <ljaehun.lim@samsung.com>

        'true' isn't a valid value for justify-self
        https://bugs.webkit.org/show_bug.cgi?id=137913

        Reviewed by Andreas Kling.

        Merged from Blink (patch by dstockwell):
        <https://src.chromium.org/viewvc/blink?view=rev&revision=174638>

        CSS Box Alignment Module Level 3:
        http://dev.w3.org/csswg/css-align/#justify-self-property

        No new tests, modify existing test case.

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

2014-10-21  Michael Saboff  <msaboff@apple.com>

        Add operator==(PropertyName, const char*)
        https://bugs.webkit.org/show_bug.cgi?id=137925

        Reviewed by Mark Lam.

        Use new == operator to compare a PropertyName with a string literal.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):

2014-10-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r174921.

        Export new symbol after function rename.

        * WebCore.exp.in:
        * WebCore.order:

2014-10-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r174921.

        Remove symbol from export files that no longer exists.

        * WebCore.exp.in:
        * WebCore.order:

2014-10-21  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Optimization; avoid string reallocation.
        https://bugs.webkit.org/show_bug.cgi?id=137920

        Reviewed by Brent Fulgham.

        Profiling reveals that the cookiesForDOM function is spending time on removing a character from a string.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::domainMatch):
        (WebCore::addMatchingCurlCookie):

2014-10-21  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: [ATK] CSS-generated text content not exposed to assistive technologies
        https://bugs.webkit.org/show_bug.cgi?id=137669

        Reviewed by Chris Fleizach.

        Do not use a text iterator to get the text for elements which include
        pseudo elements.

        Test: accessibility/css-content-attribute.html

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

2014-10-21  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r174676): It broke the !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=137916

        Reviewed by Csaba Osztrogonác.

        Fix the !ENABLE(VIDEO) build by adding an #if ENABLE(VIDEO) where
        needed.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):

2014-10-21  Zalan Bujtas  <zalan@apple.com>

        REGRESSION: Google Search (mobile) video thumbnails are too large.
        https://bugs.webkit.org/show_bug.cgi?id=137895

        Reviewed by Simon Fraser.

        This patch fixes layer clipping when an ancestor layer has border-radius clipping.

        In cases, where the current layer has non-radius cliprect, while an ancestor layer
        has border-radius clipping, we only use the border-radius rect to clip.

        Test: fast/clip/overflow-hidden-with-border-radius-overflow-clipping-parent.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::ClipRect):
        (WebCore::ClipRect::effectedByRadius):
        (WebCore::ClipRect::setEffectedByRadius):
        (WebCore::ClipRect::operator==):
        (WebCore::ClipRect::operator!=):
        (WebCore::ClipRect::intersect):
        (WebCore::ClipRect::hasRadius): Deleted.
        (WebCore::ClipRect::setHasRadius): Deleted.

2014-10-20  Michael Saboff  <msaboff@apple.com>

        Don't create cached functions for HTMLDocument.write*()
        https://bugs.webkit.org/show_bug.cgi?id=137906

        Reviewed by Darin Adler.

        Made it so that JSHTMLDocument::write() and ::writeln() are always created for every prototype.
        This is similar to the change in r174847.

        This change is alread covered by the tests:
        LayoutTests/http/tests/security/aboutBlank/security-context-grandchildren-write-lexical.html
        LayoutTests/http/tests/security/aboutBlank/security-context-grandchildren-writeln-lexical.html
        LayoutTests/http/tests/security/aboutBlank/security-context-write.html
        LayoutTests/http/tests/security/aboutBlank/security-context-writeln.html
        LayoutTests/http/tests/xmlhttprequest/request-from-popup.html
        LayoutTests/http/tests/navigation/new-window-redirect-history.html
        LayoutTests/http/tests/misc/window-open-then-write.html

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):
        * html/HTMLDocument.idl:

2014-10-21  Chris Dumez  <cdumez@apple.com>

        REGRESSION(r174676): It broke the !ENABLE(VIDEO) build
        https://bugs.webkit.org/show_bug.cgi?id=137916

        Unreviewed build fix. Add missing header include.

        * rendering/RenderLayerBacking.cpp:

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

        REGRESSION (r170808): Volume slider in built-in media controls only changes volume when thumb is released, not while dragging
        https://bugs.webkit.org/show_bug.cgi?id=137805

        Reviewed by Dan Bernstein.

        Test: media/video-volume-slider-drag.html

        Respond to the 'input' event rather than the 'change' event for the volume slider, so that
        volume changes are continuous during drag operations.

        Also listen for both 'input' and 'change' events for the timeline slider, doing fastSeek()
        during 'input' and setting an explicit currentTime during 'change'. This is the same behavior
        as current, but using 'change' instead of 'mouseup' to do the final currentTime change.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleTimelineInput):
        (Controller.prototype.handleTimelineChange):
        (Controller.prototype.handleTimelineMouseUp):
        (Controller.prototype.handleVolumeSliderInput):
        (Controller.prototype.handlePlayButtonClicked): Deleted.
        (Controller.prototype.handleMaxButtonClicked): Deleted.

2014-10-21  Manuel Rego Casasnovas  <rego@igalia.com>

        ASSERTION FAILED: !gridWasPopulated() in WebCore::RenderGrid::placeItemsOnGrid
        https://bugs.webkit.org/show_bug.cgi?id=136939

        Reviewed by Darin Adler.

        In some particular situations computeIntrinsicLogicalWidths() is called
        in the middle of layoutGridItems(). In these cases we do not need to
        populate the grid again, so we should avoid calling placeItemsOnGrid().
        In addition, we do not need to clean the grid either, as that will be
        done later by layoutGridItems().

        Test: fast/css-grid-layout/grid-was-populated-assert.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths): Avoid calls to
        placeItemsOnGrid() and clearGrid() if the grid was already populated.
        * rendering/RenderGrid.h: Move gridWasPopulated() header out of the
        debug ifdefs.

2014-10-21  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Make dashPattern, dotPattern in GraphicsContext::setPlatformStrokeStyle() const
        https://bugs.webkit.org/show_bug.cgi?id=137912

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle): Make the two static variables
        constants since their value doesn't change after initialization.

2014-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Several labels are white instead of black
        https://bugs.webkit.org/show_bug.cgi?id=137803

        Reviewed by Martin Robinson.

        Recent GTK+ versions require to explicitly set the state before
        getting a color.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::styleColor): Helper function to get a color from a
        GtkStylecontext that explicitly sets the state before getting the color.
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor): Use styleColor().
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionBackgroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionBackgroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionForegroundColor): Ditto.
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionForegroundColor): Ditto.
        (WebCore::RenderThemeGtk::systemColor): Ditto.

2014-10-20  YongGeol Jung  <yg48.jung@samsung.com>

        [Coordinated Graphics] '-webkit-mask-image: -webkit-gradient' doesn't work for AC layer.
        https://bugs.webkit.org/show_bug.cgi?id=125326

        Reviewed by Gyuyoung Kim.

        Mask layer hasn't requested to synchronize with AC layer in CoordinatedGraphics so far.
        That's why the mask layer isn't shown under CoordinatedGraphics.
        Thus this patch lets the mask layer synchronize with the AC layer whenever AC layer is updated.

        Below layout test case is related to this issue when --pixel test is enabled.
        Unfortunately EFL WebKitTestRunner doesn't support AC mode yet.
        When EFL test framework supports AC mode, the test will be passed.

        Test: compositing/masks/mask-of-clipped-layer.html

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):

2014-10-17  Jeffrey Pfau  <jpfau@apple.com>

        Ensure attached frame count doesn't exceed the maximum allowed frames
        https://bugs.webkit.org/show_bug.cgi?id=136457

        Reviewed by Alexey Proskuryakov.

        Test: fast/frames/exponential-frames.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2014-10-20  Chris Dumez  <cdumez@apple.com>

        ResourceRequest deserialization unnecessarily calls partitionName() on encoded cache partition
        https://bugs.webkit.org/show_bug.cgi?id=137797

        Reviewed by Darin Adler.

        ResourceRequest deserialization was unnecessarily calling partitionName()
        on the decoded cache partition. In the deserialization case, we already
        know the cache partition is a valid partition name so we can bypass the
        call to partitionName() (which is fairly expensive) for performance.

        This patch adds a setDomainForCachePartion() method to ResourceRequest
        that calls partitionName() on the domain argument, and moves all the
        callers of setCachedPartition() to this new setter, except
        ArgumentCoder<ResourceRequest>::decode().

        This patch updates the setCachedPartition() to merely set the
        m_cachePartition member, without calling partitionName() on the
        argument. There is also a new assertion in place to make sure the
        argument is a valid partition name.

        No new tests, no behavior change.

        * html/DOMURL.cpp:
        (WebCore::DOMURL::revokeObjectURL):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResource):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::replayXHR):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::removeImageFromCache):
        * loader/cache/MemoryCache.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::domainForCachePartition):
        (WebCore::SecurityOrigin::cachePartition): Deleted.
        Rename cachePartition() getter to domainForCachePartition() to make it
        clear it returns a domain and not a partition name. As such, the caller
        should then use ResourceRequest::setDomainForCachePartition(), not
        setCachePartition().

        * page/SecurityOrigin.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::setCachePartition):
        (WebCore::ResourceRequest::setDomainForCachePartition):

2014-10-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Tighten XMLHttpRequest setRequestHeader value check
        https://bugs.webkit.org/show_bug.cgi?id=128593

        Reviewed by Darin Adler.

        Test: http/tests/xmlhttprequest/set-bad-headervalue.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidHTTPHeaderValue): Updated header values check according RFC 7230.
        (WebCore::isValidHTTPToken): Renamed variable name and updated RFC related comment.

2014-10-20  Michael Saboff  <msaboff@apple.com>

        Make post checkin suggested changes to r174847
        https://bugs.webkit.org/show_bug.cgi?id=137885

        Reviewed by Mark Lam.

        Eliminated the creation of a temporary Identifier when comparing propertyName to "open".
        Made the suggested post checkin change to put the declaration of "entry" into the if.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot):

2014-10-20  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for SpinButtonElement
        https://bugs.webkit.org/show_bug.cgi?id=137896

        Reviewed by Gyuyoung Kim.

        Use is<>() / downcast<>() for SpinButtonElement instead of
        isSpinButtonElement() / static_cast for consistency with the rest of
        the code and for safety.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        * html/shadow/SpinButtonElement.h:
        (isType):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isHovered):
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):

2014-10-20  Roger Fong  <roger_fong@apple.com>

        Use glFlush instead of glFinish when drawing WebGL output to screen.
        https://bugs.webkit.org/show_bug.cgi?id=137897.
        <rdar://problem/15846550>

        Reviewed by Brent Fulgham.

        Passes all conformance tests.
        Performance tested by http://threejs.org/examples/#webgl_performance and Unity WebGL performance tests.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture):
        Use glFlush instead of glFinish. glFinish is a blocking operation pushed out queued up WebGL operations and then waits until 
        every operation has completed before returning and every pixel has been updated. This causes severe performance problems,
        about a 10 fps difference on http://threejs.org/examples/#webgl_performance. glFlush, like glFinish,
        forces all queued WebGL operations to take place, but returns immediately. Switching to glFlush does not seem
        make our rendering quality any worse for the handful of sites I've tested and makes our performance on WebGL much better.
        However, we should continue to be on the watch for any potential rendering issues after this lands.

2014-10-20  Benjamin Poulain  <bpoulain@apple.com>

        Generalize the compilation of :not() to support arbitrary selector lists
        https://bugs.webkit.org/show_bug.cgi?id=137843

        Reviewed by Andreas Kling.

        This builds :not() on top of the code created for :nth-child(An+B of selectorList)
        to support any selector list.

        The tests for the JIT were added previously:
        -not-boundaries.html
        -not-backtracking.html

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Any :not() of a selector is handled through a simple selector list. Cases like
        :not(foo, bar) simply generate not([fragmentFoo, bragmentBar]).

        Old cases like :not(foo):not(bar) simply add those cases to the selector list,
        generating not([fragmentFoo, bragmentBar]).

        (WebCore::SelectorCompiler::minimumRegisterRequirements):
        Register pressure is now tracked through computeBacktrackingMemoryRequirements.

        (WebCore::SelectorCompiler::hasAnyCombinators):
        (WebCore::SelectorCompiler::computeBacktrackingMemoryRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        Abstract the code creating Selector Lists from :nth-child(of). Use that for :not()
        and  :nth-child(of).

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesNotPseudoClass):

2014-10-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr<>|make_unique<> in PluginView::scheduleRequest()
        https://bugs.webkit.org/show_bug.cgi?id=137874

        Reviewed by Andreas Kling.

        No new tests, no behavior change.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::scheduleRequest): Replace PassOwnPtr with std::unique_ptr.
        (WebCore::PluginView::load): Create PluginRequest using std::make_unique.
        * plugins/PluginView.h:

2014-10-20  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * platform/spi/mac/NSViewSPI.h:

2014-10-20  Beth Dakin  <bdakin@apple.com>

        Add support for action menus
        https://bugs.webkit.org/show_bug.cgi?id=137891
        rdar://problem/18451638
        rdar://problem/18694470

        Reviewed by Anders Carlsson.

        New SPI that is needed for this.
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/spi/mac: Added.
        * platform/spi/mac/NSViewSPI.h: Added.

2014-10-20  Dean Jackson  <dino@apple.com>

        [Mac] Support "inverted-colors" and "monochrome" media feature.
        https://bugs.webkit.org/show_bug.cgi?id=137535
        <rdar://problem/18586398>

        Rolling out the Windows part of this to fix the build.

        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenHasInvertedColors): Revert to a stub function.

2014-10-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed EFL / GTK build fix after r174898.

        Add missing header include.

        * accessibility/AccessibilityARIAGrid.cpp:

2014-10-20  Dean Jackson  <dino@apple.com>

        [Mac] Support "inverted-colors" and "monochrome" media feature.
        https://bugs.webkit.org/show_bug.cgi?id=137535
        <rdar://problem/18586398>

        Reviewed by Brent Fulgham.

        Add a new media query from CSS Level 4, "inverted-colors", and
        implement the Apple backends for the "monochrome" media query.

        The platform code went into PlatformScreenMac, which already
        had a screenIsMonochrome method. This now calls into Core
        Graphics via SPI. I added a screenHasInvertedColors
        method which tests for inversion. On iOS, there is public API
        for both queries. On Windows, we try to use CoreGraphics.

        At the moment neither of these media queries re-evaluate
        automatically if the user changes their mode. The page will
        need to be reloaded. It is possible to detect a change on iOS,
        but not OS X.
        https://bugs.webkit.org/show_bug.cgi?id=137868

        I decided to not add an ENABLE flag for this, mostly because it
        is such an isolated feature and seems very unlikely to be
        controversial. I don't expect the syntax to change. (I'm sure
        this comment will come back to haunt me.)

        Testing this automatically is slightly tricky. We'd need
        to expose SPI to invert the user's screen, but then we get
        inverted images from our testing which could interfere with concurrent
        operations. Instead I've included some tests that exercise
        the "false" parts of the media query, with explanations as
        to why they would fail if the display is inverted.

        Tests: fast/media/mq-inverted-colors.html
               fast/media/mq-monochrome.html

        * css/CSSValueKeywords.in: Add the "inverted" keyword for "inverted-colors".
        * css/MediaFeatureNames.h: Add the "inverted-colors" feature name.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::inverted_colorsMediaFeatureEval): Implementation of the new media query.
        * css/MediaQueryExp.cpp:
        (WebCore::featureWithCSSValueID): The new query takes an id...
        (WebCore::featureWithoutValue): ... or no value.
        * platform/PlatformScreen.h: Add "screenHasInvertedColors".
        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenHasInvertedColors): Stub implementation.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenHasInvertedColors): Ditto.
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenHasInvertedColors): Call into the platform accessibility API.
        (WebCore::screenIsMonochrome): Ditto.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenIsMonochrome): Call into the CoreGraphics SPI.
        (WebCore::screenHasInvertedColors): Call into the CoreGraphics SPI.
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenHasInvertedColors): Call into CoreGraphics if we're using it.

2014-10-20  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Accessibility objects
        https://bugs.webkit.org/show_bug.cgi?id=137286

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Accessibility objects and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable):
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::scrollViewAncestor):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        (WebCore::AccessibilitySpinButtonPart::press):
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::addChildrenFromSection):
        (WebCore::AccessibilityTable::headerContainer):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTable.h:
        Make isAccessibilityTable() public and mark as final so that callers
        can benefit from tighter typing, as isAccessibilityTable() is
        stricter than isTable(). isTable() indicates that the object is an
        AccessibilityTable and is equivalent to is<AccessibilityTable>(object).
        isAccessibilityTable() is equivalent to "isTable() && renderer()".

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionClearSelection):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (core):
        (cell):
        (cellAtIndex):
        (webkitAccessibleTableGetIndexAt):
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/atk/WebKitAccessibleInterfaceTableCell.cpp:
        (webkitAccessibleTableCellGetColumnHeaderCells):
        (webkitAccessibleTableCellGetRowHeaderCells):
        (webkitAccessibleTableCellGetColumnSpan):
        (webkitAccessibleTableCellGetRowSpan):
        (webkitAccessibleTableCellGetPosition):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper convertRectToScreenSpace:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetElement):
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper convertPointToScreenSpace:]):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        (-[WebAccessibilityObjectWrapper scrollViewParent]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::didUpdateActiveOption):

2014-10-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate all Inspector domains together in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=137748

        Reviewed by Brian Burg.

        After moving the json files into JavaScriptCore update the includes,
        and names of functions that were previously prefixed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/InspectorBackendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorFrontendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSBackendDispatchers.h: Removed.
        * ForwardingHeaders/inspector/InspectorJSFrontendDispatchers.h: Removed.
        * ForwardingHeaders/inspector/InspectorJSProtocolTypes.h: Removed.
        * ForwardingHeaders/inspector/InspectorProtocolTypesBase.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorReplayAgent.cpp:
        * inspector/InspectorReplayAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WorkerInspectorController.cpp:

2014-10-20  Andy Estes  <aestes@apple.com>

        Fix the GTK build.

        * dom/RenderedDocumentMarker.h:

2014-10-19  Antti Koivisto  <antti@apple.com>

        Avoid unnecessary NSURLResponse construction for QuickLook on iOS
        https://bugs.webkit.org/show_bug.cgi?id=137876

        Reviewed by Andy Estes.

        QuickLook specific code path creates NSURLResponse in the web process for every response.
        It is rarely needed so this is unnecessary work.

        * WebCore.exp.in:
        * platform/network/ios/QuickLook.h:
        * platform/network/ios/QuickLook.mm:
        (WebCore::isMainResourceLoader):
        (WebCore::QuickLookHandle::shouldCreateForMIMEType):

            Separate function for testing if QuickLookHandle is needed.

        (WebCore::QuickLookHandle::create):

            Switch the interface to take ResourceResponse.

2014-10-20  Andy Estes  <aestes@apple.com>

        Fix the iOS build.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/RenderedDocumentMarker.h:
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2014-10-20  Benjamin Poulain  <benjamin@webkit.org>

        Update the <link>'s link status
        https://bugs.webkit.org/show_bug.cgi?id=137861

        Reviewed by Chris Dumez.

        In the latest HTML spec, <link> has the link status
        if it has a 'href' attribute, exactly like <a> and <area>:
            https://html.spec.whatwg.org/multipage/scripting.html#selector-link

        This patch updates WebKit accordingly.

        Tests: fast/css/link-basics.html
               fast/selectors/link-basics-xhtml.xhtml
               fast/selectors/link-basics.html
               fast/selectors/webkit-any-link-basics.html

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

2014-10-20  Chris Dumez  <cdumez@apple.com>

        [Mac] Optimize cookiesForDOM() by filtering and serializing cookies in a single pass
        https://bugs.webkit.org/show_bug.cgi?id=137869

        Reviewed by Darin Adler.

        Optimize cookiesForDOM() by filtering and serializing in 1 pass instead of 2.

        Previously, when accessing document.cookie, we ended up doing the following:
        1. Call wkHTTPCookiesForURL() to get an NSArray of NSHTTPCookies.
        2. Call filterCookies() to filter out cookies that are httpOnly or with an
           empty name, thus allocating a new NSMutableArray.
        3. Call NSHTTPCookie's requestHeaderFieldsWithCookies() to serialize the
           cookies
        4. Construct a WTF::String from the NSString*

        There were several inefficiencies here:
        1. We needed to pre-filter the cookies and allocate a new NSMutableArray
           before calling requestHeaderFieldsWithCookies()
        2. requestHeaderFieldsWithCookies() does more things that we actually need.
           It constructs a Dictionary of header fields, of which we query the
           "Cookie" field, even though we merely want a ';'-separated string
           representation of the cookies in "key=value" form.

        With this patch, we now take care of the string serialization ourselves,
        using a StringBuilder as it is trivial to do. This also allows us to filter
        out the httpOnly/invalid cookies as we do the serialization instead of
        having a first pass to do so.

        When scrolling the http://www.apple.com/iphone/ entire page down, then up,
        se were spending ~13.1% of the NetworkProcess time in cookiesForDOM()
        (~96ms) on my machine. With the patch, we spend ~23% less time in
        cookiesForDOM() (~74ms).

        No new tests, no behavior change.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForSession):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):

2014-10-19  Chris Dumez  <cdumez@apple.com>

        Kill toRenderedDocumentMarker() by using tighter typing
        https://bugs.webkit.org/show_bug.cgi?id=137858

        Reviewed by Darin Adler.

        Kill toRenderedDocumentMarker() by using tighter typing. This method
        was doing no type validation, just a static_cast<>().

        No new tests, no behavior change.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::markersFor):
        (WebCore::DocumentMarkerController::markersInRange):
        (DocumentMarkerController::hasMarkers):
        * dom/DocumentMarkerController.h:
        * dom/RenderedDocumentMarker.h:
        (WebCore::toRenderedDocumentMarker): Deleted.
        * editing/AlternativeTextController.cpp:
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::AlternativeTextController::respondToChangedSelection):
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        (WebCore::AlternativeTextController::applyDictationAlternative):
        * editing/CompositeEditCommand.cpp:
        (WebCore::copyMarkers):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        * editing/Editor.cpp:
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::selectionStartHasMarkerFor):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        * rendering/InlineTextBox.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * testing/Internals.cpp:
        (WebCore::Internals::markerAt):
        (WebCore::Internals::markerRangeForNode):
        (WebCore::Internals::markerDescriptionForNode):
        * testing/Internals.h:

2014-10-19  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for all remaining RenderObject subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137845

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for all remaining RenderObject subclasses and
        clean up the surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::progressElement):
        (WebCore::AccessibilityProgressIndicator::meterElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::layoutCount):
        (WebCore::AccessibilityRenderObject::widgetForAttachmentView):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * dom/Document.cpp:
        (WebCore::widgetForElement):
        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::overset):
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        * editing/FrameSelection.cpp:
        (WebCore::isFrameElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::findWidgetRenderer):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        (WebCore::HTMLFrameOwnerElement::renderWidget):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::renderMeter):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::supportsFocus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::renderEmbeddedObject):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::renderProgress):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::pluginWidget):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::widgetForEventTarget):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeRTLState):
        * rendering/InlineTextBox.cpp:
        (WebCore::fontToUse):
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove):
        (WebCore::InlineTextBox::paint):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        (WebCore::RenderBlock::simplifiedLayout):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::hitTestFloats):
        (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        (WebCore::RenderBox::nodeAtPoint):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        * rendering/RenderCombineText.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference):
        (WebCore::addLayers):
        (WebCore::RenderElement::removeLayers):
        (WebCore::RenderElement::moveLayers):
        (WebCore::RenderElement::setNeedsPositionedMovementLayout):
        (WebCore::RenderElement::renderNamedFlowThreadWrapper):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::transparencyClipBox):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::isRestartedPlugin):
        (WebCore::isCompositedPlugin):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::firstMultiColumnSet):
        (WebCore::RenderMultiColumnFlowThread::lastMultiColumnSet):
        (WebCore::RenderMultiColumnFlowThread::layout):
        (WebCore::RenderMultiColumnFlowThread::addRegionToThread):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        (WebCore::RenderMultiColumnFlowThread::flowThreadRelativeWillBeRemoved):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantBoxLaidOut):
        (WebCore::RenderMultiColumnFlowThread::setPageBreak):
        (WebCore::RenderMultiColumnFlowThread::updateMinimumPageHeight):
        (WebCore::RenderMultiColumnFlowThread::setRegionRangeForBox):
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationOffsetFromFlowToRegion):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::nextSiblingMultiColumnSet):
        (WebCore::RenderMultiColumnSet::previousSiblingMultiColumnSet):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderMultiColumnSpannerPlaceholder.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::updateWritingMode):
        (WebCore::addFragmentToList):
        (WebCore::RenderNamedFlowThread::addRegionToThread):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::fragmentFromRenderBoxAsRenderBlock):
        (WebCore::RenderNamedFlowThread::fragmentFromAbsolutePointAndBox):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::scheduleRelayoutForSubtree):
        (WebCore::RenderObject::setLayerNeedsFullRepaint):
        (WebCore::RenderObject::setLayerNeedsFullRepaintForPositionedMovementLayout):
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::selectionRoot):
        (WebCore::RenderObject::shouldUseTransformFromContainer):
        (WebCore::RenderObject::getTransformFromContainer):
        (WebCore::RenderObject::isRooted):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::isComposited):
        (WebCore::RenderObject::currentRenderNamedFlowFragment):
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderRuby.cpp:
        (WebCore::lastRubyRun):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::rubyRun):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):
        * rendering/RenderRubyRun.h:
        * rendering/RenderSlider.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::calculateProgressRect):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMeter):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMeter):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):
        (WebCore::writeLayers):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::SelectionIterator::checkForSpanner):
        (WebCore::isComposited):
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * testing/Internals.cpp:
        (WebCore::Internals::isPluginUnavailabilityIndicatorObscured):

2014-10-19  Chris Dumez  <cdumez@apple.com>

        Use SPECIALIZE_TYPE_TRAITS_*() macro for RenderScrollbar
        https://bugs.webkit.org/show_bug.cgi?id=137854

        Reviewed by Darin Adler.

        Use SPECIALIZE_TYPE_TRAITS_*() macro for RenderScrollbar instead of a
        custom toRenderScrollbar() function, for consistency.

        No new tests, no behavior change.

        * rendering/RenderScrollbar.h:
        (isType):
        (WebCore::toRenderScrollbar): Deleted.
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        (WebCore::RenderScrollbarTheme::willPaintScrollbar):
        (WebCore::RenderScrollbarTheme::didPaintScrollbar):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):

2014-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move GtkDragAndDropHelper from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137422

        Reviewed by Martin Robinson.

        Remove ClipboardUtilitiesGtk and GtkDragAndDropHelper.

        * PlatformGTK.cmake:
        * platform/gtk/ClipboardUtilitiesGtk.cpp: Removed.
        * platform/gtk/ClipboardUtilitiesGtk.h: Removed.
        * platform/gtk/GtkDragAndDropHelper.cpp: Removed.
        * platform/gtk/GtkDragAndDropHelper.h: Removed.

2014-10-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Style fix following r174855.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):

2014-10-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (r173356): Safari can't install a profile, gets 'Download Failed error
        https://bugs.webkit.org/show_bug.cgi?id=137855

        Reviewed by Dan Bernstein.

        We lose the sniffed MIME type for the response when synthesizing an NSURLResponse. Sniffing requires
        backchannel data that the synthesized response doesn't have.

        Test: http/tests/mime/mime-type-sniff.html

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):

            When synthesizing NSURLResponse explicitly set the Content-type header to the sniffed type.

2014-10-18  Chris Dumez  <cdumez@apple.com>

        [Mac] Use Fast enumeration consistently in WebFontCache.mm
        https://bugs.webkit.org/show_bug.cgi?id=137791

        Reviewed by Darin Adler.

        Use fast enumeration consistently in WebFontCache.mm as this results in
        more efficient, concise and safer code.

        No new tests, no behavior change.

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache getTraits:inFamily:]):
        Reserve Vector capacity before the loop as we know how many traits we
        are going to append. Also use uncheckedAppend() for performance.

        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):

2014-10-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Tables with <colgroups> are not reporting table column headers
        https://bugs.webkit.org/show_bug.cgi?id=137846

        Reviewed by Mario Sanchez Prada.

        The code to search for header objects was getting stuck on anonymous RenderTableSections.
        We also need to check more rows for headers, in case the first row or more is not visible or is empty.

        Test: accessibility/table-column-headers-with-captions.html

        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        (WebCore::AccessibilityTableColumn::headerObjectForSection):

2014-10-18  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] build break occurs on webkit efl build.
        https://bugs.webkit.org/show_bug.cgi?id=137844

        Reviewed by Gyuyoung Kim.

        As local variable elementAddressRegisterIndex is assigned but not used, there is build break for the webkit efl.

        No new tests because it's just to fix build break.

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

2014-10-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Apply std::unique_ptr to FooFont classes
        https://bugs.webkit.org/show_bug.cgi?id=137769

        Reviewed by Andreas Kling.

        As a step to use std::unique_ptr, this patch applies std::unique_ptr to Font classes.

        No new tests, no behavior changes.

        * platform/graphics/Font.cpp:
        (WebCore::retrieveOrAddCachedFontGlyphs):
        (WebCore::Font::createLayout):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::create):
        * platform/graphics/SimpleFontData.h:
        Remove create() factory function because public ctor and std::make_unique<> can replace it.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::Font::createLayout):

2014-10-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr in WebCore/bindings
        https://bugs.webkit.org/show_bug.cgi?id=137808

        Reviewed by Andreas Kling.

        Clean up PassOwnPtr|OwnPtr in WebCore/bindings by using std::unique_ptr, std::make_unique
        and WTF::move.

        No new tests, no behavior changes.

        * bindings/generic/ActiveDOMCallback.h:
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::handleInitMessageEvent):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::interruptAndRunTask):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):

2014-10-16  Roger Fong  <roger_fong@apple.com>

        Calling glReadPixels with BGRA format on an NVIDIA machine with an opaque context returns the wrong alpha values.
        https://bugs.webkit.org/show_bug.cgi?id=137793.
        <rdar://problem/15408133>

        Reviewed by Dean Jackson.

        This fixes conformance test context/context-attribute-preserve-drawing-buffer.html.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        On an NVIDIA machine, when the context has alpha turned off, call glReadPixels with RGBA format and then convert to RGBA.

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for all SVG RenderObjects
        https://bugs.webkit.org/show_bug.cgi?id=137840

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for all SVG RenderObjects and clean up the
        surrounding code.

        No new tests, no behaviro change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsPath):
        (WebCore::AccessibilityRenderObject::elementPath):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addResourceForClientInvalidation):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::collectLayoutAttributes):
        (WebCore::RenderSVGText::subtreeChildWillBeRemoved):
        (WebCore::RenderSVGText::subtreeTextDidChange):
        (WebCore::updateFontInAllDescendants):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        (WebCore::SVGRenderSupport::pushMappingToContainer):
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resolveCycles):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::renderSVGText):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        (WebCore::SVGImageElement::didAttachRenderers):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::currentViewBoxRect):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::setContainerSize):
        (WebCore::SVGImage::containerSize):

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessary isSVGFont() check in SimpleFontData::applyTransforms()
        https://bugs.webkit.org/show_bug.cgi?id=137836

        Reviewed by Andreas Kling.

        Avoid unnecessary isSVGFont() check in SimpleFontData::applyTransforms().
        This function is only called from WidthIterator::applyFontTransforms(),
        which already makes sure to call applyTransforms() if isSVGFont()
        returns false. This patch replaces the check with a simple assertion.

        No new tests, no behavior change.

        * platform/graphics/SimpleFontData.h:
        * svg/SVGFontData.h:

2014-10-17  Michael Saboff  <msaboff@apple.com>

        Don't create cached functions that access lexicalGlobalObject()
        https://bugs.webkit.org/show_bug.cgi?id=137839

        Reviewed by Geoffrey Garen.

        Made it so that all the JSDOMWindow special functions blur(), close(), focus() and postMessage()
        are always created as needed for every prototype.  Made it so that JSHTMLDocument does
        the same for open().  Updated test to account for these methods not being cached

        Updated tests accordingly.

        * bindings/js/JSDOMWindowCustom.cpp: 
        (WebCore::JSDOMWindow::getOwnPropertySlot): Updated to always create cached versions of the
        special functions.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::getOwnPropertySlot): Added to create an uncached open() method when
        it is first accessed.
        * html/HTMLDocument.idl: Added CustomGetOwnPropertySlot and implemented it in JSHTMLDocumentCustom.cpp.

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

        [iOS] Speculative fix for a crash under RenderLayerCompositor::updateScrollCoordinatedLayer()
        https://bugs.webkit.org/show_bug.cgi?id=137837
        rdar://problem/18545452

        Reviewed by Tim Horton.

        Crash logs suggest that an iframe's RenderView's RenderLayer's backing can be null
        in a call to updateScrollCoordinatedLayer(), so add an assertion (to help find a reproducible case)
        and a null check.

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

2014-10-17  Andreas Kling  <akling@apple.com>

        Re-arrange parentheses for compilation purposes.

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

2014-10-17  Andreas Kling  <akling@apple.com>

        Unreviewed build fix after r174838.

        Use StackAllocator::addressOf() instead of the old way of grabbing at a stack reference.

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

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=137804

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for RenderBox and clean up the surrounding
        code.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable):
        (WebCore::AccessibilityRenderObject::scrollTo):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement scrollYOffset]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode borderRadii]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        (WebCore::computedTransform):
        (WebCore::zoomAdjustedPaddingOrMarginPixelValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        * dom/Element.cpp:
        (WebCore::Element::scrollByUnits):
        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):
        * dom/Position.cpp:
        (WebCore::endsOfNodeAreVisuallyDistinctPositions):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret):
        * editing/TextIterator.cpp:
        (WebCore::fullyClipsContents):
        (WebCore::shouldEmitExtraNewlineForNode):
        * editing/htmlediting.cpp:
        (WebCore::absoluteBoundsForLocalCaretRect):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::updateAutoscrollRenderer):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::startPanScrolling):
        * page/FrameView.cpp:
        (WebCore::FrameView::embeddedContentBox):
        * page/GestureTapHighlighter.cpp:
        * page/SpatialNavigation.cpp:
        (WebCore::isScrollableNode):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::baselinePosition):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::invalidateWindowlessPluginRect):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::logicalHeight):
        (WebCore::InlineBox::adjustPosition):
        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::deleteLine):
        (WebCore::InlineElementBox::extractLine):
        (WebCore::InlineElementBox::attachLine):
        (WebCore::InlineElementBox::paint):
        (WebCore::InlineElementBox::nodeAtPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::addReplacedChildOverflow):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::markFixedPositionObjectForLayoutIfNeeded):
        (WebCore::RenderBlock::clearPercentHeightDescendantsFrom):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::findAutoscrollable):
        (WebCore::computeBlockStaticDistance):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::previousSiblingBox):
        (WebCore::RenderBox::nextSiblingBox):
        (WebCore::RenderBox::parentBox):
        (WebCore::RenderBox::firstChildBox):
        (WebCore::RenderBox::lastChildBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints):
        (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeChildInternal):
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent):
        (WebCore::RenderFlowThread::currentActiveRenderBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layoutShadowControls):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::addFocusRingRects):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::perspectiveTransform):
        (WebCore::RenderLayer::perspectiveOrigin):
        (WebCore::parentLayerCrossFrame):
        (WebCore::RenderLayer::enclosingScrollableLayer):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::scrollsOverflow):
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateTransform):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::RenderLayerBacking::contentsBox):
        (WebCore::RenderLayerBacking::backgroundBoxForPainting):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::firstColumnSetOrSpanner):
        (WebCore::RenderMultiColumnFlowThread::nextColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlowThread::previousColumnSetOrSpannerSiblingOf):
        (WebCore::RenderMultiColumnFlowThread::resolveMovedChild):
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderMultiColumnFlowThread::handleSpannerRemoval):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        (WebCore::RenderObject::showRegionsInformation):
        (WebCore::RenderObject::showRenderObject):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::pushMappingToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::addAnnotatedRegions):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::layoutSpecialExcludedChild):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::baselinePosition):
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::baselinePosition):
        (WebCore::centerRectVerticallyInParentInputElement):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::baselinePosition):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::baselinePosition):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecorationPart):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::externalRepresentation):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::setLineBreakInfo):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleReplaced):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layout):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::embeddedContentBox):

2014-10-17  Andreas Kling  <akling@apple.com>

        Get rid of wrapperContext() in DOM bindings.
        <https://webkit.org/b/137834>

        Reviewed by Chris Dumez.

        The "wrapper context" is always the DOMWrapperWorld, and since we're passing that around
        already, we don't need a separate mechanism to get at the context.

        The context is extra data stored in the DOM object's JSC::Weak (the wrapper GC object.)

        * bindings/js/JSDOMBinding.h:
        (WebCore::setInlineCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::wrapperContext): Deleted.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2014-10-17  Benjamin Poulain  <benjamin@webkit.org>

        Make a better use of the available registers when compiling nested selector lists
        https://bugs.webkit.org/show_bug.cgi?id=137802

        Reviewed by Andreas Kling.

        Previously, when compiling a nested selector list, the compiler would start by pushing all
        the allocated registers to the stack to free them for the compiled selector list.
        While neat to ensure register allocation is correct, this is very inefficient.

        This patch brings the first step for reducing the overhead. Instead of pushing everything
        to the stack, we just push as many registers as we need for compiling the selector list.

        In most cases, we have so many registers that we don't even need to push anything to the stack.

        Test: fast/selectors/nth-child-of-register-requirement.html

        * cssjit/SelectorCompiler.cpp:
        Add an explicit type for SelectorList to keep information aggregated from all
        SelectorFragmentList inside it.

        SelectorFragmentList is also extended to include its register and stack requirements.
        This information is then used to create a SelectorList and to compile the SelectorFragmentList.

        (WebCore::SelectorCompiler::hasAnyCombinators):
        We only change the elementAddressRegister when moving over combinators. This is used to detect
        if a selector list clobber the elementAddressRegister or leave it untouched.

        (WebCore::SelectorCompiler::computeBacktrackingMemoryRequirements):
        (WebCore::SelectorCompiler::computeBacktrackingInformation):
        Instead of returning a BacktrackingMemoryRequirements, update the SelectorFragmentList and SelectorList directly.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesSelectorList):
        This is where the fun happen.
        First step is keep the input untouched. For now it is simply pushed on the stack. This can be improved later.

        Then we find how many allocated registers we need to save to compile the input selector list. We push those registers
        to the stack and give them back to the register allocator.

        With enough registers we can now compile the nested selector list. The code has changed a bit for efficiency. Instead
        of creating a shortcut for success case, the code now exit on error and proceed on success. This is the general pattern
        of SelectorCompiler and it is quite a bit more efficient in the common cases.

        Finally, we reallocate the registers and get their values back from the stack. The "tail" is duplicated but that's fine
        because in the vast majority of cases it is 1 or 2 pop.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::push):

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for StyleImage
        https://bugs.webkit.org/show_bug.cgi?id=137824

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for StyleImage and clean up the surrouding
        code.

        No new tests, no behavior change.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::detachPendingImage):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::cachedImageURL):
        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::detachPendingImage):
        (WebCore::CSSImageSetValue::~CSSImageSetValue):
        (WebCore::CSSImageSetValue::cachedImageSet):
        (WebCore::CSSImageSetValue::hasFailedOrCanceledSubresources):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::detachPendingImage):
        (WebCore::CSSImageValue::cachedImage):
        (WebCore::CSSImageValue::hasFailedOrCanceledSubresources):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingShapeImage):
        (WebCore::StyleResolver::loadPendingImages):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:

2014-10-17  Dean Jackson  <dino@apple.com>

        [Media] Always update controls for <audio> since they are always visible
        https://bugs.webkit.org/show_bug.cgi?id=137829
        <rdar://problem/18693987>

        Reviewed by Brent Fulgham.

        Revision 174756 made a change to only update the display of the controls
        while they are visible. However, <audio> elements didn't detect visibility
        the same way, since their controls do not auto-hide.

        Change controlsAreHidden to check if we're an audio element.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.controlsAreHidden): Audio elements do not auto-hide their controls.

2014-10-17  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Accelerated compositing is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=137345

        Reviewed by Brent Fulgham.

        This patch is based on GTK, and the texture mapper graphics layer type.

        * WebCore.vcxproj/copyForwardingHeaders.cmd: Copy texmap headers.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: Added method and flag indicating whether animation has started.
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h: Ditto.
        (WebCore::GraphicsLayerTextureMapper::startedAnimation):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp: Use same precision for uniform in vertex shader as in fragment shader.
        Otherwise glLinkProgram() will fail, and nothing will be rendered.

2014-10-17  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Crash when load is canceled while waiting for the user to type HTTP authentication credentials
        https://bugs.webkit.org/show_bug.cgi?id=137826
        rdar://problem/17329599

        Reviewed by Brady Eidson.

        No new tests, as we don't have a way to simulate details of user interaction with
        an auth dialog.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedRequestToPerformDefaultHandling):
        (WebCore::ResourceHandle::receivedChallengeRejection):
        Added null checks before passing m_connection for CFNetwork functions, making this
        match what Mac code does when sending a message to a nil receiver.

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

        Fix the iOS build.

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::languageForAVMediaSelectionOption):

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

        [Mac] Represent AVMediaSelectionOptions as AudioTracks
        https://bugs.webkit.org/show_bug.cgi?id=137474

        Reviewed by Brent Fulgham.

        Test: http/tests/media/hls/hls-audio-tracks.html

        Support selecting audio "tracks" in HLS streams by exposing AVMediaSelectionOptions
        as entries in the video's AudioTrackList.

        AVMediaSessionGroups and AVPlayerItems don't have KVO or notifications to track when options
        are selected and deselected, so wrap AVMediaSessionGroup and AVMediaSessionOption in C++
        wrappers. Each AVMediaSelectionGroup can have only one AVMediaSelectionOption selected at a
        time, so the wrapper will take care of answering which AVMediaSelectionOption is currently
        selected, as without KVO notifications, asking the AVMediaSelectionGroup directly is
        inconsistent. Because setting the selected option multiple times in the same run-loop can
        cause flakiness, coalesce calls to setSelectedOption() by setting a one-shot timer to do
        the actual selection in the next run-loop.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h: Added.
        (WebCore::MediaSelectionOptionAVFObjC::avMediaSelectionOption):
        (WebCore::MediaSelectionOptionAVFObjC::clearGroup): Clear backpointer to group from option.
        (WebCore::MediaSelectionGroupAVFObjC::selectedOption): Simple accessor.
        (WebCore::MediaSelectionGroupAVFObjC::options):  Simple accessor.
        (WebCore::MediaSelectionGroupAVFObjC::avMediaSelectionGroup): Simple accessor.
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm: Added.
        (WebCore::MediaSelectionOptionAVFObjC::create): Simple factory method.
        (WebCore::MediaSelectionOptionAVFObjC::MediaSelectionOptionAVFObjC): Simple constructor.
        (WebCore::MediaSelectionOptionAVFObjC::setSelected): Pass through to MediaSelectionGroupAVFObjC.
        (WebCore::MediaSelectionOptionAVFObjC::selected): Ditto.
        (WebCore::MediaSelectionOptionAVFObjC::index): Return index of this object in the group's object.
        (WebCore::MediaSelectionGroupAVFObjC::create):
        (WebCore::MediaSelectionGroupAVFObjC::MediaSelectionGroupAVFObjC):
        (WebCore::MediaSelectionGroupAVFObjC::~MediaSelectionGroupAVFObjC):
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions): Discover added or removed options.
        (WebCore::MediaSelectionGroupAVFObjC::setSelectedOption): Set a one shot timer to coalesce multiple calls.
        (WebCore::MediaSelectionGroupAVFObjC::selectionTimerFired): Set the selected AVSelectionOption.

        Modify AVTrackPrivateAVFObjCImpl to support both AVPlayerItemTracks and these new
        MediaSelectionOptionAVFObjC objects.

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        (WebCore::AVTrackPrivateAVFObjCImpl::mediaSelectionOption): Simple accessor.
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):  Simple constructor.
        (WebCore::AVTrackPrivateAVFObjCImpl::~AVTrackPrivateAVFObjCImpl): Simple destructor.
        (WebCore::AVTrackPrivateAVFObjCImpl::enabled): Use MediaSelectionOptionAVFObjC, if present.
        (WebCore::AVTrackPrivateAVFObjCImpl::setEnabled): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::index): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::id): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::label): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::language): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::languageForAVMediaSelectionOption): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::trackID): Ditto.

        Allow AudioTrackPrivateAVFObjC and VideoTrackPrivateAVFObjC to be created with
        a MediaSelectionOptionAVFObjC.

        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        (WebCore::AudioTrackPrivateAVFObjC::create): Takes a MediaSelectionOptionAVFObjC.
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC): Simple constructor.
        (WebCore::AudioTrackPrivateAVFObjC::setMediaSelectionOption): Create a new AVTrackPrivateAVFObjCImpl.
        (WebCore::AudioTrackPrivateAVFObjC::mediaSelectionOption): Simple accessor.
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC): Simple constructor.
        (WebCore::VideoTrackPrivateAVFObjC::setMediaSelectonOption): Create a new AVTrackPrivateAVFObjCImpl.
        (WebCore::VideoTrackPrivateAVFObjC::mediaSelectionOption): Simple accessor.
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:

        Because IDs are not necessarily unique across AVPlayerItemTracks and AVMediaSelectionOptions,
        use the index of the track or option instead of it's self-declared ID for ordering for the
        trackIndex.

        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):

        Rather than making allowing the AVPlayerItem to automatically select the "best"
        AVMediaSelectionOption, select the automatic options when creating the AVPlayerItem
        and thereafter allow the users manual selections "stick".

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::ensureAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::ensureAVPlayerItem):

        Determine whether any MediaSelectionOptionsAVFObjC have been added or removed and send trackChange events accordingly.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::determineChangedTracksFromNewTracksAndOldItems): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks): Search for updated selection options.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForAudibleMedia): Return selection group, if available.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::safeMediaSelectionGroupForVisualMedia): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange): Filter out AVPlayerItemTracks without
            AVAssetTracks, as these will be represented by MediaSelectionGroupObjCs instead.
        
        Add new files to project.
        * WebCore.xcodeproj/project.pbxproj:

2014-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] window.screen.width returns wrong value if more displays are available
        https://bugs.webkit.org/show_bug.cgi?id=137778

        Reviewed by Gyuyoung Kim.

        ecore_x_screen_size_get() retrieves the size of Ecore_X_Screen, for example,
        having two displays of 1680x1050, it will return 3360x1050.

        Unlike EFL's MiniBrowser, Firefox and Chrome return screen of the current display.

        No new tests. Hardware specific bug including multiple displays.

        * platform/efl/PlatformScreenEfl.cpp:
        (WebCore::screenRect):
        Use ecore's xrandr to determine the screen on which browser window is displayed.

2014-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Add API to GMainLoopSource to schedule sources after a delay in microseconds
        https://bugs.webkit.org/show_bug.cgi?id=137782

        Reviewed by Sergio Villar Senin.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireInterval): Use microseconds instead of
        milliseconds.

2014-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move touch events handling from Platform to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=137735

        Reviewed by Sergio Villar Senin.

        Remove GtkTouchContextHelper.

        * PlatformGTK.cmake:
        * platform/gtk/GtkTouchContextHelper.cpp: Removed.
        * platform/gtk/GtkTouchContextHelper.h: Removed.

2014-10-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Remove unused function in WorkerThreadableLoader.h 
        https://bugs.webkit.org/show_bug.cgi?id=137811

        Reviewed by Csaba Osztrogonác.

        mainThreadCreateLoader() isn't used anywhere. Even there is no implementation.

        * loader/WorkerThreadableLoader.h:

2014-10-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS Selectors Level 4: Implement :matches in SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=137393

        Reviewed by Benjamin Poulain.

        In this patch, we introduce initial :matches implementation.
        In this current implementation, we don't consider pseudo elements.

        Test: fast/selectors/querySelector-matches.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):

2014-10-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Introduce StackAllocator::addressOf
        https://bugs.webkit.org/show_bug.cgi?id=137771

        Reviewed by Benjamin Poulain.

        Introduce StackAllocator::addressOf and drop offsetToStackReference, it's too primitive.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::loadCheckingContext):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstLink):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateStoreLastVisitedElement):
        * cssjit/StackAllocator.h:
        (WebCore::StackAllocator::addressOf):
        (WebCore::StackAllocator::offsetToStackReference):

2014-10-16  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r169024): Undetermined text is not displayed in the search field of Adobe Help Website
        https://bugs.webkit.org/show_bug.cgi?id=137679
        rdar://problem/18450335

        Reviewed by Enrica Casucci.

        Test: platform/mac/editing/input/selected-composed-text-painting.html

        * rendering/InlineTextBox.cpp: (WebCore::InlineTextBox::paint): We do not paint
        selection beckground for unconfirmed text with underlines, so we should use a regular
        style for text painting, as well.

2014-10-16  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for BasicShape subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137766

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for BasicShape subclasses and clean up the
        surrounding code.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::create):
        Take a PassRef<BasicShape> in argument to make it obvious it is never
        null.

        (WebCore::ShapeClipPathOperation::basicShape):
        Return a reference instead of a pointer as it can never return null.

        (WebCore::ShapeClipPathOperation::windRule):
        (WebCore::ShapeClipPathOperation::pathForReferenceRect):
        Make it non-const due to the const-correctness of Ref::get().

        (WebCore::ShapeClipPathOperation::ShapeClipPathOperation):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::computedShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2014-10-16  Chris Dumez  <cdumez@apple.com>

        Leverage the new RenderElement::m_isCSSAnimating flag in more places
        https://bugs.webkit.org/show_bug.cgi?id=137786

        Reviewed by Simon Fraser.

        Leverage the new RenderElement::m_isCSSAnimating flag that was introduced
        in r174703 in more places, for performance. This avoids doing extra work
        for renderers on which we are not running animations on. This patch also
        updates the API a bit to use more references instead of pointers, making
        it clear the RenderElement cannot be null and thus avoiding unnecessary
        null checks.

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensureCompositeAnimation):
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer):
        (WebCore::AnimationControllerPrivate::isRunningAnimationOnRenderer):
        (WebCore::AnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationControllerPrivate::getAnimatedStyleForRenderer):
        (WebCore::AnimationController::cancelAnimations):
        (WebCore::AnimationController::updateAnimations):
        (WebCore::AnimationController::getAnimatedStyleForRenderer):
        (WebCore::AnimationController::notifyAnimationStarted):
        (WebCore::AnimationController::isRunningAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAcceleratedAnimationOnRenderer):
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::notifyAnimationStarted):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        (WebCore::RenderLayerCompositor::isRunningAcceleratedTransformAnimation):

2014-10-16  Adrien Destugues  <pulkomandy@gmail.com>

        Missing RefPtr.release() calls in TextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=137777

        Reviewed by Chris Dumez.

        No new tests: no functional change, cleanup/optimization.

        Avoids useless ref/deref cycle when returning from functions.

        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::TextureMapper::acquireTextureFromPool):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintIntoSurface):

2014-10-16  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ContentData subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137768

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for ContentData subclasses.

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImages):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/style/ContentData.h:
        (WebCore::operator==):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):

2014-10-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r174744.
        https://bugs.webkit.org/show_bug.cgi?id=137790

        Caused another WebGL conformance test to fail (Requested by
        rfong on #webkit).

        Reverted changeset:

        "glReadPixels on NVIDIA cards returns the wrong values for the
        alpha channel when alpha is off."
        https://bugs.webkit.org/show_bug.cgi?id=137752
        http://trac.webkit.org/changeset/174744

2014-10-16  Tim Horton  <timothy_horton@apple.com>

        Implement selection services menu for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=137582
        <rdar://problem/18604241>

        Reviewed by Brady Eidson.

        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceSelectionWithAttributedString):
        Add replaceSelectionWithAttributedString, which replaces the selection
        with the given attributed string (converting to plain text if the destination
        is not richly editable).

2014-10-16  Alexey Proskuryakov  <ap@apple.com>

        Crashes in ResourceHandleCFURLConnectionDelegateWithOperationQueue due to unimplemented retain/release
        https://bugs.webkit.org/show_bug.cgi?id=137779
        rdar://problem/18679320

        Reviewed by Brady Eidson.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::retain):
        (WebCore::ResourceHandleCFURLConnectionDelegate::release):
        (WebCore::ResourceHandleCFURLConnectionDelegate::makeConnectionClient):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        Implemented retain/release. They are necessary, as ResourceHandle goes away when
        it's canceled, and there is noone else to keep the client object alive but
        CFURLConnection itself.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):
        Added a FIXME about potential improvements that I spotted while invsestigating this.

2014-10-15  Andrei Bucur  <abucur@adobe.com>

        ASSERTION  FAILED in WebCore::RenderFlowThread::getRegionRangeForBox
        https://bugs.webkit.org/show_bug.cgi?id=135563

        Reviewed by David Hyatt.

        The new multi-column code doesn't work correctly when the document contains nested fragmentation
        contexts. The problem is the current flow thread concept that can store only one RenderFlowThread
        at a time and use it during layout.

        The stored flow thread is always correct for regions because named flow threads are absolutley positioned
        so every child renderer is contained inside them (with the expcetion of fixed positioned elements which are
        treated separately).

        For multi-column elements this is no longer the case. An absolutely positioned element inside a static
        multi-column element will be contained by a block outside the fragmentation context. It can even be
        contained by a different multi-column element in the case of nested flow threads.

        The patch below explores a solution that's not based on a current flow thread stored globally. The proposed
        patch makes every block to store a pointer to its fragmentation context and a flag that states if this pointer
        needs to be updated or not. If the renderer is not a block it will get its flow thread from the containing
        block. Once the containing flow thread is requested for the block, the pointer is computed and cached until
        invalidated:
        - when a subtree is removed from a flow thread
        - when the position property of an element inside a flow thread changes

        The process is recursive and it doesn't affect elements that are not nested inside a flow thread. If a block
        changes position from relative to static, any element that was contained by it can only be contained by an
        ancestor of the block. This ancestor will still be outside of any flow thread. This ensures that non-fragmentation
        code is not affected from a performance perspective.

        The patch affects the results of the performance tests:
        - the regions layout tests have a decreased performance raging from 2% to 5-6%
        - the regions selection tests have an increased performance raging from 1-2% to 10%
        - the multicolumn layout tests (now pending review in b137687) have an increased performance
        raging from 1.8% to 5%

        Tests: fast/multicol/multicol-all-positioned-crash.html
               fast/multicol/multicol-transform-containing-block.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::FlowThreadController):
        * rendering/FlowThreadController.h:
        (WebCore::FlowThreadController::currentRenderFlowThread): Deleted.
        (WebCore::FlowThreadController::setCurrentRenderFlowThread): Deleted.
        * rendering/LayoutState.h:
        (WebCore::LayoutState::currentRenderFlowThread):
        (WebCore::LayoutState::setCurrentRenderFlowThread):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        (WebCore::RenderBlock::cachedFlowThreadContainingBlock):
        (WebCore::RenderBlock::cachedFlowThreadContainingBlockNeedsUpdate):
        (WebCore::RenderBlock::setCachedFlowThreadContainingBlockNeedsUpdate):
        (WebCore::RenderBlock::updateCachedFlowThreadContainingBlock):
        (WebCore::RenderBlock::locateFlowThreadContainingBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleWillChange):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer): Deleted.
        (WebCore::CurrentRenderFlowThreadMaintainer::~CurrentRenderFlowThreadMaintainer): Deleted.
        (WebCore::CurrentRenderFlowThreadDisabler::CurrentRenderFlowThreadDisabler): Deleted.
        (WebCore::CurrentRenderFlowThreadDisabler::~CurrentRenderFlowThreadDisabler): Deleted.
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRegionsInformation):
        (WebCore::RenderObject::insertedIntoTree):
        (WebCore::RenderObject::removeFromRenderFlowThread):
        (WebCore::RenderObject::removeFromRenderFlowThreadIncludingDescendants):
        (WebCore::RenderObject::invalidateFlowThreadContainingBlockIncludingDescendants):
        (WebCore::RenderObject::currentRenderNamedFlowFragment):
        (WebCore::RenderObject::locateFlowThreadContainingBlock):
        (WebCore::RenderObject::locateFlowThreadContainingBlockNoCache): Deleted.
        (WebCore::RenderObject::removeFromRenderFlowThreadRecursive): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::flowThreadContainingBlock):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):
        (WebCore::RenderView::popLayoutStateForCurrentFlowThread):
        * rendering/RenderView.h:

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for list-related render objects
        https://bugs.webkit.org/show_bug.cgi?id=137764

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for list-related render objects and clean up
        the surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::visibleChildren):
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::elementRect):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::renderListItemContainerForNode):
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (accessibilityObjectLength):
        (offsetAdjustmentForListItem):
        (webkitAccessibleTextGetText):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::didAttachRenderers):
        (WebCore::HTMLLIElement::parseValue):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::nextSelectableListIndexPageAway):
        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer):
        (WebCore::HTMLSelectElement::selectOption):
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        * html/HTMLSelectElementWin.cpp:
        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::nextListItem):
        (WebCore::previousListItem):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::markerTextForListItem):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustNodeSizes):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        * testing/Internals.cpp:
        (WebCore::Internals::isSelectPopupVisible):

2014-10-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=137736

        Reviewed by Darin Adler.

        No new tests, no behavior change.

        * loader/cache/CachedResource.cpp: Use std::unique_ptr instead of PassOwnPtr|OwnPtr.
        (WebCore::CachedResource::removeClient):
        * loader/cache/CachedResource.h: Set ctor from private to public.
        (WebCore::CachedResource::CachedResourceCallback::schedule):

2014-10-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move TextCodec classes to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=137738

        Reviewed by Darin Adler.

        Replace uses of PassOwnPtr in code under TextCodecFoo class with std::unique_ptr.
        To do this, ctor of TextCodecFoo classes is changed from private to public. Besides
        related classes follow this change as well.

        No new tests, no behavior change.

        * html/parser/HTMLMetaCharsetParser.h:
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::setEncoding):
        (WebCore::TextResourceDecoder::flush):
        * loader/TextResourceDecoder.h:
        * platform/text/TextCodec.h:
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::create):
        * platform/text/TextCodecICU.h:
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::newStreamingTextDecoderWindowsLatin1):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE):
        (WebCore::newStreamingTextDecoderUTF16BE):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::create):
        * platform/text/TextCodecUTF8.h:
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::newStreamingTextDecoderUserDefined):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::newTextCodec):
        * platform/text/TextEncodingRegistry.h:
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::newTextCodecMac):

2014-10-15  Dean Jackson  <dino@apple.com>

        [Media] Reduce style updates (painting) in controls
        https://bugs.webkit.org/show_bug.cgi?id=137763
        <rdar://problem/17833045>

        Reviewed by Simon Fraser.

        Media controls were causing a lot of repaints they were
        constantly updating the style of the widgets, the value
        of the forms, or the text in the display.

        This is necessary when the controls are visible, but not
        necessary when they are hidden. Return immediately in that case.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Initialise the slider to a zero value.
        (Controller.prototype.handleDurationChange): Force an update even though we might be hidden.
        (Controller.prototype.updateProgress): Don't update if we're hidden.
        (Controller.prototype.updateTime): Ditto.
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.updateProgress): Ditto.

2014-10-15  Chris Dumez  <cdumez@apple.com>

        [Mac] Fix inefficiencies in ResourceResponse::platformLazyInit(InitLevel) - Part 2
        https://bugs.webkit.org/show_bug.cgi?id=137721

        Reviewed by Darin Adler.

        Follow-up patch to r174717 addressing review comments made after the patch landed:
        - Use modern C++ loop
        - Remove explicit calls to String(NSString*) constructor

        No new tests, no new tests.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for InlineBox subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137749

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for InlineBox subclasses and clean up the
        surrounding code.

        No new tests, no behavior change.

        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root):
        (WebCore::InlineBox::nextLeafChild):
        (WebCore::InlineBox::prevLeafChild):
        (WebCore::InlineBox::nextLeafChildIgnoringLineBreak):
        * rendering/InlineBox.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::getFlowSpacingLogicalWidth):
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        (WebCore::InlineFlowBox::flipLinesInBlockDirection):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::firstLeafChild):
        (WebCore::InlineFlowBox::lastLeafChild):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForBox):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::firstRootBox):
        (WebCore::RenderBlockFlow::lastRootBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxes):
        (WebCore::RenderBlockFlow::constructLine):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::computeExpansionForJustifiedText):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        (WebCore::RenderBlockFlow::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::isHyphenated):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::nextRootBox):
        (WebCore::RootInlineBox::prevRootBox):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paintSelectionBackground):
        (WebCore::SVGInlineFlowBox::paint):
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        (WebCore::writeSVGInlineTextBoxes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):

2014-10-15  Roger Fong  <roger_fong@apple.com>

        glReadPixels on NVIDIA cards returns the wrong values for the alpha channel when alpha is off.
        https://bugs.webkit.org/show_bug.cgi?id=137752.
        <rdar://problem/15408133>

        Reviewed by Brent Fulgham.

        This change fixed the 1.0.2 conformance test: context/context-attribute-preserve-drawing-buffer.html

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        Manually set the alpha channel to 255 when alpha is off on the rendering context.

2014-10-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Going back is broken for VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=137382

        Reviewed by Darin Adler.

        There were two issues preventing VoiceOver from navigating when using page history to go back/forward.
          1) Existing AXLoadComplete does not get fired when you just move through page history. 
               There were existing frameLoad notifications used by GTK. I think we should use those which seem more reliable.
          2) The AccessibilityScrollView cached its children, but on some history page loads, that cache was never cleared out.
               Rather than trying to find those places to clear out the cache, it's easier to just add the elements to the children
               array everytime it's asked for. Since there's only ever 3 elements (web area + 2 scroll bars) this should not be a performance hit.

        Tests are not possible since they require monitoring notifications across multiple page loads.

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::updateChildrenIfNecessary):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):

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

        Sometimes can't scroll overflow:scroll areas in subframes
        https://bugs.webkit.org/show_bug.cgi?id=137746
        rdar://problem/18603560

        Reviewed by Tim Horton.
        
        r169733 introduced a regression which caused us to no longer update the non-fast
        scrollable region on every layout in subframes, by adding a bogus isMainFrame() check.
        Revert to the previous code.

        Test: platform/mac-wk2/tiled-drawing/scrolling/frames/scroll-region-after-frame-layout.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for TransformOperation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137731

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for TransformOperation subclasses and clean
        up the surrounding code.

        No new tests, no behavior change.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::getTransformFunctionValue):
        * platform/graphics/transforms/IdentityTransformOperation.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::operator==):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::operator==):
        (WebCore::MatrixTransformOperation::blend):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::PerspectiveTransformOperation::operator==):
        (WebCore::PerspectiveTransformOperation::blend):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        (WebCore::RotateTransformOperation::operator==):
        (WebCore::RotateTransformOperation::blend):
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.cpp:
        (WebCore::ScaleTransformOperation::operator==):
        (WebCore::ScaleTransformOperation::blend):
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/SkewTransformOperation.cpp:
        (WebCore::SkewTransformOperation::operator==):
        (WebCore::SkewTransformOperation::blend):
        * platform/graphics/transforms/SkewTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        * platform/graphics/transforms/TranslateTransformOperation.cpp:
        (WebCore::TranslateTransformOperation::operator==):
        (WebCore::TranslateTransformOperation::blend):
        * platform/graphics/transforms/TranslateTransformOperation.h:

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderTextControl / RenderTextControlSingleLine
        https://bugs.webkit.org/show_bug.cgi?id=137727

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderTextControl / RenderTextControlSingleLine.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selectedText):
        (WebCore::AccessibilityRenderObject::selectedTextRange):
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::customStyleForRenderer):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        * page/ios/FrameIOS.mm:
        (WebCore::ancestorRespondingToScrollWheelEvents):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-10-15  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for ClipPathOperation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137733

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for ClipPathOperation subclasses.

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        * rendering/ClipPathOperation.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2014-10-15  Chris Dumez  <cdumez@apple.com>

        [Mac] Use CFDictionaryContainsKey() in ImageSource::isSizeAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=137723

        Reviewed by Simon Fraser.

        Use CFDictionaryContainsKey() in ImageSource::isSizeAvailable() instead
        of CFDictionaryGetValue() as we are not actually interested in the
        value.

        No new tests, no behavior change.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::isSizeAvailable):

2014-10-15  Mihnea Ovidenie  <mihnea@adobe.com>

        Use modern loops in subtrees selection code
        https://bugs.webkit.org/show_bug.cgi?id=137688

        Reviewed by Andreas Kling.

        No new tests as no change in functionality.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::splitSelectionBetweenSubtrees):
        (WebCore::RenderView::updateSelectionForSubtrees):
        (WebCore::RenderView::clearSubtreeSelection):
        (WebCore::RenderView::applySubtreeSelection):
        * rendering/RenderView.h:

2014-10-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up unnecessary PassOwnPtr.h inclusion
        https://bugs.webkit.org/show_bug.cgi?id=137726

        Reviewed by Chris Dumez.

        No new tests, no behavior changes.

        * dom/Document.h: Remove PassOwnPtr.h inclusion.
        * loader/ResourceBuffer.h: ditto.
        * loader/cocoa/DiskCacheMonitorCocoa.mm: ditto.
        * page/scrolling/AxisScrollSnapOffsets.h: ditto.
        * page/scrolling/ScrollingStateScrollingNode.h: ditto.
        * platform/ColorChooserClient.h: ditto.
        * platform/ScrollableArea.cpp: ditto.
        * platform/ScrollbarThemeClient.h: ditto.
        * platform/SharedBuffer.cpp: ditto.
        * platform/Supplementable.h: ditto.
        * platform/graphics/surfaces/GraphicsSurface.h: ditto.
        * platform/graphics/surfaces/GraphicsSurfaceToken.h: ditto.
        * platform/graphics/win/WKCAImageQueue.cpp: ditto.
        * platform/win/CursorWin.cpp: ditto.

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Have offsetFromContainer() / offsetFromAncestorContainer() take a RenderElement&
        https://bugs.webkit.org/show_bug.cgi?id=137728

        Reviewed by Benjamin Poulain.

        Have offsetFromContainer() / offsetFromAncestorContainer() take a RenderElement&
        instead of a RenderObject*. The argument passed is never null and the type
        should be a RenderElement as the argument is a container.

        No new tests, no behavior change.

        * editing/htmlediting.cpp:
        (WebCore::localCaretRectInRendererForCaretPainting):
        * page/GestureTapHighlighter.cpp:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::pushMappingToContainer):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::offsetFromContainer):
        (WebCore::RenderInline::mapLocalToContainer):
        (WebCore::RenderInline::pushMappingToContainer):
        * rendering/RenderInline.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::offsetFromContainer):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::offsetFromContainer):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetFromContainer):
        (WebCore::RenderObject::offsetFromAncestorContainer):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::offsetFromContainer):
        * rendering/RenderTableCell.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::convertToPaintingRect):

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

        REGRESSION (r159208): Crash when clicking scrubber after navigating away/back to video
        https://bugs.webkit.org/show_bug.cgi?id=137715

        Reviewed by Darin Adler.

        Simple null-check of m_player in refreshCachedTime.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::refreshCachedTime):

2014-10-14  Chris Dumez  <cdumez@apple.com>

        [Mac] Fix inefficiencies in ResourceResponse::platformLazyInit(InitLevel)
        https://bugs.webkit.org/show_bug.cgi?id=137721

        Reviewed by Geoffrey Garen.

        There were several inefficiencies with the Mac implementation of
        ResourceResponse::platformLazyInit(InitLevel):
        1. We end up initializing uncommon fields even if called with
           'CommonFieldsOnly' initLevel.
        2. If called with 'AllFields' initLevel (and if currently
           uninitialized), we end up populating m_httpHeaderFields twice, once
           with only the common headers, then a second time with ALL the
           headers. We can skip the common-header case in this case to avoid
           wasting CPU time.

        This patch addresses both inefficiencies and cleans up the code a
        little bit to reduce variable scope and to use fast enumeration of
        header names.

        As a result, we spend almost twice as little time in platformLazyInit()
        when loading msn.com (~30ms -> ~18ms).

        No new tests, no behavior change.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2014-10-14  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (Safari 7.1/8.0): Border-radius and overflow hidden renders incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=137205

        Reviewed by Simon Fraser.

        Child layer should not reset radius clipping behaviour.

        Test: fast/layers/parent-clipping-overflow-is-overwritten-by-child-clipping.html

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

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for PlatformCAAnimation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137722

        Reviewed by Simon Fraser.

        Use is<>() / downcast<>() for PlatformCAAnimation subclasses and clean
        up the surrounding code.

        No new tests, no behavior change.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::fadeIn):
        (WebCore::ServicesOverlayController::Highlight::fadeOut):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::moveOrCopyLayerAnimation):
        (WebCore::GraphicsLayerCA::updateAnimations):
        (WebCore::GraphicsLayerCA::setAnimationOnLayer):
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimationMac::copy):
        (PlatformCAAnimationMac::copyTimingFunctionFrom):
        (PlatformCAAnimationMac::copyFromValueFrom):
        (PlatformCAAnimationMac::copyToValueFrom):
        (PlatformCAAnimationMac::copyValuesFrom):
        (PlatformCAAnimationMac::copyKeyTimesFrom):
        (PlatformCAAnimationMac::copyTimingFunctionsFrom):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::addAnimationForKey):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::copy):
        (PlatformCAAnimationWin::copyTimingFunctionFrom):
        (PlatformCAAnimationWin::copyFromValueFrom):
        (PlatformCAAnimationWin::copyToValueFrom):
        (PlatformCAAnimationWin::copyValuesFrom):
        (PlatformCAAnimationWin::copyKeyTimesFrom):
        (PlatformCAAnimationWin::copyTimingFunctionsFrom):
        * platform/graphics/ca/win/PlatformCAAnimationWin.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::addAnimationForKey):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderInline
        https://bugs.webkit.org/show_bug.cgi?id=137704

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderInline and clean up the surrounding
        code.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildInContinuation):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildRendererHighlight):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::removeLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::extractLineBoxFromRenderObject):
        (WebCore::InlineFlowBox::attachLineBoxToRenderObject):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineIterator.h:
        (WebCore::bidiFirstSkippingEmptyInlines):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::inlineElementContinuation):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::accumulateInFlowPositionOffsets):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeRemovedFromTree):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::dirtyLinesFromChangedChild):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        * rendering/RenderLineBoxList.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::decorationsClipRectForBoxInNamedFlowFragment):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::removeAllFromParent):
        (WebCore::RenderTextLineBoxes::dirtyRange):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleEmptyInline):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::requiresLineBox):
        (WebCore::setStaticPositions):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r174710.

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

2014-10-14  Dan Bernstein  <mitz@apple.com>

        URLs that start with http:/// and https:/// lose two slashes when parsed, causing assertion failure and inconsistent behavior
        https://bugs.webkit.org/show_bug.cgi?id=137718

        Reviewed by Alexey Proskuryakov.

        Added cases to fast/loader/url-parse-1.html.

        * platform/URL.cpp:
        (WebCore::URL::parse): In hierarchical schemes other than file:, ignore any additional
        slashes after the ://, as prescribed by the authority-ignore-slashes state in the current
        URL spec.

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r174698 and r174709.

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsKeySystem):
        (WebCore::AVFWrapper::shouldWaitForLoadingOfResource):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r174698

        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::createSession):

2014-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Improve debug description of WAKViews
        https://bugs.webkit.org/show_bug.cgi?id=137716

        Reviewed by Simon Fraser.

        No new tests because there is no behavior change.

        * platform/ios/wak/WAKView.mm:
        (-[WAKView description]):
        * platform/ios/wak/WKView.h:
        * platform/ios/wak/WKView.mm:
        (WKViewGetOrigin):

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Introduce an isCSSAnimated flag on RenderElement for performance
        https://bugs.webkit.org/show_bug.cgi?id=137583

        Reviewed by Simon Fraser.

        I noticed when profiling the ebay.com page load that isRunningAnimationOnRenderer()
        and isRunningAcceleratedAnimationOnRenderer() were called frequently, causing
        ~4.7 millions m_compositeAnimations HashMap lookups.

        This patch introduces an isCSSAnimated flag on RenderElement to return early if
        there is no animation on the renderer, thus avoiding HashMap lookups. This reduces
        the number of HashMap lookups from ~4.7 millions to ~68k. On my machine, I see
        the following performance improvements:
        - isRunning*AnimationOnRenderer() / computeCompositingRequirements()
          - before: ~45ms  / ~90ms
          - after:  ~4ms / ~30ms

        No new tests, no behavior change.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::ensureCompositeAnimation):
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::isRunningAnimationOnRenderer):
        (WebCore::AnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAcceleratedAnimationOnRenderer):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::isCSSAnimating):
        (WebCore::RenderElement::setIsCSSAnimating):

2014-10-14  Dean Jackson  <dino@apple.com>

        Crash in WebCore::UserGestureIndicator::processingUserGesture with WebWorkers
        https://bugs.webkit.org/show_bug.cgi?id=137676
        <rdar://problem/15735049>

        Reviewed by Alexey Proskuryakov.

        Remove the code I added that tracks the timestamp of the most recent
        user gesture from the event handling dispatch, as it was both
        a silly place to do it and it originally crashed when events were fired from
        Worker threads (although this was fixed in r152238).

        It's now recorded by going through UserGestureIndicator, which is good because
        it knows when a user has triggered an event. Its constructor now takes
        a pointer to Document, and updates the timestamp there if necessary.

        Not all UserGestureIndicator instances needed to reset the timestamp; Those did
        not have to pass along the Document.

        This is untestable due to the fix mentioned above.

        * WebCore.exp.in: Change constructor signature.

        * accessibility/AccessibilityNodeObject.cpp: Pass a pointer to the Document into the UserGestureIndicator.
        (WebCore::AccessibilityNodeObject::increment):
        (WebCore::AccessibilityNodeObject::decrement):
        * accessibility/AccessibilityObject.cpp: Ditto.
        (WebCore::AccessibilityObject::press):

        * dom/Document.cpp:
        (WebCore::Document::updateLastHandledUserGestureTimestamp): Renamed.
        * dom/Document.h:

        * dom/EventTarget.cpp: Remove the code to update the timestamp.
        (WebCore::EventTarget::fireEventListeners):

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator): If there is a Document and
        this is a user gesture, then reset the timestamp.
        * dom/UserGestureIndicator.h:

        * page/EventHandler.cpp: Pass a pointer to the Document.
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::handleTouchEvent):

        * rendering/HitTestResult.cpp: Ditto.
        (WebCore::HitTestResult::toggleMediaFullscreenState):
        (WebCore::HitTestResult::enterFullscreenForVideo):

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening. Ignore Visual Studio *.sdf files.

        * WebCore.vcxproj: Modified property svn:ignore.

2014-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Enable Encrypted Media Support
        https://bugs.webkit.org/show_bug.cgi?id=137710
        <rdar://problem/18652699>

        Reviewed by Jer Noble.

        This feature is covered by existing media tests.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::destroyAVFWrapper): Remove redundant ASSERT.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (displayOnMainThreadContext::displayOnMainThreadContext): Added.
        (redispatchOnMainQueue): Added.
        (PlatformCALayerWinInternal::displayCallback): Check if a display
        call is happening on a background queue, and re-dispatch on the
        main thread if necessary.

2014-10-14  Chris Dumez  <cdumez@apple.com>

        [Mac] Avoid unnecessary dictionary lookup in ImageSource::isSizeAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=137701

        Reviewed by Simon Fraser.

        The CG implementation of ImageSource::isSizeAvailable() was looking up
        both the width and the height keys in the dictionary before determining
        if the size is available. We can abort early and return false if the
        first key (the width) is missing, thus avoiding an extra dictionary
        lookup in this case.

        This is a small win but ImageSource::isSizeAvailable() is called quite
        frequently during page loads

        No new tests, no behavior change.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::isSizeAvailable):

2014-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove unnecessary logging from SimpleFontData
        https://bugs.webkit.org/show_bug.cgi?id=137699

        Reviewed by Andreas Kling.

        Because of web fonts, fonts that don't have a glyph page 0 are common and expected. Printing out a
        message is not helpful, especially if you're not dealing with a font-related piece of WebKit.

        No new tests because there is no behavior change.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):

2014-10-14  Martin Hock  <mhock@apple.com>

        Update ViewportConfiguration whenever its size attributes change
        https://bugs.webkit.org/show_bug.cgi?id=137682
        rdar://problem/18643655

        Reviewed by Benjamin Poulain.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):
        (WebCore::ViewportConfiguration::setMinimumLayoutSizeForMinimalUI):

2014-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Processing Instruction Nodes appear poorly in DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=137681

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        Include the nodeName, localName, and nodeValue (string data)
        properties for processing instruction nodes.

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderFrame / RenderFrameSet
        https://bugs.webkit.org/show_bug.cgi?id=137696

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderFrame / RenderFrameSet.

        No new tests, no behavior change.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::updateFromElement):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::computeEdgeInfo):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        * rendering/RenderFrameSet.h:

2014-10-14  Youenn Fablet  <youennf@gmail.com>

        [XHR] Abort method execution when m_loader->cancel() in internalAbort() caused reentry
        https://bugs.webkit.org/show_bug.cgi?id=126975

        Reviewed by Alexey Proskuryakov.

        Merging https://chromium.googlesource.com/chromium/blink/+/0d75daf2053631518606ae15daaece701a25b2c4
        Ensuring new test from https://codereview.chromium.org/76133002/ is passing.

        Test: http/tests/xmlhttprequest/reentrant-cancel-abort.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): exit early if internalAbort asks so
        (WebCore::XMLHttpRequest::abort): exit early if internalAbort asks so
        (WebCore::XMLHttpRequest::internalAbort): ask calling function to exit early if a new loader is created during the cancellation of the loader (potential reentrant case through window.onload callback)   
        (WebCore::XMLHttpRequest::didTimeout): exit early if internalAbort asks so
        * xml/XMLHttpRequest.h:

2014-10-14  Alejandro G. Castro  <alex@igalia.com>

        Multiple refactors in RenderMathMLOperator
        https://bugs.webkit.org/show_bug.cgi?id=137611

        Reviewed by Darin Adler.

        The changes include:
        - Rename m_operator to m_textContent.
        - Make most of the functions private, we needed to create some
        public member functions to be able to make the some funtions private
        and move trailingSpaceError to RenderMathMLOperator.
        - Fix incorrect capitalization of setOperatorProperties function.
        - Make all data members private and move them to the end of the
        class defition.

        No new tests as no change in functionality.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::setOperatorProperties): Renamed,
        incorrect capitalization
        (WebCore::RenderMathMLOperator::stretchTo):
        (WebCore::RenderMathMLOperator::computePreferredLogicalWidths):
        (WebCore::RenderMathMLOperator::rebuildTokenContent):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::updateOperatorProperties):
        (WebCore::RenderMathMLOperator::shouldAllowStretching):
        (WebCore::RenderMathMLOperator::updateStyle):
        (WebCore::RenderMathMLOperator::trailingSpaceError):
        (WebCore::RenderMathMLOperator::SetOperatorProperties): Deleted.
        (WebCore::RenderMathMLOperator::advanceForGlyph): Deleted.
        (WebCore::RenderMathMLOperator::updateTokenContent): Deleted.
        (WebCore::RenderMathMLOperator::getGlyphAssemblyFallBack): Deleted.
        * rendering/mathml/RenderMathMLOperator.h:
        (WebCore::RenderMathMLOperator::setLeadingSpace): Added.
        (WebCore::RenderMathMLOperator::setTrailingSpace):  Added.
        (WebCore::RenderMathMLOperator::textContent): Added.
        (WebCore::RenderMathMLOperator::isInvisibleOperator):
        * rendering/mathml/RenderMathMLRadicalOperator.cpp:
        (WebCore::RenderMathMLRadicalOperator::setOperatorProperties):
        Renamed, incorrect capitalization
        (WebCore::RenderMathMLRadicalOperator::SetOperatorProperties): Deleted.
        (WebCore::RenderMathMLRadicalOperator::trailingSpaceError): Deleted.
        * rendering/mathml/RenderMathMLRadicalOperator.h:

2014-10-14  Alejandro G. Castro  <alex@igalia.com>

        Changes in the stretchy attribute do not update rendering
        https://bugs.webkit.org/show_bug.cgi?id=136883

        Reviewed by Darin Adler.

        Test: mathml/presentation/mo-stretch-update.html

        We need to relayout when a change in the stretchy attribute
        happens.

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::parseAttribute): Parse the
        modifications of the stretchy attribute.
        * mathml/MathMLTextElement.h:
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::setOperatorFlagAndScheduleLayoutIfNeeded):
        Add function that receives the value instead of looking for it and
        checks if the change should schedule a layout.
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttribute):
        (WebCore::RenderMathMLOperator::setOperatorFlagFromAttributeValue):
        Add function that receives the value instead of looking for it.
        * rendering/mathml/RenderMathMLOperator.h:

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderImage
        https://bugs.webkit.org/show_bug.cgi?id=137683

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderImage.

        No new tests, no behavior change.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * bindings/objc/DOM.mm:
        (-[DOMElement image]):
        (-[DOMElement _imageTIFFRepresentation]):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * editing/cocoa/HTMLConverter.mm:
        (fileWrapperForElement):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::getImageForElement):
        * editing/ios/EditorIOS.mm:
        (WebCore::getImage):
        * editing/mac/EditorMac.mm:
        (WebCore::getImage):
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::setFocus):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::didAttachRenderers):
        (WebCore::HTMLImageElement::createImageControls):
        (WebCore::HTMLImageElement::destroyImageControls):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::altAttributeChanged):
        (WebCore::ImageInputType::attach):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::RenderImageControls::updateLogicalWidth):
        (WebCore::RenderImageControls::computeLogicalHeight):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * page/ContextMenuController.cpp:
        (WebCore::imageFromImageElementNode):
        * page/DragController.cpp:
        (WebCore::getCachedImage):
        (WebCore::getImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        (WebCore::getCachedImage):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::image):
        * rendering/RenderImage.h:
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::getImageSize):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):
        (WebCore::RenderLayerBacking::updateImageContents):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage):

2014-10-14  Andrzej Badowski  <a.badowski@samsung.com>

        [AX] Improve AccessibilityTableCell columnHeaders and rowHeaders functions.
        https://bugs.webkit.org/show_bug.cgi?id=136818

        Reviewed by Chris Fleizach.

        Take into account that <th> elements can be both the column headers and row headers 
        improved the operation of two functions: columnHeaders and rowHeaders.

        Test: accessibility/table-headers.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::isColumnHeaderCell):
        A new function that helps the main goal.
        (WebCore::AccessibilityTableCell::isRowHeaderCell):
        A new function that helps the main goal.
        (WebCore::AccessibilityTableCell::columnHeaders):
        Use isColumnHeaderCell instead of isTableHeaderCell.
        (WebCore::AccessibilityTableCell::rowHeaders):
        Use isRowHeaderCell also includes <th> row header element next to the scope attribute.
        * accessibility/AccessibilityTableCell.h:
        Adds new functions to the header file.

2014-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(VIDEO) build after r174353
        https://bugs.webkit.org/show_bug.cgi?id=137655

        Reviewed by Darin Adler.

        * dom/Document.cpp:
        * dom/Document.h:
        * page/Page.cpp:
        * page/Page.h:

2014-10-14  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Compile error in CurlDownload.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=137654

        Reviewed by Philippe Normand.

        A template specialization is not needed anymore.

        * platform/network/curl/CurlDownload.cpp:

2014-10-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused stale Page protocol methods
        https://bugs.webkit.org/show_bug.cgi?id=137678

        Reviewed by Andreas Kling.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::canShowDebugBorders): Deleted.
        (WebCore::InspectorClient::setShowDebugBorders): Deleted.
        (WebCore::InspectorClient::canShowFPSCounter): Deleted.
        (WebCore::InspectorClient::setShowFPSCounter): Deleted.
        (WebCore::InspectorClient::canContinuouslyPaint): Deleted.
        (WebCore::InspectorClient::setContinuousPaintingEnabled): Deleted.
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::canShowDebugBorders): Deleted.
        (WebCore::InspectorPageAgent::setShowDebugBorders): Deleted.
        (WebCore::InspectorPageAgent::canShowFPSCounter): Deleted.
        (WebCore::InspectorPageAgent::setShowFPSCounter): Deleted.
        (WebCore::InspectorPageAgent::canContinuouslyPaint): Deleted.
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled): Deleted.
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2014-10-13  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Refactor AirPlay monitoring code
        https://bugs.webkit.org/show_bug.cgi?id=137645
        <rdar://problem/18444817>

        Reviewed by Jer Noble.

        Refactor AirPlay route change monitoring code:
        + Have MediaSessionManager register/unregister for route changes depending on the state of
            all sessions so it does the right thing when there is more than one media element.
        + Make HTMLMediaElement unregister with MediaSession as soon as the media player is cleared
            because there can be no wireless playback without a player.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call mediaSession->setHasPlaybackTargetAvailabilityListeners
            when there are target availability changed listeners.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Ditto.
        (WebCore::HTMLMediaElement::wirelessRoutesAvailableDidChange): New, media session client method.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::HTMLMediaSession): Initialize m_hasPlaybackTargetAvailabilityListeners.
        (WebCore::HTMLMediaSession::setHasPlaybackTargetAvailabilityListeners): Remember whether or not
            the client has a target availability listener and tell the media session manager to reconfigure
            itself instead of telling it to start or stop listening for route changes so it does the 
            right thing when there is more than one media element.
        * html/HTMLMediaSession.h:
        (WebCore::HTMLMediaSession::requiresPlaybackTargetRouteMonitoring): Return true when the client 
            has a target availability listener, false otherwise.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::wirelessRoutesAvailableDidChange): Inform the client that routes have changed.
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::requiresPlaybackTargetRouteMonitoring):
        (WebCore::MediaSessionClient::wirelessRoutesAvailableDidChange):

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::wirelessRoutesAvailableChanged): Implement it.
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::configureWireLessTargetMonitoring):
        (WebCore::MediaSessionManager::hasWirelessTargetsAvailable):
        (WebCore::MediaSessionManager::sessions):
        (WebCore::MediaSessionManager::startMonitoringAirPlayRoutes): Deleted.
        (WebCore::MediaSessionManager::stopMonitoringAirPlayRoutes): Deleted.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring): Start or stop monitoring
            for route changes depending on client state.
        (WebCore::MediaSessionManageriOS::startMonitoringAirPlayRoutes): Deleted.
        (WebCore::MediaSessionManageriOS::stopMonitoringAirPlayRoutes): Deleted.

2014-10-13  Chris Dumez  <cdumez@apple.com>

        [Mac] Return value of createImageSourceOptions() is leaked in ImageSourceCG
        https://bugs.webkit.org/show_bug.cgi?id=137677

        Reviewed by Simon Fraser.

        The return value of createImageSourceOptions() was leaked in
        ImageSourceCG.cpp. It was returning a CFDictionaryRef created using
        CFDictionaryCreate(). Therefore, the return value should have been
        released but wasn't.

        This patch makes createImageSourceOptions() return a
        RetainPtr<CFDictionaryRef> to make sure the CFDictionaryRef properly
        gets released after use.

        No new tests, no behavior change.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::createImageSourceOptions):
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::allowSubsamplingOfFrameAtIndex):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):

2014-10-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        CSS JIT: Implement :visited pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=135293

        Reviewed by Benjamin Poulain.

        This patch implements CSS JIT for :visited. And it makes :not(:link) JIT-ed.
        Following the design discussed at the other bug[1], implemented :visited JIT
        without tracking VisitedMatchEnabled state.

        In this patch, we change the semantics of :visited / :link
        inside functional pseudo classes for further CSS Selector Level 4 extensions.

        Edge cases are tested by the existing tests.
        :not(:link)
            fast/history/link-inside-not.html
        :not(:visited)
            fast/history/visited-inside-not.html
        :-webkit-any(:link)
            fast/history/link-inside-any.html
        :-webkit-any(:visited)
            fast/history/visited-inside-any.html

        [1]: https://bugs.webkit.org/show_bug.cgi?id=135639

        Test: fast/history/link-inside-not-inside-any.html
            To cover the :-webkit-any(:not(:link)), added new tests.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::constructFragments):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorCheckerExcludingPseudoElements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRightmostTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementLinkMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFirstLink):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateStoreLastVisitedElement):

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use modern loops in RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=137670

        Reviewed by Simon Fraser.

        Use modern range for-loops in RenderLayerCompositor.

        No new tests, no behavior change.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::OverlapMapContainer::overlapsLayers):
        (WebCore::RenderLayerCompositor::OverlapMap::RectList::intersects):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayersAfterFlush):
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush):
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::rebuildRegionCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayer):
        (WebCore::resetTrackedRepaintRectsRecursive):
        (WebCore::RenderLayerCompositor::layerHas3DContent):
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers):
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers):

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary overlapMap null checks in computeCompositingRequirements()
        https://bugs.webkit.org/show_bug.cgi?id=137668

        Reviewed by Andreas Kling.

        Drop unnecessary overlapMap null checks in computeCompositingRequirements().
        The function is never called with a null overlapMap so we can make the
        argument a reference and drop all the null checks.

        No new tests, no behavior change.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137661

        Reviewed by Simon Fraser.

        Use is<>() / downcast<>() for PlatformCALayer subclasses and clean up
        the surrounding code.

        No new tests, no behavior change.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::updateReplicatedLayers):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::fetchCloneLayers): Deleted.
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::ensureTilesForRect):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::appendSublayer):
        (PlatformCALayerMac::insertSublayer):
        (PlatformCALayerMac::replaceSublayer):
        (PlatformCALayerMac::adoptSublayers):
        (PlatformCALayerMac::copyFiltersFrom):
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::setRootChildLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::clone):
        (PlatformCALayerWin::rootLayer):
        (PlatformCALayerWin::appendSublayer):
        (PlatformCALayerWin::insertSublayer):
        (PlatformCALayerWin::replaceSublayer):
        (PlatformCALayerWin::adoptSublayers):
        (PlatformCALayerWin::copyFiltersFrom):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::insertSublayer):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Filter / FilterOperation subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137644

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Filter / FilterOperation subclasses.

        No new tests, no behavior change.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::filterValueForOperation):
        (PlatformCAFilters::colorMatrixValueForFilter):
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::DefaultFilterOperation::operator==):
        (WebCore::ReferenceFilterOperation::operator==):
        (WebCore::BasicColorMatrixFilterOperation::blend):
        (WebCore::BasicColorMatrixFilterOperation::operator==):
        (WebCore::BasicComponentTransferFilterOperation::blend):
        (WebCore::BasicComponentTransferFilterOperation::operator==):
        (WebCore::BlurFilterOperation::operator==):
        (WebCore::BlurFilterOperation::blend):
        (WebCore::DropShadowFilterOperation::operator==):
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/graphics/filters/SVGFilter.h:
        (isType):

2014-10-13  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Table render objects
        https://bugs.webkit.org/show_bug.cgi?id=137641

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for table-related render objects and clean
        up the surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::tableElement):
        (WebCore::AccessibilityTable::isDataTable):
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitTabBeforeNode):
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseAttribute):
        (WebCore::HTMLTableCellElement::cellAbove):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseAttribute):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseAttribute):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::shouldScaleColumns):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeIntrinsicLogicalWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::firstColumn):
        (WebCore::RenderTable::recalcSections):
        (WebCore::RenderTable::sectionAbove):
        (WebCore::RenderTable::sectionBelow):
        (WebCore::RenderTable::bottomSection):
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::table):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::nextCell):
        (WebCore::RenderTableCell::previousCell):
        (WebCore::RenderTableRow::firstCell):
        (WebCore::RenderTableRow::lastCell):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::table):
        (WebCore::RenderTableCol::enclosingColumnGroup):
        (WebCore::RenderTableCol::nextColumn):
        * rendering/RenderTableCol.h:
        Make updateFromElement() public to allow the callers to use tighter
        typing and devitualize the call as the class is final.

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableSection::firstRow):
        (WebCore::RenderTableSection::lastRow):
        (WebCore::RenderTableRow::nextRow):
        (WebCore::RenderTableRow::previousRow):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::paintCell):
        * rendering/RenderTableSection.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        (WebCore::writeSimpleLine):

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

        MediaPlayer::characteristicChanged() is not called when new tracks are found in SourceBufferPrivateAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=137533

        Reviewed by Darin Adler.

        When a new AVAsset is returned out of the AVStreamDataParser, notify the HTMLMediaElement that
        characteristics of the player may have changed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::characteristicsChanged):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):

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

        [iOS] Stop listening for wireless playback target availability when the default controls are hidden.
        https://bugs.webkit.org/show_bug.cgi?id=137633

        Reviewed by Dean Jackson.

        In order to minimize the excess bandwidth and power consumption required for actively listening
        for wireless playback target availablity, unregister for those notifications while the controls
        are hidden due to playback, or when the element's document is hidden.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createBase): Register for document visiblity change notfications.
        (ControllerIOS.prototype.setControlsType): Call updateShouldListenForPlaybackTargetAvailabilityEvent()
            instead of setShouldListenForPlaybackTargetAvailabilityEvent()
        (ControllerIOS.prototype.hideControls): Ditto.
        (ControllerIOS.prototype.showControls): Ditto.
        (ControllerIOS.prototype.updateStatusDisplay): Ditto.
        (ControllerIOS.prototype.handleVisibilityChange): Ditto.
        (ControllerIOS.prototype.updateShouldListenForPlaybackTargetAvailabilityEvent): Added. Only listen
            for target availability when the video has no errors, is not in the initial "big play button"
            controls state, and when the controls are not hidden.
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]): Explicitly set the discoveryMode to "disabled"
            rather than waiting for the autoreleasepool to destroy our routing controller.

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

        iOS DRT snapshots are limited to the page visible area
        https://bugs.webkit.org/show_bug.cgi?id=137650

        Reviewed by Daniel Bates.

        LegacyTileCache drawing was limited to the window's visible area, found by
        crawling up the layer hierarchy to the root layer. This caused test snapshots to
        be missing non-composited content outside the iPhone visible area, which hinders
        testing.
        
        Fix by adding a test-only mode where the window visible area is the entire window.

        * platform/ios/wak/WAKWindow.h:
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow setEntireWindowVisibleForTesting:]):
        (-[WAKWindow _visibleRectRespectingMasksToBounds:]):

2014-10-13  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Make RenderNamedFlowFragment::computeStyleInRegion const
        https://bugs.webkit.org/show_bug.cgi?id=137604

        Reviewed by Andrei Bucur.

        The method computeStyleInRegion should be const as it does not modify
        the state of the RenderNamedFlowFragment instance. Make pointers to
        the region used for styling const along the way. No new tests as no
        change in functionality.

        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        (WebCore::ElementRuleCollector::setRegionForStyling):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initForStyleResolve):
        (WebCore::StyleResolver::styleForElement):
        * css/StyleResolver.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        * rendering/RenderNamedFlowFragment.h:

2014-09-30  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Pass the valid set of tracks to grow beyond growth limits
        https://bugs.webkit.org/show_bug.cgi?id=137253

        Reviewed by Darin Adler.

        Section 10.4 of the specs describe how to resolve content based
        track sizing functions. Among others it describes the "distribute
        extra space" algorithm. The 3rd bullet of that algorithm specifies
        how to distribute (and also the target tracks) the extra space
        once all the tracks have reached their growth limits.

        Our implementation had 2 problems. First we were not passing a
        valid subset of tracks (instead we were always using all of
        them). Now we use a function that filters the right tracks to be
        the target of the extra space distribution depending on whether
        we're computing the min track function or the max track function.

        Secondly the algorithm that was distributing the extra space was
        not using that list of passed in tracks (it iterated over all of
        them). From now on it will use the set of tracks selected using
        the filter function described above.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        * rendering/RenderGrid.h:
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth):

2014-10-12  Mike West  <mkwst@chromium.org>

        Referrer Policy: Update <meta name="referrer"> values to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=137635

        Reviewed by Jochen Eisinger.

        The Referrer Policy specification ([Working Draft][WD], [Editor's
        draft[ED]) defines different keywords than we originally
        implemented. We should support them in the interests of clarity and
        interoperability with other browsers implementing the specification.

        [WD]: http://www.w3.org/TR/referrer-policy/#referrer-policy-delivery-meta
        [ED]: http://w3c.github.io/webappsec/specs/referrer-policy/#referrer-policy-delivery-meta

        This patch is a port of Blink's https://codereview.chromium.org/607433002/

        Tests: http/tests/security/referrer-policy-conflicting-policies.html
               http/tests/security/referrer-policy-https-no-referrer-when-downgrade.html
               http/tests/security/referrer-policy-https-no-referrer.html
               http/tests/security/referrer-policy-https-unsafe-url.html
               http/tests/security/referrer-policy-no-referrer-when-downgrade.html
               http/tests/security/referrer-policy-no-referrer.html

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

2014-10-12  Dhi Aurrahman  <diorahman@rockybars.com>

        Support activation behavior of link element
        https://bugs.webkit.org/show_bug.cgi?id=137597

        Reviewed by Benjamin Poulain.

        Support activation behavior of link elements as defined in [1],
        i.e. to follow the hyperlink created by the link element when it is fully active.

        [1] https://html.spec.whatwg.org/multipage/semantics.html#the-link-element

        Tests: fast/dom/html-link-element-activation-behavior-on-element-click.html
               fast/dom/html-link-element-activation-behavior-on-mouse-click.html
               fast/dom/html-link-element-activation-behavior-url-is-null.html

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::triggerActivationBehavior):
        * dom/MouseEvent.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::isLinkClick): Deleted.
        * html/HTMLAnchorElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::defaultEventHandler):
        (WebCore::HTMLLinkElement::handleClick):
        * html/HTMLLinkElement.h:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):

2014-10-11  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Enable WebP support.
        https://bugs.webkit.org/show_bug.cgi?id=136156

        Reviewed by Gyuyoung Kim.

        Add WebP library and inlcude path to WebCore path for WK2 Efl.
        No new tests since existing feature is just enabled for WK2 Efl.

        * PlatformEfl.cmake:

2014-10-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Split GMainLoopSource moving thread safe implementation to its own class GThreadSafeMainLoopSource
        https://bugs.webkit.org/show_bug.cgi?id=137485

        Reviewed by Sergio Villar Senin.

        Use GThreadSafeMainLoopSource for GStreamer sources, since they
        can be used from different threads. Also update GMutexLocker
        usages, since it's now a template.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockBufferMutex):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStart):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):
        (webKitWebSrcQueryWithParent):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):
        (webKitWebSrcSetMediaPlayer):
        (StreamingClient::createReadBuffer):
        (StreamingClient::handleResponseReceived):
        (StreamingClient::handleDataReceived):
        (StreamingClient::handleNotifyFinished):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Image subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137625

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Image subclasses.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::createImage):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::embeddedContentBox):
        * svg/graphics/SVGImage.h:

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=137622

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for RenderElement and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * dom/Node.cpp:
        (WebCore::Node::materializeRareData):
        * dom/Position.cpp:
        (WebCore::isNonTextLeafChild):
        (WebCore::searchAheadForBetterMatch):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didRecalcStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        * editing/htmlediting.cpp:
        (WebCore::isEmptyTableCell):
        * rendering/InlineIterator.h:
        (WebCore::bidiNextShared):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getFirstLetter):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::rendererRemovedFromTree):
        (WebCore::RenderCounter::rendererSubtreeAttached):
        (showCounterRendererTree):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::removeChildInternal):
        (WebCore::RenderElement::findNextLayer):
        (WebCore::RenderElement::layout):
        * rendering/RenderElement.h:
        (WebCore::RenderObject::isRenderLayerModelObject):
        (WebCore::RenderObject::isBoxModelObject):
        (WebCore::RenderObject::isRenderBlock):
        (WebCore::RenderObject::isRenderBlockFlow):
        (WebCore::RenderObject::isRenderReplaced):
        (WebCore::RenderObject::isRenderInline):
        (WebCore::RenderObject::style):
        (WebCore::RenderObject::firstLineStyle):
        (WebCore::ContainerNode::renderer):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::clearNeedsLayout):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::collectAnnotatedRegions):
        * rendering/RenderVTTCue.cpp:
        (WebCore::RenderVTTCue::initializeLayoutParameters):
        (WebCore::RenderVTTCue::repositionGenericCue):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::addChild):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::rebuildTokenContent):
        (WebCore::RenderMathMLOperator::updateStyle):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):
        (WebCore::RenderMathMLRoot::layout):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::addChild):
        (WebCore::RenderMathMLToken::updateTokenContent):
        (WebCore::RenderMathMLToken::updateStyle):
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layout):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::findPreviousAndNextAttributes):
        (WebCore::RenderSVGText::subtreeStyleDidChange):
        (WebCore::updateFontInAllDescendants):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForForSubtree):
        (WebCore::SVGTextLayoutAttributesBuilder::rebuildMetricsForTextRenderer):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        (WebCore::SVGTextMetricsBuilder::walkTree):
        (WebCore::SVGTextMetricsBuilder::buildMetricsAndLayoutAttributes):
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::createGlyphToPathTranslator):
        (WebCore::SVGTextRunRenderingContext::drawSVGGlyphs):
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):

2014-10-10  Benjamin Poulain  <benjamin@webkit.org>

        Update :nth-child(An+B of selector-list) to the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=137593

        Reviewed by Andreas Kling.

        Following my implementation feedback on :nth-child(An+B of selector-list),
        the CSS WG decided to change the definition such that the current element on which
        the selector is matched must also match the selector list in :nth-child().

        This patch updates the implementation accordingly.

        Test: fast/selectors/nth-child-of-chained-3.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::matchSelectorList):
        * css/SelectorChecker.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatchesSelectorList):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Drop RENDER_OBJECT_TYPE_CASTS() for a lot of RenderObject subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137594

        Reviewed by Darin Adler.

        Drop RENDER_OBJECT_TYPE_CASTS() for RenderObject subclasses that no
        longer needed it or that required very few changes to do so. This will
        make sure developers start using is<>() / downcast<>() for those
        classes.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didAttachRenderers):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshot):
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult):
        (WebCore::SearchInputType::didSetValueByUserEdit):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::renderer):
        (WebCore::TextControlInnerTextElement::customStyleForRenderer):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        * page/FrameView.cpp:
        (WebCore::FrameView::isInChildFrameWithFrameFlattening):
        * rendering/RenderButton.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsBox):
        * rendering/RenderMedia.h:
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::attachQuote):
        * rendering/RenderQuote.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/RenderVideo.cpp:
        (WebCore::rendererPlaceholder):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::updateCounterIfNeeded):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::repaintRectForRendererInLocalCoordinatesExcludingSVGShadow):
        (WebCore::SVGRenderSupport::checkForSVGRepaintDuringLayout):
        (WebCore::updateObjectBoundingBox):
        (WebCore::layoutSizeOfNearestViewportChanged):
        (WebCore::SVGRenderSupport::transformToRootChanged):
        (WebCore::SVGRenderSupport::rendererHasSVGShadow):
        (WebCore::SVGRenderSupport::setRendererHasSVGShadow):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::getBBox):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentViewportSize):

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for GraphicsLayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137595

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for GraphicsLayer subclasses and clean up the
        surrounding code.

        No new tests, no behavior change.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::Highlight):
        (WebCore::ServicesOverlayController::Highlight::fadeIn):
        (WebCore::ServicesOverlayController::Highlight::fadeOut):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::removeFromParent):
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        (WebCore::GraphicsLayerCA::replicatedLayerRoot):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::propagateLayerChangeToReplicas):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):
        * platform/graphics/ca/GraphicsLayerCA.h:

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=137587

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderBoxModelObject and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderBoxModelObject):
        (WebCore::isInlineWithContinuation):
        (WebCore::firstChildConsideringContinuation):
        (WebCore::lastChildHasContinuation):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::msaaRoleForRenderer):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * dom/Node.cpp:
        (WebCore::Node::renderBox):
        (WebCore::Node::renderBoxModelObject):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        * page/PrintContext.cpp:
        (WebCore::enclosingBoxModelObject):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::overflowScrollPositionChangedForNode):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::boxModelObject):
        * rendering/InlineElementBox.h:
        (WebCore::InlineElementBox::renderer):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::renderer):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::baselinePosition):
        (WebCore::InlineTextBox::lineHeight):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToContinuation):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::offsetParent):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::base):

2014-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Remove CrossThreadTask
        https://bugs.webkit.org/show_bug.cgi?id=137570

        Reviewed by Darin Adler.

        Replace uses of CrossThreadTask with C++11 lambdas. The initializations
        of cross-thread copies are rather verbose at the moment, but should look
        better once we can switch to using C++14 init capture for lambdas.

        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CrossThreadTask.h: Removed.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::~MainThreadBridge): Deleted.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Deleted.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadDestroy): Deleted.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCancel): Deleted.
        (WebCore::workerGlobalScopeDidSendData): Deleted.
        (WebCore::workerGlobalScopeDidReceiveResponse): Deleted.
        (WebCore::workerGlobalScopeDidReceiveData): Deleted.
        (WebCore::workerGlobalScopeDidFinishLoading): Deleted.
        (WebCore::workerGlobalScopeDidFail): Deleted.
        (WebCore::workerGlobalScopeDidFailAccessControlCheck): Deleted.
        (WebCore::workerGlobalScopeDidFailRedirectCheck): Deleted.
        * loader/WorkerThreadableLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeRequestFromCache):
        (WebCore::MemoryCache::removeRequestFromSessionCaches):
        (WebCore::MemoryCache::removeRequestFromCacheImpl): Deleted.
        (WebCore::MemoryCache::removeRequestFromSessionCachesImpl): Deleted.
        (WebCore::MemoryCache::crossThreadRemoveRequestFromCache): Deleted.
        (WebCore::MemoryCache::crossThreadRemoveRequestFromSessionCaches): Deleted.
        * loader/cache/MemoryCache.h:

2014-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Avoid defaulting to capture-by-value for C++11 lambdas in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137565

        Reviewed by Darin Adler.

        C++11 lambas should avoid defaulting to capturing used variables by value as that
        can lead to unintended captures that, in worst cases, result in lambdas that are
        not self-contained and end up operating on dangling pointers.

        Explicitly stating the variables that are to be copied by value can also serve as
        a checklist of variables that are actually intented for use in the lambda body. 

        * Modules/quota/StorageErrorCallback.cpp:
        (WebCore::StorageErrorCallback::CallbackTask::CallbackTask):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::~Database):
        (WebCore::Database::runTransaction):
        (WebCore::Database::scheduleTransactionCallback):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * Modules/webdatabase/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::DeleteCallbackDataTask):
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::AddConsoleMessageTask::AddConsoleMessageTask):
        * dom/StringCallback.cpp:
        (WebCore::StringCallback::scheduleCallback):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::abort):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::enqueueEvent):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        (WebCore::WorkerMessagingProxy::confirmMessageFromWorkerObject):
        (WebCore::WorkerMessagingProxy::reportPendingActivity):

2014-10-10  Zan Dobersek  <zdobersek@igalia.com>

        Remove MainThreadTask
        https://bugs.webkit.org/show_bug.cgi?id=137563

        Reviewed by Darin Adler.

        Replace the remaining uses of MainThreadTask with C++11 lambdas.
        Remove the MainThreadTask header from the build.

        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/MainThreadTask.h: Removed.
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownloadManager::downloadThread):
        (WebCore::CurlDownload::didReceiveHeader):
        (WebCore::CurlDownload::didReceiveData):

2014-10-10  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Changing the mapping of ARIA rowheader and columnheader into respective ATK roles.
        https://bugs.webkit.org/show_bug.cgi?id=136150

        Reviewed by Chris Fleizach.

        Expose ColumnHeaderRole and RowHeaderRole objects into ATK.

        Test: accessibility/table-roles-hierarchy.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Platforms based on ATK: added distinction of roles for the <th> elements.
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::determineAccessibilityRole):
        Platforms based on ATK: the return value is determined in the ancestor.
        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        In addition to CellRole also included ColumnHeaderRole and RowHeaderRole.
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        Changing the mapping of ARIA rowheader and columnheader into respective ATK roles.
        (getInterfaceMaskFromObject):
        In addition to CellRole also included ColumnHeaderRole and RowHeaderRole.

2014-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        MediaPlayer should use a reference for the MediaPlayerClient
        https://bugs.webkit.org/show_bug.cgi?id=137552

        Reviewed by Darin Adler.

        The MediaPlayer client is set on constructor by HTMLMediaElement
        and cleared on HTMLMediaElement destructor that also frees the
        MediaPlayer object. Since the client will never be null while the
        MediaPlayer player is alive, we can use a reference and remove all
        the unneeded null checks. The member has also been renamed to m_client.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::~MediaPlayer):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        (WebCore::MediaPlayer::inMediaDocument):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::networkStateChanged):
        (WebCore::MediaPlayer::readyStateChanged):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::muteChanged):
        (WebCore::MediaPlayer::timeChanged):
        (WebCore::MediaPlayer::sizeChanged):
        (WebCore::MediaPlayer::repaint):
        (WebCore::MediaPlayer::durationChanged):
        (WebCore::MediaPlayer::rateChanged):
        (WebCore::MediaPlayer::playbackStateChanged):
        (WebCore::MediaPlayer::firstVideoFrameAvailable):
        (WebCore::MediaPlayer::characteristicChanged):
        (WebCore::MediaPlayer::keyAdded):
        (WebCore::MediaPlayer::keyError):
        (WebCore::MediaPlayer::keyMessage):
        (WebCore::MediaPlayer::keyNeeded):
        (WebCore::MediaPlayer::referrer):
        (WebCore::MediaPlayer::userAgent):
        (WebCore::MediaPlayer::graphicsDeviceAdapter):
        (WebCore::MediaPlayer::cachedResourceLoader):
        (WebCore::MediaPlayer::addAudioTrack):
        (WebCore::MediaPlayer::removeAudioTrack):
        (WebCore::MediaPlayer::addTextTrack):
        (WebCore::MediaPlayer::removeTextTrack):
        (WebCore::MediaPlayer::addVideoTrack):
        (WebCore::MediaPlayer::removeVideoTrack):
        (WebCore::MediaPlayer::outOfBandTrackSources):
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        (WebCore::MediaPlayer::handlePlaybackCommand):
        (WebCore::MediaPlayer::sourceApplicationIdentifier):
        (WebCore::MediaPlayer::doesHaveAttribute):
        (WebCore::MediaPlayer::mediaPlayerNetworkInterfaceName):
        (WebCore::MediaPlayer::getRawCookies):
        (WebCore::MediaPlayer::setWirelessVideoPlaybackDisabled): Deleted.
        (WebCore::MediaPlayer::audioSourceProvider): Deleted.
        (WebCore::MediaPlayer::engineDescription): Deleted.
        (WebCore::MediaPlayer::notifyTrackModeChanged): Deleted.
        (WebCore::MediaPlayer::totalFrameDelay): Deleted.
        (WebCore::MediaPlayerFactorySupport::callRegisterMediaEngine): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::create):
        (WebCore::MediaPlayer::platformVolumeConfigurationRequired):
        (WebCore::MediaPlayer::client):
        (WebCore::MediaPlayer::mediaPlayerClient): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::prepareForRendering):
        (WebCore::MediaPlayerPrivateQTKit::sawUnsupportedTracks):

2014-10-09  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Make RenderFlowThread::regionAtBlockOffset const
        https://bugs.webkit.org/show_bug.cgi?id=137555

        Reviewed by David Hyatt.

        Make the method const and remove autoGenerateRegionsToBlockOffset method as it
        is not used by region-based multicolumn code. Also removed the RegionAutoGenerationPolicy
        parameter in the process and the call sites. Make const some of the methods that call
        regionAtBlockOffset.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent):
        (WebCore::RenderFlowThread::pageLogicalTopForOffset):
        (WebCore::RenderFlowThread::pageLogicalWidthForOffset):
        (WebCore::RenderFlowThread::pageLogicalHeightForOffset):
        (WebCore::RenderFlowThread::pageRemainingLogicalHeightForOffset):
        (WebCore::RenderFlowThread::mapFromFlowToRegion):
        (WebCore::RenderFlowThread::computedRegionRangeForBox):
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::regionAtBlockOffset):
        (WebCore::RenderMultiColumnFlowThread::mapFromFlowToRegion):
        (WebCore::RenderMultiColumnFlowThread::physicalTranslationFromFlowToRegion):
        (WebCore::RenderMultiColumnFlowThread::autoGenerateRegionsToBlockOffset): Deleted.
        * rendering/RenderMultiColumnFlowThread.h:

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for FontData subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137591

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for FontData subclasses.

        No new tests, no behavior change.

        * platform/graphics/FontData.h:
        * platform/graphics/FontGlyphs.cpp:
        (WebCore::FontGlyphs::releaseFontData):
        (WebCore::FontGlyphs::determinePitch):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/SegmentedFontData.h:
        (isType):
        * platform/graphics/SimpleFontData.h:
        (isType):

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

        Revert part of r174543 that broke grid layout tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackBreadth):

2014-10-09  Dean Jackson  <dino@apple.com>

        Computed style for clip is wrong with respect to auto
        https://bugs.webkit.org/show_bug.cgi?id=137567

        Reviewed by Simon Fraser.

        Make sure that the computed style of clip returns the
        correct value when the input is "auto", or in this
        case "rect(auto, auto, auto, auto)". Before this
        patch it returned "rect(0px, 0px, 0px, 0px)" which
        was completely wrong.

        Test: fast/css/computed-clip-with-auto-rect.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::autoOrZoomAdjustedValue): Helper function to make the correct keyword or length.
        (WebCore::specifiedValueForGridTrackBreadth): It can use the helper too.
        (WebCore::ComputedStyleExtractor::propertyValue): If the
        top/right/bottom/left is "auto", add that identifier
        to the output rectangle.

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Use RenderObject::firstChildSlow() / lastChildSlow() less
        https://bugs.webkit.org/show_bug.cgi?id=137573

        Reviewed by Andreas Kling.

        Use RenderObject::firstChildSlow() / lastChildSlow() less by using
        tighter typing at call sites whenever possible to be able to call the
        faster RenderElement::firstChild() / lastChild() instead.

        This patch also uses more references instead of pointers when possible.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildIsInlineContinuation):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::lastChildHasContinuation):
        (WebCore::AccessibilityRenderObject::nextSibling):
        * page/FrameView.cpp:
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold):
        (WebCore::FrameView::renderedCharactersExceed):
        * rendering/RenderElement.h:
        * rendering/RenderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        (WebCore::isRubyBeforeBlock):
        (WebCore::isRubyAfterBlock):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForForSubtree):
        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        (WebCore::SVGTextLayoutAttributesBuilder::buildCharacterDataMap):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::elementFromRenderer):
        * svg/SVGTextPositioningElement.h:

2014-10-09  Roger Fong  <roger_fong@apple.com>

        Build fix for Win EWS bots.

        * testing/Internals.idl: Move enum declaration to the top of the file.

2014-10-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderMathMLUnderOver adds spacing to the child operator indefinitely when resizing the window.
        https://bugs.webkit.org/show_bug.cgi?id=137330

        Reviewed by Darin Adler.

        The layout for the <mundercover> math object happens in two separate passes. The first pass runs
        the layout for the two children and then calculates the maximum child width.  It then sets the 
        stretch size for the math operator child.  And finally it runs the second layout pass by calling
        the base class layout() function. The base class function then runs the layout for the children
        rendering blocks.  In the operator child function computePreferredLogicalWidths(), the stretch 
        size is used to adjust the width (or the height) of the operator. Then it adds the leading and
        trailing spaces and the total will be the operator child width.

        When resizing or zooming the window, the render objects are just invalidated but marked as 'needs-
        Layout'.  The problem is happening because the stretch size of the math operator is not reset
        before running the layout.  The old logical width (or height) of the the math operator child which
        is equal to the stretch size plus the leading and trailing spaces for is compared with the glyph
        size if the old logical width ( or height) is larger, it is set to be the stretch size.  When it
        is used again because of invalidation, new leading and trailing spaces are included in the new
        logical width.  So with every zooming-in or out or window resizing, new leading and trailing 
        spaces are added to the logical width of the math operator child or the math <munderober> object.
        
        Ensure the stretch size of the math operator render object is reset before running its layout.
        Running the layout means either the page is just loaded or it's invalidated which means, no 
        layout stall data should be used.

        Test: mathml/opentype/munderover-window-resize.html

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::resetStretchSize):
        * rendering/mathml/RenderMathMLOperator.h:
        resetStretchSize() sets the stretch size to its original value when the class is created.
        * rendering/mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layout):
        Make sure the operator stretch size is reset before calling its layout. Also make sure the new 
        maximum stretch size to the operator objects that were invalid and needsLayout.

2014-10-09  Dean Jackson  <dino@apple.com>

        Remove ENABLE_CSS3_CONDITIONAL_RULES
        https://bugs.webkit.org/show_bug.cgi?id=137571

        Reviewed by Simon Fraser.

        We have good enough support for @supports that
        it should be a consistent part of the platform. Remove
        the compile-time guard.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSupportsCondition):
        (WebCore::CSSParser::detectAtToken):
        (WebCore::CSSParser::detectSupportsToken):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSSupportsRule.cpp:
        * css/CSSSupportsRule.h:
        * css/CSSSupportsRule.idl:
        * css/DOMWindowCSS.cpp:
        * css/DOMWindowCSS.h:
        * css/DOMWindowCSS.idl:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        * css/StyleRule.h:
        (WebCore::toStyleRuleSupports):
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::css):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2014-10-09  Benjamin Poulain  <benjamin@webkit.org>

        Add the baseline implementation of :not(selectorList)
        https://bugs.webkit.org/show_bug.cgi?id=137548

        Reviewed by Andreas Kling.

        This patch extend the pseudo class :not() to support the new definition
        in CSS Selectors level 4.

        Instead of supporting a single simple selector, :not() now support
        an arbitrary selector list, excepted pseudo elements.

        One side effect of this change is :visited and :link are no longer supported
        inside :not(). The reason has to do with complexity and performance.
        Since :not() and :matches() can have arbitrary selector list, keeping track of
        :visited and :link can have many combination superposing, some valid, some invalid.

        Supporting :visited and :link should be possible by chaning the way we handle
        them for style resolution, but given the limited use cases for such features
        I'll wait to see if there is any interest before changing everything.

        This patch only covers SelectorChecker to keep things simple. The CSS JIT
        will come later.

        Tests: fast/css/not-basics.html
               fast/css/parsing-css-not-1.html
               fast/css/parsing-css-not-2.html
               fast/css/parsing-css-not-3.html
               fast/css/parsing-css-not-4.html
               fast/css/parsing-css-not-5.html
               fast/css/parsing-css-not-6.html
               fast/css/parsing-css-not-7.html
               fast/css/parsing-css-not-8.html
               fast/css/parsing-css-not-9.html
               fast/css/parsing-css-nth-child-of-4.html
               fast/selectors/not-basics.html
               fast/selectors/not-nested.html
               fast/selectors/not-selector-list.html

        * css/CSSGrammar.y.in:
        Rename selectorListDoesNotMatchAnyPseudoElement() to selectorListDoesNotMatchAnyPseudoElement()
        since both :not() and :nth-child(An+B of selectorList) have the same requirements at the moment. 

        * css/CSSParserValues.cpp:
        (WebCore::selectorListMatchesPseudoElement):
        The patch adding :matches() introduced the possibility of putting pseudo element
        arbitrary deep in a sequence of nested :matches(). Since this case is forbidded
        by :not() and :nth-child(An+B of selectorList), selectorListMatchesPseudoElement()
        now becomes recursive to find those pseudo elements.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        CSSOM for the extended :not().

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        (WebCore::SelectorChecker::determineLinkMatchType):
        * cssjit/SelectorCompiler.cpp:

        (WebCore::SelectorCompiler::addPseudoClassType):
        Disable the new capabilities from the JIT for now.

2014-10-09  Tim Horton  <timothy_horton@apple.com>

        Move ServicesOverlayController to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137416
        <rdar://problem/18546283>

        Reviewed by Anders Carlsson.

        Move ServicesOverlayController from WebKit2 to WebCore, as it can be used by both Legacy WebKit and WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):
        Notify ServicesOverlayController of changes via Page instead of EditorClient.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::handleTelephoneNumberClick):
        (WebCore::ChromeClient::handleSelectionServiceClick):
        (WebCore::ChromeClient::hasRelevantSelectionServices):
        Add ChromeClient functions for services actions.

        * page/EditorClient.h:
        (WebCore::EditorClient::selectedTelephoneNumberRangesChanged): Deleted.
        (WebCore::EditorClient::selectionRectsDidChange): Deleted.
        Remove EditorClient functions for notifying ServicesOverlayController of changes,
        because it lives in WebCore proper now.

        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::servicesOverlayController):
        Keep a ServicesOverlayController on Page.

        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::mouseEvent):
        Use windowToContents instead of rootViewToContents; events come in in window coordinates.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::updateSettingsForLayer):
        Get Settings from MainFrame, not Page.

        * page/Settings.in:
        Add servicesControlsEnabled setting.

        * page/mac/ServicesOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/ServicesOverlayController.h.
        * page/mac/ServicesOverlayController.mm: Renamed from Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm.
        Moved from WebKit2. Mostly mechanical changes, plus:
            - Use windowToContents instead of rootViewToContents; events come in in window coordinates.
            - Cut off rebuild* if serviceControlsEnabled setting is false
            - Don't create the overlay if serviceControlsEnabled setting is false
            - Send click events via ChromeClient.
            - Tie our lifetime to MainFrame instead of Page, and get lots of things from MainFrame instead.

        * platform/Logging.h:
        Add Services logging channel (moved from WebKit2).

2014-10-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix: Revert r174378

        Roll back this change, as it didn't fix the EWS builders, and has only
        served to make Windows builds take forever.

        * WebCore.vcxproj/WebCoreGenerated.make: Don't delete all generated content
        every time we build.

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed GTK build fix after r174504.

        Missing header include.

        * rendering/svg/SVGTextQuery.cpp:

2014-10-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove second-to-last client of WebFontCache
        https://bugs.webkit.org/show_bug.cgi?id=137550

        Reviewed by Darin Adler.

        No new tests because no behavior change.

        * WebCore.exp.in:
        * platform/graphics/FontCache.h: Allow migration of client to getCachedFontData()

2014-10-09  Chris Dumez  <cdumez@apple.com>

        [Mac] Spending too much time mapping desired font families to available ones
        https://bugs.webkit.org/show_bug.cgi?id=137539

        Reviewed by Darin Adler.

        While profiling the load of weather.com, I noticed that we are spending
        quite a bit of time trying to map the font family requested to a font
        that is available on the system. The process involves:
        1. Doing a linear search of all the installed font families and do a
           case-insensitive string comparison for each of them until we find a
           match,
        2. Then, if we don't find a match, do another linear search of the
           fonts' postscript names this time and do again a case-insensitive
           string comparison for each of them.

        This process is costly and the fonts requested by weather.com are not
        available, causing us to do 2 linear searches and a lot of string
        comparisons (accounting for ~2% of the WebProcess CPU time for the page
        load). As a result, we end up spending ~90ms in
        internalFontWithFamily() when loading weather.com.

        This patch introduces a cache for the mapping between desired font
        families and available font families. This cuts the time spent in
        internalFontWithFamily() in half (~45ms). The cache gets invalidated
        when fonts are installed / uninstalled on the system so we don't break
        that scenario. The cache is also limited in size to avoid using too
        much memory.

        No new tests, but manual testing making sure the cache gets invalidated
        when installing a font on the system.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::invalidateFontCache):
        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        (desiredFamilyToAvailableFamilyDictionary):
        (rememberDesiredFamilyToAvailableFamilyMapping):
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):
        (+[WebFontCache invalidate]):

2014-10-09  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Decrement the font loading count before notifying callbacks
        https://bugs.webkit.org/show_bug.cgi?id=137401

        Reviewed by Alexey Proskuryakov.

        In the callbacks, it should appear that font load has completed. This is
        accessed through loading(), which relies on the current number of
        fonts loading via JS and CSS.

        Unskipping the failing test http/tests/webfont/fontloader-loading-attribute.html
        test which tests this.

        * css/FontLoader.cpp:
        (WebCore::LoadFontCallback::notifyLoaded):

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Unreviewed Windows build fix after r174506.

        We no longer needed to dereference as it is a reference instead of a
        pointer now.

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Widget subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137549

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Widget subclasses and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendAccessibilityObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::documentFrameView):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObjectFromPluginViewBase):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::appendFormData):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::canProcessDrag):
        (WebCore::HTMLPlugInElement::isKeyboardFocusable):
        (WebCore::HTMLPlugInElement::isUserObservable):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::checkSizeChangeForSnapshotting):
        (WebCore::HTMLPlugInImageElement::subframeLoaderDidCreatePlugIn):
        * html/HTMLPlugInImageElement.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::subframeForTargetNode):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::frameForWidget):
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCustomScrollbars):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        (WebCore::FrameView::removeChild):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::pluginViews):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::root):
        Uninline as root() because Widget::root() returns a FrameView now and
        it is impossible to include FrameView.h in Scrollbar.h without causing
        a cycle.

        * platform/Scrollbar.h:
        * platform/Widget.cpp:
        (WebCore::Widget::root):
        Use tighter typing and return a FrameView instead of a ScrollView.

        (WebCore::Widget::removeFromParent):
        * platform/Widget.h:
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::setCursor):
        * platform/gtk/PlatformScreenGtk.cpp:
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setCursor):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayFromWidget):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setCursor):
        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):
        * plugins/PluginViewBase.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintIntoTransformedContext):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::snapshot):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
        (WebCore::RenderEmbeddedObject::nodeAtPoint):
        (WebCore::RenderEmbeddedObject::scroll):
        * rendering/RenderFrameBase.h:
        (WebCore::RenderFrameBase::childView):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::layerWillBeDestroyed):
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):
        (WebCore::RenderWidget::paintContents):
        (WebCore::RenderWidget::setOverlapTestResult):
        (WebCore::RenderWidget::updateWidgetPosition):
        (WebCore::RenderWidget::nodeAtPoint):
        (WebCore::RenderWidget::embeddedContentBox):

2014-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Layering violation: MediaPlayer should not reference/use FrameView
        https://bugs.webkit.org/show_bug.cgi?id=21562

        Reviewed by Darin Adler.

        Remove FrameView dependency from MediaPlayer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerIsInMediaDocument): Check if
        the element document is a media document.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Remove m_frameView initialization.
        (WebCore::MediaPlayer::inMediaDocument): Use the MediaPlayerClient
        to check if the media player is in a media document.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerIsInMediaDocument):
        (WebCore::MediaPlayer::setFrameView): Deleted.
        (WebCore::MediaPlayer::frameView): Deleted.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode):
        Do not check if the media player has a frame view, checking whether it's visible
        is enough.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        Remove unneeded header include.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: Ditto.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Ditto.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::~RenderVideo): Do not call MediaPlayer::setFrameView().
        (WebCore::RenderVideo::updatePlayer): Ditto.

2014-10-09  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=137545

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderBlockFlow and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * dom/Element.cpp:
        (WebCore::Element::renderNamedFlowFragment):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForElementInfo):
        * rendering/EllipsisBox.h:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::rebuildFloatingObjectSetFromIntrudingFloats):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::marginValuesForChild):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::RenderBlockFlow::mustDiscardMarginBeforeForChild):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfterForChild):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::getHeightForLineCount):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderElement::isRenderNamedFlowFragmentContainer):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::evacuateAndDestroy):
        (WebCore::RenderMultiColumnFlowThread::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlowThread::flowThreadDescendantInserted):
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::columnGap):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::fragmentContainer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderObject::resetTextAutosizing):
        (WebCore::RenderObject::showLineTreeForThis):
        (WebCore::RenderObject::showRenderSubTreeAndMark):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):
        (WebCore::RenderText::ensureLineBoxes):
        (WebCore::RenderText::simpleLineLayout):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::blockFlow):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        (WebCore::SimpleLineLayout::computeTextFirstRunLocation):
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects):
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::flowBoxForRenderer):

2014-10-09  Philip Chimento  <philip.chimento@gmail.com>

        [GTK] Netscape plugin API symbol used outside feature guards
        https://bugs.webkit.org/show_bug.cgi?id=137385

        Reviewed by Philippe Normand.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::unload): Add guards for Netscape Plugin
        API around symbol, so that it compiles OK when the API is not
        available.

2014-10-08  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions]Remove unused parameter in adjustRegionBoundsFromFlowThreadPortionRect
        https://bugs.webkit.org/show_bug.cgi?id=137518

        Reviewed by Andrei Bucur.

        This method is used only by region code in accelerated compositing.
        The first parameter for the method was introduced with the intent to be used for multicolumn,
        but without being actually used in multicolumn code. Also make the method const.
        No new tests as no change in functionality.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderRegion.h:

2014-10-08  Andreas Kling  <akling@apple.com>

        [Mac] Show repaint counters in tile coverage map.
        <https://webkit.org/b/137544>

        Reviewed by Simon Fraser.

        Add repaint counters to the tile layers in the "tiled scrolling
        indicator" display. This will be helpful for diagnosing issues with
        excessive tile repaints outside the visible viewport.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::setNeedsDisplayInRect):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::drawTileMapContents):

2014-10-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed build fix after r174480. Broke iOS build.

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

2014-10-08  Myles C. Maxfield  <litherum@gmail.com>

        Inline ruby does not get justified correctly
        https://bugs.webkit.org/show_bug.cgi?id=137421

        Reviewed by Dave Hyatt.

        We justify text in two passes: one counts expansion opportunities within a line,
        and the other doles out widths and expansion amounts to constituent inline boxes.
        This patch simply modifies both passes to descend into ruby bases. Once it has
        done so, we then re-layout the ruby run with the newly found width.

        Tests: fast/ruby/ruby-justification-hittest.html
               fast/ruby/ruby-justification.html

        * rendering/InlineBox.h:
        (WebCore::InlineBox::setExpansion): updateRubyForJustifiedText() has to set the
        expansion for an inline box, so make setExpansion() public.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateRubyForJustifiedText): Given values that have already been
        computed in computeInlineDirectionPositionsForSegment(), adjust the widths and
        expansion values for all the various pieces of ruby.
        (WebCore::computeExpansionForJustifiedText): Call updateRubyForJustifiedText() if
        necessary.
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment): When
        counting expansion opportunities in a line, include ruby bases.
        * rendering/RenderRubyRun.h: Fix grammar in comment.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::stringView): Give default arguments to function.
        * rendering/RenderText.h: Ditto.

2014-10-08  Dean Jackson  <dino@apple.com>

        PopupMenus should indicate if they are using a custom rendering
        https://bugs.webkit.org/show_bug.cgi?id=137543
        <rdar://problem/18544212>

        Reviewed by Beth Dakin.

        On Yosemite there is an animation as a popup menu closes. We can't use
        this when there is a custom rendering, since the animation doesn't match
        the final result. Implement this by hooking into the existing code
        for hiding the arrows during animation - a WebKitSystemInterface update
        will implement the other side.

        * platform/mac/WebCoreSystemInterface.h: Rename parameter to be more clear.
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::menuStyle): We need to check that we are a native-looking
        button, not just something with appearance.

2014-10-08  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBlock objects
        https://bugs.webkit.org/show_bug.cgi?id=137512

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for RenderBlock objects and clean up the
        surrounding code.

        No new tests, no behavior change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::firstChildConsideringContinuation):
        (WebCore::lastChildConsideringContinuation):
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::startOfContinuations):
        (WebCore::endOfContinuations):
        (WebCore::childBeforeConsideringContinuations):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::nextContinuation):
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::setValue):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode containsOnlyInlineObjects]):
        (-[DOMNode isSelectableBlock]):
        (-[DOMHTMLElement structuralComplexityContribution]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::preferredHeight):
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::containingBlockForFixedPosition):
        (WebCore::containingBlockForAbsolutePosition):
        (WebCore::containingBlockForObjectInFlow):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::continuationBefore):
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        (WebCore::canMergeAnonymousBlock):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::collapseAnonymousBoxChild):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::blockElementContinuation):
        (WebCore::RenderBlock::blockSelectionGaps):
        (WebCore::RenderBlock::blockBeforeWithinSelectionRoot):
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::firstLineBlock):
        (WebCore::findFirstLetterBlock):
        (WebCore::RenderBlock::childBecameNonInline):
        (WebCore::RenderBlock::hasMarginBeforeQuirk):
        (WebCore::RenderBlock::hasMarginAfterQuirk):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::adjustBlockChildForPagination):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::markSiblingsWithFloatsForLayout):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::accumulateInFlowPositionOffsets):
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::inlineElementContinuation):
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::styleDidChange):
        (WebCore::nextContinuation):
        (WebCore::RenderInline::splitFlow):
        (WebCore::RenderInline::positionForPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        (WebCore::RenderListItem::insertOrMoveMarkerRendererIfNeeded):
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderObject.cpp:
        (WebCore::includeNonFixedHeight):
        (WebCore::RenderObject::checkBlockPositionedObjectsNeedLayout):
        (WebCore::RenderObject::containingBlock):
        (WebCore::RenderObject::handleDynamicFloatPositionChange):
        (WebCore::RenderObject::removeAnonymousWrappersForInlinesIfNecessary):
        (WebCore::RenderObject::getTextDecorationColors):
        * rendering/RenderRuby.cpp:
        (WebCore::rubyBeforeBlock):
        (WebCore::rubyAfterBlock):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):
        (WebCore::TextAutosizer::processContainer):
        (WebCore::TextAutosizer::measureDescendantTextWidth):
        (WebCore::TextAutosizer::findDeepestBlockContainingAllText):
        (WebCore::TextAutosizer::findFirstTextLeafNotInCluster):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):

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

        Unreviewed follow-up fix for r174460. Do not register for KVOs if the object does not respond to the requested property.

        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (-[CDMSessionMediaSourceAVFObjCObserver beginObserving:]):
        (-[CDMSessionMediaSourceAVFObjCObserver stopObserving:]):
        (-[CDMSessionMediaSourceAVFObjCObserver invalidate]):

2014-10-08  Dean Jackson  <dino@apple.com>

        Add deprecation warning for CSSKeyframesRule::appendRule
        https://bugs.webkit.org/show_bug.cgi?id=137532
        <rdar://problem/18585745>

        Reviewed by Brent Fulgham.

        In r173982 (webkit.org/b/57910) we added insertRule to match
        the spec. We should print a warning to the JS console suggesting
        users move to insertRule.

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::appendRule): Add a message to the system
        console.
        * css/WebKitCSSKeyframesRule.h:

2014-10-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Text drawn with an SVG font has no spaces when word-rounding hacks are enabled
        https://bugs.webkit.org/show_bug.cgi?id=137463

        Reviewed by Darin Adler.

        When rounding hacks are enabled, we use the "adjusted space width" instead of the
        regular space width. However, the SVG-font-specific implementation of the
        SimpleFontData constructor doesn't initialize this value, so it was getting set
        to an undefined value (which happened to be close to 0 in my tests).

        Test: svg/text/svg-font-word-rounding-hacks-spaces.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        (WebCore::CSSFontFaceSource::ensureFontData):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::getSVGFontById):
        * platform/graphics/SimpleFontData.h:
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::initializeFontData):

2014-10-08  Brent Fulgham  <bfulgham@apple.com>

        [Win] Resolve various static analyzer warnings in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=137526

        Reviewed by Dean Jackson.

        A series of small changes to resolve various issues found by the MSVC static analyzer.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::clear): Add assertion that it->value should never be null.
        * page/SessionIDHash.h:
        (WTF::HashTraits<WebCore::SessionID>::constructDeletedValue): Add explicit cast to avoid
        compiler warning.
        (WTF::HashTraits<WebCore::SessionID>::isDeletedValue): Ditto.
        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect): Resolve static analyzer warnings by initializing bits, and
        checking the return value of ::CreateDIBSection, which return nullptr on error.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printLayer): Use correct MSVC format specifier for size_t.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::getLinkedFonts): Handle possibility that a font link key does not exist.
        (WebCore::FontCache::systemFallbackForCharacters): Handle error case when a valid code page
        does not exist for a given character.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::containsCharacters): Handle error cases for mapping to the CP_ACP code page,
        and related failures when attempting to access the contents of a given code page.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::itemizeShapeAndPlace): Handle possible failure in the
        ScriptItemize API call.
        (WebCore::UniscribeController::shapeAndPlaceItem): Ditto for ScriptXtoCP API call.
        * platform/win/BString.h: Use consistent SAL annotations for our typedeof of BSTR as in
        the system header.
        * platform/win/COMPtr.h: Ditto for HRESULT.
        * platform/win/DragImageCGWin.cpp:
        (WebCore::allocImage): Handle case of failing CreateDIBSection API call.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show): Handle case of failing SystemParamtersInfo API call.
        (WebCore::PopupMenuWin::wndProc): Ditto.

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

        [EME][Mac] Update CDMSessionMediaSourceAVFObjC to match new API provided by AVStreamSession
        https://bugs.webkit.org/show_bug.cgi?id=137469

        Reviewed by Brent Fulgham.

        Update our forward declaration to match the API provided by AVStreamSession.
        AVStreamSession now takes an error: parameter in its initialiazer. It also provides the
        sessionIdentifier used by the CDM, which CDMSessionMediaSourceAVFObjC will use as the
        value of sessionId. Having this identifier allows us to fire a
        secure-proof-of-key-release message after the client calls MediaKeySession.close().
        Because this call will now generate messages, which have to be responded to in order
        to remove those proofs from storage, do not clear the CDMSession from MediaKeySession
        after calling close().

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::~MediaKeySession):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::setError): Deleted.
        (WebCore::MediaKeySession::sessionId): Deleted.
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        (WebCore::CDMSessionMediaSourceAVFObjC::setSessionId):
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.mm:
        (-[CDMSessionMediaSourceAVFObjCListener initWithParent:]):
        (-[CDMSessionMediaSourceAVFObjCObserver dealloc]):
        (-[CDMSessionMediaSourceAVFObjCObserver beginObserving:]):
        (-[CDMSessionMediaSourceAVFObjCObserver stopObserving:]):
        (-[CDMSessionMediaSourceAVFObjCObserver invalidate]):
        (-[CDMSessionMediaSourceAVFObjCListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::CDMSessionMediaSourceAVFObjC::CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::~CDMSessionMediaSourceAVFObjC):
        (WebCore::CDMSessionMediaSourceAVFObjC::releaseKeys):
        (WebCore::CDMSessionMediaSourceAVFObjC::update):
        (WebCore::CDMSessionMediaSourceAVFObjC::addSourceBuffer):
        (WebCore::CDMSessionMediaSourceAVFObjC::removeSourceBuffer):

2014-10-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r174456.

        I was comparing a signed int to an unsigned one.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::shouldAutoActivateFontIfNeeded):

2014-10-08  Christophe Dumez  <cdumez@apple.com>

        [Mac] We are spending a lot of time loading fonts when loading weather.com
        https://bugs.webkit.org/show_bug.cgi?id=137454

        Reviewed by Darin Adler.

        We are spending a lot of time loading fonts when loading weather.com:
        ~4.2% of WebProcess's cpu time in FontCache::getCachedFrontData().
        In particular, we are spending a lot of time doing font auto-activation
        because we don't have the Open Sans fonts installed and weather.com is
        trying to load those.

        Before this patch, we were doing font auto-activation ~250 times when
        loading weather.com, even though the site is loading ~10 distinct font
        families.

        This patch adds a cache of font families we already tried to
        auto-activate so that we don't try again. This results in ~10 font
        auto-activations when loading weather.com instead of 250. It reduces
        the amount of time spent in getCachedFrontData() to 62.6ms from 276ms
        (4.4x less) when loading weather.com.

        No new tests, no behavior change.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::shouldAutoActivateFontIfNeeded):
        (WebCore::FontCache::createFontPlatformData):
        * platform/mac/WebFontCache.h:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:weight:size:shouldAutoActivateIfNeeded:]):
        (+[WebFontCache fontWithFamily:traits:weight:size:]):
        (+[WebFontCache fontWithFamily:traits:size:]):

2014-10-08  Darin Adler  <darin@apple.com>

        ASSERTION FAILED: underlyingStringIsValid()
        https://bugs.webkit.org/show_bug.cgi?id=137502

        Reviewed by Anders Carlsson.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables): Take a StringView instead of a String.
        (WebCore::writeTextRun): Ditto.
        (WebCore::writeSimpleLine): Ditto.

        * rendering/RenderTreeAsText.h: Removed unneeded include, tweaked formatting,
        changed quoteAndEscapeNonPrintables to take a StringView.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow): Tighten code using a modern for loop.
        (WebCore::SimpleLineLayout::showLineLayoutForFlow): Update to work with a
        StringView result for SimpleLineLayout::RunResolver::Run::text.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::text): Changed return type to
        StringView to fix the lifetime bug and also to improve performance by getting
        rid of the need to allocate and destroy a StringImpl object.

2014-10-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Call requestScrollPositionUpdate() instead of delegatedScrollRequested() in ScrollView::scrollTo()
        https://bugs.webkit.org/show_bug.cgi?id=137478

        Reviewed by Benjamin Poulain.

        As r174380 did, ScrollView::scrollTo() also calls requestScrollPositionUpdate() instead of delegatedScrollRequested().
        delegatedScrollRequested() will be only called by requestScrollPositionUpdate(), and it needs to be merged by existing
        other scroll request function.

        No new tests, no behavior changes.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):

2014-10-08  Dean Jackson  <dino@apple.com>

        Safari 8 on OSX 10.10 does not run WebGL in Retina HiDPI mode.
        https://bugs.webkit.org/show_bug.cgi?id=134854
        <rdar://problem/18465263>

        Reviewed by Tim Horton.

        The NSOpenGLLayer has to have its contentScale property
        set accordingly when on a retina display. Do this by
        adding another value to the GraphicsContext3D creation
        attribute dictionary, representing the device pixel ratio.
        Then, when we come to draw into the layer, make sure
        we set our GL viewport to the correct value.

        This is currently untestable because:
        - we can't just read from the GL buffer as it is always correct
        - WebGL isn't working in reftests
        - a layer dump doesn't show the change since it was done in a CALayer subclass.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): Pass the devicePixelRatio into the attribute dictionary.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes): Add a devicePixelRatio attribute.
        * platform/graphics/mac/WebGLLayer.h: New property to save us looking up the attributes
        each frame.
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]): Store the devicePixelRatio, and set our
        contents scale appropriately.
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]): Draw into
        a correctly sized backbuffer.
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]): Generate an image of the correct size.

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

        Roll-over Changelogs.

        * ChangeLog-2014-10-07: Copied from Source/WebCore/ChangeLog.

== Rolled over to ChangeLog-2014-10-07 ==
