2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Stop using "in" keyword in IDL files
        https://bugs.webkit.org/show_bug.cgi?id=115418

        Reviewed by Kentaro Hara.

        Stop using "in" keyword in IDL files as this is no longer part of the
        Web IDL specification and it brings no additional information.

        For now, the IDL parser will still accept the "in" keyword for operation
        argument to not break anything. However, we should remove support for it
        later on.

        No new tests, no behavior change.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryEntrySync.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/EntrySync.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/FileWriterSync.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/quota/StorageErrorCallback.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/quota/StorageQuotaCallback.idl:
        * Modules/quota/StorageUsageCallback.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/TestCustomNamedGetter.idl:
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestMediaQueryListListener.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestOverloadedConstructors.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/CSSHostRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValueList.idl:
        * css/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/PropertyNodeList.idl:
        * dom/Range.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ShadowRoot.idl:
        * dom/StringCallback.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLPropertiesCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/MediaController.idl:
        * html/TimeRanges.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/DataView.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/VideoTrackList.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/PagePopupController.idl:
        * page/Performance.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResultList.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGAngle.idl:
        * svg/SVGColor.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStyledElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-04-30  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Use fewer intermediate surfaces when compositing filters
        https://bugs.webkit.org/show_bug.cgi?id=115224

        Reviewed by Allan Sandfeld Jensen.

        Until now, when rendering CSS filters, the filters were applied to the texture
        and then the resulting texture would be composited to the target surface with
        its transform/opacity.
        This requires at least two intermediate surface passes for every filtered layer.

        This patch makes it so that the last filter pass is applied together with the 
        resulting surface's opacity and transform, during composition.

        Tested by css3/filters tests, whichn now scroll/zoom a lot faster.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (TextureMapperGLData):
        (WebCore):
        (WebCore::optionsForFilterType):
        (WebCore::getPassesRequiredForFilter):
        (WebCore::gauss):
        (WebCore::gaussianKernel):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::isCustomFilter):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        (BitmapTextureGL):
        (FilterInfo):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        (WebCore::BitmapTextureGL::FilterInfo::FilterInfo):
        (WebCore::BitmapTextureGL::filterInfo):
        (WebCore::BitmapTextureGL::applyFilters):
            Modify TextureMapperGL to remember the last filter operation applied
            to a BitmapTexture and apply it when the texture is composited.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintIntoSurface):
            Simplify the call to applyFilters, since now TextureMapperGL is responsible
            for maintaining the content texture.


2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL] Enable scaled cursors
        https://bugs.webkit.org/show_bug.cgi?id=106242

        Reviewed by Gyuyoung Kim.

        Correctly copy WebCore::Cursor's m_imageScaleFactor
        member in CursorEfl.cpp when MOUSE_CURSOR_SCALE is
        enabled.

        No new tests, already covered by existing tests.

        * platform/efl/CursorEfl.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):

2013-04-30  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        CSSParser::parseFontFamily should allow the keyword "default" as part of a font name
        https://bugs.webkit.org/show_bug.cgi?id=107231

        Reviewed by Ryosuke Niwa.

        Make sure that using the keyword "default" as font family doesn't
        invalidate the whole declaration. It is also OK to use a font that
        has "default" as part of a composite name (i.e. "default foo").
        This matches the behavior of Firefox and IE.

        Test: fast/css/font-family-parse-keyword.html

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

2013-04-30  Zalan Bujtas  <zalan@apple.com>

        Animations fail to start on http://www.google.com/insidesearch/howsearchworks/thestory/
        https://bugs.webkit.org/show_bug.cgi?id=111244

        Reviewed by David Kilzer.
        
        Enable performance.now() as a minimal subset of Web Timing API. 
        It returns DOMHighResTimeStamp, a monotonically increasing value representing the 
        number of milliseconds from the start of the navigation of the current document.
        JS libraries use this API to check against the requestAnimationFrame() timestamp.

        Test: fast/dom/Window/web-timing-minimal-performance-now.html

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

2013-04-30  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r149338.
        http://trac.webkit.org/changeset/149338
        https://bugs.webkit.org/show_bug.cgi?id=115409

        Broke layout/perf/API tests on non-Mac:
        ThreadSpecific<RefPtr<RunLoop>> does not initialize RunLoop
        (Requested by rakuco on #webkit).

        * platform/RunLoop.cpp:
        (WebCore::RunLoop::current):
        * platform/RunLoop.h:
        (RunLoop):
        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::initializeMainRunLoop):
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::~RunLoop):
        * platform/gtk/RunLoopGtk.cpp:
        (WebCore::RunLoop::~RunLoop):
        * platform/win/RunLoopWin.cpp:
        (WebCore::RunLoop::~RunLoop):

2013-04-30  Alberto Garcia  <agarcia@igalia.com>

        ImageBufferData: add BlackBerry header
        https://bugs.webkit.org/show_bug.cgi?id=115408

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/ImageBufferData.h:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Replace "Optional" extended attribute by proper Web IDL "optional" keyword
        https://bugs.webkit.org/show_bug.cgi?id=115380

        Reviewed by Kentaro Hara.

        Replace [Optional] with standard WebIDL optional type prefix:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-optional-argument

        The default behavior now matches WebIDL: [Optional] => optional

        Two cases where WebKit has extended bindings behavior still
        require a non-standard IDL attribute:
        [Optional=DefaultIsNullString] => [Default=NullString] optional
        [Optional=DefaultIsUndefined] => [Default=Undefined] optional

        Based on corresponding Blink patch from Joshua Bell for compatibility.

        No new tests, no behavior change.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionLength):
        (GenerateFunctionParametersCheck):
        (GenerateArgumentsCountCheck):
        (GenerateParametersCheck):
        (GenerateConstructorDefinition):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/IDLParser.pm:
        (parseOptionalOrRequiredArgument):
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestTypedefs.idl: optional cannot be used in a typedef.
        * css/CSSHostRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValueList.idl:
        * css/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/MediaController.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackList.idl:
        * html/track/VideoTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Performance.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStyledElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * testing/Internals.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-04-30  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix the USE(3D_GRAPHICS) build with the standard OpenGL on Windows
        https://bugs.webkit.org/show_bug.cgi?id=114684

        Reviewed by Simon Hausmann.

        Currently USE(3D_GRAPHICS) is only supported with OpenGLES through ANGLE
        on Windows. Allow building with the stock opengl32.lib on Windows by adding
        missing glCompressedTex* entries in OpenGLShims.
        Those are used in Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp
        and will be substituted by the preprocessor.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:
        (_OpenGLFunctionTable):

2013-04-29  Alberto Garcia  <agarcia@igalia.com>

        Remove all remaining Skia code
        https://bugs.webkit.org/show_bug.cgi?id=115263

        Reviewed by Benjamin Poulain.

        * html/HTMLCanvasElement.cpp:
        (WebCore): Remove the MaxSkiaDim constant, which was a leftover
        from r149193.
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp: Removed.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp: Removed.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFaceSkia.cpp: Removed.

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):

2013-04-29  Simon Fraser  <simon.fraser@apple.com>

        Don't do CGContext flipping when painting subframes in WebKit1 on post-MountainLion OSes
        https://bugs.webkit.org/show_bug.cgi?id=115392
        <rdar://problem/13421519>

        Reviewed by Beth Dakin.

        Sync up with AppKit behavior changes that could cause subviews to be flipped when
        painted.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):

2013-04-29  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: need to identify the default voice per language
        https://bugs.webkit.org/show_bug.cgi?id=115366

        Reviewed by Tim Horton.

        Use a WKSystemInterface method to determine which voice per language is the default voice.

        When looking for a voice, there may not be a default at all, so we need to search until we
        find a default.

        * WebCore.exp.in:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-04-29  James Craig  <james@cookiecrook.com>

        Settings.in selectionIncludesAltImageText should default to true, due to update in HTML spec.
        https://bugs.webkit.org/show_bug.cgi?id=115283

        Reviewed by Chris Fleizach.

        Config change due to this spec update:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=21403
        http://html5.org/tools/web-apps-tracker?from=7854&to=7855

        Updated existing test coverage.

        * page/Settings.in:

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Make RunLoop ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=115384

        Reviewed by Sam Weinig.

        This is a step towards creating a shared base class that both RunLoop and WorkQueue will derive from.

        * platform/RunLoop.cpp:
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):
        (WebCore):
        * platform/RunLoop.h:
        (RunLoop):
        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::initializeMainRunLoop):
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):

2013-04-29  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Remove link and include directives for pthread.
        https://bugs.webkit.org/show_bug.cgi?id=115381

        Reviewed by Benjamin Poulain.

        Update various VS2005 and VS2010 property sheets to remove
        reference to the pthreads Include path and instructions to
        link to the pthreads library.

        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreDebug.vsprops:
        * WebCore.vcproj/WebCoreDebugAll.vsprops:
        * WebCore.vcproj/WebCoreProduction.vsprops:
        * WebCore.vcproj/WebCorePthreads.vsprops: Removed.
        * WebCore.vcproj/WebCoreRelease.vsprops:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/WebCoreDebug.props:
        * WebCore.vcxproj/WebCoreDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreProduction.props:
        * WebCore.vcxproj/WebCorePthreads.props: Removed.
        * WebCore.vcxproj/WebCoreRelease.props:
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props:

2013-04-29  Benjamin Poulain  <benjamin@webkit.org>

        Do not allocate Static Strings for Notification::permissionString
        https://bugs.webkit.org/show_bug.cgi?id=115316

        Reviewed by Geoffrey Garen.

        The code is not nearly hot enough to justify keeping this memory around.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::permission):
        (WebCore::Notification::permissionString):
        * Modules/notifications/Notification.h:
        (Notification):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Remove StorageTracker::originsLoaded
        https://bugs.webkit.org/show_bug.cgi?id=115382

        Reviewed by Sam Weinig.

        Remove m_finishedImportingOriginIdentifiers.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
        * storage/StorageTracker.h:
        (StorageTracker):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Get rid of StorageTracker::setClient
        https://bugs.webkit.org/show_bug.cgi?id=115376

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * storage/StorageTracker.cpp:
        * storage/StorageTracker.h:
        (StorageTracker):

2013-04-22  Jeffrey Pfau  <jpfau@apple.com>

        Change approach to third-party blocking for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=115004

        Reviewed by Maciej Stachowiak.

        Instead of outright blocking LocalStorage that's used in a third-party
        context, silently partition it based on the origin of the top context.
        These partitions are then discarded when the page group is unloaded.

        No new tests; modified existing tests to account for changes.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        (WebCore):
        (WebCore::PageGroup::transientLocalStorage):
        * page/PageGroup.h:
        (PageGroup):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccessStorage):

2013-04-29  Yi Shen  <max.hong.shen@gmail.com>

        HTML Editing: Insertion point jumps when using link detection
        https://bugs.webkit.org/show_bug.cgi?id=82198

        Reviewed by Ryosuke Niwa.

        Add links should be done only when typing a word separator (e.g. space or dot) which 
        breaks the text into two parts - the link and the rest of the text. Reflected in 
        code, we should only add link when the caret position is at the right end location of 
        TextChecking result. Otherwise, the text on the right of a word separator could be
        highlighted as a link and the insertion point jumps unexpectedly.

        Tests: update editing/inserting/typing-space-to-trigger-smart-link.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

2013-04-29  Beth Dakin  <bdakin@apple.com>

        Need a LayoutMilestone to fire when we have done our first paint after suppressing 
        incremental layout
        https://bugs.webkit.org/show_bug.cgi?id=115330
        -and corresponding-
        <rdar://problem/12722365>

        Reviewed by Simon Fraser.

        To meet the needs of all of our clients, we really need two milestones. One 
        indicating that a layout has happened after setVisualUpdatesAllowed(true), and 
        another indicating that painting has happened.

        If layout is needed when setVisualUpdatesAllowed(true) is called, we need to 
        update it so that we can guarantee the first paint is really happening at this 
        time. Also fire the DidFirstLayoutAfterSuppressedIncrementalRendering milestone, 
        and call add DidFirstPaintAfterSuppressedIncrementalRendering to the FrameView's 
        pending paint milestones. 
        up the painting milestone.
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):

        FrameView now stores m_milestonesPendingPaint. We'll send and clear them once we 
        have painted.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::addPaintPendingMilestones):
        (WebCore::FrameView::firePaintRelatedMilestones):
        * page/FrameView.h:
        (WebCore::FrameView::milestonesPendingPaint):

        Two new milestones.
        * page/LayoutMilestones.h:
        (WebCore):

        We don't need m_headerLayerAwaitingFirstFlush anymore since we can use FrameView's 
        pending paint milestones instead.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-04-29  David Hyatt  <hyatt@apple.com>

        [Mac] Links can't be hovered or clicked with overlay scrollbars hidden.
        https://bugs.webkit.org/show_bug.cgi?id=99379
        
        This is also <rdar://problem/10929565> Overlay scrollbars prevent hit-testing on
        content underneath them, even when hidden

        Reviewed by Beth Dakin.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Begin cleaning up StorageTracker
        https://bugs.webkit.org/show_bug.cgi?id=115373

        Reviewed by Andreas Kling.

        Rename Mutexes to use "Mutex" and not "Guard".
        Don't use static locals for ".localstorage" and "*.localstorage" strings.
        Put end iterator declarations together with begin declarations.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::setDatabaseDirectoryPath):
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::openTrackerDatabase):
        (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::willDeleteAllOrigins):
        (WebCore::StorageTracker::willDeleteOrigin):
        (WebCore::StorageTracker::canDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin):
        (WebCore::StorageTracker::setClient):
        (WebCore::StorageTracker::databasePathForOrigin):
        (WebCore::StorageTracker::diskUsageForOrigin):
        * storage/StorageTracker.h:
        (StorageTracker):

2013-04-29  Andreas Kling  <akling@apple.com>

        Don't check for @media rules affected by viewport changes in every layout.
        <http://webkit.org/b/115370>
        <rdar://problem/13765739>

        Reviewed by Antti Koivisto.

        Move the logic that checks if any @media rules are affected by a change in the viewport
        size to FrameView::setFrameRect(). This way it's no longer necessary to do the style
        recalc synchronously, which allows us to coalesce multiple updates in some cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::layout):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Remove the last StorageSyncManager function
        https://bugs.webkit.org/show_bug.cgi?id=115371

        Reviewed by Sam Weinig.

        Move the import scheduling to the StorageAreaSync constructor. Remove code to set m_importComplete to true
        since that could only happen if the StorageSyncManager's thread is null which doesn't make any sense.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::create):
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:
        (StorageSyncManager):

2013-04-29  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Remove unused method RenderMeter::valueRatio()
        https://bugs.webkit.org/show_bug.cgi?id=115266

        Reviewed by Darin Adler.

        The removed method is not used anywhere.
        No new tests are required.

        * rendering/RenderMeter.cpp:
        * rendering/RenderMeter.h:
        (RenderMeter):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Remove two more StorageSyncManager wrapper functions
        https://bugs.webkit.org/show_bug.cgi?id=115367

        Reviewed by Andreas Kling.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2013-04-29  Stephen Chenney  <schenney@chromium.org>

        SVGElement destructor can use invalid iterator
        https://bugs.webkit.org/show_bug.cgi?id=115361

        Reviewed by Philip Rogers.

        When an SVGElement object has rare data, its destructor gets a
        hash map iterator for the rare data, uses it to clear resources,
        then uses the iterator to delete the rare data. However, the resource
        cleanup can delete other SVG elements, thus modifying the hash map
        from which the iterator came and hence invalidating the iterator
        itself.

        The fix is to re-get the iterator before deleting the rare data.

        Test: svg/custom/svg-element-destructor-iteration-crash.html

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Get a new iterator after clearing rare data.

2013-04-29  Brady Eidson  <beidson@apple.com>

        REGRESSION: We see authentication challenge sheets for favicon requests.
        <rdar://problem/13753470> and https://bugs.webkit.org/show_bug.cgi?id=115288

        Reviewed by Alexey Proskuryakov.

        No new tests (Not in a tested config, might fix existing test).

        Rename ClientCrossOriginCredentialPolicy to ClientCredentialPolicy, make it be three options.
        and move it to ResourceHandleTypes where it belongs:
        * loader/ResourceLoaderOptions.h:
        * platform/network/ResourceHandleTypes.h:

        Expose the ClientCredentialPolicy the ResourceLoader was created with:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::clientCredentialPolicy):

        Rework the “should ask client” clause for the new values of ClientCredentialPolicy:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):

        Rework loadResourceSynchronously() to include a ClientCredentialPolicy argument:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously):
        * loader/LoaderStrategy.h:

        Never ask the client for credentials for icon loads:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):

        Update all other users of ClientCredentialPolicy to the appropriate new value,
        and update all users of loadResourceSynchronously to the new function signature:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::loadResourceSynchronously):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously):
        * loader/LoaderStrategy.h:
        (LoaderStrategy):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

        * WebCore.exp.in:

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Add a StorageSyncManager::dispatch helper function
        https://bugs.webkit.org/show_bug.cgi?id=115365

        Reviewed by Andreas Kling.

        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::dispatch):
        (WebCore):
        (WebCore::StorageSyncManager::close):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        * storage/StorageSyncManager.h:
        (StorageSyncManager):

2013-04-29  Anders Carlsson  <andersca@apple.com>

        Re-indent StorageSyncManager and remove SecurityOrigin forward declaration.

        Rubber-stamped by Andreas Kling.

        * storage/StorageSyncManager.h:

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Get rid of StorageTask
        https://bugs.webkit.org/show_bug.cgi?id=115313

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/StorageSyncManager.cpp:
        * storage/StorageTask.cpp: Removed.
        * storage/StorageTask.h: Removed.
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::threadEntryPoint):
        (WebCore::StorageThread::dispatch):
        (WebCore::StorageThread::terminate):
        * storage/StorageThread.h:
        (StorageThread):
        * storage/StorageTracker.cpp:

2013-04-29  Andreas Kling  <akling@apple.com>

        Add branch-prediction hint to FAST_RETURN_IF_NO_FRONTENDS.
        <http://webkit.org/b/115357>

        Reviewed by Anders Carlsson.

        Since this macro is used in some very hot code paths, give the compiler an extra hint
        to try and minimize the impact it has when the inspector is not active.

        * inspector/InspectorInstrumentation.h:

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add WTF_USE_IMLANG_FONT_LINK2
        https://bugs.webkit.org/show_bug.cgi?id=115198

        Reviewed by Andreas Kling.

        Add this new define to have a central place for switching
        the IMLangFontLinkType and adop all usages of the type.
        This makes the usage of the code easier on desktop pcs.

        * platform/graphics/FontCache.h:
        (WebCore):
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::currentFontContainsCharacter):
        (WebCore::createMLangFont):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2013-04-29  Noam Rosenthal  <noam@webkit.org>

        Get rid of "non-composited contents" in CoordinatedLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=110355

        Reviewed by Jocelyn Turcotte.

        When in force compositing mode, always assume that the main layer needs
        a backing store. Make setVisibleContentRectTrajectoryVector and accumulatedCoverRect
        recursive so that they don't rely on a specialized layer.

        No new testable behavior, changes to coverRect and trajectory vector only
        affect tiling latency in rare cases that are not trivial to test.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer:setVisibleContentRectTrajectoryVector):
            Make the trajectory vector recursive, though limited only to layers with
            translate/identity. This allows us to keep the trajectory vector while removing
            the non-composited contents specialization.

        (WebCore::CoordinatedGraphicsLayer::accumulatedCoverRect):
            Added accumulatedCoverRect, so that the coverRect calculations for the UI process
            are not bound to the non-composited contents layer.

        (WebCore::CoordinatedGraphicsLayer::findDescendantWithContentsRecursively):
            Instead of saving a reference to the non-composited contents layer, we assume that
            the first layer we found recursively which has contents is the one to be used for
            coverRect/trajectory calculations.

        (WebCore):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):
            Always create a layer for the non-composited contents when in forceCompositing mode.

2013-04-29  Dirk Schulze  <krit@webkit.org>

        Animate clip rect() between different Length types
        https://bugs.webkit.org/show_bug.cgi?id=115336

        Reviewed by Andreas Kling.

        At the moment the animation for the 'clip' property
        has an early return if the type of two Length values
        does not match. This patch removes this early return.

        Modified existing tests to cover the changes.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2013-04-29  Andreas Kling  <akling@apple.com>

        When updating geometry, send JavaScript resize before before layout/paint.
        <http://webkit.org/b/115199>
        <rdar://problem/13735535>

        Reviewed by Geoffrey Garen.

        Make the "resize" event synchronous and dispatch it before doing any automatic
        resize-induced layout. This avoids unnecessary work in cases where an event handler
        does something that dirties style.

        It also avoids a kind of JS-side FOUC that happens if we drop out to the runloop
        and paint before the resize event handler runs; for example, when viewing a popup
        on <http://lokeshdhakar.com/projects/lightbox2/> and resizing the window, the dark
        overlay sometimes resizes out of sync with the web view, since a paint may happen
        between automatic layout and the resize event.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchResizeEvent):
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchResizeEvent):

            Renamed sendResizeEvent() to dispatchResizeEvent() and made it dispatch the event
            synchronously instead of adding it to the DocumentEventQueue.

        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::setFrameRect):

            Dispatch the "resize" event right when the new frame rect is set.

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        Remove OS(WINCE) from (Render|Scrollbar)ThemeWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115348

        Reviewed by Andreas Kling.

        Compile DIBPixelData.cpp on Windows CE too, which allows us
        to get rid of a few #if OS(WINCE) in other code parts.

        * PlatformWinCE.cmake:
        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::setRGBABitmapAlpha):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::ScrollbarThemeWin::paintThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):

2013-04-29  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Fake-bold monospace fonts need to use non-fake-bold advances
        https://bugs.webkit.org/show_bug.cgi?id=115280

        Reviewed by George Staikos.

        BlackBerry PR 330864

        Tested by fast/css/css3-ch-unit.html

        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp:
        (WebCore::FontPlatformData::applyState):
        (WebCore::FontPlatformData::isFixedPitch):
        * platform/graphics/blackberry/ITypeUtils.h:
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2013-04-29  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Clean up code related with the children management stuff for clutter based AC
        https://bugs.webkit.org/show_bug.cgi?id=114260

        Reviewed by Gustavo Noronha Silva.

        Remove unused or usless code for children management stuff.

        No new tests since no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphics_layer_actor_class_init):
        (graphicsLayerActorAllocate):
        (graphicsLayerActorDraw):
        (graphicsLayerActorNew):
        (graphicsLayerActorSetSublayers):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::idleDestroy):
        (WebCore::GraphicsLayerClutter::ensureStructuralLayer):
        (WebCore::GraphicsLayerClutter::updateLayerDrawsContent):

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Guard cfHDropFormat() with USE(CF) instead of OS(WINCE)
        https://bugs.webkit.org/show_bug.cgi?id=115195

        Reviewed by Andreas Kling.

        USE(CF) is the correct guard, which works on desktop pcs too.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):

2013-04-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add missing scripts to EXTRA_DIST.
        * GNUmakefile.list.am: Add missing files to compilation.

2013-04-29  Noam Rosenthal  <noam@webkit.org>

        [Qt] fast/canvas/webgl/webgl-composite-modes.html broken after r148433.
        https://bugs.webkit.org/show_bug.cgi?id=115243

        Reviewed by Jocelyn Turcotte.

        When compositing a layer with a canvas or directly composited image, it is
        wrong to use TextureMapperLayer::setBackingStore. Instead, setContentsLayer
        should be used, which allows for the layer to have both a backing store and
        a contents layer.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):
        (WebCore::TextureMapperLayer::State::State):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::createCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        * bindings/js/WorkerScriptDebugServer.cpp: Added missing header.

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::generateComponents):

2013-04-29  Patrick Gansterer  <paroga@webkit.org>

        Remove OS(WINCE) from HTMLSelectElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115194

        Reviewed by Andreas Kling.

        Use the same files like the the other PLATFORM(WIN) ports use.

        * PlatformWinCE.cmake:
        * html/HTMLSelectElement.cpp:
        (WebCore):

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        StaticHashSetNodeList is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=115219

        Reviewed by Antonio Gomes.

        Moved Document::nodesFromRect into Internals::nodesFromRect per
        https://chromium.googlesource.com/chromium/blink/+/78207c5c34383fbb807bb9347deb67168f09bb04.

        Also made TouchAdjustment functions use HashListSet directly instead of wrapping it inside
        a StaticHashSetNodeList since there was no need to use the latter.

        With these two changes, I deleted StaticHashSetNodeList.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore):
        * dom/Document.h:
        (Document):
        * dom/StaticHashSetNodeList.cpp: Removed.
        * dom/StaticHashSetNodeList.h: Removed.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestContextMenuNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::compileSubtargetList):
        (WebCore::TouchAdjustment::compileZoomableSubtargets):
        (WebCore::findBestClickableCandidate):
        (WebCore::findBestContextMenuCandidate):
        (WebCore::findBestZoomableArea):
        * page/TouchAdjustment.h:
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

2013-04-28  Dean Jackson  <dino@apple.com>

        [Mac] Disable canvas backing store scaling (HIGH_DPI_CANVAS)
        https://bugs.webkit.org/show_bug.cgi?id=115310

        Reviewed by Simon Fraser.

        Disable the automatic pixel doubling in canvas backing stores on high
        dpi devices. This will potentially make canvases look worse of high dpi
        displays, but only if they were ignoring devicePixelRatio. Since the
        majority of high dpi displays *do not* auto-double (including mobile
        devices and other desktop browsers), this provides consistency and less
        chance of unnecessary memory use.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_HIGH_DPI_CANVAS_macosx.

2013-04-28  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Get rid of [Callback] IDL extended attribute for parameters
        https://bugs.webkit.org/show_bug.cgi?id=115250

        Reviewed by Kentaro Hara.

        Remove the WebKit-specific [Callback] extended attribute and make the bindings
        generator smart enough to know when a parameter is of callback type on its
        own.

        No new tests, no behavior change.

        * DerivedSources.make: Use WebCore/Modules as IDL include path instead of using
        subdirs. The generator will search recursively anyway and the list of subdirs was
        incomplete.
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * bindings/gobject/GNUmakefile.am: Add missing IDL include dirs.
        * bindings/scripts/CodeGenerator.pm:
        (IsWrapperType):
        (IsCallbackInterface):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        * bindings/scripts/IDLAttributes.txt: Remove "Callback" extended attribute.
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithArrayParam):
        (WebDOMTestCallback::callbackWithSerializedScriptValueParam):
        (WebDOMTestCallback::callbackWithNonBoolReturnType):
        (WebDOMTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        (WebDOMTestCallback):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::convert1):
        (WebDOMTestObj::convert2):
        (WebDOMTestObj::convert4):
        (WebDOMTestObj::convert5):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::acceptTransferList):
        (WebDOMTestSerializedScriptValueInterface::multiTransferList):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp:
        (WebDOMTestTypedefs::multiTransferList):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h:
        (WebDOMTestTypedefs):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_array_param):
        (webkit_dom_test_callback_callback_with_serialized_script_value_param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_convert1):
        (webkit_dom_test_obj_convert2):
        (webkit_dom_test_obj_convert4):
        (webkit_dom_test_obj_convert5):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_accept_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_multi_transfer_list):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (webkit_dom_test_typedefs_multi_transfer_list):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallback.h:
        (JSTestCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionMultiTransferList):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionMultiTransferList):
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithArrayParam:]):
        (-[DOMTestCallback callbackWithSerializedScriptValueParam:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback callbackRequiresThisToPass:testNodeParam:]):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj convert1:]):
        (-[DOMTestObj convert2:]):
        (-[DOMTestObj convert4:]):
        (-[DOMTestObj convert5:]):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        (-[DOMTestSerializedScriptValueInterface acceptTransferList:transferList:]):
        (-[DOMTestSerializedScriptValueInterface multiTransferList:tx:second:txx:]):
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        (-[DOMTestTypedefs multiTransferList:tx:second:txx:]):
        * bindings/scripts/test/TestCallback.idl: Use valid types instead of Class1, Class2, ...
        so that the bindings generator does not complain about not being able to resolve
        them.
        * bindings/scripts/test/TestObj.idl: Use valid parameter types instead of 'a', 'b', 'd', 'e'
        so that the bindings generator does not complain about them.
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/FontLoader.idl:
        * dom/DataTransferItem.idl:
        * page/DOMWindow.idl:

2013-04-27  Darin Adler  <darin@apple.com>

        Move from constructor and member function adoptCF/NS to free function adoptCF/NS.
        https://bugs.webkit.org/show_bug.cgi?id=115307

        Reviewed by Geoffrey Garen.

        This change was done by a global replace followed by compiling and inspecting for
        cases that needed to be tweaked by hand.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::ObjcField):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        * history/cf/HistoryPropertyList.cpp:
        (WebCore::HistoryPropertyListWriter::releaseData):
        * html/HTMLMediaElement.cpp:
        (WebCore::createFileURLForApplicationCacheResource):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::rawDataRepresentation):
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions):
        (WebCore::CaptionUserPreferencesMac::userPrefersSubtitles):
        (WebCore::CaptionUserPreferencesMac::captionsWindowCSS):
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundCSS):
        (WebCore::CaptionUserPreferencesMac::captionsTextColor):
        (WebCore::CaptionUserPreferencesMac::captionsDefaultFontCSS):
        (WebCore::CaptionUserPreferencesMac::preferredLanguages):
        (WebCore::trackDisplayName):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale):
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::imageTitle):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::fileSystemPath):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToImage):
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::schedule):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::PlatformCAAnimation):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::filterValueForOperation):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::setBackgroundColor):
        (PlatformCALayer::setBorderColor):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::getCGImageArray):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::CGImageEncodeToData):
        (WebCore::CGImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::imageWithColorSpace):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::createScratchContext):
        (WebCore::Path::contains):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        (WebCore::createFeatureSettingDictionary):
        (WebCore::cascadeToLastResortFontDescriptor):
        (WebCore::cascadeToLastResortAndDisableSwashesFontDescriptor):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::FontPlatformData::description):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (-[WebCascadeList objectAtIndex:]):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::linearRGBColorSpaceRef):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::getTIFFRepresentation):
        (WebCore::BitmapImage::getNSImage):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView):
        (WebCore::MediaPlayerPrivateQTKit::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch):
        (WebCore::addFileTypesToCache):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::fontHasVerticalGlyphs):
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter):
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem):
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        (WebCore::createNamedCursor):
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        * platform/mac/DragImageMac.mm:
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode):
        (WebCore::platformUserPreferredLanguages):
        * platform/mac/LocalizedStringsMac.cpp:
        (WebCore::localizedString):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getDataSelection):
        (WebCore::Pasteboard::writeSelectionForTypes):
        (WebCore::fragmentFromWebArchive):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::PlatformClockCM):
        (PlatformClockCM::initializeWithTimingSource):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::addTypes):
        (WebCore::PlatformPasteboard::setTypes):
        (WebCore::PlatformPasteboard::setPathnamesForType):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::populate):
        (WebCore::PopupMenuMac::show):
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource):
        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::platformBadResponseError):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::overrideCookieStorage):
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyAutoConfigurationResultCallback):
        (WebCore::processProxyServers):
        (WebCore::addProxyServersForURL):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::cfError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::handleDataArray):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::executePACFileURL):
        (WebCore::SocketStreamHandle::chooseProxy):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::addCONNECTCredentials):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::filterCookies):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::createNSErrorFromResourceErrorBase):
        (WebCore::ResourceError::nsError):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::mimeTypeFromUTITree):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey):
        (WebCore::lastHyphenLocation):
        * platform/text/mac/HyphenationMac.mm:
        (WebCore::::createValueForKey):
        (WebCore::lastHyphenLocation):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::determineLocale):
        (WebCore::LocaleMac::LocaleMac):
        (WebCore::LocaleMac::initializeLocaleData):
        * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::textBreakLocalePreference):
        (WebCore::canonicalLanguageIdentifier):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::searchMenuTemplate):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):
        (WebCore::RenderThemeMac::textField):
        Use adoptNS and adoptCF free functions.

2013-04-27  Ryosuke Niwa  <rniwa@webkit.org>

        Pressing mouse button inside a dragstart event causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=115296

        Reviewed by Darin Adler.

        Add a missing null pointer check. We should better encapsulate the states in DragState in the long term
        but this is good enough for now.

        Test: fast/events/mousedown-inside-dragstart-should-not-cause-crash.html

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

2013-04-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix when disabling video and video-track.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:

2013-04-27  Geoffrey Garen  <ggaren@apple.com>

        WebGL shouldn't allocate a "length" Identifier just to move some numbers around
        https://bugs.webkit.org/show_bug.cgi?id=115317

        Reviewed by Dean Jackson.

        Saw this while debugging an ammo.js bug.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::setWebGLArrayWithTypedArrayArgument):
        (WebCore::setWebGLArrayHelper):
        (WebCore::constructArrayBufferViewWithTypedArrayArgument):
        (WebCore::constructArrayBufferView):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toVector): Use the pre-computed "length" identifier instead of
        allocating a new one for each vector operation. There are lots more
        optimizations we could do here. This is a start.

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Remove two more StorageTask types
        https://bugs.webkit.org/show_bug.cgi?id=115312

        Reviewed by Dean Jackson.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::deleteOrigin):
        * storage/StorageTracker.h:

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Get rid of more uses of StorageTask
        https://bugs.webkit.org/show_bug.cgi?id=115311

        Reviewed by Dean Jackson.

        Make StorageAreaSync derive from ThreadSafeRefCounted as well, since it's passed between threads.

        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        (StorageTask):

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Indent StorageAreaSync to match the style guidelines.

        Rubber-stamped by Andreas Kling.

        * storage/StorageAreaSync.h:

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Replace uses of StorageTask with StorageThread::dispatch and WTF::bind
        https://bugs.webkit.org/show_bug.cgi?id=115309

        Reviewed by Andreas Kling.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThreads):
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::deleteAllOrigins):

2013-04-27  Anders Carlsson  <andersca@apple.com>

        Add StorageThread::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=115308

        Reviewed by Andreas Kling.

        StorageThread::dispatch takes a Function<void ()> and runs it on the storage thread. This will be used to eventually get rid of StorageTask.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        (WebCore::StorageTask::createDispatch):
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::dispatch):
        * storage/StorageThread.h:
        (StorageThread):

2013-04-27  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r147261): Audio controls background not displayed after loading audio file
        https://bugs.webkit.org/show_bug.cgi?id=115221

        Reviewed by Darin Adler.

        As in r147261, set a flex-shrink: 0 to avoid shrinking the media controls panel
        below the specified height.

        No new tests; fixes the media/media-document-audio-repaint.html test.

        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):

2013-04-26  Jer Noble  <jer.noble@apple.com>

        Video playback has corruption on the edges of the video
        https://bugs.webkit.org/show_bug.cgi?id=115216

        Reviewed by Simon Fraser.

        Test: media/video-poster-background.html

        RenderImage correctly answers foregroundIsKnownToBeOpaqueInRect() method
        when a poster image is displayed, but once the video begins playing and
        the poster image is no longer displayed, RenderImage will continue to
        answer 'true' even when the video does not occupy the entire render box.
        Override foregroundIsKnownToBeOpaqueInRect() in order to more correctly
        answer the question for the video layer.

        * rendering/RenderImage.h: Make foregroundIsKnownToBeOpaqueInRect() protected
            (vs. private).
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::foregroundIsKnownToBeOpaqueInRect): Added. Return
            true if the rect parameter is entirely contained by the video box.
        * rendering/RenderVideo.h:

2013-04-26  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] ExclusionShape bounding box methods should return LayoutRects
        https://bugs.webkit.org/show_bug.cgi?id=115117

        Reviewed by Dirk Schulze.

        Redefined the ExclusionShape API in terms of LayoutUnits, instead of floats: all of the
        ExclusionShape methods now have LayoutUnit parameters and return LayoutUnit values.
        This is more natural, since the callers work exclusively in LayoutUnits.

        This is strictly a refactoring, no new tests were needed.

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::getExcludedIntervals):
        (WebCore::ExclusionPolygon::getIncludedIntervals):
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop):
        * rendering/ExclusionPolygon.h:
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::getExcludedIntervals):
        (WebCore::ExclusionRectangle::getIncludedIntervals):
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop):
        * rendering/ExclusionRectangle.h:
        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape):
        * rendering/ExclusionShape.h:
        (LineSegment):
        (ExclusionShape):
        * rendering/ExclusionShapeInfo.cpp:
        (WebCore):
        (WebCore::::computedShape):
        * rendering/ExclusionShapeInfo.h:
        (WebCore):
        (WebCore::ExclusionShapeInfo::shapeLogicalTop):
        (WebCore::ExclusionShapeInfo::shapeLogicalBottom):
        (ExclusionShapeInfo):
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop):
        * rendering/ExclusionShapeInsideInfo.h:
        * rendering/ExclusionShapeOutsideInfo.h:

2013-04-26  Jer Noble  <jer.noble@apple.com>

        Nil-check the results of -[AVPlayerItemVideoOutput copyPixelBufferForItemTime:itemTimeForDisplay:].
        https://bugs.webkit.org/show_bug.cgi?id=115265

        Reviewed by Eric Carlson.

        copyPixelBufferForItemTime:itemTimeForDisplay: can return nil, even
        when hasNewPixelBufferForItemTime: returns YES. Check the results
        before passing the buffer on to VTPixelTransferSessionTransferImage()
        which does not NULL-check its parameters.

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

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Uninflate caret rect.
        http://bugs.webkit.org/show_bug.cgi?id=114997.
        <rdar://problem/12629007>.

        Reviewed by Timothy Horton.

        Inflation was causing painting errors with focus rings.
        It is no longer needed after disabling subpixel layout.

        * editing/FrameSelection.cpp:
        (WebCore::repaintCaretForLocalRect):

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix.

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

2013-04-26  Michael Saboff  <msaboff@apple.com>

        WebCore ObjC bridge is missing support for bool type
        https://bugs.webkit.org/show_bug.cgi?id=115276

        Reviewed by Geoffrey Garen.

        Added code to handle conversion between ObjC and JS booleans.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeObjcMethod):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertObjcValueToValue):
        (JSC::Bindings::objcValueTypeForType):

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Make Apple Windows VS2010 build results into and get dependencies from __32 suffixed folders.
        Make the DebugSuffix configuration use _debug dependencies.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoDebug.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoRelease.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCommon.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinDebug.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinPostBuild.cmd:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinProduction.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinRelease.props:
        * WebCore.vcxproj/WebCore.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/WebCoreDebug.props:
        * WebCore.vcxproj/WebCoreDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreGeneratedCommon.props:
        * WebCore.vcxproj/WebCoreGeneratedDebug.props:
        * WebCore.vcxproj/WebCoreGeneratedDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreGeneratedProduction.props:
        * WebCore.vcxproj/WebCoreGeneratedRelease.props:
        * WebCore.vcxproj/WebCoreGeneratedReleaseWinCairo.props:
        * WebCore.vcxproj/WebCoreProduction.props:
        * WebCore.vcxproj/WebCoreRelease.props:
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        * WebCore.vcxproj/build-generated-files.sh:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

2013-04-26  Roger Fong  <roger_fong@apple.com>

        Disable sub-pixel layout on mac.
        https://bugs.webkit.org/show_bug.cgi?id=114999.

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in: 
        Export symbol needed to be added for IntRect(const LayoutRect&) constructor, 
        which is now being used in pixelSnappedIntRect(const LayoutRect&) in LayoutRect.h after disabling sub-pixel layout.

2013-04-26  Simon Fraser  <simon.fraser@apple.com>

        Layer-backed WebViews don't repaint content outside the visible area
        https://bugs.webkit.org/show_bug.cgi?id=115275

        Reviewed by Beth Dakin.

        Export ScrollView::setPaintsEntireContents(bool).

        * WebCore.exp.in:

2013-04-26  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Change RenderMeter::valueRatio() visibility to public
        https://bugs.webkit.org/show_bug.cgi?id=115266

        This function is currently unused.
        However, it is necessary to implement a RenderTheme capable of rendering Meter elements.

        Reviewed by Alexis Menard.

        No new tests, because no behaviour is changed.

        * rendering/RenderMeter.h:
        (RenderMeter):

2013-04-26  Timothy Hatcher  <timothy@apple.com>

        Add Runtime.parse to the Inspector protocol.

        This will be used to parse console expressions for errors
        before evaluating them fully.

        https://webkit.org/b/115242

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/parser/ParserError.h: Added.
        * inspector/Inspector.json:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::parse):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):

2013-04-26  Benjamin Poulain  <bpoulain@apple.com>

        Fix the copyright years after r149057

        * page/DiagnosticLoggingKeys.cpp: I accidentally removed a year from
        the copyright in r149057.

2013-04-26  Konrad Piascik  <kpiascik@blackberry.com>

        Web Inspector: Crash due to null items from getDOMStorageItems
        https://bugs.webkit.org/show_bug.cgi?id=115176

        Reviewed by Joseph Pecoraro.

        findStorageArea was returning a null storageArea causing the items
        input paramater to not be set.  This was happening without any error
        being set at all.  Set an error to prevent a crash when we try to
        convert the result to a JSON string.

        Added tests to check if session and local storage are empty that
        they are still functional.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):

2013-04-26  Martin Robinson  <mrobinson@igalia.com>

        Remove the remaining Skia #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=114886

        Reviewed by Benjamin Poulain.

        * html/HTMLCanvasElement.cpp: Remove Skia #ifdef references.
        * platform/graphics/BitmapImage.cpp: Ditto.
        * platform/graphics/FloatPoint.h: Ditto.
        * platform/graphics/FloatRect.h: Ditto.
        * platform/graphics/FontCache.h: Ditto.
        * platform/graphics/Gradient.cpp: Ditto.
        * platform/graphics/Gradient.h: Ditto.
        * platform/graphics/GraphicsContext.cpp: Ditto.
        * platform/graphics/GraphicsContext.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/ImageBuffer.cpp: Ditto.
        * platform/graphics/ImageBuffer.h: Ditto.
        * platform/graphics/ImageBufferData.h: Ditto.
        * platform/graphics/IntPoint.h: Ditto.
        * platform/graphics/IntRect.h: Ditto.
        * platform/graphics/NativeImagePtr.h: Ditto.
        * platform/graphics/Path.h: Ditto.
        * platform/graphics/Pattern.cpp: Ditto.
        * platform/graphics/Pattern.h: Ditto.
        * platform/graphics/filters/FEBlend.h: Ditto.
        * platform/graphics/filters/FEColorMatrix.h: Ditto.
        * platform/graphics/filters/FEComponentTransfer.h: Ditto.
        * platform/graphics/filters/FEComposite.h: Ditto.
        * platform/graphics/filters/FEConvolveMatrix.h: Ditto.
        * platform/graphics/filters/FEDisplacementMap.h: Ditto.
        * platform/graphics/filters/FEGaussianBlur.h: Ditto.
        * platform/graphics/filters/FELighting.h: Ditto.
        * platform/graphics/filters/FEMorphology.h: Ditto.
        * platform/graphics/filters/FEOffset.h: Ditto.
        * platform/graphics/filters/FilterEffect.cpp: Ditto.
        * platform/graphics/filters/FilterEffect.h: Ditto.
        * platform/graphics/transforms/AffineTransform.h: Ditto.
        * platform/graphics/transforms/TransformationMatrix.h: Ditto.
        * platform/image-decoders/ImageDecoder.cpp: Ditto.
        * platform/image-decoders/ImageDecoder.h: Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Ditto.
        * platform/image-decoders/webp/WEBPImageDecoder.cpp: Ditto.
        * platform/mac/LocalCurrentGraphicsContext.h: Ditto.
        * platform/mac/LocalCurrentGraphicsContext.mm: Ditto.
        * rendering/svg/RenderSVGResourceSolidColor.cpp: Ditto.
        * svg/graphics/SVGImage.cpp: Ditto.
        * svg/graphics/SVGImage.h: Ditto.

2013-04-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Assert in JSC::Heap::unprotect when closing facebook.com web site
        https://bugs.webkit.org/show_bug.cgi?id=115058

        Reviewed by Darin Adler.

        Grab a JSLock before calling RootObject::invalidate().

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):

2013-04-26  Eric Carlson  <eric.carlson@apple.com>

        [Mac] in-band cues sometimes have incorrect duration
        https://bugs.webkit.org/show_bug.cgi?id=115200

        Reviewed by Jer Noble.

        No new tests, this is not possible to test in DRT.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addGenericCue): Don't add completed cues to the map.
        (WebCore::InbandTextTrack::removeGenericCue): Log when a cue is removed from the track.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): Initialize m_pendingCueStatus.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Never call update() on a cue that is delivered
            while seeking.
        (WebCore::InbandTextTrackPrivateAVF::beginSeeking): Flush all incomplete cues, remember that 
            we are seeking.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues): 
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Call track->beginSeeking() instead of resetCueValues().
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Call track->endSeeking().

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::kind): Include class name in Kind enum values to 
            avoid compile error.

2013-04-26  Andreas Kling  <akling@apple.com>

        Remove wxWebKit from WebCore.
        <http://webkit.org/b/115255>

        Reviewed by Anders Carlsson.

        * DerivedSources.make:
        * WebCorePrefix.h:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::port):
        * config.h:
        * html/HTMLFormElement.cpp:
        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/PlatformExportMacros.h:
        * platform/PlatformKeyboardEvent.h:
        (PlatformKeyboardEvent):
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        (PlatformMouseEvent):
        * platform/PlatformWheelEvent.h:
        (PlatformWheelEvent):
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        (ScrollView):
        * platform/Widget.h:
        * platform/win/SharedTimerWin.cpp:

2013-04-26  Zalan Bujtas  <zalan@apple.com>

        use-after-free removing a frame from its parent in a beforeload event of an OBJECT element
        https://bugs.webkit.org/show_bug.cgi?id=113964

        Object elements have the tendecny to modify or even fully remove 
        the containing Document inside beforeload callback. While Document is removed, 
        RenderArena gets destroyed. Retained RenderWidgets fails to function with NULL arena.
        
        Protect RendereArena from getting wiped out, when Document is removed 
        during FrameView::updateWidget(). 

        Reviewed by Antti Koivisto.

        Test: fast/frames/crash-remove-iframe-during-object-beforeload.html

        * dom/Document.cpp:
        (WebCore::Document::attach):
        * dom/Document.h:
        (Document):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidgets):
        * rendering/RenderArena.h:
        (RenderArena):
        (WebCore::RenderArena::create):

2013-04-26  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Optimize function and interface object length computation in bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115247

        Reviewed by Kentaro Hara.

        Introduce new GetFunctionLength() function that efficiently compute the length
        of a function (i.e. its number of mandatory parameters).

        We now call GetFunctionLength() instead of GenerateFunctionParametersCheck()
        whenever we care only interested in the function length and not the actual
        expression for checking the parameters. This is much more efficient as
        GenerateFunctionParametersCheck() does a lot more processing than we need in
        this case.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionLength):
        (GenerateImplementation):
        (GenerateConstructorHelperMethods):

2013-04-26  Andreas Kling  <akling@apple.com>

        Web Audio: Remove reduplicative addInput() in AnalyserNode.
        <http://webkit.org/b/115244>

        From Blink r149155 by <james.wei@intel.com>:

        The parent class BasicInspectorNode already called addInput() and addOutput().
        So it is reduplicative to call them in AnalyserNode.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        (AudioBasicInspectorNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):

2013-04-26  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Mouseenter and mouseleave events not supported
        https://bugs.webkit.org/show_bug.cgi?id=18930

        Reviewed by David Hyatt.

        Implements mouseenter and mouseleave events from W3C DOM Level 3 Events.
        These event are already supported by all other major browsers.

        To avoid performance regressions the new events are only dispatched when
        there are event listeners for them.

        Tests: fast/events/mouseenter-mouseleave-capture.html
               fast/events/mouseenter-mouseleave.html

        * bindings/scripts/CodeGenerator.pm:
        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        (Document):
        * dom/Document.idl:
        * dom/Element.h:
        (Element):
        * dom/Element.idl:
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::containsCapturing):
        * dom/EventListenerMap.h:
        (EventListenerMap):
        * dom/EventNames.h:
        * dom/EventTarget.h:
        (EventTarget):
        (WebCore::EventTarget::hasCapturingEventListeners):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForAttributeName):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute):
        * svg/SVGElementInstance.h:
        (SVGElementInstance):
        * svg/SVGElementInstance.idl:

2013-04-26  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for Web IDL partial interfaces to the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115228

        Reviewed by Kentaro Hara.

        Add support for Web IDL partial interfaces to the bindings generator:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-partial-interface

        Also drop support for the the WebKit-specific [Supplemental] extended
        attribute and use partial interfaces instead in existing IDL files.

        No new tests, no behavior change.

        * Modules/battery/NavigatorBattery.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DataTransferItemFileSystem.idl:
        * Modules/filesystem/HTMLInputElementFileSystem.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/NavigatorGamepad.idl:
        * Modules/geolocation/NavigatorGeolocation.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/WorkerContextNotifications.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/quota/NavigatorStorageQuota.idl:
        * Modules/quota/WorkerNavigatorStorageQuota.idl:
        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/DOMWindowSpeechSynthesis.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/IDLParser.pm:
        (parsePartialDefinition):
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/preprocess-idls.pl:
        (getPartialInterfaceNameFromIDLFile):
        * bindings/scripts/test/TestSupplemental.idl:
        * page/DOMWindowPagePopup.idl:

2013-04-25  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Hit testing is broken for absolutely positioned regions that have overflow: hidden
        https://bugs.webkit.org/show_bug.cgi?id=113874

        Reviewed by David Hyatt.

        Test: fast/regions/hit-test-abspos-overflow-region.html

        When a region is an out-of-flow positioned object with an overflow clip, we need
        to make sure that hit testing works also for cases other than foreground (content)
        hit testing. This patch moves the previous hit testing code, that delegated foreground
        hit testing to the region's flow thread hit testing, into the hitTestContent method,
        now that RenderRegion is RenderBlock based.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::hitTestContents):
        * rendering/RenderRegion.h:
        (RenderRegion):

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        Copy and paste can strip !important CSS rules due to a bug in mergeStyleFromRules
        https://bugs.webkit.org/show_bug.cgi?id=115217

        Reviewed by Darin Adler.

        The bug was caused by mergeStyleFromRules overriding "important" style rules with "unimportant" inline styles.
        Fixed the bug by using addParsedProperty, which respects !important, in MutableStylePropertySet's
        mergeAndOverrideOnConflict, which was only used in editing code. Now that we've fixed this function, we can use
        it in ViewportStyleResolver::addViewportRule as well.

        Test: editing/pasteboard/copy-paste-with-important-rules.html

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::mergeAndOverrideOnConflict): Fixed to respect !important.
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::addViewportRule): Use mergeAndOverrideOnConflict now that the code is identical.

2013-04-25  Andreas Kling  <akling@apple.com>

        StylePropertySet::getPropertyShorthand() should return a String.
        <http://webkit.org/b/115213>

        Reviewed by Anders Carlsson.

        Return a String directly from getPropertyShorthand() instead of forcing clients
        to call getPropertyNameString().

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyShorthand):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyShorthand):
        * css/StylePropertySet.h:
        (StylePropertySet):

2013-04-25  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: language support does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=115119

        Reviewed by Alexey Proskuryakov.

        Make the Mac platform synthesizer have access to all the voices installed on the system.

        * WebCore.exp.in:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-04-25  Chris Fleizach  <cfleizach@apple.com>

        <meter> element not exposed to accessibility
        https://bugs.webkit.org/show_bug.cgi?id=109023
        rdar://problem/13658964

        Reviewed by Tim Horton.

        Makes the <meter> element appear in the AX tree by reusing the
        AccessibilityProgressIndicator element to handle either progress or meter
        elements.

        Test: accessibility/meter-element.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::visibleText):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::AccessibilityProgressIndicator):
        (WebCore::AccessibilityProgressIndicator::create):
        (WebCore::AccessibilityProgressIndicator::valueForRange):
        (WebCore::AccessibilityProgressIndicator::maxValueForRange):
        (WebCore::AccessibilityProgressIndicator::minValueForRange):
        (WebCore::AccessibilityProgressIndicator::progressElement):
        (WebCore::AccessibilityProgressIndicator::meterElement):
        * accessibility/AccessibilityProgressIndicator.h:
        (AccessibilityProgressIndicator):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
            These methods are modified to handle when there is no rendered children, but there are Node
            children. The node children are desired when calculating text within a node, for example.

2013-04-25  Qiankun Miao  <qiankun.miao@intel.com>

        [CSS Shaders] Remove the meshType from the CustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=102529

        Reviewed by Dean Jackson.

        No new tests, no new functionality.

        MeshType can be accessed from program, so remove the m_meshType
        related code in CustomFilterOperation.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create):
        (WebCore::CustomFilterOperation::meshType):
        (CustomFilterOperation):
        (WebCore::CustomFilterOperation::operator==):
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h:
        (WebCore::CoordinatedCustomFilterOperation::CoordinatedCustomFilterOperation):

2013-04-25  Kent Tamura  <tkent@chromium.org>

        Ignore invalid regular expressions for input[pattern].
        https://bugs.webkit.org/show_bug.cgi?id=115204

        Reviewed by Darin Adler.

        According to the specification, we should not proceed regular expression
        matching if a pattern attribute value is an invalid regular
        expression. We had a bug that invalid expressions such as
        pattern=")foo(" made RegularExpression objects successfully.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-pattern-attribute
        > If an input element has a pattern attribute specified, and the
        > attribute's value, when compiled as a JavaScript regular expression with
        > the global, ignoreCase, and multiline flags disabled (see ECMA262
        > Edition 5, sections 15.10.7.2 through 15.10.7.4), compiles successfully,
        > then the resulting regular expression is the element's compiled pattern
        > regular expression. If the element has no such attribute, or if the
        > value doesn't compile successfully, then the element has no compiled
        > pattern regular expression.

        This imports a part of Blink r148951.

        Tests: Update fast/forms/ValidityState-patternMismatch.html

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        Check correctness of pattern attribute value before wrapping with parentheses.
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::isValid): Added.
        * platform/text/RegularExpression.h:
        (RegularExpression): Declare isValid.

2013-04-25  Antoine Quint  <graouts@apple.com>

        Glyphs may fail to render when using SVG font
        https://bugs.webkit.org/show_bug.cgi?id=115193

        Reviewed by Simon Fraser.

        Calling SimpleFontData::applyTransforms() when the font used is
        an SVG font makes little sense since Core Text doesn’t know or
        understand SVG fonts and would be passed some other, unrelated
        platform font.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::applyTransforms):

2013-04-25  Jer Noble  <jer.noble@apple.com>

        Media elements shouldn't resume playback when a page is restored from the back/forward cache if the WKView isn't in a window
        https://bugs.webkit.org/show_bug.cgi?id=115191

        Reviewed by Eric Carlson.

        If a page is suspended, then resumed when its WebView or WKView has been removed from a window,
        the page's media elements will unpause. Check whether media is allowed to start during resume()
        via Page::canMediaStart() and if not, register for mediaCanStart notifications. Then, in 
        mediaCanStart() if the media is force-paused, unpause it.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::mediaCanStart):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::pageConsentRequiredForResume):

2013-04-25  Andreas Kling  <akling@apple.com>

        Remove ENABLE(PARSED_STYLE_SHEET_CACHING) and make it always-on.

        Rubber-stamped by Anders Koivisto.

        * PlatformWinCE.cmake:
        * accessibility/AccessibilityObject.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

2013-04-25  Patrick Gansterer  <paroga@webkit.org>

        Remove OS(WINCE) from AccessibilityObject.h
        https://bugs.webkit.org/show_bug.cgi?id=115192

        Reviewed by Andreas Kling.

        Use the same files like the the other PLATFORM(WIN) ports use.

        * PlatformWinCE.cmake:
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):

2013-04-25  Alberto Garcia  <agarcia@igalia.com>

        Add definition of GlyphBufferGlyph for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=115183

        Reviewed by Xan Lopez.

        BlackBerry uses an unsigned int.

        * platform/graphics/GlyphBuffer.h:
        (WebCore):

2013-04-25  Joseph Pecoraro  <pecoraro@apple.com>

        ScriptExecutionContext log exception should include a column number
        https://bugs.webkit.org/show_bug.cgi?id=114315

        Reviewed by Oliver Hunt.

        Test: inspector/console/console-exception-stack-traces.html

        * bindings/js/ScriptCallStackFactory.h:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackFromException):
        Generate a ScriptCallStack from an exception. Use the vm.exceptionStack
        if available, and fallback to the exception object where needed.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        Always include a non-empty call stack with exceptions.
        Where not provided, fallback to the exception object.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        (ScriptExecutionContext::PendingException):
        (WebCore::ScriptExecutionContext::reportException):
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/SharedWorkerContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::logExceptionToConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        Plumb columnNumber through as needed.

2013-04-25  Gregg Tavares  <gman@chromium.org>

        Fix build files so WebGLDebugXXX extensions can be used if enabled.
        https://bugs.webkit.org/show_bug.cgi?id=113976

        Reviewed by Dean Jackson.

        No new tests as no new functionality.

        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        cloneChildNodes looks for deleteButtonController in each level of recursion
        https://bugs.webkit.org/show_bug.cgi?id=115146

        Reviewed by Andreas Kling.

        Obtain the delete button controller upfront, and shallow copy descendents of each child
        so that we don't look for the delete button controller inside cloneNode called on each child.

        Performance Tests: DOM/CloneNodes.html

        * dom/ContainerNode.cpp:
        (WebCore::cloneChildNodesAvoidingDeleteButon): Extracted.
        (WebCore::ContainerNode::cloneChildNodes):

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        HTMLOptionsCollection's namedItem and name getter should return the first item
        https://bugs.webkit.org/show_bug.cgi?id=115150

        Reviewed by Andreas Kling.

        Following the resolution in http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038355.html,
        the spefication has been updated to only return the first item when there are multiple items of the same name
        in HTMLOptionsCollection; this new behavior matches that of Firefox and Opera (Presto).

        Implement this new behavior to remove the custom binding code and use the fast path in namedItem and name
        getter of HTMLOptionsCollection. (Obtaining all items for a given name is expensive!).

        Tests: fast/dom/HTMLSelectElement/named-options.html
               fast/dom/html-collections-named-getter.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore): Removed the custom bindings for name getter and namedItem.
        * html/HTMLOptionsCollection.idl:

2013-04-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ConsoleMessage should include line and column number where possible
        https://bugs.webkit.org/show_bug.cgi?id=114929

          - adds "m_column" to WebCore::ConsoleMessage
          - adds "column" to Console.ConsoleMessage in the inspector protocol
          - set the column number for console.* functions (Console.cpp)
          - set the column number for XSLT errors (XSLTProcessor)
          - plumb columnNumber everywhere else it is needed, set it to 0 and file
            bugs for all cases missing columnNumber that could provide it.

        Reviewed by Timothy Hatcher.

        Test: inspector/console/console-url-line-column.html
              inspector/console/console-messages-stack-traces.html

        * inspector/ConsoleMessage.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::autogenerateMetadata):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::isEqual):
        Add m_column and set it where appropriate.

        * inspector/Inspector.json:
        Add column property to Console.ConsoleMessage.

        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        Set columnNumber like lineNumber from the last stack frame.
        (WebCore::Console::groupEnd):
        Line and column are unused in this message type, set both to 0.

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):
        Add real column numbers, the XSLT handlers already had it available.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::logError):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addProfileImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::addMessageToConsole):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::addMessageToConsole):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (SharedWorkerProxy):
        (WebCore::postExceptionTask):
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::logExceptionToConsole):
        (WebCore::WorkerContext::addConsoleMessage):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        (WebCore::WorkerExceptionTask::performTask):
        (WorkerExceptionTask):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        (WorkerMessagingProxy):
        * workers/WorkerReportingProxy.h:
        (WorkerReportingProxy):
        Plumb columnNumber through where appropriate. File bugs where missing.

2013-04-25  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Animated opacity does not trigger accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=115107

        Reviewed by Simon Fraser.

        Add extra option to also trigger compositing on animated opacity.

        * page/ChromeClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

2013-04-25  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        Sec-WebSocket-Extensions header field must not appear more than once in an HTTP response.
        https://bugs.webkit.org/show_bug.cgi?id=115128

        Reviewed by Alexey Proskuryakov.

        According to WebSocket specification Sec-WebSocket-Extensions header field
        must not appear more than once in an HTTP response. It is ok if it appears
        more than once in client request. Also add a check for invalid UTF-8
        characters when parsing Sec-WebSocket-Extensions quoted string.

        Test: http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header.html

        * Modules/websockets/WebSocketExtensionParser.cpp:
        (WebCore::WebSocketExtensionParser::consumeQuotedString): Return false if there is
        invalid character in the quoted string being parsed.
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders): Check if Sec-WebSocket-Extensions
        appears more than once in header response. Abort handshake if it does.

2013-04-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        REGRESSION(r148758): Remove WTFLogAlways call from IconLoader.
        https://bugs.webkit.org/show_bug.cgi?id=115182

        Reviewed by Dan Bernstein.

        The call added in r148758 was apparently a leftover from some debugging
        session, and it makes the Interactive/window-resize.html performance
        test randomly fail on Qt and EFL due to WTFLogAlways writing to stderr.

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

2013-04-25  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for Web IDL callback interfaces to the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115179

        Reviewed by Kentaro Hara.

        Add support in the bindings generator for Web IDL callback interfaces:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-callback-interface

        Drop support for the WebKit-specific [Callback] extended attributes
        on Web IDL interfaces and update existing IDL files to use proper
        callback interfaces instead.

        No new tests, no behavior change.

        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/quota/StorageErrorCallback.idl:
        * Modules/quota/StorageQuotaCallback.idl:
        * Modules/quota/StorageUsageCallback.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        * bindings/scripts/IDLParser.pm:
        (parseCallbackRestOrInterface):
        * bindings/scripts/test/TestCallback.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/StringCallback.idl:
        * html/VoidCallback.idl:

2013-04-25  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Add audio/speex MIME type as supported
        https://bugs.webkit.org/show_bug.cgi?id=115032

        Reviewed by Philippe Normand.

        GStreamer has support for the Speex codec (http://www.speex.org).
        Speex streams may be embedded in a Ogg container, or standalone.
        The case of the Ogg container is already covered by the "*/ogg"
        MIME types declared as supported by the GStreamer media playing
        code, but for standalone streams to work, "audio/speex" has to
        be added.

        With this, and the needed GStreamer plugin installed, the GTK+
        launcher is able to correctly play Speex streams served with
        "Content-type: audio/speex".

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2013-04-25  Andreas Kling  <akling@apple.com>

        Add FINAL decorators to the InlineBox class hierarchy.
        <http://webkit.org/b/115177>

        Reviewed by Antti Koivisto.

        From Blink r148628 by <cevans@chromium.org>:

        FINAL is a macro in wtf/Compiler.h that does the correct thing if the compiler does not support "final")
        The approach used is as simple as possible whilst being thorough.
        So, leaf classes have FINAL applied to the whole class whereas intermediary classes have FINAL applied to relevant methods.

        FINAL allows a compiler to devirtualize call sites and turn them into direct calls. As you might expect, this is perf positive:
        (clang on Linux):
        - line_layout.html goes from 120 runs/s -> 123 runs/2, +2.5%
        - html5-full-render.html goes from 3176ms -> 3162ms, +0.4%

        I have confidence that the former result is statistically significant (as the numbers are very very stable) but not the latter.

        * rendering/EllipsisBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:

2013-04-25  Andreas Kling  <akling@apple.com>

        CSS parser: Add error recovery while parsing @-webkit-keyframes key values.
        <http://webkit.org/b/115175>

        From Blink r148714 by <apavlov@chromium.org>:

        If not a percentage, "from", or "to" value is used in a key list, the rule is erroneous,
        and due to the absense of recovery, the parser skips the following, valid CSS rule.

        On a related note, keyframes, whose selectors contain invalid keys, should be discarded
        altogether, according to <http://www.w3.org/TR/css3-animations/#keyframes>

        Tests: animations/keyframes-invalid-keys.html
               fast/css/webkit-keyframes-errors.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiers):

2013-04-25  Antti Koivisto  <antti@apple.com>

        REGRESSION (r147797): Animations slideshows of images on www.thesuperficial.com are slow
        https://bugs.webkit.org/show_bug.cgi?id=115172

        Reviewed by Andreas Kling.

        On this page ads dynamically loaded to subframes on slideshow navigation switch us to state where we throttle layer flushes.
        
        Fix by ignoring any subframe-originated loads when determining throttling.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::isMainLoadProgressing):
        
            Rename, ignore subframe originated loads. Subframe loads that are initiated during the main load still count.

        * loader/ProgressTracker.h:
        (ProgressTracker):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):

2013-04-25  Andreas Kling  <akling@apple.com>

        SVG: Fix viewBox animations on shapes with non-scaling-stroke.
        <http://webkit.org/b/115173>

        From Blink r149058 by <pdr@chromium.org>:

        Previously hasAttribute() to determine if a viewBox was set in the transform
        code for non-scaling-strokes. hasAttribute() should not be used in this case,
        as it will return false if the attribute is not set but the value is animating.

        This patch switches to checking if the viewBox is empty instead of checking for
        the presence of the attribute.

        Test: svg/stroke/animated-non-scaling-stroke.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::hasEmptyViewBox):

2013-04-25  Andreas Kling  <akling@apple.com>

        Remove isPluginElement hack in Document::setFocusedNode()
        <http://webkit.org/b/115171>

        From Blink r148800 by <tkent@chromium.org>:

        This hack is no longer necessary because r147591 made isFocusable for plugin
        elements work correctly.

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

2013-04-25  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        EventSource: Synchronous loader callback not handled properly
        https://bugs.webkit.org/show_bug.cgi?id=115104

        When attempting a cross-origin request towards a non-HTTP URL, an early verification
        of the protocol scheme will cause didFailAccessControlCheck to be called synchronously
        before the loader has even finished being created. This special case was not handled
        properly, since we tried to cancel a non-existing loader, which resulted in a crash.
        In addition to checking whether a request is in flight before trying to cancel it,
        this change also schedules the initial creation of the loader to happen asynchronously
        when an EventSource is constructed, so that a script can register for the error event
        before it is dispatched (as a result of passing a non-HTTP URL to the constructor).

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/eventsource/eventsource-cors-non-http.html

        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::create):
        (WebCore::EventSource::scheduleInitialConnect):
        (WebCore):
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::connectTimerFired):
        (WebCore::EventSource::close):
        (WebCore::EventSource::abortConnectionAttempt):
        * page/EventSource.h:
        (EventSource):

2013-04-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix after r148545.

        * page/wince/FrameWinCE.cpp:

2013-04-24  Kent Tamura  <tkent@chromium.org>

        Back references don't work in pattern attribute
        https://bugs.webkit.org/show_bug.cgi?id=105875

        Reviewed by Geoffrey Garen.

        This imports a part of Blink r148951.

        Tests: Update fast/forms/ValidityState-patternMismatch.html

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        Don't use capturing parentheses. They affected back references in
        pattern attribute values.

2013-04-24  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Cursor should become an i-beam when over selectable text
        https://bugs.webkit.org/show_bug.cgi?id=115018
        <rdar://problem/12645012>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export the I-beam and arrow cursors.

2013-04-24  Simon Fraser  <simon.fraser@apple.com>

        Garbage at the top of http://www.technologyreview.com after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=114825

        Reviewed by Tim Horton.

        Garbage pixels are caused by GraphicsLayerCA setting a layer to be opaque,
        but then not painting anything into it. On this page, the element is
        toggled to be visibility:hidden on scrolling, but RenderLayer::backgroundIsKnownToBeOpaqueInRect()
        failed to consider that as something that can cause backgrounds not to be opaque.
        
        For the bug to happen, some subtle interactions with r142012 come into play
        for the layer to remain visible, hence the slightly complex testcase.
        
        Test: compositing/contents-opaque/visibility-hidden.html

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

2013-04-24  Simon Fraser  <simon.fraser@apple.com>

        Dump layer opaqueness in the Compositing log output
        https://bugs.webkit.org/show_bug.cgi?id=115132

        Reviewed by Tim Horton.

        It's useful to see whether we consider layers to be opaque in the Compositing
        log channel output, so dump it.

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

2013-04-24  Seokju Kwon  <seokju.kwon@gmail.com>

        Add efl to JSInspectorFrontendHost::port()
        https://bugs.webkit.org/show_bug.cgi?id=115137

        Reviewed by Timothy Hatcher.

        No new tests, because there is no change in behavior.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::port):

2013-04-24  Kangil Han  <kangil.han@samsung.com>

        Function parameter quotePair can be passed by reference
        https://bugs.webkit.org/show_bug.cgi?id=115089

        Reviewed by Alexey Proskuryakov.

        Minor performance patch.

        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::addPair):
        * rendering/style/QuotesData.h:
        (QuotesData):

2013-04-24  Brady Eidson  <beidson@apple.com>

        Implementors of CachedResource subclasses should be forced to decide if encoded data can be replaced.
        https://bugs.webkit.org/show_bug.cgi?id=115140

        Reviewed by Beth Dakin.

        No new tests (No behavior change).

        This makes mayTryReplaceEncodedData() return false in CachedResource, but overrides to true
        in all CachedResource subclasses besides CachedFont (which already has an implementation).

        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:

2013-04-24  Brady Eidson  <beidson@apple.com>

        Once a custom font is cached to disk, it starts failing to render until the page is refreshed.
        <rdar://problem/13622998> and https://bugs.webkit.org/show_bug.cgi?id=115131

        Reviewed by Alexey Proskuryakov.

        No new tests (Not a tested config, nor are disk cache issues currently testable).

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource:: mayTryReplaceEncodedData): Allow subclasses to refuse encoded data replacement.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData): Only try if shouldTryReplaceEncodedData() is true.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::mayTryReplaceEncodedData): Return false if the custom font data has ever been created.
        * loader/cache/CachedFont.h:

2013-04-24  Beth Dakin  <bdakin@apple.com>

        Vertical overlay scrollbar in iframes fades in and out rapidly when you scroll in 
        a circle
        https://bugs.webkit.org/show_bug.cgi?id=115124
        -and corresponding-
        <rdar://problem/13168957>

        Reviewed by Anders Carlsson.

        With http://trac.webkit.org/changeset/119834 we started calling 
        ScrollbarPainterController's contentAreaScrolled/contentAreaScrolledInDirection 
        API on a zero-delay timer instead of calling it right away. This prevented some 
        crashes that we saw whenever this was called during a layout. However, that delay, 
        combined with the particulars of contentAreaScrolledInDirection cause this bug 
        where sometimes the scrollbars in an iframe will fade out very noticeably when 
        scrolling in a circle.

        This change makes it so we will only use the zero-delay timer if the 
        ScrollableArea is not currently handling a wheel event. If it IS handling a wheel 
        event, then we will send the notifications to AppKit right away. I confirmed that 
        this change did not reintroduce the old crashes. 

        Keep track of whether we are currently handling a wheel event with the new member 
        variable m_isHandlingWheelEvent.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        (WebCore::EventHandler::isHandlingWheelEvent):
        (EventHandler):

        To prevent layering violations, the ScrollableArea sub-classes will have to access 
        this information from the EventHandler.
        * page/FrameView.cpp:
        (WebCore::FrameView::isHandlingWheelEvent):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isHandlingWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isHandlingWheelEvent):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isHandlingWheelEvent):
        * rendering/RenderListBox.h:

        sendContentAreaScrolledSoon() can be private. Also add new function 
        sendContentAreaScrolled().
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):

        If the ScrollableArea is handling a wheel event, call 
        sendContentAreaScrolled(), otherwise call sendContentAreaScrolledSoon()
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolled):

        Re-factored to use sendContentAreaScrolled()
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):

2013-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Fix a merge error in r149007 (was missing a null check added in r148777).

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::containingBlockForAbsolutePosition):

2013-04-24  Otto Derek Cheung  <otcheung@rim.com>

        Battery API won't return updated battery status until client calls didChangeBatteryStatus
        https://bugs.webkit.org/show_bug.cgi?id=114891

        Reviewed by Rob Buis.

        The BatteryStatus object in BatteryManager won't get updated until BatteryClient calls
        didChangeBatteryStatus in BatteryController. Any attempts to call webkitBattery.charged()
        or other get functions will always return the default values until the next battery status
        change object gets passed to the controller.

        We need to update the manager when we attach it to the controller, and update all
        existing managers when the controller receives it's first battery status object.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::addListener):
        (WebCore::BatteryController::updateBatteryStatus):
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::didChangeBatteryStatus):
        (WebCore::BatteryManager::updateBatteryStatus):
        (WebCore):
        * Modules/battery/BatteryManager.h:
        (BatteryManager):

2013-04-24  Jacky Jiang  <zhajiang@blackberry.com>

        Clean up unused code in ViewportArguments.h
        https://bugs.webkit.org/show_bug.cgi?id=115121

        Reviewed by Benjamin Poulain.

        The target-densityDPI emulation implementation has been removed by
        r147893, so clean up the remaining code as well.

        * dom/ViewportArguments.h:

2013-04-24  Andreas Kling  <akling@apple.com>

        ElementData should use 'unsigned' attribute indices.
        <http://webkit.org/b/115103>

        Reviewed by Antti Koivisto.

        Switch to using 'unsigned' for attribute indices. This gives consistent behavior
        on 32/64-bit, and the underlying storage is already limited by Vector's 32-bit capacity.

        Added an ElementData::attributeNotFound constant (-1) since we can't use WTF::notFound.

        * dom/Element.cpp:
        (WebCore::Element::detachAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setSynchronizedLazyAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::UniqueElementData::removeAttribute):
        (WebCore::ElementData::getAttributeItemIndexSlowCase):
        * dom/Element.h:
        (ElementData):
        (UniqueElementData):
        (Element):
        (WebCore::Element::getAttributeItemIndex):
        (WebCore::Element::attributeCount):
        (WebCore::ElementData::length):
        (WebCore::ElementData::getAttributeItem):
        (WebCore::ElementData::getAttributeItemIndex):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        (WebCore::NamedNodeMap::length):
        * dom/NamedNodeMap.h:
        (NamedNodeMap):

2013-04-24  Andreas Kling  <akling@apple.com>

        ElementData::attributeItem() should bounds-check the index.
        <http://webkit.org/b/115076>

        Reviewed by Antti Koivisto.

        Switch the ASSERT_WITH_SECURITY_IMPLICATION to a RELEASE_ASSERT.

        * dom/Element.h:
        (WebCore::ElementData::attributeItem):

2013-04-23  Andreas Kling  <akling@apple.com>

        Setting an inline style property to "" shouldn't cause style recalc unless the property was present.
        <http://webkit.org/b/115122>

        Reviewed by Antti Koivisto.

        StylePropertySet::setProperty() handles empty strings by removing the property entirely.
        If there was no property to remove, it shouldn't claim that it changed something, as that
        will cause the CSSOM wrapper to mark the element for style recalc.

        A common idiom that triggers this is excessive use of { element.style.display = ''; }

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::setProperty):

2013-04-23  Ryosuke Niwa  <rniwa@webkit.org>

        Moving word boundaries backwards fails when there is a text node starting with an apostrophe
        https://bugs.webkit.org/show_bug.cgi?id=115070

        Reviewed by Alexey Proskuryakov.

        The bug was caused by previousBoundary erroneously assuming that we don't need any more context if a word
        boundary is found at the beginning of a string. For example, when "I'll" is split into two text nodes,
        "I" and "'ll", there is a word boundary between "'" and "ll" in "'ll" so we need to examine the whole "I'll".

        Fixed the bug by obtaining more context when the character starts exactly at offset 1 in a text node to
        work around this bug. In the long term, we probably need to provide Foundation of the entire context since in
        languages like Hebrew and some of European languages, there could be many accents and combining characters
        between split into multiple text nodes as one variant is seen in the newly added test case.

        Test: editing/selection/previous-word-boundary-across-text-nodes.html

        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):

2013-04-24  Benjamin Poulain  <bpoulain@apple.com>

        Do not use static string in DiagnosticLoggingKeys
        https://bugs.webkit.org/show_bug.cgi?id=115093

        Reviewed by Andreas Kling.

        The code is not hot enough to justify keeping the memory around.
        This removes 3kb from the binary on x86_64.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mediaLoadedKey):
        (WebCore::DiagnosticLoggingKeys::mediaLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadedKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsPluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOnePluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::passKey):
        (WebCore::DiagnosticLoggingKeys::failKey):
        (WebCore::DiagnosticLoggingKeys::noopKey):
        * page/DiagnosticLoggingKeys.h:
        (DiagnosticLoggingKeys):

2013-04-24  Benjamin Poulain  <benjamin@webkit.org>

        Remove wxWebKit #ifdefs from WebCore/platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=115081

        Reviewed by Geoffrey Garen.

        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        * platform/graphics/Color.h:
        (Color):
        * platform/graphics/FloatRect.h:
        (FloatRect):
        * platform/graphics/FloatSize.h:
        (FloatSize):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore):
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/IntPoint.h:
        (IntPoint):
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        (IntSize):
        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (WebCore::SimpleFontData::widthForGlyph):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::collectComplexTextRuns):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/transforms/AffineTransform.h:
        (AffineTransform):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

2013-04-24  Benjamin Poulain  <benjamin@webkit.org>

        Remove wxWebKit #ifdefs from WebCore/plugins
        https://bugs.webkit.org/show_bug.cgi?id=115080

        Reviewed by Geoffrey Garen.

        * plugins/PluginView.h:
        (PluginView):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::nativeWindowFor):
        (WebCore::cgHandleFor):
        (WebCore::topLevelOffsetFor):
        (WebCore::PluginView::platformStart):
        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::snapshot):

2013-04-24  Benjamin Poulain  <benjamin@webkit.org>

        Remove wxWebKit #ifdefs from WebCore/page
        https://bugs.webkit.org/show_bug.cgi?id=115079

        Reviewed by Geoffrey Garen.

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):
        * page/Settings.cpp:
        (WebCore):
        * page/Settings.h:
        (Settings):

2013-04-24  Chris Fleizach  <cfleizach@apple.com>

        AX: WAI-ARIA landmarks no longer speak type of landmark on iOS
        https://bugs.webkit.org/show_bug.cgi?id=114547

        Reviewed by David Kilzer.

        We want iOS to speak the landmark type.
        I've moved the landmark role description to the base Mac class and exposed
        these localized strings to iOS (the ones used to return landmark descriptions).

        I've also updated the accessibilityLabel to account for landmark type, but also
        handle multiple label sources more gracefully by appending commas, which changed a few
        tests in minor ways.

        Test: platform/iphone-simulator/accessibility/landmark-type.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        * platform/LocalizedStrings.h:
        (WebCore):

2013-04-24  Andreas Kling  <akling@apple.com>

        CSS attribute selectors cause unnecessary style recalc when setting attribute to same value.
        <http://webkit.org/b/115116>
        <rdar://problem/13727709>

        Reviewed by Simon Fraser.

        The logic that dirties the style if there's a relevant attribute selector in the document
        shouldn't run if the attribute is being overwritten with an identical value.
        Move this into willModifyAttribute() instead, since we need access to both the old and the new value.

        This reduces unnecessary style recalculation in Mac App Store content.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::willModifyAttribute):

2013-04-24  Jonathan Feldstein <jfeldstein@blackberry.com>

        [BlackBerry] Fixes the San Angeles demo on khronos.org
        https://bugs.webkit.org/show_bug.cgi?id=115106

        Reviewed by Rob Buis
        Internally Reviewed by Jeremy Nicholl and Arvid Nilsson

        Fixes a bug in which the currently bound vertex array object's vertex array
        state was being modified as opposed to the default vertex array state.

        * platform/graphics/blackberry/EGLImageLayerWebKitThread.cpp:
        (EGLImageLayerWebKitThread::blitToFrontBuffer):

2013-04-24  Nico Weber  <thakis@chromium.org>

        Fold RenderThemeMacShared into RenderThemeMac
        https://bugs.webkit.org/show_bug.cgi?id=115086

        Reviewed by Anders Carlsson.

        No intended functionality change.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        (WebCore::RenderThemeMac::supportsControlTints):
        (WebCore::RenderThemeMac::scrollbarControlSizeForPart):
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors):
        (WebCore::RenderThemeMac::supportsClosedCaptioning):
        (WebCore::RenderThemeMac::updateActiveState):
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor):
        (WebCore):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformFocusRingColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::toFontWeight):
        (WebCore::RenderThemeMac::systemFont):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeMac::platformColorsDidChange):
        (WebCore::RenderThemeMac::systemColor):
        (WebCore::RenderThemeMac::usesTestModeFocusRingColor):
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::convertToPaintingRect):
        (WebCore::RenderThemeMac::updateCheckedState):
        (WebCore::RenderThemeMac::updateEnabledState):
        (WebCore::RenderThemeMac::updateFocusedState):
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::controlSupportsTints):
        (WebCore::RenderThemeMac::controlSizeForFont):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::sizeForFont):
        (WebCore::RenderThemeMac::sizeForSystemFont):
        (WebCore::RenderThemeMac::setSizeFromFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::controlSizeForSystemFont):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::popupButtonMargins):
        (WebCore::RenderThemeMac::popupButtonSizes):
        (WebCore::RenderThemeMac::popupButtonPadding):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        (WebCore::RenderThemeMac::levelIndicatorStyleFor):
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::progressBarSizes):
        (WebCore::RenderThemeMac::progressBarMargins):
        (WebCore::RenderThemeMac::minimumProgressBarHeight):
        (WebCore::RenderThemeMac::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::menuListButtonSizes):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::menuListSizes):
        (WebCore::RenderThemeMac::minimumMenuListSize):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::searchFieldSizes):
        (WebCore::RenderThemeMac::setSearchFieldSize):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::cancelButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::resultsButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::RenderThemeMac::sliderTickSize):
        (WebCore::RenderThemeMac::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::RenderThemeMac::shouldShowPlaceholderWhenFocused):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::searchMenuTemplate):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):
        (WebCore::RenderThemeMac::textField):
        (WebCore::RenderThemeMac::fileListNameForWidth):
        * rendering/RenderThemeMacShared.h: Removed.
        * rendering/RenderThemeMacShared.mm: Removed.

2013-04-24  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Visible rect doesn't update after resizing a window.
        https://bugs.webkit.org/show_bug.cgi?id=115096

        Reviewed by Gustavo Noronha Silva.

        Once we set actor's a clip rect, we should update the rect when resizing the actor.

        No new tests since no new functionality.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::setSize):

2013-04-24  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Fix unexpected clear of ClutterContent.
        https://bugs.webkit.org/show_bug.cgi?id=115099

        Reviewed by Gustavo Noronha Silva.

        adoptGRef doesn't increase a reference count. So if a actor has a valid ClutterContent,
        it would be cleared unexpectedly by smart pointer when escaping a function.

        No new tests, no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorUpdateTexture):

2013-04-24  Alberto Garcia  <agarcia@igalia.com>

        DOMFileSystemBase: fix multiple definitions in the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=114950

        Reviewed by Xan Lopez.

        The following  methods are already defined in DOMFileSystemBlackBerry.cpp:

        crackFileSystemURL()
        createFileSystemURL()
        isValidType()
        supportsToURL()

        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore):

2013-04-24  George Staikos  <gstaikos@rim.com>

        [BlackBerry] Add support for JPEG image quality during encoding.
        https://bugs.webkit.org/show_bug.cgi?id=105773

        Reviewed by Xan Lopez.

        PR 271611
        Internally reviewed by Liam Quinn.

        Pass the quality flag into the encoder, with a default of 65

        Covered by existing tests.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):
        * platform/image-encoders/JPEGImageEncoder.h:
        (WebCore):

2013-04-24  Csaba Osztrogonác  <ossy@webkit.org>

        Fix cast-align WebCore/platform/graphics/GraphicsContext3D.cpp on ARM
        https://bugs.webkit.org/show_bug.cgi?id=115036

        Reviewed by Benjamin Poulain.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore):

2013-04-24  Andreas Kling  <akling@apple.com>

        Remove unnecessary MutableStylePropertySet casts.
        <http://webkit.org/b/115075>

        Reviewed by Geoffrey Garen.

        Get rid of some now-unneeded static_casts that were left from the StylePropertySet
        refactoring last weekend.

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::setProperty):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):

2013-04-24  Kangil Han  <kangil.han@samsung.com>

        [Minor code cleanup] Remove duplicated condition check
        https://bugs.webkit.org/show_bug.cgi?id=115082

        Reviewed by Andreas Kling.

        areRectsPartiallyAligned() has duplicated condition check, so remove it.

        * page/SpatialNavigation.cpp:
        (WebCore::areRectsPartiallyAligned):

2013-04-24  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] Fix build warnings caused by missing images attributes for default buttons
        https://bugs.webkit.org/show_bug.cgi?id=114955

        Reviewed by Gyuyoung Kim.

        Added default image for each button from mediacontrol catalog.

        No new tests, because there is no change in behavior.

        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/fullscreen_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mute_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playpause_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackward_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforward_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/toggle_captions_button.edc:

2013-04-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed build fix with gstreamer 0.10.x after r147555.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):

== Rolled over to ChangeLog-2013-04-24 ==
