2013-02-27 John Bauman Plugin in iframe may not display https://bugs.webkit.org/show_bug.cgi?id=109879 Reviewed by Simon Fraser. Changing the cliprect on a layer containing an iframe may change the cliprect of plugins inside the iframe, so recursively tell all plugins in iframes that their cliprect has changed after doing layout on the outer frame. Test: plugins/plugin-clip-subframe.html * platform/ScrollView.cpp: (WebCore::ScrollView::clipRectChanged): * platform/ScrollView.h: * platform/Widget.h: (WebCore::Widget::clipRectChanged): * plugins/PluginView.cpp: (WebCore::PluginView::clipRectChanged): * plugins/PluginView.h: * rendering/RenderWidget.cpp: (WebCore::RenderWidget::setWidgetGeometry): 2013-02-27 Chris Rogers Implement channel up-mixing and down-mixing rules https://bugs.webkit.org/show_bug.cgi?id=110812 Reviewed by Kenneth Russell. Please see Web Audio specification for details of the AudioNode mixing rules attributes: https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix Test: webaudio/audionode-channel-rules.html * Modules/webaudio/AudioNode.cpp: (WebCore::AudioNode::AudioNode): (WebCore::AudioNode::channelCount): (WebCore): (WebCore::AudioNode::setChannelCount): (WebCore::AudioNode::channelCountMode): (WebCore::AudioNode::setChannelCountMode): (WebCore::AudioNode::channelInterpretation): (WebCore::AudioNode::setChannelInterpretation): (WebCore::AudioNode::updateChannelsForInputs): * Modules/webaudio/AudioNode.h: (AudioNode): (WebCore::AudioNode::internalChannelCountMode): (WebCore::AudioNode::internalChannelInterpretation): * Modules/webaudio/AudioNode.idl: * Modules/webaudio/AudioNodeInput.cpp: (WebCore::AudioNodeInput::numberOfChannels): (WebCore::AudioNodeInput::bus): (WebCore::AudioNodeInput::internalSummingBus): (WebCore::AudioNodeInput::sumAllConnections): (WebCore::AudioNodeInput::pull): * Modules/webaudio/AudioNodeInput.h: (AudioNodeInput): * Modules/webaudio/ConvolverNode.cpp: (WebCore::ConvolverNode::ConvolverNode): * Modules/webaudio/DefaultAudioDestinationNode.cpp: (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode): * Modules/webaudio/PannerNode.cpp: (WebCore::PannerNode::PannerNode): * platform/audio/AudioBus.cpp: (WebCore::AudioBus::speakersCopyFrom): (WebCore::AudioBus::speakersSumFrom): (WebCore::AudioBus::speakersSumFrom5_1_ToMono): (WebCore): * platform/audio/AudioBus.h: (AudioBus): 2013-02-27 Adam Barth Threaded HTML parser hits ASSERTION FAILED: this == frameLoader()->activeDocumentLoader() https://bugs.webkit.org/show_bug.cgi?id=110937 Reviewed by Darin Adler. This patch restores the ASSERT behind an ifdef so that we can continue to get converage from the ASSERT while we investigate why it is triggering in the threaded parser. * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::checkLoadComplete): 2013-02-27 Lianghui Chen [BlackBerry] User credentials is not correctly handled https://bugs.webkit.org/show_bug.cgi?id=110994 Internal PR: 280990 Internal reviewed by Leo Yang. Reviewed by Yong Li. Following changes are made: Remove url from generating the hash to index user credential. Remove url from database. Use new CertMgrWrapper API to remove password from CertMgr. Handle encrypted password as binary data, instead of normal text string. When authentication fails, remove the saved user credential only when they match. Remove some url related API from CredentialBackingStore, as they are obsolete now. No new tests as this is platform specific change about user credential. * platform/network/blackberry/CredentialBackingStore.cpp: (WebCore::hashCredentialInfo): (WebCore::CredentialBackingStore::CredentialBackingStore): (WebCore::CredentialBackingStore::~CredentialBackingStore): (WebCore::CredentialBackingStore::open): (WebCore::CredentialBackingStore::addLogin): (WebCore::CredentialBackingStore::updateLogin): (WebCore::CredentialBackingStore::hasLogin): (WebCore::CredentialBackingStore::getLogin): (WebCore::CredentialBackingStore::removeLogin): (WebCore::CredentialBackingStore::addNeverRemember): (WebCore::CredentialBackingStore::encryptedString): (WebCore::CredentialBackingStore::decryptedString): * platform/network/blackberry/CredentialBackingStore.h: (CredentialBackingStore): * platform/network/blackberry/NetworkJob.cpp: (WebCore::NetworkJob::sendRequestWithCredentials): (WebCore::NetworkJob::purgeCredentials): 2013-02-27 David Hyatt Refactor transform painting/hit testing code in RenderLayer. https://bugs.webkit.org/show_bug.cgi?id=110998 Reviewed by Eric Seidel. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::paintLayer): (WebCore::RenderLayer::paintLayerByApplyingTransform): Pull the code that applies the transform for painting into a new function that can also apply an additional translation offset. This offset will be used by the new columns code when that patch lands. (WebCore::RenderLayer::createLocalTransformState): Also patched to be able to apply an additional translation offset. (WebCore::RenderLayer::hitTestLayer): (WebCore::RenderLayer::hitTestLayerByApplyingTransform): Same as with painting, pull the code that applies the transform into its own function and also enable an extra translation offset to be applied. * rendering/RenderLayer.h: Added the new functions to the header. 2013-02-27 David Kilzer Touch CSSGrammar.y.in to fix an internal buildbot * css/CSSGrammar.y.in: Add copyright dates based on previous commits. 2013-02-27 Manuel Rego Casasnovas Add smartInsertDeleteEnabled setting to WebCore::Page https://bugs.webkit.org/show_bug.cgi?id=107840 Reviewed by Ryosuke Niwa. Covered by editing/deleting/smart-editing-disabled.html. * page/Settings.in: Add new setting with true as initial value. 2013-02-27 Chris Fleizach WebSpeech: Support pause/resume ability https://bugs.webkit.org/show_bug.cgi?id=107345 Reviewed by Beth Dakin. Add in the pause/resume functionality to SpeechSynthesis. Also hook up the callback events. Test: platform/mac/fast/speechsynthesis/speech-synthesis-pause-resume.html * Modules/speech/SpeechSynthesis.cpp: (WebCore::SpeechSynthesis::SpeechSynthesis): (WebCore::SpeechSynthesis::pending): (WebCore::SpeechSynthesis::paused): (WebCore::SpeechSynthesis::startSpeakingImmediately): (WebCore::SpeechSynthesis::pause): (WebCore::SpeechSynthesis::resume): (WebCore): (WebCore::SpeechSynthesis::didPauseSpeaking): (WebCore::SpeechSynthesis::didResumeSpeaking): * Modules/speech/SpeechSynthesis.h: (SpeechSynthesis): * platform/PlatformSpeechSynthesizer.h: (PlatformSpeechSynthesizerClient): (PlatformSpeechSynthesizer): * platform/mac/PlatformSpeechSynthesizerMac.mm: (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]): (-[WebSpeechSynthesisWrapper pause]): (-[WebSpeechSynthesisWrapper resume]): (-[WebSpeechSynthesisWrapper speechSynthesizer:didFinishSpeaking:]): (WebCore::PlatformSpeechSynthesizer::pause): (WebCore): (WebCore::PlatformSpeechSynthesizer::resume): 2013-02-26 Alexey Proskuryakov Don't add a body to platform request until necessary https://bugs.webkit.org/show_bug.cgi?id=110900 Reviewed by Brady Eidson. ResourceRequest now has more state for syncing between resource and platform parts. In addition to tracking which is up to date, we also track which has up to date HTTP Body. The reason is that we don't need the body on request before it's actually sent, and we actually cannot build it when networking is out of process. * WebCore.exp.in: Updated exports. * platform/network/ResourceRequestBase.h: * platform/network/ResourceRequestBase.cpp: (WebCore::ResourceRequestBase::setHTTPBody): Update HTTP body before returning it. (WebCore::ResourceRequestBase::updatePlatformRequest): Update according to HTTPBodyUpdatePolicy. (WebCore::ResourceRequestBase::updateResourceRequest): Ditto. * platform/network/cf/FormDataStreamCFNet.cpp: (WebCore::formDataStreamLengthPropertyName): (WebCore::formCopyProperty): (WebCore::setHTTPBody): Changed to not update Content-Length in platform request directly. We need to keep it in sync with resource request, and it's easier to do in a caller. Exposed computed length as a property do avoid duplicating the work. * platform/network/cf/FormDataStreamCFNet.h: Removed unnecessary httpBodyFromStream(). * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::willSendRequest): (WebCore::didReceiveResponse): (WebCore::ResourceHandle::createCFURLConnection): Update body when necessary. (WebCore::ResourceRequest::nsURLRequest): (WebCore::ResourceRequest::doUpdateResourceRequest): (WebCore::ResourceRequest::doUpdateResourceHTTPBody): (WebCore): (WebCore::ResourceRequest::doUpdatePlatformRequest): (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody): (WebCore::ResourceRequest::applyWebArchiveHackForMail): Ditto. * platform/network/cf/ResourceRequest.h: Track body up-to-date state. * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::ResourceRequest::cfURLRequest): Honor HTTPBodyUpdatePolicy. (WebCore::ResourceRequest::doUpdatePlatformRequest): Don't update body here. (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): Update the body, and make sure that Content-Length is correct. (WebCore::ResourceRequest::doUpdateResourceRequest): Don't update body here. (WebCore::ResourceRequest::doUpdateResourceHTTPBody): Update the body, fixing a bug where body stream was lost if this function got called. (WebCore::ResourceRequest::applyWebArchiveHackForMail): No need to update body for this one. * platform/network/mac/ResourceRequestMac.mm: Ditto (but this didn't have a bug with streams in doUpdateResourceRequest()). * platform/network/mac/FormDataStreamMac.h: Forward declare formDataStreamLengthPropertyName(). * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::createNSURLConnection): (WebCore::ResourceHandle::start): (WebCore::ResourceHandle::platformLoadResourceSynchronously): (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Update body when necessary. * platform/network/blackberry/ResourceRequest.h: * platform/network/chromium/ResourceRequest.h: * platform/network/curl/ResourceRequest.h: * platform/network/qt/ResourceRequest.h: * platform/network/soup/ResourceRequest.h: * platform/network/win/ResourceRequest.h: Added stubs for new functions. These ports don't keep a platform request in ResourceRequest, and don't need updating. 2013-02-27 Glenn Adams Add ENABLE_CSS3_TEXT_LINE_BREAK flag. https://bugs.webkit.org/show_bug.cgi?id=110944 Reviewed by Dean Jackson. No new tests. * Configurations/FeatureDefines.xcconfig: 2013-02-27 Andrei Bucur REGRESSION(r124739): fast/lists/list-marker-remove-crash.html hits an assertion in MoveParagraphs https://bugs.webkit.org/show_bug.cgi?id=93247 Reviewed by Darin Adler. The listifyParagraph function inside InsertListCommand triggered a layout for the new list and updated only the "start" Position. The insertion and layout may have changed the "end" Position as well. The patch makes sure "end" is also recomputed. Test: No new test, the patch fixes a regression. * editing/InsertListCommand.cpp: (WebCore::InsertListCommand::listifyParagraph): 2013-02-27 Zach Kuznia Add ENABLE_STREAM guards to FileReaderLoader https://bugs.webkit.org/show_bug.cgi?id=110938 Reviewed by Hajime Morrita. * fileapi/FileReaderLoader.cpp: * fileapi/FileReaderLoader.h: 2013-02-27 Allan Sandfeld Jensen Switch QtWebKit to GStreamer 1.0. https://bugs.webkit.org/show_bug.cgi?id=106669. Original patch by Sebastian Dröge. Reviewed by Csaba Osztrogonác. * WebCore.pri: 2013-02-27 Eli Fidler [BlackBerry] Fix BlackBerry::Platform::String to WTF::String conversion when the string is Latin-1-encoded. https://bugs.webkit.org/show_bug.cgi?id=110986 Reviewed by Yong Li. Internally reviewed by Nima Ghanavatian. BlackBerry PR 292922 We were assuming all platform strings were valid UTF-8, which isn't true for Latin-1 strings. * platform/text/blackberry/StringBlackBerry.cpp: (WTF::String::String): 2013-02-27 Allan Sandfeld Jensen [TexMap] REGRESSION(144183): It make negative delay tests fails https://bugs.webkit.org/show_bug.cgi?id=110989 Reviewed by Noam Rosenthal. Do not apply a negative offset to the animation starttime send to the GraphicLayerClient, it needs the actual animation start not a virtual start. * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayerTextureMapper::addAnimation): 2013-02-27 Aaron Colwell Fix SourceBufferList so SourceBuffer.append() calls are always rejected after the MediaSource is closed. https://bugs.webkit.org/show_bug.cgi?id=110917 Reviewed by Eric Carlson. Test: http/tests/media/media-source/video-media-source-reject-append-after-reopening.html * Modules/mediasource/SourceBufferList.cpp: (WebCore::SourceBufferList::clear): 2013-02-27 Justin Novosad REGRESSION (r134631) of border-radius percentage with border pixel https://bugs.webkit.org/show_bug.cgi?id=110889 Reviewed by Simon Fraser. Fixing background color filling to handle "non renderable" rounded rectangles. Test: fast/borders/border-radius-percent.html * rendering/RenderBoxModelObject.cpp: (WebCore::RenderBoxModelObject::paintFillLayerExtended): 2013-02-27 Florin Malita [Chromium] Layout Test svg/custom/transform-with-shadow-and-gradient.svg is failing https://bugs.webkit.org/show_bug.cgi?id=76557 Reviewed by Stephen Chenney. Always use kDst_Mode transfer for the shadow looper. Using kSrc_Mode to enforce CSS box-shadow opaqueness at this level is not necessary since the RenderBoxModel box decoration code already makes sure that shadows are filled with opaque black. This change aligns the SVG shadow behavior (and pixel results) with CG/Safari. No new tests, coverage provided by existing tests. * platform/graphics/skia/GraphicsContextSkia.cpp: (WebCore::GraphicsContext::setPlatformShadow): 2013-02-25 Kentaro Hara [V8] Generate a wrapper function for ReplaceableAttrSetter() https://bugs.webkit.org/show_bug.cgi?id=110781 Reviewed by Adam Barth. This is one of steps to insert TRACE_EVENT_STATE() macros into DOM bindings. This patch introduces an indirection function for xxxReplaceableAttrSetter(), like this: // For non-custom replaceable setters (Note: One implementation is enough for all replaceable setters in one interface.) void V8XXX:::ReplaceableAttrSetterCallback(...) { V8XXX::ReplaceableAttrSetter(...); } // For custom replaceable setters. (Note: This is treated as a normal custom setter.) void xxxAttrSetterCallback(...) { return xxxAttrSetterCustom(...); } No tests. No change in behavior. * bindings/scripts/CodeGeneratorV8.pm: (GenerateReplaceableAttrSetterCallback): (GenerateReplaceableAttrSetter): (GenerateSingleBatchedAttribute): (GenerateImplementation): * bindings/scripts/test/V8/V8TestObj.cpp: (WebCore::TestObjV8Internal::TestObjReplaceableAttrSetterCallback): (TestObjV8Internal): (WebCore): * bindings/scripts/test/V8/V8TestTypedefs.cpp: (WebCore::TestTypedefsV8Internal::TestTypedefsReplaceableAttrSetterCallback): (TestTypedefsV8Internal): 2013-02-27 Allan Sandfeld Jensen [Qt] Flash objects won't load until scrolling page https://bugs.webkit.org/show_bug.cgi?id=110149 Reviewed by Simon Hausmann. Revert r134222. The issue from bug 101836 is no longer reproducable, and the fix was causing flash objects to not load properly. * plugins/PluginPackage.cpp: (WebCore::PluginPackage::determineQuirks): 2013-02-27 No'am Rosenthal [Texmap] TextureMapper is too eager to use intermediate surfaces https://bugs.webkit.org/show_bug.cgi?id=110762 Reviewed by Allan Sandfeld Jensen. Refactor the way intermediate surfaces are handled in TextureMapperLayer. Beforehand, we would create an intermediate surface whenever there is a chance of overlap, and the intermediate surface would be the largest possible. The result would then be drawn to the target surface with the layer's opacity and mask. This would make it so that (1) surfaces are created even when they're not needed, i.e. when there is no actual overlap, and (2) mask wouldn't be applied correctly. In this patch the behavior is changed so that the area to be painted is divided to "overlapping" and "non overlapping" regions. The non-overlapping regions are painted directly, while the overlapping regions are tiled to smaller rectangles painted using an intermediate surface. Masks are applied to those intermediate surfaces based on the transform of the actual mask, not drawn together with the content texture like before. This optimizes for the more common case of opacity animations on a large tree, while making the quite rare case of composited masks slightly less optimized but always correct. Tests: compositing/overlap-blending/children-opacity-huge.html compositing/overlap-blending/reflection-opacity-huge.html compositing/overlap-blending/children-opacity-no-overlap.html * platform/graphics/cairo/GraphicsContext3DPrivate.cpp: (WebCore::GraphicsContext3DPrivate::paintToTextureMapper): * platform/graphics/cairo/GraphicsContext3DPrivate.h: (GraphicsContext3DPrivate): * platform/graphics/efl/GraphicsContext3DPrivate.cpp: (WebCore::GraphicsContext3DPrivate::paintToTextureMapper): * platform/graphics/efl/GraphicsContext3DPrivate.h: (GraphicsContext3DPrivate): * platform/graphics/qt/GraphicsContext3DQt.cpp: (GraphicsContext3DPrivate): (WebCore::GraphicsContext3DPrivate::paintToTextureMapper): * platform/graphics/qt/MediaPlayerPrivateQt.cpp: (WebCore::MediaPlayerPrivateQt::paintToTextureMapper): * platform/graphics/qt/MediaPlayerPrivateQt.h: (MediaPlayerPrivateQt): * platform/graphics/surfaces/GraphicsSurface.cpp: (WebCore::GraphicsSurface::paintToTextureMapper): * platform/graphics/surfaces/GraphicsSurface.h: (GraphicsSurface): * platform/graphics/surfaces/glx/GraphicsSurfaceGLX.cpp: (WebCore::GraphicsSurface::platformPaintToTextureMapper): * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp: (WebCore::GraphicsSurface::platformPaintToTextureMapper): * platform/graphics/surfaces/win/GraphicsSurfaceWin.cpp: (WebCore::GraphicsSurface::platformPaintToTextureMapper): * platform/graphics/texmap/TextureMapperBackingStore.h: (TextureMapperBackingStore): * platform/graphics/texmap/TextureMapperPlatformLayer.h: (TextureMapperPlatformLayer): * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp: (WebCore::TextureMapperSurfaceBackingStore::paintToTextureMapper): * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h: (TextureMapperSurfaceBackingStore): * platform/graphics/texmap/TextureMapperTile.cpp: (WebCore::TextureMapperTile::paint): * platform/graphics/texmap/TextureMapperTile.h: (TextureMapperTile): * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp: (WebCore::TextureMapperTiledBackingStore::paintToTextureMapper): * platform/graphics/texmap/TextureMapperTiledBackingStore.h: (TextureMapperTiledBackingStore): * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp: (WebCore::CoordinatedBackingStore::paintTilesToTextureMapper): (WebCore::CoordinatedBackingStore::paintToTextureMapper): * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h: (CoordinatedBackingStore): Removed the "mask" parameter from TextureMapperPlatformLayer and overrides, since we no longer paint the contents and the mask in the same pass. * platform/graphics/texmap/TextureMapper.cpp: (WebCore::TextureMapper::TextureMapper): * platform/graphics/texmap/TextureMapper.h: (WebCore::TextureMapper::setMaskMode): (TextureMapper): (WebCore::TextureMapper::isInMaskMode): * platform/graphics/texmap/TextureMapperGL.cpp: (WebCore::TextureMapperGL::drawNumber): (WebCore::TextureMapperGL::drawTexture): (WebCore::TextureMapperGL::draw): (WebCore): (WebCore::TextureMapperGL::drawTexturedQuadWithProgram): (WebCore::TextureMapperGL::drawFiltered): * platform/graphics/texmap/TextureMapperGL.h: (TextureMapperGL): * platform/graphics/texmap/TextureMapperImageBuffer.cpp: (WebCore::TextureMapperImageBuffer::drawTexture): (WebCore::TextureMapperImageBuffer::drawSolidColor): * platform/graphics/texmap/TextureMapperImageBuffer.h: (TextureMapperImageBuffer): Instead of painting the mask together with the texture/color, paint the mask by drawing with DestinationIn to an existing surface. * platform/graphics/texmap/TextureMapperLayer.cpp: (TextureMapperPaintOptions): (WebCore::TextureMapperLayer::paintSelf): (WebCore::TextureMapperLayer::shouldBlend): (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica): (WebCore::TextureMapperLayer::replicaTransform): (WebCore): (WebCore::applyFilters): (WebCore::resolveOverlaps): (WebCore::TextureMapperLayer::computeOverlapRegions): (WebCore::TextureMapperLayer::paintUsingOverlapRegions): (WebCore::TextureMapperLayer::applyMask): (WebCore::TextureMapperLayer::paintIntoSurface): (WebCore::commitSurface): (WebCore::TextureMapperLayer::paintWithIntermediateSurface): (WebCore::TextureMapperLayer::paintRecursive): * platform/graphics/texmap/TextureMapperLayer.h: (WebCore): (TextureMapperLayer): (WebCore::TextureMapperLayer::hasFilters): * platform/graphics/texmap/TextureMapperShaderProgram.cpp: (WebCore): (WebCore::TextureMapperShaderProgram::create): * platform/graphics/texmap/TextureMapperShaderProgram.h: 2013-02-27 Alexander Pavlov Web Inspector: [REGRESSION] [Audits] Disabled "Run" button styling is the same as the enabled one https://bugs.webkit.org/show_bug.cgi?id=110971 Reviewed by Yury Semikhatsky. Split out PanelEnablerView-related rules into panelEnabledView.css and restored the missing rules in inspector.css. * inspector/front-end/inspector.css: * inspector/front-end/panelEnablerView.css: 2013-02-27 Kent Tamura REGRESSION: INPUT_MULTIPLE_FIELDS_UI: Changing CSS display property on input[type=date] unexpectedly makes another line for ::-webkit-calendar-picker-indicator https://bugs.webkit.org/show_bug.cgi?id=110974 Reviewed by Kentaro Hara. Input elements with the multiple fields UI require flexible box layout. We should use RenderFlexibleBox regardless of display property values. Tests: Update fast/forms/date/date-apparance-basic.html * html/BaseMultipleFieldsDateAndTimeInputType.cpp: (WebCore::BaseMultipleFieldsDateAndTimeInputType::createRenderer): Always use RenderFlexibleBox. * html/BaseMultipleFieldsDateAndTimeInputType.h: (BaseMultipleFieldsDateAndTimeInputType): Declare createRenderer. 2013-02-27 Allan Sandfeld Jensen [TexMap] Flickering after transitions on Apple HTML5 demo https://bugs.webkit.org/show_bug.cgi?id=102501 Reviewed by Noam Rosenthal. Notify about animation start after the new animation is actually commited. * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper): (WebCore::GraphicsLayerTextureMapper::commitLayerChanges): (WebCore::GraphicsLayerTextureMapper::addAnimation): * platform/graphics/texmap/GraphicsLayerTextureMapper.h: (GraphicsLayerTextureMapper): 2013-02-27 Vivek Galatage Web Inspector: Refactor AuditsPanel with AuditController as newly introduced entity https://bugs.webkit.org/show_bug.cgi?id=110866 Reviewed by Alexander Pavlov. AuditController is being introduced in order to follow MVC pattern with the Audits. This is the first step about the refactoring. Moving the methods from the AuditsPanel into AuditController would ease the event driven approach to de-couple the AuditsPanel and the AuditLauncherView. No new tests as code refactoring. * WebCore.gypi: * WebCore.vcproj/WebCore.vcproj: * inspector/compile-front-end.py: * inspector/front-end/AuditController.js: Added. (WebInspector.AuditController): (WebInspector.AuditController.prototype.ruleResultReadyCallback): (WebInspector.AuditController.prototype.categoryDoneCallback): (WebInspector.AuditController.prototype._executeAudit): (WebInspector.AuditController.prototype._auditFinishedCallback): (WebInspector.AuditController.prototype.startAuditWhenResourcesReady): (WebInspector.AuditController.prototype.initiateAudit): (WebInspector.AuditController.prototype._reloadResources): (WebInspector.AuditController.prototype._didMainResourceLoad): * inspector/front-end/AuditLauncherView.js: (WebInspector.AuditLauncherView): (WebInspector.AuditLauncherView.prototype._startAudit): * inspector/front-end/AuditsPanel.js: (WebInspector.AuditsPanel): (WebInspector.AuditsPanel.prototype.auditFinishedCallback): * inspector/front-end/WebKit.qrc: 2013-02-27 Mihai Maerean [CSS Regions] Region overset property is not properly computed when there is a region break https://bugs.webkit.org/show_bug.cgi?id=92497 Reviewed by David Hyatt. For "paginated" content in regions that has -webkit-region-break-after:always, the bottom margin was being passed along for the next region in the chain, which shouldn't happen. The fix is, at layout, to clear the bottom margin for the nodes (inside paginated contexts) that have -webkit-region-break-after:always. Tests: fast/multicol/break-after-always-bottom-margin.html fast/regions/overset-break-nested.html fast/regions/overset-break-with-sibling.html fast/regions/overset-break.html * rendering/RenderBlock.cpp: (WebCore::RenderBlock::applyAfterBreak): 2013-02-27 Stephen Chenney Bindings test results update after r144126 https://bugs.webkit.org/show_bug.cgi?id=108196 Unreviewed test update. * bindings/scripts/test/JS/JSTestObj.cpp: Add include of CallbackFunction.h 2013-02-27 Vsevolod Vlasov Unreviewed inspector front-end closure compilaiton fix. * inspector/front-end/ScriptsNavigator.js: (WebInspector.SnippetsNavigatorView.prototype._handleEvaluateSnippet): (WebInspector.SnippetsNavigatorView.prototype._handleRemoveSnippet): * inspector/front-end/ScriptsPanel.js: (WebInspector.ScriptsPanel.prototype.set _fileRenamed): 2013-02-27 Bruno de Oliveira Abinader [texmap] Do not apply clip state if redundant https://bugs.webkit.org/show_bug.cgi?id=110790 Reviewed by Noam Rosenthal. Add a bool to check if clip state has changed since last apply. No behavior changes, thus covered by existing tests. * platform/graphics/texmap/TextureMapperGL.cpp: (WebCore::TextureMapperGL::ClipStack::reset): (WebCore::TextureMapperGL::ClipStack::pop): (WebCore::TextureMapperGL::ClipStack::apply): * platform/graphics/texmap/TextureMapperGL.h: (WebCore::TextureMapperGL::ClipStack::ClipStack): (ClipStack): 2013-02-27 Eugene Klyuchnikov Web Inspector: timeline stops working on certain sites https://bugs.webkit.org/show_bug.cgi?id=110955 Reviewed by Alexander Pavlov. Analysis: "timerId" value is number, so it is not wrapped to node as expected. Solution: wrap values of all types except Node. * inspector/front-end/TimelinePresentationModel.js: Wrap nonstring values to text nodes. 2013-02-27 Adam Barth HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser can trigger ASSERT(m_speculations.isEmpty()) https://bugs.webkit.org/show_bug.cgi?id=110949 Reviewed by Eric Seidel. We can hit this ASSERT if didReceiveParsedChunkFromBackgroundParser is called from the background thread while we're processing m_speculations (i.e., if processing m_speculations is taking a while and we've yielded to the event loop). It's hard to write a deterministic test for this patch, but it's hit quite often with existing LayoutTests. * html/parser/HTMLDocumentParser.cpp: (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser): 2013-02-27 Kentaro Hara [V8] Generate a wrapper function for named constructor callbacks https://bugs.webkit.org/show_bug.cgi?id=110794 Reviewed by Adam Barth. This would be the final step of generating wrapper functions. The patch generates the following wrapper function for named constructor callbacks. Handle namedConstructorCallback(...) { return namedConstructor(...); } No tests. No change in behavior. * bindings/scripts/CodeGeneratorV8.pm: (GenerateNamedConstructor): * bindings/scripts/test/V8/V8TestNamedConstructor.cpp: (WebCore::namedConstructor): (WebCore::namedConstructorCallback): (WebCore): (WebCore::V8TestNamedConstructorConstructor::GetTemplate): * bindings/v8/custom/V8HTMLImageElementConstructor.cpp: (WebCore::namedConstructor): (WebCore::namedConstructorCallback): (WebCore): (WebCore::V8HTMLImageElementConstructor::GetTemplate): 2013-02-26 Andrey Kosyakov Web Inspector: show raster tasks on Timeline https://bugs.webkit.org/show_bug.cgi?id=105851 - add DeferPaint, Paint & RasterTask trace events handling to trace event processor; - upon begin frame, emit aggregated background event for all raster tasks related to inspected page. Reviewed by Pavel Feldman. * inspector/InspectorInstrumentation.cpp: (WebCore): (WebCore::InspectorInstrumentation::willPaintImpl): (InstrumentationEvents): (InstrumentationEventArguments): * inspector/InspectorInstrumentation.h: (InstrumentationEvents): (WebCore): (InstrumentationEventArguments): * inspector/InspectorTimelineAgent.cpp: (TimelineRecordType): (WebCore::InspectorTimelineAgent::stop): (WebCore::InspectorTimelineAgent::didBeginFrame): * inspector/InspectorTimelineAgent.h: (TimelineRecordType): (WebCore): * inspector/TimelineRecordFactory.cpp: (WebCore::TimelineRecordFactory::createRasterData): (WebCore): * inspector/TimelineRecordFactory.h: (TimelineRecordFactory): * inspector/TimelineTraceEventProcessor.cpp: (WebCore::TimelineTraceEventProcessor::TimelineTraceEventProcessor): (WebCore::TimelineTraceEventProcessor::~TimelineTraceEventProcessor): (WebCore): (WebCore::TimelineTraceEventProcessor::registerHandler): (WebCore::TimelineTraceEventProcessor::shutdown): (WebCore::TimelineTraceEventProcessor::TraceEvent::findParameter): (WebCore::TimelineTraceEventProcessor::TraceEvent::parameter): (WebCore::TimelineTraceEventProcessor::processEventOnAnyThread): (WebCore::TimelineTraceEventProcessor::onBeginFrame): (WebCore::TimelineTraceEventProcessor::onPaintLayerBegin): (WebCore::TimelineTraceEventProcessor::onPaintLayerEnd): (WebCore::TimelineTraceEventProcessor::onRasterTaskBegin): (WebCore::TimelineTraceEventProcessor::onRasterTaskEnd): (WebCore::TimelineTraceEventProcessor::onLayerDeleted): (WebCore::TimelineTraceEventProcessor::onPaint): (WebCore::TimelineTraceEventProcessor::flushRasterizerStatistics): (WebCore::TimelineTraceEventProcessor::sendTimelineRecord): (WebCore::TimelineTraceEventProcessor::processBackgroundEvents): * inspector/TimelineTraceEventProcessor.h: (WebCore::TimelineTraceEventProcessor::TraceEvent::TraceEvent): (WebCore::TimelineTraceEventProcessor::TraceEvent::id): (WebCore::TimelineTraceEventProcessor::TraceEvent::asInt): (WebCore::TimelineTraceEventProcessor::TraceEvent::asUInt): (TimelineTraceEventProcessor): * inspector/front-end/TimelineModel.js: * inspector/front-end/TimelinePresentationModel.js: (WebInspector.TimelinePresentationModel._initRecordStyles): 2013-02-26 Uday Kiran getPropertyValue for -webkit-column-rule returns null, should compute the shorthand value https://bugs.webkit.org/show_bug.cgi?id=110698 Reviewed by Alexander Pavlov. Test: fast/css/getPropertyValue-column-rule.html * css/StylePropertySet.cpp: (WebCore::StylePropertySet::getPropertyValue): 2013-02-26 Uday Kiran getPropertyValue for -webkit-margin-collapse returns null, should compute the shorthand value https://bugs.webkit.org/show_bug.cgi?id=110903 Reviewed by Alexander Pavlov. getPropertyValue("-webkit-margin-collapse") should compute shorthand value when -webkit-margin-collapse is specified in CSS. Test: fast/css/getPropertyValue-webkit-margin-collapse.html * css/StylePropertySet.cpp: (WebCore::StylePropertySet::getPropertyValue): 2013-02-26 Uday Kiran getPropertyValue for -webkit-marquee returns null, should compute the shorthand value https://bugs.webkit.org/show_bug.cgi?id=110816 Reviewed by Alexander Pavlov. Compute the shorthand value for '-webkit-marquee' specified in CSS. Test: fast/css/getPropertyValue-webkit-marquee.html * css/StylePropertySet.cpp: (WebCore::StylePropertySet::getPropertyValue): 2013-02-26 Kentaro Hara [V8] Remove Event::dataTransferAttrGetterCustom() and Event::valueAttrSetterCustom() https://bugs.webkit.org/show_bug.cgi?id=110666 Reviewed by Adam Barth. Event::dataTransferAttrGetterCustom() is not used (i.e. the custom method is not registered to V8). Event::valueAttrSetterCustom() is declared but not implemented. We can remove them. No tests. No change in behavior. * bindings/scripts/CodeGeneratorV8.pm: (GenerateHeaderCustomCall): * bindings/v8/custom/V8EventCustom.cpp: 2013-02-26 Dimitri Glazkov SelectorQuery should not ever use ResolvingStyle mode. https://bugs.webkit.org/show_bug.cgi?id=110843 It looks like we accidentally used ResolvingStyle mode for webkitMatchesSelector, and I exacerbated the problem in r143858 by switching all of SelectorQuery to use it. There aren't any visible effects, but the style bits of elements are unnecessarily twiddled when if we do that. Let's not do it. Reviewed by Eric Seidel. No public-facing behavior change, covered by existing tests. * dom/SelectorQuery.cpp: (WebCore::SelectorDataList::selectorMatches): Switched to always use QueryingRules mode. 2013-02-26 Adam Barth Silence this ASSERT. It is triggered by the threaded HTML parser. Investigation to follow in https://bugs.webkit.org/show_bug.cgi?id=110937 * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::checkLoadComplete): 2013-02-26 Mark Lam SQLTransactionBackend::doCleanup() should not nullify its current statement and transaction error fields. https://bugs.webkit.org/show_bug.cgi?id=110826. Reviewed by Geoffrey Garen. The reason for this is because the frontend SQLTransaction may have tasks that are already registered via callOnMainThread(), and may invoke transaction state functions that access these objects in the SQLTransactionBackend. This proves to be problematic if the database was interrupted resulting in doCleanup() being called concurrently while those states are executing. Instead, we leave their clean up to the SQLTransactionBackend destructor which is guaranteed to only be called when the SQLTransaction is also destructing i.e. these objects are no longer needed. No new tests. * Modules/webdatabase/SQLTransactionBackend.cpp: (WebCore::SQLTransactionBackend::doCleanup): 2013-02-26 Anders Carlsson Implement StorageAreaProxy::getItem and StorageAreaProxy::setItem https://bugs.webkit.org/show_bug.cgi?id=110927 Reviewed by Sam Weinig. Export StorageMap::getItem and StorageMap::setItem. * WebCore.exp.in: 2013-02-26 Adam Klein Parsing of HTML tags in MathML Text Insertion Points leads to bogus parser behavior https://bugs.webkit.org/show_bug.cgi?id=110808 Reviewed by Adam Barth. When looking for various table tags in the HTMLElementStack, compare QualifiedNames rather than just local names, where necessary. Note that not all uses have been "fixed"; I've only changed for which I could write a test with differing behavior. A followup patch to rationalize the use of QualifiedName vs local names would be ideal. Tests: html5lib/generated/run-math-data.html html5lib/generated/run-math-write.html * html/parser/HTMLElementStack.cpp: (WebCore::inScopeCommon): Added a version of inScopeCommon that handles QualifiedNames instead of just localNames. (WebCore::HTMLElementStack::inTableScope): When given a QualifiedName, call the new version of inScopeCommon(). * html/parser/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): (WebCore::HTMLTreeBuilder::processTrEndTagForInRow): 2013-02-26 Kaustubh Atrawalkar Notification.requestPermission callback should be optional https://bugs.webkit.org/show_bug.cgi?id=108196 Reviewed by Adam Barth. Spec says it should be optional. http://notifications.spec.whatwg.org/#notification Test: fast/notifications/notifications-request-permission-optional.html * GNUmakefile.list.am: * Modules/notifications/Notification.h: (Notification): * Modules/notifications/Notification.idl: * Target.pri: * UseJSC.cmake: * UseV8.cmake: * WebCore.gypi: * WebCore.vcproj/WebCore.vcproj: * WebCore.vcxproj/WebCore.vcxproj: * WebCore.vcxproj/WebCore.vcxproj.filters: * WebCore.xcodeproj/project.pbxproj: * bindings/js/JSNotificationCustom.cpp: Removed. * bindings/scripts/CodeGeneratorJS.pm: (GenerateParametersCheck): * bindings/v8/custom/V8NotificationCustom.cpp: Removed. 2013-02-26 Joshua Bell IndexedDB: Add temporary diagnostic code to IDBRequest.result getter https://bugs.webkit.org/show_bug.cgi?id=110916 Reviewed by Kentaro Hara. Implement a custom getter for IDBRequest.result that does one additional hidden property set, to try and isolate the flaky crash seen in wkbug.com/105363 which is difficult to repro locally. If the crash moves to the new line it will point the investigation in a new direction. Also add an assertion that probes string wrappers (the expected type). * Modules/indexeddb/IDBRequest.idl: Mark attribute as [Custom] * WebCore.gypi: New file. * bindings/v8/custom/V8IDBRequestCustom.cpp: Added. (WebCore::V8IDBRequest::resultAttrGetterCustom): Implementation - copy/paste from generated code, plus extra setNamedHiddenReference call and string ASSERT. 2013-02-26 Anders Carlsson Add a couple of symbols needed by WebKit2. * WebCore.exp.in: 2013-02-26 Michelangelo De Simone [CSS Shaders] Implement color and luminosity non-separable blend modes https://bugs.webkit.org/show_bug.cgi?id=106226 Added the following GLSL helper functions to the CustomFilterValidatedProgram: - css_Lum(C): returns the luminosity for the color C - css_ClipColor(C): clips color C - css_SetLum(C, l): sets the luminosity l on the color C The above functions are being used for the "color" and "luminosity" non-separable blend modes, the relevant spec for such modes is at URL: https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blendingnonseparable Reviewed by Dean Jackson. Tests: css3/filters/custom/custom-filter-nonseparable-blend-mode-color.html css3/filters/custom/custom-filter-nonseparable-blend-mode-luminosity.html * platform/graphics/filters/CustomFilterValidatedProgram.cpp: (WebCore::CustomFilterValidatedProgram::blendFunctionString): 2013-02-26 Anders Carlsson StorageAreaProxy should hold on to a StorageMap and not a HashMap https://bugs.webkit.org/show_bug.cgi?id=110919 Reviewed by Jessie Berlin. StorageMap should be a private header. * WebCore.xcodeproj/project.pbxproj: 2013-02-26 Stephen Chenney feDisplacementMap filter gets color space wrong https://bugs.webkit.org/show_bug.cgi?id=105929 Reviewed by Dirk Schulze. Tests: svg/filters/feDisplacementMap-color-interpolation-filters-expected.svg svg/filters/feDisplacementMap-color-interpolation-filters.svg svg/filters/feDisplacementMap-filterUnits-expected.svg svg/filters/feDisplacementMap-filterUnits.svg According to the spec, the SVG feDisplacementMap filter should not change the color space on its first input, and other vendors seem to agree that this also means that the output should be in the first input's color space. That makes sense: we are displacing the input, not otherwise manipulating colors. This change improves color space handling for filters by more explicitly tracking which color space is used for the filter's operation and which is used for the filter's result. It provides a means for filter effects to override the color-interpolation-filters property as defined by the spec. feFlood and feDisplacementMap use this new feature to enforce the spec requirements. * platform/graphics/filters/FEDisplacementMap.cpp: (WebCore::FEDisplacementMap::setResultColorSpace): Override the default color space with the same color space as the first input filter. (WebCore): (WebCore::FEDisplacementMap::transformResultColorSpace): Only transform the color space on the second filter input. (WebCore::FEDisplacementMap::platformApplySoftware): Make the application code more efficient, and give slightly better numerical accuracy. * platform/graphics/filters/FEDisplacementMap.h: (FEDisplacementMap): Declare setResultColorSpace. * platform/graphics/filters/FEFlood.cpp: (WebCore::FEFlood::platformApplySoftware): Remove the call that forces the result color space. We do it now in the setResultColorSpace. * platform/graphics/filters/FEFlood.h: (FEFlood): Add setResultColorSPace override that enforces sRGB color space. But not if using CG, which apparently does this this already internally. * platform/graphics/filters/FilterEffect.cpp: (WebCore::FilterEffect::FilterEffect): Rename m_colorSpace to m_operatingColorSpace. (WebCore::FilterEffect::apply): Allow filter effects to override the color space conversion of their inputs. (WebCore::FilterEffect::createImageBufferResult): Always create the image buffer with the result color space. * platform/graphics/filters/FilterEffect.h: (WebCore::FilterEffect::operatingColorSpace): New accessor. (WebCore::FilterEffect::setOperatingColorSpace): New accessor. (WebCore::FilterEffect::resultColorSpace): New accessor. (WebCore::FilterEffect::setResultColorSpace): New accessor. (FilterEffect): (WebCore::FilterEffect::transformResultColorSpace): A new virtual method that allows filter effects individual control over the color space conversion of their inputs. * platform/graphics/filters/SourceGraphic.h: (WebCore::SourceGraphic::SourceGraphic): Variable rename. * rendering/FilterEffectRenderer.cpp: (WebCore::FilterEffectRenderer::build): Use accessors to set color space to enable per-effect overrides. * rendering/svg/RenderSVGResourceFilter.cpp: (WebCore::RenderSVGResourceFilter::buildPrimitives): Use accessors to set color. 2013-02-26 Mike West X-Frame-Options should accept ALLOWALL as a valid value. https://bugs.webkit.org/show_bug.cgi?id=110857 Reviewed by Adam Barth. DoubleClick, among others, serves ALLOWALL as a 'X-Frame-Options' value with the intent of (shock!) allowing a resource to be framed by all origins. Given its prevelance, and the fact that IE supports the header, we shouldn't call it out as invalid. This patch tweaks the warning logic to only throw the warning if the header's value isn't 'ALLOWALL', 'DENY', or 'SAMEORIGIN'. Test: http/tests/security/XFrameOptions/x-frame-options-allowall.html * loader/FrameLoader.cpp: (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions): 2013-02-26 Tony Chang CSS Flexbox: dynamically applied align-items doesn't affect item alignment https://bugs.webkit.org/show_bug.cgi?id=110341 Reviewed by Ojan Vafai. If flex items don't change width, we don't lay them out again. This causes problems when an item goes from stretch to non-stretch since we need to relayout to get the smaller height. Fix this by marking flex items that were stretch as needing layout. Test: css3/flexbox/relayout-align-items.html * rendering/RenderFlexibleBox.cpp: (WebCore::resolveAlignment): Pull out common code for computing flex item style. (WebCore::RenderFlexibleBox::styleDidChange): Mark children as needing layout. (WebCore::RenderFlexibleBox::alignmentForChild): Use resolveAlignment. * rendering/RenderFlexibleBox.h: 2013-02-26 Anders Carlsson StorageMap can just import an entire map of items at once https://bugs.webkit.org/show_bug.cgi?id=110904 Reviewed by Beth Dakin. Instead of iterating over the map inside StorageAreaSync, just pass it directly (through StorageAreaImpl) to StorageMap and iterate over it there. * storage/StorageAreaImpl.cpp: (WebCore::StorageAreaImpl::importItems): * storage/StorageAreaImpl.h: (StorageAreaImpl): * storage/StorageAreaSync.cpp: (WebCore::StorageAreaSync::performImport): * storage/StorageMap.cpp: (WebCore::StorageMap::importItems): * storage/StorageMap.h: (StorageMap): 2013-02-26 CHAUDHARY VINEET [JSC] static methods with Callback should not have this pointer https://bugs.webkit.org/show_bug.cgi?id=110846 Reviewed by Kentaro Hara. Fixing the JSC Codegenerator not to use 'this' pointer in static methods. No new tests. * bindings/scripts/CodeGeneratorJS.pm: (GenerateParametersCheck): * bindings/scripts/test/JS/JSTestObj.cpp: (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg): (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg): * bindings/scripts/test/JS/JSTestObj.h: * bindings/scripts/test/TestObj.idl: * bindings/scripts/test/V8/V8TestObj.cpp: (WebCore::TestObjV8Internal::staticMethodWithCallbackAndOptionalArgMethod): (TestObjV8Internal): (WebCore::TestObjV8Internal::staticMethodWithCallbackAndOptionalArgMethodCallback): (WebCore::TestObjV8Internal::staticMethodWithCallbackArgMethod): (WebCore::TestObjV8Internal::staticMethodWithCallbackArgMethodCallback): (WebCore::ConfigureV8TestObjTemplate): 2013-02-20 Alpha Lam GIFImageReader to read from source data directly https://bugs.webkit.org/show_bug.cgi?id=109662 Reviewed by Stephen White. This is the first patch to improve GIF image decoding. GIFImageReader has an internal 256 bytes buffer to saving incoming bytes. This mechanism is out-dated because WebKit holds the entire file in memory and it is not necessary to hold data in an intermediate buffer. This is also a blocker for later work to parse and decode GIF incrementally. This change removed the imtermediate 'hold' buffer and uses an index for data position to keep track of parsing of the GIF file. Buffer for global colormap and local colormap are also removed because they can be referenced from the data stream. This change is tested by: Layout tests All tests passed under fast/images. Unit tests Added GIFImageDecoderTest for Chromium. Local testing I tested this implementation against a set of 50k GIF images and there's no crashes and produces bit-exact results as previous code. * platform/image-decoders/gif/GIFImageDecoder.cpp: (WebCore::GIFImageDecoder::setData): (WebCore::GIFImageDecoder::frameCount): (WebCore::GIFImageDecoder::haveDecodedRow): (WebCore::GIFImageDecoder::decode): * platform/image-decoders/gif/GIFImageReader.cpp: (GIFImageReader::doLZW): (GIFImageReader::decode): (GIFImageReader::decodeInternal): (GIFImageReader::setRemainingBytes): * platform/image-decoders/gif/GIFImageReader.h: (GIFFrameContext): (GIFFrameContext::GIFFrameContext): (GIFFrameContext::~GIFFrameContext): (GIFImageReader::GIFImageReader): (GIFImageReader::~GIFImageReader): (GIFImageReader::setData): (GIFImageReader): (GIFImageReader::globalColormap): (GIFImageReader::localColormap): (GIFImageReader::localColormapSize): (GIFImageReader::data): (GIFImageReader::colormap): 2013-02-26 Christian Biesinger Empty